Как настроить обязательное заполнение ГТД и автосписание серий по ФИФО в 1С:УПП 1.3 при РАУЗ

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

Ведение учета по сериям номенклатуры в конфигурации 1С:Управление производственным предприятием 1.3 (УПП) — задача стандартная, но часто вызывающая сложности при переходе на режим РАУЗ (Режим аналитики учета затрат). В процессе работы пользователи нередко забывают указывать серии (номера ГТД) для импортных товаров при оформлении документов поступления и реализации. Кроме того, возникает необходимость автоматизировать списание серий по методу ФИФО (например, в документе «Требование-накладная»), чтобы кладовщики и операторы не подбирали их вручную.

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

Часть 1. Контроль заполнения серий (ГТД) при поступлении и реализации

Типовой функционал 1С:УПП 1.3 предлагает флаг Запретить пустые серии в карточке номенклатуры (при ведении партионного учета по сериям). Однако, если в вашей базе присутствуют как товары с серийным учетом, так и без него, или если серийный учет ведется только для импортных позиций (где серия выступает носителем номера ГТД), стандартная проверка реквизита в свойствах табличной части не подойдет. Она будет требовать заполнения серий для абсолютно всех товаров в документе.

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

Для решения этой задачи мы задействуем механизм подписок на события. Это позволит внедрить проверку без изменения кода самих документов ПоступлениеТоваровУслуг и РеализацияТоваровУслуг.

Выполним следующие шаги для настройки проверки:

  1. Откроем конфигуратор и перейдем в ветку Общие -> ОбщиеМодули. Создадим новый общий модуль, например, сфКонтрольДокументовСервер. Установим для него свойства Клиент (обычное приложение), Сервер и Внешнее соединение.
  2. Перейдем в ветку Общие -> ПодпискиНаСобытия. Создадим новую подписку на событие с именем сфКонтрольЗаполненияСерийПередЗаписью.
  3. В поле Источник выберем типы документов: ДокументСсылка.ПоступлениеТоваровУслуг и ДокументСсылка.РеализацияТоваровУслуг.
  4. В поле Событие выберем значение ПередЗаписью.
  5. В поле Обработчик укажем процедуру из нашего нового общего модуля.

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

Посмотрим на пример реализации такого кода:


Процедура сфКонтрольЗаполненияСерийПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    // Проверку выполняем только при проведении документа
    Если РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
        Возврат;
    КонецЕсли;

    // Определяем наличие табличной части "Товары"
    МетаданныеДокумента = Источник.Метаданные();
    Если МетаданныеДокумента.ТабличныеЧасти.Найти("Товары") = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Для Каждого СтрокаТЧ Из Источник.Товары Цикл
        Номенклатура = СтрокаТЧ.Номенклатура;

        // 1. Проверяем, ведется ли в принципе учет по сериям для данной номенклатуры
        Если Номенклатура.ВестиУчетПоСериям Тогда
            
            // 2. Определяем, является ли товар импортным. 
            // Например, признаком импорта служит заполненная отличная от РФ страна происхождения
            СтранаРФ = Справочники.КлассификаторСтранМира.НайтиПоНаименованию("РОССИЯ");
            ЭтоИмпорт = ЗначениеЗаполнено(Номенклатура.СтранаПроисхождения) И (Номенклатура.СтранаПроисхождения <> СтранаРФ);

            // Если в вашей системе импорт определяется иначе (например, по виду номенклатуры или свойству),
            // замените условие выше на соответствующую проверку.
            
            Если ЭтоИмпорт Тогда
                // 3. Проверяем заполнение серии номенклатуры
                Если Не ЗначениеЗаполнено(СтрокаТЧ.СерияНоменклатуры) Тогда
                    
                    Сообщение = Новый СообщениеПользователю;
                    Сообщение.Текст = "В строке № " + СтрокаТЧ.НомерСтроки + " для импортного товара """ + Номенклатура + """ не заполнена серия номенклатуры (ГТД)!";
                    Сообщение.Поле = "Товары[" + (СтрокаТЧ.НомерСтроки - 1) + "].СерияНоменклатуры";
                    Сообщение.УстановитьДанные(Источник);
                    Сообщение.Сообщить();
                    
                    Отказ = Истина; // Блокируем проведение документа
                    
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Важный нюанс при использовании РАУЗ: Обратите внимание, что стандартная настройка номенклатуры Запретить пустые серии в условиях РАУЗ может не оказывать жесткого влияния на проведение по регистрам затрат, так как РАУЗ ориентирован на укрупненный стоимостной учет в течение месяца. Использование жесткой проверки в коде перед проведением документов — наиболее надежный способ гарантировать чистоту складских остатков по сериям и номерам ГТД.

Если же вы не хотите усложнять оперативную работу менеджеров жесткими блокировками проведения, вы всегда можете разработать контрольный отчет на СКД. Такой отчет будет выводить список документов поступления и реализации за выбранный период, в которых по импортной номенклатуре отсутствуют серии. Бухгалтер сможет запускать его перед закрытием месяца и оперативно исправлять ошибки ввода данных.


Часть 2. Автоматическое списание серий по ФИФО в «Требовании-накладной» при РАУЗ

Второй частый вопрос — автоматический подбор серий в документы списания в производство, такие как Требование-накладная, чтобы избавить пользователей от рутинного ручного выбора.

Среди специалистов существует заблуждение, что при включенном режиме РАУЗ автоматический подбор серий по ФИФО невозможен, так как РАУЗ рассчитывает себестоимость по средневзвешенной стоимости или по ФИФО только в конце месяца при запуске документа Расчет себестоимости выпуска. Проанализируем эту ситуацию подробнее.

Действительно, расчет финансовой стоимости списания при РАУЗ происходит в конце месяца. Однако количественный (складской) учет по сериям в системе ведется оперативно! Это значит, что на складах всегда известны точные остатки конкретных серий номенклатуры. Следовательно, мы можем автоматически заполнить серии в табличной части документа на основе текущих остатков.

Разберем по шагам, как запустить штатный механизм автоподбора:

  1. В документе Требование-накладная перейдите на вкладку Материалы.
  2. Обратите внимание на командную панель табличной части. Там присутствует кнопка «Заполнить и провести».
  3. При нажатии этой кнопки система обращается к остаткам серий на складе отправителя и автоматически распределяет их по строкам товаров.

Алгоритм автоматического подбора серий работает по следующим правилам:

Критическое ограничение оперативного учета: Данный штатный механизм корректно отрабатывает только в том случае, если вы проводите документы оперативно (в текущем времени) и последовательно. Если ваша организация практикует ввод документов задним числом (ретроспективно), стандартная кнопка «Заполнить и провести» может сработать некорректно. Она анализирует остатки на текущую дату компьютера, а не на историческую дату проводимого документа, что может привести к отрицательным остаткам в прошлых периодах.

Решение для работы «задним числом»: Если вам необходимо выполнять автоматическое распределение серий по ФИФО на дату и время документа в прошлом, лучшим выходом будет разработка внешней обработки заполнения табличной части. Такая обработка:

  1. Принимает в качестве параметра документ-источник.
  2. Выполняет запрос к виртуальной таблице остатков регистра ТоварыНаСкладах на момент времени (дату) проводимого документа.
  3. Получает остатки серий, отсортированные по дате их поступления (или по возрастанию срока годности).
  4. Распределяет полученные остатки по строкам документа, при необходимости разбивая одну строку номенклатуры на несколько строк с разными сериями.

Часть 3. Влияние серийного учета на производительность РАУЗ

При организации серийного учета в режиме РАУЗ критически важно сделать правильный выбор между количественным и стоимостным (партионным) учетом серий. Рассмотрим два возможных сценария настройки в карточке номенклатуры:

Внимание! Включение стоимостного учета по сериям при больших объемах документооборота приводит к лавинообразному увеличению количества записей в регистре учета затрат. Это может в несколько раз увеличить время работы регламентного документа Расчет себестоимости выпуска при закрытии месяца. Включайте стоимостной учет по сериям только тогда, когда это действительно обусловлено бизнес-требованиями (например, если серии имеют принципиально разную закупочную стоимость и это критично для расчета маржинальности каждой продажи).

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

← На главную