При работе в крупных торговых базах 1С:Управление торговлей 11 (УТ 11) часто возникает ситуация, когда руководство компании ставит задачу: «Мы хотим сделать так, чтобы старый товар продавался раньше нового». Программисты и аналитики часто путают эту задачу с глобальным финансовым партионным учетом. На самом деле для решения этой проблемы нужен не финансовый партионный учет по всей базе, а точечный складской учет по сериям с политикой FEFO (First Expire, First Out).
В этой статье мы подробно разберем, как правильно реализовать эту задачу посреди рабочего года, как избежать фатальных ошибок с проведением документов и какой технический алгоритм действий необходимо выполнить.
Для начала давайте разберемся, почему не стоит без крайней необходимости включать глобальный партионный учет в базе, которая успешно работала три года «по средней» себестоимости. Проанализируем ключевые различия этих механизмов в архитектуре УТ 11:
Выясним причину: если перед нами стоит задача продавать сначала старый товар, нам нужен именно серийный учет. Глобальный партионный учет для этого включать не требуется, оценку себестоимости товаров в целом по компании можно оставить по средней стоимости.
Если мы попытаемся зайти в существующий Вид номенклатуры, по которому уже велись движения три года, и включить там использование серий, система заблокирует эту возможность. Программа 1С оберегает базу от нарушения логической целостности данных.
Существует два пути решения этой проблемы, и один из них крайне опасен:
Разобьем процедуру перехода на несколько последовательных этапов, которые позволят выполнить задачу аккуратно и без потери данных.
Перейдем в раздел НСИ и администрирование -> Номенклатура -> Разрезы учета и убедимся, что включена опция Серии товаров. Создадим новую политику учета серий со следующими настройками:
Авторасчет по FEFO-остаткам серий. Это наиболее оптимальный и мягкий вариант работы. При такой политике серии обязательно указываются только при приходе товара на склад (чтобы зафиксировать дату поступления или срок годности). При продаже менеджеры не тратят время на выбор конкретной серии — система сама автоматически спишет наиболее старые серии по методу FEFO.При планировании отгрузки или При отгрузке (в зависимости от использования ордерной схемы на ваших складах).Создадим новый Вид номенклатуры (например, «Товары с серийным учетом (FEFO)») и привяжем к нему созданную на предыдущем шаге политику учета серий. После этого создадим новые карточки номенклатуры. Чтобы не запутаться, можно временно переименовать старые карточки, добавив к их наименованию префикс «[АРХИВ]» или «[БЕЗ СЕРИЙ]».
Для корректного ввода серий нам понадобится провести инвентаризацию и перенести остатки со старых карточек товаров на новые. Проанализируем этот процесс. Нам необходимо выполнить списание остатков со старых карточек и оприходование на новые карточки с указанием серий.
Для автоматизации этого процесса программист может написать обработку, которая заполнит документы списания и оприходования. Рассмотрим пример программного создания документа списания и оприходования остатков:
// Пример заполнения табличной части переноса остатков
НовыйДокументСписание = Документы.СписаниеНедостачТоваров.СоздатьДокумент();
НовыйДокументСписание.Дата = РабочаяДата;
НовыйДокументСписание.Организация = ВыбраннаяОрганизация;
НовыйДокументСписание.Склад = ВыбранныйСклад;
Для Каждого СтрокаОстатков Из ТаблицаОстатков Цикл
НоваяСтрока = НовыйДокументСписание.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаОстатков.СтараяНоменклатура;
НоваяСтрока.Характеристика = СтрокаОстатков.Характеристика;
НоваяСтрока.Количество = СтрокаОстатков.КоличествоОстаток;
КонецЦикла;
НовыйДокументСписание.Записать(РежимЗаписиДокумента.Проведение);
При оприходовании товаров на новые карточки номенклатуры обязательно указываем сгенерированные серии (например, привязанные к дате реального поступления товара на склад, если эти данные можно восстановить из истории закупок):
НовыйДокументОприходование = Документы.ОприходованиеИзлишковТоваров.СоздатьДокумент();
НовыйДокументОприходование.Дата = РабочаяДата;
НовыйДокументОприходование.Организация = ВыбраннаяОрганизация;
НовыйДокументОприходование.Склад = ВыбранныйСклад;
Для Каждого СтрокаОстатков Из ТаблицаОстатков Цикл
НоваяСтрока = НовыйДокументОприходование.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаОстатков.НоваяНоменклатура; // Новая карточка с поддержкой серий
НоваяСтрока.Характеристика = СтрокаОстатков.Характеристика;
НоваяСтрока.Количество = СтрокаОстатков.КоличествоОстаток;
// Создание и привязка серии номенклатуры
НоваяСерия = Справочники.СерииНоменклатуры.СоздатьСерию(СтрокаОстатков.НоваяНоменклатура);
НоваяСерия.Номер = "Партия_от_" + Формат(СтрокаОстатков.ДатаПоступления, "ДФ=yyyyMMdd");
НоваяСерия.СрокГодности = СтрокаОстатков.ДатаПоступления + (365 * 24 * 3600); // Пример расчета срока годности
НоваяСерия.Записать();
НоваяСтрока.Серия = НоваяСерия.Ссылка;
КонецЦикла;
НовыйДокументОприходование.Записать(РежимЗаписиДокумента.Проведение);
Самая большая сложность внедрения серийного учета лежит не в плоскости программирования 1С, а в процессах на реальном физическом складе. Разберем основные проблемы, с которыми вы можете столкнуться:
Таким образом, мы выяснили, что переход на автоматический учет серий по методу FEFO позволяет решить задачу ротации запасов без глобального изменения финансовой учетной политики и без пересчета себестоимости за прошлые годы. Рассмотренный нами алгоритм создания новых карточек и переноса остатков гарантирует стабильную работу базы данных 1С.