Отчёт о производстве в 1С: заполнение поля «Продукция» в материалах массово

Как массово заполнить поле «Продукция» в табличной части «Материалы» документа «Отчёт о производстве» в 1С УПП и ERP через групповое изменение реквизитов — алгоритм и пошаговая инструкция.
1C

Задача массового заполнения поля «Продукция» в табличной части «Материалы» документа «Отчёт о производстве» возникает в 1С УПП, ERP 2.5 и ЗУП 3.1, когда в базе накоплено большое количество документов без этой связи. Вручную редактировать каждый документ нереально — задача решается через обработку «Групповое изменение реквизитов» с алгоритмом на встроенном языке 1С 8.3.

Что такое поле «Продукция» в материалах отчёта о производстве

В документе «Отчёт о производстве» есть две связанные табличные части:

  • Продукция — что выпустили (номенклатура готовой продукции, количество, счёт учёта).
  • Материалы — что потратили на производство (сырьё, полуфабрикаты). Каждая строка материалов должна быть привязана к конкретной строке продукции через поле «Продукция».

Без заполнения этого поля программа не может корректно распределить затраты на себестоимость конкретного выпуска. В платформе 8.3.20 и выше это поле является обязательным для корректного закрытия месяца.

Причины возникновения проблемы

  • Документы создавались в старой версии конфигурации, где поле «Продукция» не было обязательным
  • Перенос данных из другой программы (Excel, другой конфигурации 1С) без учёта этой связи
  • Ошибки при начальном вводе: пользователи заполняли только материалы, не указывая к какой продукции они относятся
  • Массовое создание документов через внешнюю обработку или API без заполнения реквизита

Способ 1: Алгоритм через «Групповое изменение реквизитов»

Стандартный инструмент 1С 8.3 — обработка «Групповое изменение реквизитов» (доступна в меню Все функции или в разделе Администрирование в зависимости от конфигурации).

  1. Откройте обработку «Групповое изменение реквизитов» через меню Все функцииСтандартные.
  2. В поле «Тип объекта» выберите Документ.ОтчётОПроизводствеЗаСмену (или соответствующий документ вашей конфигурации).
  3. Настройте отбор при необходимости (период, организация, подразделение).
  4. В поле «Алгоритм» вставьте следующий код:
Для Каждого СтрокаМатериал Из Объект.Материалы Цикл
    Если Объект.Продукция.Количество() > 0 Тогда
        СтрокаМатериал.Продукция = Объект.Продукция[0].Номенклатура;
        Сообщить("Продукция обновлена для материала: " + СтрокаМатериал.Номенклатура);
    Иначе
        Сообщить("Нет продукции для документа: " + Объект.Ссылка);
    КонецЕсли;
КонецЦикла;
  1. Нажмите Выполнить. Алгоритм обработает все отобранные документы.
  2. Проверьте результат: откройте несколько документов и убедитесь, что поле «Продукция» в материалах заполнено.

Пояснение работы алгоритма

Что делает цикл «Для Каждого»

Алгоритм перебирает все строки табличной части «Материалы» текущего документа. Для каждой строки проверяет наличие хотя бы одной записи в табличной части «Продукция» того же документа:

Если Объект.Продукция.Количество() > 0 Тогда

Логика присвоения значения

Если продукция в документе есть — берётся первая строка из табличной части «Продукция» и её значение записывается в поле «Продукция» каждой строки материалов:

СтрокаМатериал.Продукция = Объект.Продукция[0].Номенклатура;

Важно: обращение [0] — это индекс с нуля, то есть первая строка. Если нужно присваивать разные строки продукции разным материалам — алгоритм потребует усложнения (добавить логику сопоставления).

Обработка документов без продукции

Если в документе нет ни одной строки в табличной части «Продукция», алгоритм выводит сообщение:

Сообщить("Нет продукции для документа: " + Объект.Ссылка);

Эти документы нужно проверить вручную — возможно, они заполнены некорректно.

Способ 2: Обработка через запрос для сложных случаев

Если у вас в документах несколько строк продукции и нужно сопоставить материалы с конкретной продукцией по определённому признаку (например, по переделу или субконто), используйте расширенный алгоритм с запросом. Это требует участия программиста 1С, знакомого с вашей конфигурацией.

Для ERP 2.5 задача может решаться через встроенный механизм «Управление производством» — проверьте наличие автоматического заполнения этого реквизита в настройках конфигурации.

Что делать если ничего не помогло

  • Проверьте типы данных: убедитесь, что тип поля «Продукция» в строке материалов совпадает с типом значения Объект.Продукция[0].Номенклатура. В разных конфигурациях это может быть ссылка на номенклатуру, документ или составной тип — откройте конфигуратор и сверьте.
  • Проверьте журнал регистрации на наличие ошибок при выполнении обработки: АдминистрированиеЖурнал регистрации.
  • Технологический журнал (для сложных ошибок платформы 8.3.24+): настраивается в файле logcfg.xml каталога платформы.
  • Обратитесь к сопровождающему 1С: если база работает на нестандартной конфигурации или сильно доработана, имена реквизитов могут отличаться.

FAQ

В каких конфигурациях 1С есть документ «Отчёт о производстве»?

Документ «Отчёт о производстве за смену» есть в 1С:УПП (Управление производственным предприятием), 1С:ERP Управление предприятием 2.5, 1С:Комплексная автоматизация. В Бухгалтерии 3.0 и ЗУП 3.1 он отсутствует или имеет другую структуру.

Безопасно ли запускать групповое изменение реквизитов?

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

Алгоритм присваивает первую продукцию всем материалам — как сопоставить правильно?

Это упрощённый алгоритм для случая, когда в документе одна строка продукции. Если строк несколько — нужна логика сопоставления: по номеру строки, по переделу, по дополнительным реквизитам. Это задача для программиста 1С.

Можно ли сделать то же самое через консоль запросов?

Прямое изменение данных через консоль запросов (UPDATE в SQL) в 1С не рекомендуется — это обходит бизнес-логику платформы. Используйте групповое изменение реквизитов или внешнюю обработку.

Что такое индекс [0] в 1С и почему счёт начинается с нуля?

В 1С табличные части являются коллекциями, и обращение по индексу начинается с нуля: [0] — первая строка, [1] — вторая. Это стандартное поведение платформы 8.3.

После обработки документы не записываются — в чём причина?

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

Алексей Герзанов aka Gerzoid
Алекс Гезанов

Работаю в сервисном центре по ремонту и обслуживанию бытовой техники. За более чем 10 лет трудовой деятельности, я сталкивался с решением большого количества проблем в работе ОС Windows, периферийных устройств, бытовой техники, игровых консолей Playstation и т. д.

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