При организации самовывоза товаров со склада компании часто сталкиваются с ситуацией, когда крупные заказы собираются комплектовщиками заблаговременно, а документ РеализацияТоваровУслуг оформляется непосредственно в момент передачи товара покупателю. При отсутствии визуального контроля или отметок в программе кладовщик может не заметить уже скомплектованный заказ на стеллаже и начать собирать его повторно. Это приводит к потере рабочего времени, путанице с остатками и задержкам при обслуживании клиентов.
Разберем способы решения данной задачи в конфигурации «1С:Управление торговлей 11» (а также «1С:Комплексная автоматизация 2» и «1С:ERP»): от легкой доработки запроса динамического списка с использованием дополнительных реквизитов до использования типовых механизмов складского учета.
Если руководство компании не готово внедрять расширенный складской контур, самым быстрым способом является добавление дополнительного реквизита к документу ЗаказКлиента (например, «Отметка о сборке» со строковым типом или списком значений ячеек) и вывод этой информации напрямую в колонку «Текущее состояние» журнала заказов.
Посмотрим, как устроен механизм формирования поля состояния. В типовой конфигурации текущее состояние заказов не хранится в реквизите документа, а рассчитывается и записывается в регистр сведений СостоянияЗаказовКлиентов. В динамическом списке формы списка заказов состояние выбирается запросом из этого регистра.
Разберем по шагам, как модифицировать текст запроса динамического списка в расширении конфигурации или в форме списка документов.
ЗаказКлиента с наименованием «Отметка о сборке» (тип: Строка). Кладовщик будет указывать в нем номер полки/ячейки или факт готовности.ТекстоваяСтрока или строковое значение неограниченной длины нельзя напрямую сравнивать и конкатенировать в условиях ВЫБОР. Для этого применим оператор ВЫРАЗИТЬ(... КАК СТРОКА(1000)).Посмотрим на пример базового фрагмента запроса:
ВЫБОР
КОГДА НЕ ДокументЗаказКлиента.Проведен ТОГДА
ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.ПустаяСсылка)
КОГДА НЕ ДополнительныеРеквизитыЗаказКлиента.Значение ЕСТЬ NULL
И ДополнительныеРеквизитыЗаказКлиента.Свойство.Заголовок = "Отметка о сборке"
И (ВЫРАЗИТЬ(ДополнительныеРеквизитыЗаказКлиента.Значение КАК СТРОКА(1000))) <> "" ТОГДА
"Собран: " + (ВЫРАЗИТЬ(ДополнительныеРеквизитыЗаказКлиента.Значение КАК СТРОКА(1000)))
ИНАЧЕ
ЕСТЬNULL(СостоянияЗаказовКлиентов.Состояние, ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.Закрыт))
КОНЕЦ КАК Состояние
Обратим внимание на условие по имени свойства: фильтрация по Свойство.Заголовок чувствительна к случайному переименованию свойства пользователем. Для промышленного решения безопаснее связывать свойство по фиксированному имени через ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ИмяПредопределенногоНабора либо по постоянной ссылке.
Если требуется не только видеть факт сборки, но и автоматически информировать склад о приоритете (крупные заказы собирать в первую очередь, а мелкие — по факту прибытия клиента), запрос можно расширить. Для этого соединим документ с агрегированной выборкой по табличной части Товары.
Проанализируем важный нюанс: в табличную часть заказов помимо материальных позиций часто включаются услуги доставки, подъем на этаж и сервисные работы. Их необходимо исключить из подсчета строк и количества позиций к отбору.
Рассмотрим пример запроса с исключением номенклатуры с типом Услуга и Работа:
ВЫБОР
КОГДА НЕ ДокументЗаказКлиента.Проведен ТОГДА
ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.ПустаяСсылка)
КОГДА НЕ ДополнительныеРеквизитыЗаказКлиента.Значение ЕСТЬ NULL
И ДополнительныеРеквизитыЗаказКлиента.Свойство.Заголовок = "Отметка о сборке"
И (ВЫРАЗИТЬ(ДополнительныеРеквизитыЗаказКлиента.Значение КАК СТРОКА(1000))) <> "" ТОГДА
"Собран: " + (ВЫРАЗИТЬ(ДополнительныеРеквизитыЗаказКлиента.Значение КАК СТРОКА(1000)))
КОГДА СостоянияЗаказовКлиентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.ГотовКОтгрузке)
И ЕСТЬNULL(ТоварыЗаказКлиента.КоличествоСтрок, 0) > 1 ТОГДА
ВЫБОР
КОГДА ТоварыЗаказКлиента.КоличествоТовар >= 10 ТОГДА
"К сборке: 10 и более шт."
ИНАЧЕ
"Готов к сборке (" + ВЫРАЗИТЬ(ТоварыЗаказКлиента.КоличествоСтрок КАК СТРОКА(10)) + " поз.)"
КОНЕЦ
ИНАЧЕ
ЕСТЬNULL(СостоянияЗаказовКлиентов.Состояние, ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.Закрыт))
КОНЕЦ КАК Состояние
// Секция соединений:
ИЗ
Документ.ЗаказКлиента КАК ДокументЗаказКлиента
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов
ПО (СостоянияЗаказовКлиентов.Заказ = ДокументЗаказКлиента.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ДополнительныеРеквизитыЗаказКлиента
ПО (ДокументЗаказКлиента.Ссылка = ДополнительныеРеквизитыЗаказКлиента.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
ЗаказКлиентаТовары.Ссылка КАК Ссылка,
СУММА(ЗаказКлиентаТовары.Количество) КАК КоличествоТовар,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказКлиентаТовары.НомерСтроки) КАК КоличествоСтрок
ИЗ
Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
ЗаказКлиентаТовары.Номенклатура.ТипНоменклатуры НЕ В (
ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга),
ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
)
СГРУППИРОВАТЬ ПО
ЗаказКлиентаТовары.Ссылка
) КАК ТоварыЗаказКлиента
ПО (ДокументЗаказКлиента.Ссылка = ТоварыЗаказКлиента.Ссылка)
Важное предостережение по производительности: соединение динамического списка с вложенными запросами и группировками по табличным частям может замедлить работу журнала при больших объемах данных (десятки тысяч заказов). Для высоконагруженных баз расчет агрегатов рекомендуется выносить в отдельный непериодический регистр сведений, обновляемый при проведении документа, либо в регламентное задание.
Прежде чем вносить изменения в конфигурацию или запрос списка, проанализируем типовые возможности системы, которые решают задачу разделения процессов сборки и финансовой отгрузки без внедрения тяжелого адресного склада:
РеализацияТоваровУслуг оформляется менеджером в момент выдачи, а на складе используется документ РасходныйОрдерНаТовары. Ордер имеет типовые статусы: «К отбору», «В процессе отбора», «Отобран», «К отгрузке». Статус «Отобран» однозначно сообщает всем пользователям, что товар физически собран и ожидает клиента.Выбор варианта зависит от масштаба склада: для небольших интернет-магазинов оптимально подходит расширение динамического списка с дополнительным реквизитом, а для распределенных складов с несколькими сотрудниками сборки — типовая ордерная схема на отгрузку.