Вывод остатков в форме списка Ключевые слова: Остатки, форма списка, ПриПолученииДанных, ПриВыводеСтроки
Собственно, выводить остатки надо только при событии ПриПолученииДанных.
Данное событие генерируется только для свежепоказываемых строк справочника, в то время, как ПриВыводеСтроки генерируется уже на показанные строки. Необходимо отметить, что ПриПолученииДанных вызывается для всех строк при обновлении формы (ctrl+shift+r).
Также выбор ПриПолученииДанных вызван тем, что в ней можно накопить массив элементов справочника и выполнить запрос 1 раз, вместо цикличного набора запросов для каждого элемента.
Собственно, пример:
Есть справочник "Номенклатура", в который вручную добавлена колонка "Количество", не привязанная к данным.
Ну а в форме списка добавлен следующий код:
Перем ЗапросОстатков;
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Если ЭлементыФормы.Список.Колонки.Количество.Видимость=Истина Тогда
СписокНоменклатур=Новый СписокЗначений;
Для Каждого Элемент ИЗ ОформленияСтрок Цикл
СписокНоменклатур.Добавить(Элемент.ДанныеСтроки.Ссылка);
КонецЦикла;
ЗапросОстатков.УстановитьПараметр("СписокНоменклатур",СписокНоменклатур);
РезультатЗапроса=ЗапросОстатков.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка=РезультатЗапроса.Выбрать();
Для Каждого Элемент ИЗ ОформленияСтрок Цикл
Выборка.Сбросить();
Элемент.Ячейки.Количество.ОтображатьТекст=Истина;
Если Выборка.НайтиСледующий(Элемент.ДанныеСтроки.Ссылка,"Номенклатура") Тогда
Элемент.Ячейки.Количество.Текст=Выборка.Количество;
Иначе
Элемент.Ячейки.Количество.Текст="0";
КонецЕсли;
СписокНоменклатур.Добавить(Элемент.ДанныеСтроки.Ссылка);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ЗапросОстатков=Новый Запрос;
ЗапросОстатков.Текст=
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура В (&СписокНоменклатур)) КАК ТоварыНаСкладахОстатки";
Думаю, по коду все понятно.
Запрос инициируется 1 раз, код обработки выполняется только тогда, когда колонка видима (пользователь может скрыть ее в настройке списка). |