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