Как программно получить товары из табличной части документа и добавить их в справочник Номенклатура?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

В процессе разработки внешних обработок в 1С часто возникает задача переноса или копирования данных из табличных частей документов в справочники. Рассмотрим подробнее, как организовать доступ к данным документа Инвентаризация и каким образом перенести выбранные позиции в конкретную группу справочника Номенклатура.

Разбор архитектуры задачи

Для решения нашей задачи необходимо выполнить несколько последовательных этапов:

  1. Найти нужные документы Инвентаризация в базе данных.
  2. Получить объект документа для доступа к его табличной части.
  3. Перебрать строки табличной части Товары.
  4. Создать новые элементы в справочнике Номенклатура, указав нужного родителя.

Использование запроса для поиска документов

Чтобы найти документы, которые мы хотим обработать, воспользуемся механизмом Запрос. Это позволяет эффективно отбирать ссылки на документы по определенным критериям, например, по иерархии или принадлежности к определенной группе.


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    Инвентаризация.Ссылка
               |ИЗ
               |    Документ.Инвентаризация КАК Инвентаризация
               |ГДЕ
               |    Инвентаризация.Ссылка В ИЕРАРХИИ(&Ссылка)";
Запрос.УстановитьПараметр("Ссылка", ПолеВвода1);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

После получения выборки мы начинаем цикл обхода найденных документов. Важно помнить, что для работы с данными документа в режиме записи или получения доступа к его структуре, мы используем метод ПолучитьОбъект().

Работа с табличной частью

После того как мы получили объект документа через ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(), мы получаем доступ к его табличной части, например, Товары. В представленном ниже примере мы используем прямой обход коллекции строк.


Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Док = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
    // Перебираем строки табличной части
    Для Каждого Запись Из Док.Товары Цикл
        // Здесь выполняется логика работы с товаром
        Сообщить("Обрабатываем товар: " + Запись.Товар);
    КонецЦикла;
КонецЦикла;

Обратите внимание, что вместо ручного управления индексами (через Количество() - 1) рекомендуется использовать конструкцию Для Каждого ... Из ... Цикл. Это делает код более читабельным и исключает риск ошибок выхода за пределы коллекции.

Создание элементов в справочнике Номенклатура

Чтобы добавить товар в указанного родителя (например, «Родитель 2»), нам необходимо создать новый элемент справочника Номенклатура. Рассмотрим процесс создания:

Важные аспекты при создании:

Проанализируем ситуацию: если ваша цель — перенести товар, то в цикле вы создаете объект справочника, заполняете его реквизиты данными из строки Запись.Товар и записываете объект методом Записать().

Заключение и рекомендации

Мы разобрали основы работы с табличными частями документов и программного обращения к объектам 1С. При работе с внешними обработками старайтесь максимально использовать возможности языка запросов для отбора данных и всегда проверяйте данные перед записью. Если возникнут дополнительные вопросы по заполнению реквизитов справочника, мы всегда сможем углубиться в детали настройки свойств конкретных элементов номенклатуры.

← На главную