В розничной торговле, особенно в таких сферах, как продажа ювелирных изделий, изготовление мебели под заказ или поставка эксклюзивных товаров по каталогам, часто возникает специфическая задача. Покупатель хочет оформить предварительный заказ на товар, которого еще нет в базе данных. На момент оформления заказа у менеджера есть только текстовое описание, эскиз, фотография или ссылка на аналогичный товар. Заводить под каждый такой запрос полноценную карточку номенклатуры нерационально, так как товар может вообще не поступить в продажу или его характеристики изменятся.
Стандартный документ ЗаказПокупателя в конфигурации 1С:Розница 2.2 / 2.3 по умолчанию жестко требует заполнения колонки Номенклатура в табличной части Товары и не позволяет провести документ с пустыми строками. В данной статье мы подробно разберем, как решить эту задачу, сохранив учет под контролем и не нарушая типовую архитектуру программы.
Это самый простой и красивый способ ведения учета в рамках типового функционала, не требующий снятия конфигурации с поддержки или создания расширений. Мы задействуем механизм индивидуальных характеристик номенклатуры.
Проанализируем суть метода: в справочнике создается одна базовая карточка-пустышка, а вся уникальная информация (описание конкретного заказа, размеры, пожелания клиента) выносится в свойства характеристики, которая создается под каждый конкретный заказ покупателя.
Рассмотрим по шагам, как настроить данный механизм:
Номенклатура создадим новый элемент с наименованием, например, _Ювелирное изделие (под заказ) или _Товар под заказ (текст/фото). Префикс в виде нижнего подчеркивания позволит этой позиции всегда находиться вверху списка.Описание заказа (строка), Ссылка на аналог, Желаемая дата поставки.Теперь выясним, как выглядит процесс работы менеджера при оформлении заказа:
При оформлении документа ЗаказПокупателя менеджер выбирает позицию _Товар под заказ (текст/фото). Программа потребует выбрать характеристику. Менеджер создает новую индивидуальную характеристику прямо из формы подбора, в наименовании указывает краткую суть (например, "Кольцо с сапфиром по эскизу Иванова"), а в созданных дополнительных реквизитах прописывает все подробности заказа.
Данный способ позволяет сохранить конфигурацию полностью типовой, аккумулировать все требования внутри конкретной строки заказа и не засорять основной справочник Номенклатура сотнями разовых позиций, которые никогда больше не появятся на складе.
Если заказ покупателя сопровождается визуальными материалами (фотографиями, эскизами, чертежами или файлами технических заданий в формате PDF), стандартного текстового описания будет недостаточно. На форумах часто предлагают сложные интеграционные решения с внешними веб-сервисами, однако в платформе 1С:Предприятие 8.3 уже есть мощный готовый инструмент.
Выясним, как прикрепить файлы к заказу:
В форме документа ЗаказПокупателя на панели навигации расположена кнопка Присоединенные файлы (в некоторых интерфейсах она отображается в виде значка скрепки). Менеджер может загрузить туда любые файлы напрямую с диска компьютера или вставить изображение прямо из буфера обмена (например, сделав снимок экрана из мессенджера, где клиент прислал фото товара).
Если изображение должно быть привязано не к документу в целом, а к конкретной строке (характеристике), файлы можно прикреплять непосредственно к карточке индивидуальной характеристики, созданной по методу из Варианта 1. При поступлении реального товара от поставщика эти файлы можно будет легко перенести в карточку вновь созданной номенклатуры.
В современных редакциях конфигураций на базе 1С реализован механизм сопоставления номенклатуры контрагентов. Рассмотрим, как его можно применить для нашей задачи.
Если у поставщика есть свой прайс-лист или каталог, но мы не хотим загружать его целиком в свою базу данных, мы можем включить опцию работы с номенклатурой поставщиков. При формировании заказа мы фиксируем текстовое наименование позиции так, как оно звучит у поставщика (включая его артикул). В этот момент реальная карточка в справочнике Номенклатура не создается.
Когда от поставщика приходит электронная накладная (через ЭДО или путем импорта файла Excel), система автоматически распознает сопоставленные ранее позиции заказа и предлагает создать новые карточки в нашем справочнике Номенклатура в один клик. Происходит автоматическая связка заказа, поступления и карточки товара.
Если бизнес-процессы компании требуют абсолютной гибкости, и менеджеры категорически отказываются выбирать какие-либо "карточки-пустышки", оптимальным решением станет создание небольшого расширения конфигурации. Это позволит не снимать основную конфигурацию с поддержки (сохранить "замок") и реализовать требуемое поведение.
Разберем техническую реализацию этой задачи по шагам:
Для начала нам необходимо добавить новое текстовое поле в табличную часть Товары документа ЗаказПокупателя. Назовем его, например, ОписаниеНоменклатурыПредопределенное. Менеджер будет писать туда информацию текстом, если реальный товар еще не выбран.
Затем нам нужно обойти стандартную проверку системы, которая запрещает проводить документ без указания ссылки на элемент справочника Номенклатура. Для этого в расширении перехватим процедуру проверки заполнения.
Посмотрим на пример кода, который исключает колонку Номенклатура из обязательных к заполнению полей в документе ЗаказПокупателя:
&Вместо("ОбработкаПроверкиЗаполнения")
Процедура Расш_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Вызываем стандартную обработку, но перед этим модифицируем список проверяемых реквизитов
Индекс = ПроверяемыеРеквизиты.Найти("Товары.Номенклатура");
Если Индекс <> Неопределено Тогда
// Исключаем обязательную проверку номенклатуры, если заполнено текстовое описание
Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
Если Не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) И Не ПустаяСтрока(СтрокаТЧ.ОписаниеНоменклатурыПредопределенное) Тогда
// Если есть описание, то пустая номенклатура допустима, удаляем проверку для всего документа
ПроверяемыеРеквизиты.Удалить(Индекс);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Вызов оригинального метода конфигурации
ПродолжитьВызов(Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Однако просто разрешить запись документа недостаточно. Документ ЗаказПокупателя в «1С:Розница» делает движения по регистрам накопления (например, по регистру ЗаказыПокупателей), где измерение Номенклатура является ключевым и не может быть пустым для корректного учета остатков заказов.
Чтобы решить эту проблему на уровне базы данных, при проведении документа в регистры все равно должна записываться ссылка на некоторую служебную номенклатуру (например, ту же карточку-пустышку _Товар под заказ). Нам необходимо перехватить проведение документа и программно подставлять эту служебную номенклатуру в движения регистров, если в строке табличной части указано только текстовое описание.
Проанализируем пример кода для обработки проведения в расширении:
&Перед("ОбработкаПроведения")
Процедура Расш_ОбработкаПроведения(Отказ, РежимПроведения)
// Перед проведением временно заполняем пустые строки номенклатуры служебным элементом
СсылкаНаСлужебнуюНоменклатуру = Справочники.Номенклатура.НайтиПоРеквизиту("Код", "СЛУЖЕБНЫЙ_КОД");
Если ЗначениеЗаполнено(СсылкаНаСлужебнуюНоменклатуру) Тогда
Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
Если Не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) И Не ПустаяСтрока(СтрокаТЧ.ОписаниеНоменклатурыПредопределенное) Тогда
СтрокаТЧ.Номенклатура = СсылкаНаСлужебнуюНоменклатуру;
// Дополнительно можно программно генерировать или подставлять характеристику
КонецЕсли;
КонецЦикла;
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не найдена служебная номенклатура для проведения неопознанных заказов!");
Отказ = Истина;
EndIf;
КонецПроцедуры
Использование расширения позволяет создать максимально удобный интерфейс для конечных пользователей: менеджер видит на экране привычное текстовое поле, а вся сложная логика подстановки служебных кодов для корректного проведения по регистрам скрыта под капотом системы.
Мы рассмотрели различные подходы к автоматизации заказов без номенклатуры. Какой же метод выбрать для вашей компании?