При автоматизации складских операций часто возникает задача отражения промежуточных этапов жизни товара: резервирование, перемещение в пути, комплектация или предпродажная подготовка. Ошибка многих разработчиков заключается в попытке «впихнуть» всю логику в один универсальный документ и один регистр накопления. Давайте разберем, почему такой подход ведет к хаосу и как построить архитектуру, которая будет работать стабильно.
Заказчики часто просят сделать один документ с набором кнопок: «Резервировать», «Отправить», «Вернуть». Кажется, что это удобно для пользователя, но для учета это катастрофа. Если вы используете один документ, который постоянно перепроводится с изменением движений по РегиструНакопления, вы сталкиваетесь со следующими проблемами:
Профессиональный стандарт разработки в 1С подразумевает правило: одно хозяйственное событие — это один документ. Если товар переходит из статуса «Доступен» в статус «Резерв» — это отдельная операция. Если он перемещается со склада «Основной» на склад «В пути» — это другой документ.
Рассмотрим по шагам, как организовать эту систему:
РезервированиеТоваров, ПеремещениеВПути, ЗавершениеКомплектации). Каждый документ должен отвечать только за свою узкую задачу и иметь блок проведения в несколько строк. Это делает систему прозрачной и легко тестируемой.РегистрНакопления.ОстаткиТоваров — хранит только то, что физически лежит на полке.РегистрНакопления.ТоварыВРезерве (или аналогичный) — хранит данные о том, какой объем товара «застолблен» под заказы.РегистрСведений.СтатусыТоваров — если необходимо оперативно видеть, в каком процессе находится товар, можно использовать независимый регистр сведений, где СрезПоследних даст вам актуальный статус.Когда вы проектируете систему, помните о принципе разделения ответственности. Если товар ушел со склада, он должен быть списан со склада «Основной». Если он в пути — он должен быть оприходован на склад «Транзит». Это самый надежный способ учета, исключающий любые манипуляции с «состояниями» внутри одного измерения.
Пример программного подхода к созданию цепочки документов из АРМ:
Процедура ПриНажатииКнопкиРезервировать(Команда)
Док = Документы.РезервированиеТоваров.СоздатьДокумент();
// Заполнение реквизитов из текущего контекста формы
Док.Дата = ТекущаяДата();
Док.Товары.Загрузить(Объект.Товары.Выгрузить());
Док.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
Используя данный метод, вы сохраняете всю историю операций. Каждый документ — это отдельная запись в РегистреНакопления, что позволяет строить любые отчеты по движению товаров за любой период. Вы всегда сможете ответить на вопрос: «Кто и когда отправил эту бочку в путь?».
Для создания качественной складской системы: