В процессе разработки внешних обработок в 1С часто возникает задача переноса или копирования данных из табличных частей документов в справочники. Рассмотрим подробнее, как организовать доступ к данным документа Инвентаризация и каким образом перенести выбранные позиции в конкретную группу справочника Номенклатура.
Для решения нашей задачи необходимо выполнить несколько последовательных этапов:
Инвентаризация в базе данных.Товары.Номенклатура, указав нужного родителя.Чтобы найти документы, которые мы хотим обработать, воспользуемся механизмом Запрос. Это позволяет эффективно отбирать ссылки на документы по определенным критериям, например, по иерархии или принадлежности к определенной группе.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Инвентаризация.Ссылка
|ИЗ
| Документ.Инвентаризация КАК Инвентаризация
|ГДЕ
| Инвентаризация.Ссылка В ИЕРАРХИИ(&Ссылка)";
Запрос.УстановитьПараметр("Ссылка", ПолеВвода1);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
После получения выборки мы начинаем цикл обхода найденных документов. Важно помнить, что для работы с данными документа в режиме записи или получения доступа к его структуре, мы используем метод ПолучитьОбъект().
После того как мы получили объект документа через ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(), мы получаем доступ к его табличной части, например, Товары. В представленном ниже примере мы используем прямой обход коллекции строк.
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Док = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
// Перебираем строки табличной части
Для Каждого Запись Из Док.Товары Цикл
// Здесь выполняется логика работы с товаром
Сообщить("Обрабатываем товар: " + Запись.Товар);
КонецЦикла;
КонецЦикла;
Обратите внимание, что вместо ручного управления индексами (через Количество() - 1) рекомендуется использовать конструкцию Для Каждого ... Из ... Цикл. Это делает код более читабельным и исключает риск ошибок выхода за пределы коллекции.
Чтобы добавить товар в указанного родителя (например, «Родитель 2»), нам необходимо создать новый элемент справочника Номенклатура. Рассмотрим процесс создания:
Важные аспекты при создании:
Родитель нового элемента справочника необходимо присвоить ссылку на нужную группу номенклатуры.НачатьТранзакцию() и ЗафиксироватьТранзакцию(), чтобы гарантировать целостность данных в случае сбоя.Проанализируем ситуацию: если ваша цель — перенести товар, то в цикле вы создаете объект справочника, заполняете его реквизиты данными из строки Запись.Товар и записываете объект методом Записать().
Мы разобрали основы работы с табличными частями документов и программного обращения к объектам 1С. При работе с внешними обработками старайтесь максимально использовать возможности языка запросов для отбора данных и всегда проверяйте данные перед записью. Если возникнут дополнительные вопросы по заполнению реквизитов справочника, мы всегда сможем углубиться в детали настройки свойств конкретных элементов номенклатуры.