Приполученииданных

Статус
Закрыто для дальнейших ответов.

Renat11111

Well-known member
20.04.2008
123
0
#1
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
ОформлениеСтрокиПоНоменклатуре = Новый Соответствие;
ОтображаемыеТовары = Новый Массив;

Для каждого ОформлениеСтроки из ОформленияСтрок Цикл
Товар = ОформлениеСтроки.ДанныеСтроки.Ссылка;

// Заполнить массив отображаемых номенклатурных позиций

ОтображаемыеТовары.Добавить(Товар);

// Заполнить соответствие товара и оформления строки

ОформлениеСтрокиПоНоменклатуре.Вставить(Товар, ОформлениеСтроки);
КонецЦикла;

// Сформировать запрос для получения остатков

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
| Штрихкоды.Штрихкод,
| Штрихкоды.Владелец КАК Номенклатура,
| Штрихкоды.Владелец.Код
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец В(&Номенклатура)";

Запрос.УстановитьПараметр("Номенклатура", ОтображаемыеТовары);
Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Вроде бы все просто.... но на списке не верно штрихкод отображает.

Отладчиком смотрел правильные значения присваивает тут

ОформлениеСтрокиПоНоменклатуре.Получить(Выборка.Номенклатура).Ячейки.Штрихкод.Зн
ачение = Выборка.Штрихкод;
 

Renat11111

Well-known member
20.04.2008
123
0
#3
Не верно это не тот штрихкод показывает у номенклатуры. Иногда штрихкод раздваивает, и растраивает
 

puh14

Well-known member
11.07.2008
1 412
0
#5
А может на ячейке формат указан, типа с разделителями разрядов?

а если имеется ввиду несколько подряд значений штрих-кода - тогда дело в результатах запроса: в нем несколько записей. Добавьте в запрос РАЗЛИЧНЫЕ и будет то что надо.

ОформлениеСтрокиПоНоменклатуре.Получить(Выборка.Номенклатура).Ячейки.Штрихкод.Зн
ачение = Выборка.Штрихкод;
Вот интересно - выборка это по сути что-то между ТЗ и XML - то бишь надо позиционироваться на элементы : например Выборка[1].Штрихкод. А тут позиционирования нет, но раз работает, значит позиционирование уже произошло. То бишь что то типа

ВыборкаЗапрос = Запрос.Выполнить().Выбрать();
Для каждого Выборка из ВыборкаЗапрос Цикл

или

выборка = выборкаЗапрос[1];
 

Дайнеко

Well-known member
19.11.2009
951
0
#6
А вот никого не смущает мощная конструкция в С-шном стиле?
Код:
Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
Выборка = Запрос.Выполнить().Выбрать();
Если я не слепой, то запрос 2 раза отрабатывает.

Еще. Глядя на запрос мне видится, что на 1 объект Номенклатура в регистре может быть несколько Штрих-кодов. Так какой из них хочешь вывести в Оформление?
 

Darlock

Well-known member
04.01.2008
560
1
#8
Думаю, первая строка для отладки.
Не совсем. Данный запрос будет выполнятьс столько раз сколько в настоящий момент на экране в форме видно строк.

Либо не используйте запрос, либо выполните его 1 раз.

В идеале, запрос тут не нужен вообще. Для полуения остатков лучше обращаться к виртуальной таблице:

Код:
Остатки = РегистрыНакопления.ОстаткиТоваров.Остатки("ДатаОстатков", Структура-отбор по номенклатуре);
На выходе имеете ТЗ по отбору.

Для вывода штрих кода - методом "ПриПолученииДанных", мне кажется проще использовать свойство оформления строк - "УстановитьТекст", потому как вы циклом обходите коллекцию оформлений, а потом "Получить()" - это уже лишнее. Во первых - тормознуто, во-вторых - не по фен-шую. в цикле обращайтесь к вирт. таблице остатков и там же устанавливайте штрих код (есть и номенклатура и позиционирование на текущую строку списка.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#9
Мне кажется, что при получении данных запрос обработает несколько строк одновременно, т.е. если резко прокрутить, будет запрос сразу по большому кол-ву строк, что предпочтительней.
Вообще, тема весьма обсосана в книге знаний Мисты.
 
Статус
Закрыто для дальнейших ответов.