Как оформить заказ покупателя в 1С:Розница без указания конкретной номенклатуры?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В розничной торговле, особенно в таких сферах, как продажа ювелирных изделий, изготовление мебели под заказ или поставка эксклюзивных товаров по каталогам, часто возникает специфическая задача. Покупатель хочет оформить предварительный заказ на товар, которого еще нет в базе данных. На момент оформления заказа у менеджера есть только текстовое описание, эскиз, фотография или ссылка на аналогичный товар. Заводить под каждый такой запрос полноценную карточку номенклатуры нерационально, так как товар может вообще не поступить в продажу или его характеристики изменятся.

Стандартный документ ЗаказПокупателя в конфигурации 1С:Розница 2.2 / 2.3 по умолчанию жестко требует заполнения колонки Номенклатура в табличной части Товары и не позволяет провести документ с пустыми строками. В данной статье мы подробно разберем, как решить эту задачу, сохранив учет под контролем и не нарушая типовую архитектуру программы.

Вариант 1. Метод виртуальной номенклатуры и индивидуальных характеристик (Без программирования)

Это самый простой и красивый способ ведения учета в рамках типового функционала, не требующий снятия конфигурации с поддержки или создания расширений. Мы задействуем механизм индивидуальных характеристик номенклатуры.

Проанализируем суть метода: в справочнике создается одна базовая карточка-пустышка, а вся уникальная информация (описание конкретного заказа, размеры, пожелания клиента) выносится в свойства характеристики, которая создается под каждый конкретный заказ покупателя.

Рассмотрим по шагам, как настроить данный механизм:

  1. Перейдем в раздел Администрирование, далее выберем пункт Настройки номенклатуры и установим флаг Характеристики номенклатуры.
  2. В справочнике Номенклатура создадим новый элемент с наименованием, например, _Ювелирное изделие (под заказ) или _Товар под заказ (текст/фото). Префикс в виде нижнего подчеркивания позволит этой позиции всегда находиться вверху списка.
  3. В карточке созданной номенклатуры в поле Вариант использования характеристик выберем значение Индивидуальные для этого номенклатурного позиционирования.
  4. Для того чтобы менеджеры могли фиксировать подробное текстовое описание, ссылки на аналоги и другую специфическую информацию, воспользуемся механизмом дополнительных реквизитов. В разделе Администрирование найдем Дополнительные реквизиты и сведения. Добавим для характеристик нашей номенклатуры-пустышки новые реквизиты: например, Описание заказа (строка), Ссылка на аналог, Желаемая дата поставки.

Теперь выясним, как выглядит процесс работы менеджера при оформлении заказа:

При оформлении документа ЗаказПокупателя менеджер выбирает позицию _Товар под заказ (текст/фото). Программа потребует выбрать характеристику. Менеджер создает новую индивидуальную характеристику прямо из формы подбора, в наименовании указывает краткую суть (например, "Кольцо с сапфиром по эскизу Иванова"), а в созданных дополнительных реквизитах прописывает все подробности заказа.

Данный способ позволяет сохранить конфигурацию полностью типовой, аккумулировать все требования внутри конкретной строки заказа и не засорять основной справочник Номенклатура сотнями разовых позиций, которые никогда больше не появятся на складе.

Вариант 2. Использование подсистемы присоединенных файлов

Если заказ покупателя сопровождается визуальными материалами (фотографиями, эскизами, чертежами или файлами технических заданий в формате PDF), стандартного текстового описания будет недостаточно. На форумах часто предлагают сложные интеграционные решения с внешними веб-сервисами, однако в платформе 1С:Предприятие 8.3 уже есть мощный готовый инструмент.

Выясним, как прикрепить файлы к заказу:

В форме документа ЗаказПокупателя на панели навигации расположена кнопка Присоединенные файлы (в некоторых интерфейсах она отображается в виде значка скрепки). Менеджер может загрузить туда любые файлы напрямую с диска компьютера или вставить изображение прямо из буфера обмена (например, сделав снимок экрана из мессенджера, где клиент прислал фото товара).

Если изображение должно быть привязано не к документу в целом, а к конкретной строке (характеристике), файлы можно прикреплять непосредственно к карточке индивидуальной характеристики, созданной по методу из Варианта 1. При поступлении реального товара от поставщика эти файлы можно будет легко перенести в карточку вновь созданной номенклатуры.

Вариант 3. Использование механизма "Номенклатура поставщиков"

В современных редакциях конфигураций на базе 1С реализован механизм сопоставления номенклатуры контрагентов. Рассмотрим, как его можно применить для нашей задачи.

Если у поставщика есть свой прайс-лист или каталог, но мы не хотим загружать его целиком в свою базу данных, мы можем включить опцию работы с номенклатурой поставщиков. При формировании заказа мы фиксируем текстовое наименование позиции так, как оно звучит у поставщика (включая его артикул). В этот момент реальная карточка в справочнике Номенклатура не создается.

Когда от поставщика приходит электронная накладная (через ЭДО или путем импорта файла Excel), система автоматически распознает сопоставленные ранее позиции заказа и предлагает создать новые карточки в нашем справочнике Номенклатура в один клик. Происходит автоматическая связка заказа, поступления и карточки товара.

Вариант 4. Разработка расширения конфигурации (Путь разработчика)

Если бизнес-процессы компании требуют абсолютной гибкости, и менеджеры категорически отказываются выбирать какие-либо "карточки-пустышки", оптимальным решением станет создание небольшого расширения конфигурации. Это позволит не снимать основную конфигурацию с поддержки (сохранить "замок") и реализовать требуемое поведение.

Разберем техническую реализацию этой задачи по шагам:

Для начала нам необходимо добавить новое текстовое поле в табличную часть Товары документа ЗаказПокупателя. Назовем его, например, ОписаниеНоменклатурыПредопределенное. Менеджер будет писать туда информацию текстом, если реальный товар еще не выбран.

Затем нам нужно обойти стандартную проверку системы, которая запрещает проводить документ без указания ссылки на элемент справочника Номенклатура. Для этого в расширении перехватим процедуру проверки заполнения.

Посмотрим на пример кода, который исключает колонку Номенклатура из обязательных к заполнению полей в документе ЗаказПокупателя:


&Вместо("ОбработкаПроверкиЗаполнения")
Процедура Расш_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    // Вызываем стандартную обработку, но перед этим модифицируем список проверяемых реквизитов
    Индекс = ПроверяемыеРеквизиты.Найти("Товары.Номенклатура");
    Если Индекс <> Неопределено Тогда
        // Исключаем обязательную проверку номенклатуры, если заполнено текстовое описание
        Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
            Если Не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) И Не ПустаяСтрока(СтрокаТЧ.ОписаниеНоменклатурыПредопределенное) Тогда
                // Если есть описание, то пустая номенклатура допустима, удаляем проверку для всего документа
                ПроверяемыеРеквизиты.Удалить(Индекс);
                Прервать;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    // Вызов оригинального метода конфигурации
    ПродолжитьВызов(Отказ, ПроверяемыеРеквизиты);
    
КонецПроцедуры

Однако просто разрешить запись документа недостаточно. Документ ЗаказПокупателя в «1С:Розница» делает движения по регистрам накопления (например, по регистру ЗаказыПокупателей), где измерение Номенклатура является ключевым и не может быть пустым для корректного учета остатков заказов.

Чтобы решить эту проблему на уровне базы данных, при проведении документа в регистры все равно должна записываться ссылка на некоторую служебную номенклатуру (например, ту же карточку-пустышку _Товар под заказ). Нам необходимо перехватить проведение документа и программно подставлять эту служебную номенклатуру в движения регистров, если в строке табличной части указано только текстовое описание.

Проанализируем пример кода для обработки проведения в расширении:


&Перед("ОбработкаПроведения")
Процедура Расш_ОбработкаПроведения(Отказ, РежимПроведения)
    
    // Перед проведением временно заполняем пустые строки номенклатуры служебным элементом
    СсылкаНаСлужебнуюНоменклатуру = Справочники.Номенклатура.НайтиПоРеквизиту("Код", "СЛУЖЕБНЫЙ_КОД");
    
    Если ЗначениеЗаполнено(СсылкаНаСлужебнуюНоменклатуру) Тогда
        Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
            Если Не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) И Не ПустаяСтрока(СтрокаТЧ.ОписаниеНоменклатурыПредопределенное) Тогда
                СтрокаТЧ.Номенклатура = СсылкаНаСлужебнуюНоменклатуру;
                // Дополнительно можно программно генерировать или подставлять характеристику
            КонецЕсли;
        КонецЦикла;
    Иначе
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не найдена служебная номенклатура для проведения неопознанных заказов!");
        Отказ = Истина;
    EndIf;
    
КонецПроцедуры

Использование расширения позволяет создать максимально удобный интерфейс для конечных пользователей: менеджер видит на экране привычное текстовое поле, а вся сложная логика подстановки служебных кодов для корректного проведения по регистрам скрыта под капотом системы.

Резюме и рекомендации по выбору решения

Мы рассмотрели различные подходы к автоматизации заказов без номенклатуры. Какой же метод выбрать для вашей компании?

← На главную