Организация порядка на складе — задача, с которой рано или поздно сталкивается любая производственная или торговая компания. Особую сложность она приобретает тогда, когда учет ведется в исторически сложившейся, но уже устаревшей конфигурации 1С:Управление производственным предприятием (УПП) ред. 1.3, переходить с которой на 1С:ERP в ближайшее время не планируется. При этом перед бизнесом стоит задача навести порядок с минимальными затратами, внедрив адресное хранение, штрихкодирование, учет сроков годности и работу с терминалами сбора данных (ТСД).
В этой статье мы подробно разберем, как решить эту задачу для относительно небольшого склада (около 1000 кв. м), проанализируем плюсы и минусы различных архитектурных подходов, выясним причины возможных учетных коллапсов и рассмотрим готовые инструменты автоматизации.
---
Для начала проанализируем параметры склада. Площадь в 1000 кв. м — это относительно небольшой объект. Если это не склад фармацевтической продукции или мелких дорогостоящих автозапчастей с десятками тысяч SKU, внедрение тяжелой, обособленной WMS-системы (например, 1С:WMS или Axelot) чаще всего экономически нецелесообразно.
Рассмотрим, из чего складывается бюджет внедрения классической внешней WMS-системы:
Для склада в 1000 кв. м совокупная стоимость такого проекта может оказаться несопоставимой с получаемым экономическим эффектом. Кроме того, внедрение полноценной WMS требует выделения в штат как минимум одного системного администратора/оператора WMS для оперативного разбора зависших задач и исправления ошибок обмена.
---
В коробочной версии «1С:УПП 1.3» уже есть базовый механизм — так называемое статическое (справочное) адресное хранение. Оно позволяет закрепить за конкретным товаром одну или несколько ячеек в карточке номенклатуры. Однако эта схема не ведет количественного учета в разрезе ячеек. Программа не знает, сколько именно штук товара лежит в ячейке А-10, а сколько в Б-20, и не умеет автоматически выдавать задания на сборку с учетом партий и сроков годности.
Если вы принимаете решение дорабатывать УПП собственными силами или с привлечением франчайзи, давайте разберем два пути реализации.
Это наиболее простой и безопасный для стабильности базы УПП вариант. Мы создаем простой регистр сведений РегистрСведений.АдресноеХранение со следующей структурой:
Номенклатура, СерияНоменклатуры (в ней хранятся серия, партия и срок годности), Ячейка (справочник физических мест хранения).Количество (опционально, для примерного понимания объема) или просто статус занятости.При приемке товара кладовщик размещает его в пустую или частично заполненную ячейку и фиксирует это действие на ТСД или бумаге. В регистр делается запись. При отгрузке система по ФИФО анализирует доступные серии, находит по регистру ячейки, в которых лежит эта серия, и формирует для сборщика упорядоченный по маршруту обхода лист отбора. Когда ячейка полностью опустошается, запись из регистра сведений удаляется.
Преимущество: этот контур никак не влияет на проведение основных документов по партиям и бухгалтерскому учету. Даже если кладовщик совершит ошибку, это не заблокирует отгрузку и не приведет к расхождению себестоимости.
Некоторые разработчики предлагают превратить склад в УПП в полноценный ордерный склад с количественным учетом. Для этого создается новый регистр накопления остатков (например, РегистрНакопления.ТоварыВЯчейкахОтправителя) и переписываются типовые документы проведения: ПоступлениеТоваровУслуг, РеализацияТоваровУслуг, ПеремещениеТоваров.
Рассмотрим, почему этот путь сопряжен с колоссальными рисками:
Если вы решите программировать этот функционал самостоятельно, будьте готовы потратить много времени на отладку кода работы с ТСД и обработку нештатных складских ситуаций (заблокированный проход к стеллажу, переполненная ячейка, обнаружение пересорта в процессе сборки).
---
Чтобы получить все преимущества динамического адресного хранения и не переписывать логику проведения документов в УПП, оптимально использовать готовое промежуточное ПО (мидлвар) для терминалов сбора данных. На рынке СНГ лидируют два продукта, имеющие коробочные модули интеграции с УПП 1.3 на обычных формах: DataMobile (модуль «Динамическое адресное хранение») и Mobile SMARTS: Склад 15 (от компании Клеверенс).
Рассмотрим, как работает эта архитектура:
ПриходныйОрдерНаТовары. Он выгружается на ТСД. Кладовщик сканирует штрихкод товара, штрихкод серии (срока годности) и штрихкод ячейки, куда он его физически помещает. Информация о размещении записывается в собственную базу ТСД-системы.РасходныйОрдерНаТовары уходит на ТСД. Программа на ТСД сама рассчитывает оптимальный маршрут обхода ячеек сборщиком с учетом ФИФО по срокам годности, хранящимся в ее базе. Кладовщик собирает товар, сканируя ячейки и штрихкоды упаковок.Такой подход минимизирует затраты на внедрение, исключает риски зависания базы УПП при обновлении и позволяет запустить адресный склад буквально за несколько недель.
---
Если на вашем производстве или складе присутствует весовой товар либо операции по розливу/фасовке жидкостей из крупных контейнеров в мелкую тару, стандартные схемы штрихкодирования работать не будут. Выясним, как правильно организовать этот процесс:
2800015012550, где 00015 — код номенклатуры, а 01255 — вес в граммах, то есть 1.255 кг). Это избавит кладовщиков от необходимости вводить вес вручную с клавиатуры ТСД, исключая человеческий фактор.---
Для тех, кто все же выбрал путь легкой самостоятельной доработки 1С:УПП без изменения типовой конфигурации, приведем пример кода, который позволяет быстро получить структуру ячеек для печати этикеток или первоначального заполнения топологии склада.
Допустим, мы создали справочник Склады и подчиненный ему справочник СкладскиеЯчейки с реквизитами Зона, Стеллаж, Полка, Позиция. Нам необходимо программно сгенерировать штрихкоды для новых ячеек по шаблону: Зона-Стеллаж-Полка-Позиция (например, А-01-03-02).
Проанализируем пример кода для генерации и записи таких элементов:
Процедура СоздатьЯчейкиСклада(СкладСсылка, ЗонаИмя, КоличествоСтеллажей, КоличествоПолок, КоличествоПозиций) Экспорт
Для Стеллаж = 1 По КоличествоСтеллажей Цикл
Для Полка = 1 По КоличествоПолок Цикл
Для Позиция = 1 По КоличествоПозиций Цикл
СтрокаСтеллаж = Формат(Стеллаж, "ЧЦ=2; ЧГ=0");
СтрокаПолка = Формат(Полка, "ЧЦ=2; ЧГ=0");
СтрокаПозиция = Формат(Позиция, "ЧЦ=2; ЧГ=0");
НаименованиеЯчейки = ЗонаИмя + "-" + СтрокаСтеллаж + "-" + СтрокаПолка + "-" + СтрокаПозиция;
// Проверим, нет ли уже такой ячейки в справочнике
СсылкаНаЯчейку = Справочники.СкладскиеЯчейки.НайтиПоНаименованию(НаименованиеЯчейки, Истина, , СкладСсылка);
Если Не ЗначениеЗаполнено(СсылкаНаЯчейку) Тогда
НоваяЯчейка = Справочники.СкладскиеЯчейки.СоздатьЭлемент();
НоваяЯчейка.Владелец = СкладСсылка;
НоваяЯчейка.Наименование = НаименованиеЯчейки;
НоваяЯчейка.Зона = ЗонаИмя;
НоваяЯчейка.Стеллаж = Стеллаж;
НоваяЯчейка.Полка = Полка;
НоваяЯчейка.Позиция = Позиция;
НоваяЯчейка.Записать();
// Генерируем уникальный штрихкод для ячейки (например, формат Code128)
ШтрихкодСимвол = "CELL" + СокрЛП(НоваяЯчейка.Ссылка.УникальныйИдентификатор());
РегистрШтрихкодов = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
РегистрШтрихкодов.Владелец = НоваяЯчейка.Ссылка;
РегистрШтрихкодов.Штрихкод = ШтрихкодСимвол;
РегистрШтрихкодов.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128;
РегистрШтрихкодов.Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Сообщить("Генерация структуры ячеек для зоны " + ЗонаИмя + " успешно завершена!");
КонецПроцедуры
Этот код позволяет быстро сформировать сетку адресов для склада, после чего выгрузить их на ТСД или распечатать на принтере этикеток для оклейки стеллажей.
---
Какое бы программное обеспечение вы ни выбрали, помните золотое правило складской логистики: автоматизация хаоса приводит к автоматизированному хаосу. Не начинайте программирование или установку софта до того, как наведете физический порядок.
Рекомендуем придерживаться следующей последовательности действий:
Разумный выбор ИТ-архитектуры и планомерное обучение персонала позволят вам организовать образцовый порядок на складе площадью 1000 кв. м с минимальными финансовыми затратами и без риска нарушить стабильную работу конфигурации «1С:УПП».