Записки программиста 1с

Заполнение таблицы на форме 1с

Заполнить таблицу на форме 1с можно несколькими способами. Заполнение таблицы на форме 1с типовая операция, осуществляемая очень часто.

Заполнение таблицы на форме 1с
Форма документа
  1. Используя строку таблицы и Текущие данные
  2. Используя всю таблицу

В первом случае данными заполняется одна текущая строка таблицы. Для столбца Номенклатура таблицы СписокНоменклатуры определяем событие при изменении:

Заполнение таблицы на форме 1с
Событие столбца Номенклатура

Код в модуле формы выглядит так:

Заполнение таблицы на форме 1с
Код процедуры

Данный код можно и нужно поместить в отдельную процедуру и к ней обращаться из событий При изменении Номенклатуры и старой цены.

Перебор строк табличной части документа

Во-втором случае добавляем кнопку на форму. При помощи процедуры кнопки производится пересчет всех цен в таблице. Пересчет выполняется при помощи оператора цикла Для Каждого:

Заполнение таблицы на форме 1с
Код с использованием цикла Для каждого

Работа с таблицей на форме

При работе с табличной частью документа или просто произвольной таблицей значений, расположенной в форме, зачастую возникает необходимость выборочной или групповой обработки данных, содержащихся в таблице.

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

Однако для выполнения более сложных или массовых операций требуется доступ непосредственно к данным формы, то есть к ее реквизиту. Реквизит формы может иметь разный тип – например, в случае табличной части это будет ДанныеФормыКоллекция, а в случае дерева значений – ДанныеФормыДерево. Сути дела это не меняет.

В любом случае реквизит формы является некоторой коллекцией. И когда мы «переходим» от элемента формы, в котором какая-то строка является текущей, к реквизиту, нужно уметь однозначно определить, какой элемент этой коллекции соответствует текущей строке таблицы. И наоборот, зная некоторый элемент коллекции, содержащейся в реквизите, нужно уметь сделать текущей строкой таблицы ту, которая соответствует этому элементу коллекции.

СтрокаКоллекции = Объект.Товары.НайтиПоИдентификатору(Элементы.Товары.ТекущаяСтрока);

ИндексСтрокиКоллекции = Объект.Товары.Индекс(СтрокаКоллекции);
//условие
Если Объект.Товары.Количество() > ИндексСтрокиКоллекции + 1 Тогда
//последовательность операторов
КонецЕсли

Заполнение суммы документа

Представим пример кода для автоматического заполнения поля сумма документа. Процедуру события соединим с изменением номенклатуры.

&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
	// Вставить содержимое обработчика.
	объект.СуммаПоДокументу=объект.СписокНоменклатуры.Итог("Сумма");
КонецПроцедуры
Заполнение таблицы на форме 1с
Заполнение суммы документа 1с

В статье рассмотрели два варианта изменения цены номенклатуры на форме. Выполнили заполнение таблицы на форме 1с. Настроили автоматическое вычисление поля сумма документа на основе таблицы документа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *