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