Как настроить прайс-лист и выгрузку на сайт для наборов в 1С:Управление торговлей 11, если их цена складывается из комплектующих?

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

Приветствуем вас, уважаемые коллеги! Сегодня мы детально разберем одну из самых распространенных и одновременно неочевидных проблем в программах 1С:Управление торговлей (редакция 11.4 и выше), 1С:Комплексная автоматизация (КА 2) и 1С:ERP Управление предприятием. Речь пойдет о ситуации, когда в информационной базе созданы наборы номенклатуры, настроен автоматический расчет цены набора на основе стоимости комплектующих, однако система категорически «не видит» эти наборы при формировании прайс-листа и не позволяет автоматически выгрузить их актуальную стоимость на интернет-сайт компании.

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

Выясняем техническую причину: почему стандартные механизмы 1С не выводят наборы в прайс-лист?

Для начала давайте разберем логику работы объектов с типом номенклатуры «Набор». В системе 1С:Управление торговлей наборы предназначены исключительно для быстрого заполнения табличной части документов продажи. В отличие от комплектов, наборы не хранятся на складе как отдельные физические позиции, на них не ведется обособленный складской учет. Учет запасов всегда ведется в разрезе комплектующих, входящих в этот набор.

При создании вида номенклатуры для наборов программа предлагает нам выбрать один из двух вариантов ценообразования:

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

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

Однако здесь мы упираемся в жесткую архитектурную особенность платформы 1С:

Когда для вида номенклатуры выбран вариант Цена складывается из цен комплектующих, в базе данных 1С в регистре сведений Цены номенклатуры физически не создается запись о цене самого набора. Записи создаются только для его комплектующих!

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

Что же делать в такой ситуации? Рассматривать переход на ручную установку цен для каждого набора (второй вариант) — это колоссальные трудозатраты при частом изменении цен поставщиков. Ниже мы детально разберем четыре практических и эффективных способа решения этой проблемы.

Способ 1. Использование сторонних расширений для динамического расчета прайс-листа

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

Давайте разберем по шагам, как функционирует данное техническое решение:

  1. Мы подключаем к базе данных внешнюю обработку или расширение (например, «Улучшенный прайс-лист»).
  2. При формировании прайс-листа алгоритм отчета сначала выбирает все доступные к продаже позиции номенклатуры, включая наборы.
  3. Для каждого набора с типом расчета «динамическая цена» программа проверяет настройки его состава.
  4. Алгоритм на лету обращается к регистру сведений Цены номенклатуры, находит цены всех комплектующих по выбранному виду цен, умножает их на количество в составе набора и выводит итоговую сумму в поле цены набора в отчете.

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


ВиртуальныйОстатокНабора = Минимум(
    ДоступныйОстатокДетали1 / КоличествоДетали1ВНаборе,
    ДоступныйОстатокДетали2 / КоличествоДетали2ВНаборе,
    ...
    ДоступныйОстатокДеталиN / КоличествоДеталиNВНаборе
);

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

Способ 2. Автоматический фоновый пересчет цен наборов при изменении цен комплектующих

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

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

  1. В настройках видов номенклатуры для наборов мы переключаем вариант ценообразования на «Цена задается за набор и распределяется по комплектующим». Это позволяет программе физически записывать цены наборов в регистр Цены номенклатуры.
  2. Для автоматизации процесса создается небольшое расширение конфигурации, которое запускает фоновое задание при проведении документов ценообразования.
  3. Как только в системе проводится новый документ Установка цен номенклатуры, в котором изменяется цена хотя бы на одну комплектующую деталь, фоновое задание мгновенно реагирует на это событие.
  4. Программа анализирует связи в базе данных, находит все наборы, в состав которых входит изменившаяся деталь, и автоматически рассчитывает их новую суммарную стоимость.
  5. Система автоматически формирует новый непроведенный или сразу проведенный документ Установка цен номенклатуры для этих наборов с актуальной датой.

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


Процедура АвтоматическиПересчитатьЦеныНаборов(МассивИзменившихсяКомплектующих, ВидЦены) Экспорт
    
    // Выбираем все наборы, содержащие изменившиеся комплектующие
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |	СоставНаборов.Ссылка КАК Набор
        |ИЗ
        |	Справочник.Номенклатура.Комплектующие КАК СоставНаборов
        |ГДЕ
        |	СоставНаборов.Номенклатура В(&МассивКомплектующих)";
    
    Запрос.УстановитьПараметр("МассивКомплектующих", МассивИзменившихсяКомплектующих);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если РезультатЗапроса.Пустой() Тогда
        Возврат;
    КонецЕсли;
    
    Выборка = РезультатЗапроса.Выбрать();
    
    // Создаем новый документ установки цен для наборов
    ДокУстановка = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    ДокУстановка.Дата = ТекущаяДата();
    ДокУстановка.Согласован = Истина;
    ДокУстановка.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Действует;
    
    // Заполняем табличную часть новыми рассчитанными ценами
    Пока Выборка.Следующий() Цикл
        НоваяЦенаНабора = 0;
        Для Каждого СтрокаСостава Из Выборка.Набор.Комплектующие Цикл
            ЦенаДетали = ЦенообразованиеКлиентСервер.ПолучитьЦенуНоменклатуры(СтрокаСостава.Номенклатура, ВидЦены);
            НоваяЦенаНабора = НоваяЦенаНабора + (ЦенаДетали * СтрокаСостава.Количество);
        КонецЦикла;
        
        НоваяСтрока = ДокУстановка.Товары.Добавить();
        НоваяСтрока.Номенклатура = Выборка.Набор;
        НоваяСтрока.ВидЦены = ВидЦены;
        НоваяСтрока.Цена = НоваяЦенаНабора;
    КонецЦикла;
    
    Попытка
        ДокУстановка.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка автоматической установки цен наборов", 
            УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

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

Способ 3. Расчет стоимости набора на стороне интернет-магазина (CMS)

Рассмотрим еще один вариант решения проблемы, который не требует программирования и внесения изменений в конфигурацию 1С. Этот способ подходит компаниям, которые имеют сильную команду веб-разработки и гибкую систему управления контентом сайта (например, 1С-Битрикс).

Проанализируем шаги настройки данного метода:

  1. Мы выгружаем из 1С на сайт каталог товаров в стандартном режиме. На сайт попадают и комплектующие с их индивидуальными ценами, и карточки наборов.
  2. Модуль обмена 1С передает на сайт не только сами товары, но и информацию о связях между ними (структуру наборов).
  3. На стороне CMS сайта мы настраиваем специальный обработчик (плагин). Например, для CMS Битрикс существуют готовые модули сборных комплектов и наборов.
  4. Логика работы сайта настраивается следующим образом: карточка набора на сайте выводится как единый товар, но его цена на витрине динамически рассчитывается движком сайта как сумма текущих цен всех входящих в него модулей.

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

Способ 4. Переход на использование типа номенклатуры «Комплект»

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

В терминологии 1С «Комплект» — это готовое изделие, которое мы предварительно собираем на складе с помощью документа Сборка товаров. При проведении этого документа комплектующие списываются со склада, а на остаток приходуется готовый комплект. У комплекта есть своя карточка, своя цена, он легко попадает во все отчеты и прайс-листы.

Однако для модульных систем (например, мебели) этот вариант имеет огромные минусы:

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

Резюме: какое решение выбрать именно вам?

Мы проанализировали ситуацию и все возможные пути решения проблемы с отображением цен наборов в 1С. Подведем краткие итоги:

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

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

← На главную