Как в 1С:УНФ 3.0 реализовать резервирование товара с учетом партий, но без указания конкретной партии в Заказе покупателя?

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

В этой статье мы подробно разберем одну из часто встречающихся методологических и технических проблем при переходе на 1С:Управление нашей фирмой (УНФ) версии 3.0. Речь пойдет о ситуации, когда компании необходимо вести строгий партионный учет (для отслеживания сроков годности, ГТД или серий), но при этом процесс продаж требует гибкости в выборе конкретной партии для отгрузки.

Рассмотрим сценарий: клиент делает заказ, мы должны зарезервировать товар, чтобы его не забрали другие. Однако сделка может длиться долго (ожидание оплаты, самовывоз через месяц). За это время на склад может поступить новая партия, а нам, согласно правилам ФИФО (First In, First Out), выгоднее отгрузить по текущим "быстрым" сделкам старую партию, которая "висит" в резерве под "медленным" заказом.

В конфигурациях уровня 1С:Управление Торговлей (УТ) или 1С:ERP это решается разделением регистров свободного остатка и резервов или использованием ордерной схемы. В УНФ архитектура иная, что ставит специалистов в тупик. Давайте разберемся, как настроить систему правильно.

Архитектурные отличия УНФ: почему возникает проблема?

Прежде чем переходить к решениям, нам необходимо понять корень проблемы. Он кроется в структуре регистров накопления УНФ.

В отличие от "старших" конфигураций, в УНФ (в редакции 3.0 и выше) основной учет товаров, резервов и себестоимости ведется в едином регистре накопления — ЗапасыИЗатраты. Это упрощает систему, но накладывает жесткие ограничения (для проверки корректности данных можно использовать сравнение регистров "Запасы на складах" и "Запасы и затраты").

Если в настройках включен учет по партиям, то измерение Партия становится ключевым разрезом учета в этом регистре. Что это означает на практике?

  1. Когда мы проводим ЗаказПокупателя и ставим товар в резерв, система делает запись в регистр:
    Измерения: Номенклатура, Склад, Партия, Заказ.
    Ресурс: Резерв = 1 шт.
  2. Если в документе указана конкретная партия (например, Партия №3), то и в резерв попадает именно она.
  3. При попытке создать РасходнуюНакладную на основании этого заказа, система будет пытаться списать именно ту партию, которая указана в резерве.

В результате возникает "жесткая сцепка". Если мы зарезервировали под клиента "Партию №3", а через неделю хотим отдать ее другому клиенту (потому что она старая и портится), а первому отдать "Партию №4" (которая свежая), система нам этого не позволит без ручного вмешательства. Нам придется зайти в первый заказ, снять резерв, и только потом продавать.

Решение 1: Отключение обязательного заполнения партий в Заказе

Самый простой способ, который часто советуют на форумах, заключается в настройке политики заполнения реквизитов.

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

Как это реализовать:

  1. Перейдем в раздел Настройки - Еще больше возможностей - Закупки. Убедимся, что галочка Партии номенклатуры установлена.
  2. В карточке номенклатуры (или в карточке Категории номенклатуры) проверим настройки обязательности заполнения. Нам нужно, чтобы поле Партия в документах было видимым, но не обязательным для заполнения в Заказах покупателя.

Сценарий работы при такой настройке:

Возникает так называемая "пересортица по аналитике". В резерве числится товар "без партии", а на остатке лежит товар "с партией". Стандартный контроль остатков может не дать провести отгрузку, либо потребует выполнения операции корректировки или автоматического распределения.

В УНФ есть механизмы автоматического подчета остатков, но этот метод считается "рискованным", если вы хотите видеть точную себестоимость в моменте. Он подходит, если вам не важно, какая именно партия зарезервирована, а важно только общее количество.

Решение 2: Использование механизма статусов заказов (Рекомендуемое)

Более правильным с точки зрения методологии УНФ является подход, разделяющий "обещание товара клиенту" и "жесткий резерв". Для этого мы будем использовать статусы документа ЗаказПокупателя.

Идея заключается в следующем: пока заказ находится в долгой воронке продаж (ждет оплаты, согласования), мы не делаем движений по регистру ЗапасыИЗатраты в колонке "Резерв". Или делаем, но без привязки к партии.

Настройка схемы:

  1. Зайдем в настройки статусов заказов покупателей.
  2. Определим статус, например, "В работе" или "Ожидает оплаты", как статус, который не резервирует товар на складе, а только планирует потребность. Либо резервирует, но мы договариваемся, что партия там не указывается.
  3. Создадим статус "К отгрузке".

Алгоритм действий менеджера:

  1. Менеджер создает заказ. Товар "бронируется" в уме или по графику потребностей, но жесткого захвата конкретной партии (серии) не происходит.
  2. Приходит новая партия товара (Партия 4), а старая (Партия 3) все еще лежит.
  3. Появляется "быстрый" клиент, которому нужно отгрузить прямо сейчас. Мы создаем ему накладную, и система по методу ФИФО автоматически списывает самую старую доступную — Партию 3.
  4. Первый клиент наконец оплачивает заказ. Менеджер переводит заказ в статус "К отгрузке".
  5. В этот момент (или в момент создания накладной) система смотрит текущие остатки. Партии 3 уже нет, но есть Партия 4. Система резервирует или сразу списывает Партию 4.

Таким образом, мы добиваемся эффекта "скользящего" ФИФО: старые партии уходят тем, кто готов забрать товар первым, независимо от того, кто первый сделал заказ.

Решение 3: Документ "Резервирование запасов"

Если вам необходимо именно "застолбить" товар (чтобы его не продали другому), но при этом иметь возможность гибко управлять партиями, в УНФ существует специализированный документ — РезервированиеЗапасов.

Этот подход требует большей ручной работы, но дает полный контроль.

Как это работает:

  1. В ЗаказеПокупателя мы не ставим автоматический резерв (в статусе заказа выбрано "не резервировать").
  2. На основании заказа или отдельно создается документ РезервированиеЗапасов.
  3. В этом документе можно заполнить табличную часть автоматически по остаткам. Кнопка "Заполнить" -> "По остаткам" (или аналогичная функциональность подбора).

Если товары отсортированы по времени поступления, система подставит в резерв наиболее старую партию. Если ситуация меняется (нужно отдать эту партию другому), мы:

  1. Создаем документ РезервированиеЗапасов с видом операции "Снятие резерва" (или корректировка) для старого заказа. Освобождаем "Партию 3".
  2. Отгружаем "Партию 3" быстрому клиенту.
  3. Создаем новый документ резервирования для старого заказа, привязывая к нему уже "Партию 4".

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

Решение 4: Программная доработка (Расширение)

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

Поскольку штатный функционал УНФ 3.0 с жестким партионным учетом не позволяет реализовать логику "мягкого резерва" одной галочкой, можно внедрить алгоритм автоматической подмены партии при проведении РасходнойНакладной.

Логика работы расширения:

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


// Псевдокод алгоритма
Функция ПередЗаписьюРасходнойНакладной(Отказ, РежимЗаписи, РежимПроведения)
    
    // 1. Определить потребности документа (что хотим продать)
    Для Каждого Строка Из ТЧ_Запасы Цикл
        
        // 2. Проверить, есть ли свободный остаток на складе по ФИФО
        // Игнорируя партию, указанную в строке, ищем самую старую на складе
        СтараяПартия = НайтиСамуюСтаруюПартию(Строка.Номенклатура);
        
        Если СтараяПартия <> Строка.Партия Тогда
            // 3. Если в заказе зарезервирована "НоваяПартия", а мы хотим списать "СтаруюПартию"
            // Нужно выполнить "тихую" замену резерва
            
            ВыполнитьПеребросРезерва(Заказ, НоваяПартия, СтараяПартия);
            
            // 4. Подменить партию в самой накладной
            Строка.Партия = СтараяПартия;
        КонецЕсли;
        
    КонецЦикла;

КонецФункции;

Такой подход автоматизирует процесс, описанный в "Решении 3". Система сама "на лету" понимает: "Ага, пользователь хочет отгрузить товар. Под этот заказ зарезервирована Партия 5. Но на складе пылится Партия 3. Я сейчас молча сниму резерв с Партии 5, переставлю его на Партию 3 и сразу спишу её".

Подводим итоги

Проблема резервирования в УНФ 3.0 при использовании партий связана с тем, что система хранит резерв в разрезе конкретных партий. Чтобы реализовать продажу по ФИФО при длительном цикле сделки, используйте один из методов:

  1. Организационный: Не резервировать товар в момент поступления заказа. Использовать статусы "В работе" (без резерва) и "К отгрузке" (с резервом). Резерв ставить только непосредственно перед отгрузкой, тогда ФИФО сработает корректно.
  2. Технический (настройки): Отключить обязательность партии в заказе. Это рискованно и требует тщательного тестирования процесса закрытия месяца и расчета себестоимости.
  3. Ручной: Использовать документы "Резервирование запасов" для ручного управления тем, какая партия под кого лежит.
  4. Автоматизированный: Написать расширение, которое будет динамически менять зарезервированную партию на наиболее подходящую по срокам (ФИФО) в момент проведения накладной.

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

← На главную