Содержание
Новый проект в производственно-торговой компании и очередная потребность в функционале резервов, которого нет в коробке.
Требования к резервам товаров на складах:
- Резерв должен быть ограничен сроком действия. Это дата, после которой резерв должен быть снят автоматически;
- Для установки товаров в резерв на срок больше определенного количества рабочих дней требуется согласование;
- Резерв должен делиться по видам:
- Краткосрочный – не требуется согласование, устанавливается на короткий срок;
- Индивидуальный – требуется согласование, устанавливается на срок, который запросил пользователь.
- По любому виду резерва должна быть возможность продлить срок. Если продлевается срок Краткосрочного резерва, то он автоматически должен переходить в Индивидуальный;
- По резерву должна быть возможность увидеть его продолжительность в рабочих и календарных днях;
- Наглядность Заказа клиента не должна ухудшаться при установке и снятии товаров с резерва.
На текущем проекте пошли менее революционным путем, чем на предыдущем //infostart.ru/pm/1880051. Но тем не менее для решения описанных выше задач и задач, которые предстоит реализовать пришлось применить методические подходы с предыдущего проекта и разделить Заказы и обеспечение.
Статья будет разделена на две части. Первая, без технических подробностей больше для пользователей. Вторая, для технических специалистов.
Срок резерва – дата, до которой товар на складе может находиться в резерве.
В новом подходе адаптировали Заказ клиента и Заказ на перемещение (далее Заказы), но данный функционал можно легко добавить к любому заказу в ERP. Опишу новую функциональность на примере Заказа клиента. В Заказе на перемещение все реализовано аналогично Заказу клиента.
Традиционно, как и на других наших проектах разделили Заказы и обеспечение, отказавшись от использования «Варианта обеспечения». В место этого добавили несколько колонок, чтобы данные Заказа не зависели от обеспечения и не терялась наглядность Заказа. Чтобы была возможность каждый запрос на резерв согласовывать, получать доп. аналитику и продолжительность по резервам реализовали установку и снятие резервов отдельным документом (как это было в УПП).
Новые колонки в Заказах:
- Не обеспечивать – редактируется пользователем, количество товара, которое не нужно обеспечивать. Аналогично типовому действию «Не обеспечивать»;
- К отгрузке – редактируется пользователем, количество товара, которое пользователь готов отгрузить. После отгрузки колонка очищается. Аналогично типовому действию «Отгрузить»;
- Индикатор серии – показывает информацию о том, ведется по номенклатуре серийный учет и в каком состоянии заполнение серий
- Без пиктограммы – учет по сериям для номенклатуры не ведется;
- Синяя – по номенклатуре ведется учет по сериям;
- Красная – в строке необходимо заполнить серии;
- Зеленая – в строке заполнены серии.
- В резерве – не редактируется пользователем, количество товара в резерве; Имеет расшифровку при нажатии на ячейку.
- В резерве на согл. – не редактируется пользователем, количество товара в резерве на согласовании; Имеет расшифровку при нажатии на ячейку.
- В обмене резервами – не редактируется пользователем, количество товара в обмене резервами. Есть функционал, когда один менеджер может запросить резерв у другого менеджера. Если другой менеджер готов отдать свой товар, тогда он подтверждает обмен резервами и его резерв переходит под другой заказ клиента, менеджеру, который запросил резерв. До момента, пока тот кто отдает не подтвердил, что готов/не готов отдать товар это количество в обоих заказах отображается в этой колонке; Имеет расшифровку при нажатии на ячейку.
- Отгружено – не редактируется пользователем, количество отгруженного товара;
- Остаток – не редактируется пользователем, количество, которое еще доступно к отгрузке. Рассчитывается по формуле: Количество – Не обеспечивать – К отгрузке – Отгружено.
При делении строки в заказах реализован механизм автоматической переброски резервов между строками. Т.е. если в одной строке 10 шт. товара и все 10 шт. находятся в резерве, то при необходимости отгрузки в разные даты, пользователь делит строку и в этом случае, резерв, относящийся к переносимому количеству, переходит в новую строку.
В Заказе клиента можно двойным нажатием на ячейке «В резерве» или «В резерве на согл.» открыть расшифровку нужного резерва. В расшифровке видно, когда, каким документом, по каким сериям (если резерв был с указанием серии) и до какого срока поставлен резерв.
При наличии учета по сериям по номенклатуре, чтобы увидеть какие серии были поставлены к отгрузке, нужно в строке два раза нажать на пиктограмме, будет открыт диалог подбора серий.
Для установки товаров в резерв на основании Заказа клиента, нужно ввести отдельный документ.
Будет предложено выбрать вид резерва
Краткосрочный резерв по Заказу клиента не требует согласования, поэтому в нем срок резерва рассчитывается автоматически на количество рабочих дней по настройке. Поэтому после того как по Заказу клиента будет введен первый краткосрочный резерв система запомнит по номенклатуре в резерве первоначальный рассчитанный срок резерва и в последующем в рамках этого Заказа для такой же номенклатуры будет автоматически устанавливать этот срок. Когда срок резерва станет меньше даты ввода нового резерва (текущего дня), то система не будет предлагать выбор вида резерва и сразу будет вводить индивидуальный резерв. Это сделано для того, чтобы по одной и той же номенклатуре нельзя было вводить неограниченное количество раз краткосрочный резерв, который не требует согласования.
После выбора вида резерва открывается диалог документа «Резервирование товаров». Согласование резерва реализовано по бесшовной интеграции с 1С:Документооборот 3.
Документ автоматически заполняется всеми товарами, которые доступны для резервирования в Заказе клиента. Дальше пользователь может удалять строки, изменять количество, которое необходимо установить в резерв.
Если у пользователя есть соответствующие права, то он может выполнять резервирование конкретных серий. Для этого нужно в ячейке «Серия» нажать на кнопку выбора и выбрать нужную серию. Интерфейсы по работе с сериями задействованы типовые.
Снятие товара с резерва выполняется вводом на основании Заказа клиента отдельного документа. В документ заполняются все согласованные резервы (краткосрочные и индивидуальные) по Заказу клиента. Пользователь может удалять строки, корректировать количество. В итоге все что останется в документе, после его проведения будет снято с резерва. На текущем проекте согласование снятия товаров с резерва не требуется.
Перенос сроков по товарам в резерве
Перенос сроков по товарам в резерве выполняется вводом на основании Заказа клиента отдельного документа. В документ заполняются все согласованные резервы (краткосрочные и индивидуальные) по Заказу клиента. Пользователь должен указать новый срок резерва, может удалять строки, корректировать количество. В итоге все что останется в документе, после его согласования будет продлено по сроку резерва
Отчет «Анализ резервов по товарам на складах»
За счет того, что резервы устанавливаются отдельным документом, есть техническая возможность посчитать продолжительность резервов.
Отчет по резервам формируется контекстно из Заказа с отбором по нему, а также произвольно для всех заказов.
Трудозатраты на разработку и внедрение
Трудозатраты на разработку и внедрение нового функционала: примерно 1 100 часов.
Задач, связанных с обеспечением, на текущем проекте еще много, поэтому это первый и необходимый шаг, чтобы дальше архитектурно и методически все увязывать в едином подходе, с нужной производительностью и не "толкаться" с обеспечением внутри Заказов.
Все сделано с максимальным использованием типовых регистров и механизмов (отдать должное разработчикам ERP, начиная с 2.5.7 очень удачная архитектура обеспечения, которая позволяет выполнять подобные доработки), поэтому обновление выполняется достаточно просто. При желании и времени все доработки можно вынести в отдельное расширение (есть такие мысли, но пока руки не дошли).
Описание сделано максимально без подробностей, чтобы не увеличивать сильно статью. Если будут вопросы к отдельным механизмам, отвечу в комментариях.
- Документ «Обеспечение» - вся логика работы с обеспечением перенесена в него. Заказ клиента и Заказ на перемещение больше не формируют движения по регистрам обеспечения;
- Остаточный регистр накопления «Обеспечение по заказам» - требуется для контроля целостности данных и построения отчета по резервам в нужной доп. аналитике.
- Отчет «Распределение запасов (ошибки)» - проверочный отчет для контроля расхождений типовых оперативных регистров (Товары на складах, Товары к отгрузке, Товары к поступлению и т.д.) с регистрами обеспечения (Распределение запасов, Запасы и потребности) и новым регистром «Обеспечение по заказам». В основном использовался на этапе разработки нового функционала.
Документ «Обеспечение» формирует движения по регистрам:
- РН «Заказы клиентов» – для заказа клиента. Так как движения по аналогу действия «Отгрузить» теперь выполняются новым документом «Обеспечение» добавлены движения по этому регистру, чтобы сторнировать движения без серии, которые формирует Заказ клиента и перекладывать движения на серию. Движения в регистр формируются только в количественном выражении. Стоимостные показатели в документ «Обеспечение» не добавляли, так как они не имеют отношения к обеспечению.
- РН «Заказы на перемещение» – для заказа на перемещение. Сделано в аналогичном подходе, как и для Заказа клиента;
- РН «Запасы и потребности»;
- РН «Распределение запасов – Движения»;
- РН «Товары к поступлению» – только для Заказа на перемещение;
- РН «Товары к отгрузке»;
- РН «Обеспечение по заказам» - новый регистр. Во всех документах, которые формируют в него движения выполняется контроль остатков в типовой логике ERP.
Подход к формированию документа «Обеспечение»
Документ формируется автоматически, пользователи о его существовании ничего не знают. Каждый раз, когда в Заказах пользователь выполняет изменение (Номенклатура, Характеристика, Серия, Упаковка, Дата отгрузки, Количество, Количество не обеспечивать, Количество к отгрузке, Отмена строки, Добавление новой или удаление существующей строки, разбивание строки) автоматически создается документ «Обеспечение». Документ всегда создается на разницу между данными в ссылке и объекте.
Технически формирование документа разделено на два этапа:
- Перед записью Заказа подготавливается таблица с изменениями и производится распределение товаров в резерве и к отгрузке по изменениям, чтобы не "потерять" резервы и товар к отгрузке.
- При проведении или отмене проведения по подготовленным данным п.1 формируется документ «Обеспечение».
При этом если пользователь разделит строку или удалит одну строку и добавит вместо нее по такой же номенклатуре другую строку, то при наличии резервов и товаров к отгрузке эта информация не теряется.
Например, есть Товар в количестве 10 шт. из них все 10 шт. в резерве.
Если пользователь разделит строку на три в количестве 5, 3, 1, то резерв в количестве 9 шт. будет сохранен, а 1 шт. будет автоматически снята с резерва.
Изменение метаданных в типовых объектах
- Документ «Заказ клиента»
- Добавлены реквизиты в таб. часть «Товары»
- КоличествоНеОбеспечивать
- КоличествоУпаковокНеОбеспечивать
- КоличествоКОтгрузке
- КоличествоУпаковокКОтгрузке – на скриншотах выше колонка «К отгрузке» это не этот реквизит, а реквизит формы, так как стоит задача очищать его визуально после отгрузки. В этом же реквизите содержится информация о количестве аналогичное действию «Отгрузить» в типовом решении;
- СтатусУказанияСерийДоп – используется для отображения нужной пиктограммы учета серий в строке товаров. Заполняется типовыми механизмами (доработанными), что и типовой реквизит «СтатусУказанияСерий».
- КоличествоСерии – используется для контроля заполнения серий в связанной таб. части «Серии» и количеством, которое пользователь установил к отгрузке в строке таб. части «Товары».
- Все не редактируемые реквизиты в форме Заказов — это реквизиты формы, а не объекта.
- Новая таб. часть «Серии» - чтобы не разбивать строки в таб. части «Товары» при отгрузке разных серий, серии хранятся в новой таб. части.
- КодСтроки;
- Номенклатура;
- Серия;
- Количество.
- Добавлены реквизиты в таб. часть «Товары»
- Документ «Заказ на перемещение» - аналогичные метаданные, что и у Заказа клиента;
- Документ «Реализация товаров и услуг»
- Новая таб. часть «Обеспечение» - по ней формируются движения по новому РН «Обеспечение по заказам», заполняется при проведении в подходе как «Виды запасов». По данным, указанным в реализации, получаются остатки по новому регистру для того, чтобы дозаполнить недостающую аналитику.
- Номенклатура
- Характеристика
- Серия
- Назначение
- Количество
- Склад
- СкладРезерва
- Заказ
- КодСтроки
- ВидРезерва
- СрокРезерва
- ДокументРезерва
- СерияИзРезерва
- ДатаОтгрузки
- Новая таб. часть «Обеспечение» - по ней формируются движения по новому РН «Обеспечение по заказам», заполняется при проведении в подходе как «Виды запасов». По данным, указанным в реализации, получаются остатки по новому регистру для того, чтобы дозаполнить недостающую аналитику.
- Документ «Перемещение товаров» - аналогичная таб. часть, как и у реализации.
Изменения в типовых алгоритмах
Доработаны вводы документов «Реализация товаров и услуг» и «Перемещение товаров» на основании «Заказа клиента» и «Заказа на перемещение», чтобы заполнение выполнялось исходя из новой архитектуры. С форм Заказов скрыта колонка «Действия», команды, связанные с ее изменением и алгоритмы, где использовалось «Действие».
Доработали команду "Обеспечение - Отгрузить" в Заказах под новую архитектуру и чтобы серии сразу заполнялись по FEFO, а дальше при необходимости те у кого есть соответствующие права изменяли их вручную.
Примеры заполнения нового документа «Обеспечение»
Представление документа сделано как у заказов с добавлением в скобках (обеспечение). Сделали так для того, чтобы у пользователей не возникало вопросов при сообщениях об ошибках, что это за документ, о котором они ничего не знают. Например, пользователь удалил строку в заказе клиента, а по ней уже была отгрузка, в этом случае сработает типовой контроль, который бы сработал если все было в Заказе клиента и в сообщении пользователь увидел бы информацию о Заказе клиента. Вот чтобы для пользователя все было максимально в типовой логике и изменено представление.
Если в строке установлен флаг «Вид движения расход», то формируются Расходные движения по регистру «Обеспечение по заказам», без этого флага «Приходные». По типовым регистрам всегда формируются сторнирующие движения.
Ниже приведу примеры основных действий (по факту их больше) с Заказом клиента.
Добавлена новая строка в Заказ клиента или увеличено количество на 10 шт.
Удалена строка из Заказа клиента или уменьшено количество на 2 шт.
Для строки изменена дата отгрузки с 15.12.2023 на 18.12.2023
Количество по строке установлено «К отгрузке» аналог действия «Отгрузить».
На текущем проекте «К отгрузке» возможно установить только количество из резерва. Резерв устанавливается отдельным документом.
Количество «К отгрузке» перевели назад «В резерв». Аналог, когда действие «Отгрузить» изменили на «Резервировать на складе».