Заполнить таблицу на форме 1с можно несколькими способами. Заполнение таблицы на форме 1с типовая операция, осуществляемая очень часто.
- Используя строку таблицы и Текущие данные
- Используя всю таблицу
В первом случае данными заполняется одна текущая строка таблицы. Для столбца Номенклатура таблицы СписокНоменклатуры определяем событие при изменении:
Код в модуле формы выглядит так:
Данный код можно и нужно поместить в отдельную процедуру и к ней обращаться из событий При изменении Номенклатуры и старой цены.
Перебор строк табличной части документа
Во-втором случае добавляем кнопку на форму. При помощи процедуры кнопки производится пересчет всех цен в таблице. Пересчет выполняется при помощи оператора цикла Для Каждого:
Работа с таблицей на форме
При работе с табличной частью документа или просто произвольной таблицей значений, расположенной в форме, зачастую возникает необходимость выборочной или групповой обработки данных, содержащихся в таблице.
Особенность заключается в том, что для выполнения простейших действий с текущей строкой можно не обращаться к данным (реквизиту формы), а получить нужные значения прямо из элемента формы Таблица. Для этого используется свойство таблицы ТекущиеДанные.
Однако для выполнения более сложных или массовых операций требуется доступ непосредственно к данным формы, то есть к ее реквизиту. Реквизит формы может иметь разный тип – например, в случае табличной части это будет ДанныеФормыКоллекция, а в случае дерева значений – ДанныеФормыДерево. Сути дела это не меняет.
В любом случае реквизит формы является некоторой коллекцией. И когда мы «переходим» от элемента формы, в котором какая-то строка является текущей, к реквизиту, нужно уметь однозначно определить, какой элемент этой коллекции соответствует текущей строке таблицы. И наоборот, зная некоторый элемент коллекции, содержащейся в реквизите, нужно уметь сделать текущей строкой таблицы ту, которая соответствует этому элементу коллекции.
СтрокаКоллекции = Объект.Товары.НайтиПоИдентификатору(Элементы.Товары.ТекущаяСтрока);
ИндексСтрокиКоллекции = Объект.Товары.Индекс(СтрокаКоллекции);
//условие
Если Объект.Товары.Количество() > ИндексСтрокиКоллекции + 1 Тогда
//последовательность операторов
КонецЕсли
Заполнение суммы документа
Представим пример кода для автоматического заполнения поля сумма документа. Процедуру события соединим с изменением номенклатуры.
&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
// Вставить содержимое обработчика.
объект.СуммаПоДокументу=объект.СписокНоменклатуры.Итог("Сумма");
КонецПроцедуры
В статье рассмотрели два варианта изменения цены номенклатуры на форме. Выполнили заполнение таблицы на форме 1с. Настроили автоматическое вычисление поля сумма документа на основе таблицы документа.