Как синхронизировать адресный склад из 1С:Управление торговлей с 1С:Розница для справочного отображения ячеек в РМК?

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

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

Перед нами стоит задача: как использовать удобство РМК 1С:Розницы, но при этом обеспечить кассирам или продавцам справочную информацию об адресах ячеек, где находится товар, который был принят и размещен на адресном складе в 1С:УТ? Мы не нуждаемся в полноценном учете по ячейкам в Рознице, достаточно просто видеть адрес ячейки для быстрого поиска. Обратный механизм (указание ячеек при продаже в Рознице) также не требуется.

Рассмотрим несколько подходов к решению этой проблемы, основанных на использовании дополнительных реквизитов и настроек синхронизации, а также детально разберем каждый шаг.

Решение 1: Использование дополнительных реквизитов для хранения и отображения адреса ячейки

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

Шаг 1: Настройка функциональности адресного склада в 1С:Управление торговлей

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

  1. Переходим в раздел НСИ и администрирование -> Настройка разделов -> Склад и доставка.
  2. Устанавливаем флажок Использовать ордерные склады.
  3. Устанавливаем флажок Использовать адресное хранение товаров.
  4. Настраиваем топологию склада: создаем помещения, области хранения, рабочие участки, стеллажи, ярусы и позиции. Это обеспечит уникальные и логичные адреса ячеек (например, СТ-П-П, где СТ – стеллаж, П – полка, П – позиция на полке).
  5. При приёмке товаров используем документы Приходный ордер на товары и обработку Размещение товаров для раскладки товаров по ячейкам. Важно: штатный механизм размещения в УТ удобен тем, что позволяет размещать товар только в реально существующие ячейки и контролировать отсутствие дублирования размещения одного и того же товара в нескольких ячейках. Это обеспечивает высокую точность данных об адресах.

Шаг 2: Создание дополнительного реквизита "Адрес ячейки" в 1С:Управление торговлей

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

  1. Переходим в раздел НСИ и администрирование -> Общие настройки.
  2. Разворачиваем пункт Дополнительные реквизиты и сведения и убеждаемся, что флажок Дополнительные реквизиты и сведения установлен.
  3. Переходим по ссылке Дополнительные реквизиты.
  4. Выбираем объект Номенклатура и создаем новый дополнительный реквизит:
    • Наименование: Адрес ячейки (или Адрес склада)
    • Тип значения: Строка (с длиной, достаточной для хранения самого длинного адреса, например, 50 символов)
    • Заполнение: Можем выбрать "Заполняется вручную" или "Вычисляемый" (если планируем автоматизировать заполнение).

Шаг 3: Автоматическое или ручное заполнение дополнительного реквизита в 1С:УТ

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

  1. Автоматическое заполнение (предпочтительный вариант): Вы можете разработать фоновое задание или обработку, которая будет периодически (например, раз в час или раз в день) обходить регистр сведений ТоварыВЯчейках или другой регистр, используемый для адресного хранения, и для каждой номенклатуры определять основной адрес ячейки. Затем этот адрес будет записываться в созданный дополнительный реквизит номенклатуры.
    
    // Пример фонового задания или обработки
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                   |    ТоварыВЯчейкахОстатки.Номенклатура,
                   |    ТоварыВЯчейкахОстатки.Ячейка,
                   |    ТоварыВЯчейкахОстатки.ВНаличииОстаток
                   |ИЗ
                   |    РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
                   |ГДЕ
                   |    ТоварыВЯчейкахОстатки.Номенклатура = &Номенклатура
                   |УПОРЯДОЧИТЬ ПО
                   |    ТоварыВЯчейкахОстатки.ВНаличииОстаток УБЫВ
                   |ИТОГИ ПО
                   |    Номенклатура";
    
    // Обходим номенклатуру, для которой нужно обновить адрес
    ВыборкаНоменклатуры = Справочники.Номенклатура.Выбрать();
    Пока ВыборкаНоменклатуры.Следующий() Цикл
        Запрос.УстановитьПараметр("Номенклатура", ВыборкаНоменклатуры.Ссылка);
        РезультатЗапроса = Запрос.Выполнить();
        ВыборкаЯчеек = РезультатЗапроса.Выбрать();
    
        Если ВыборкаЯчеек.Следующий() Тогда
            // Здесь мы получаем ячейку с наибольшим остатком,
            // либо можно использовать другую логику для определения "основной" ячейки.
            ОсновнаяЯчейка = ВыборкаЯчеек.Ячейка;
            АдресЯчейкиСтрокой = ОсновнаяЯчейка.Наименование; // Получаем строковое представление адреса
    
            // Записываем адрес в дополнительный реквизит номенклатуры
            // Для этого нужно найти нужный дополнительный реквизит.
            // Примерный код, требующий доработки:
            // УправлениеСвойствами.ПрисвоитьЗначениеСвойстваОбъекта(ВыборкаНоменклатуры.Ссылка, ИмяДопРеквизита, АдресЯчейкиСтрокой);
            // Или напрямую через объект "ДополнительныеРеквизитыИСведения"
            МенеджерДопСведений = ДополнительныеСведения.ПолучитьМенеджерСвойств();
            КоллекцияЗначений = МенеджерДопСведений.Получить(ВыборкаНоменклатуры.Ссылка);
            Если КоллекцияЗначений <> Неопределено Тогда
                Для Каждого ЗначениеИзКоллекции Из КоллекцияЗначений Цикл
                    Если ЗначениеИзКоллекции.Свойство.Наименование = "Адрес ячейки" Тогда
                        ЗначениеИзКоллекции.Значение = АдресЯчейкиСтрокой;
                        // КоллекцияЗначений.Записать() - это метод коллекции для записи
                        // или обновляем объект номенклатуры и записываем его.
                        // Более надежно через универсальные механизмы работы с доп. реквизитами.
                        УправлениеСвойствами.УстановитьЗначенияСвойствОбъектов(ВыборкаНоменклатуры.Ссылка, ЗначениеИзКоллекции.Свойство, АдресЯчейкиСтрокой);
                        Прервать;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
  2. Ручное заполнение: Вы можете вручную редактировать карточки номенклатуры и заполнять этот реквизит. Однако этот метод очень трудоемкий и чреват ошибками.

Шаг 4: Создание аналогичного дополнительного реквизита в 1С:Розница

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

  1. Переходим в раздел Администрирование -> Общие настройки.
  2. Убеждаемся, что флажок Дополнительные реквизиты и сведения установлен.
  3. Переходим по ссылке Дополнительные реквизиты.
  4. Выбираем объект Номенклатура и создаем новый дополнительный реквизит с тем же Наименованием ("Адрес ячейки") и Типом значения ("Строка").

Шаг 5: Настройка синхронизации между 1С:УТ и 1С:Розница

Теперь нам нужно настроить обмен данными так, чтобы значение дополнительного реквизита из УТ передавалось в Розницу.

  1. Переходим в НСИ и администрирование -> Интеграция с 1С:Предприятием -> Обмен данными в УТ и Администрирование -> Синхронизация данных в Рознице.
  2. Создаем или настраиваем существующую настройку синхронизации.
  3. В правилах конвертации объектов нам нужно будет найти правила для объекта Номенклатура.
  4. Картирование дополнительных реквизитов: Если используется стандартный механизм синхронизации дополнительных реквизитов, то при условии совпадения имен реквизитов ("Адрес ячейки") и типов значений, данные должны передаваться автоматически. Если нет, потребуется ручная настройка правила конвертации для объекта Номенклатура, чтобы явно указать соответствие нашего дополнительного реквизита в УТ и Рознице. Это часто делается через настройки правил обмена КД2/КД3.
  5. Настройте расписание обмена так, чтобы он выполнялся регулярно (например, каждый час), чтобы информация об адресах ячеек всегда была актуальной в Рознице.
  6. Важно: При настройке синхронизации убедитесь, что в 1С:Розница отключено использование адресного хранения, помещений и ячеек (Администрирование -> Настройка разделов -> Склад -> Учет товаров). Это позволит избежать конфликтов и избыточной функциональности, которая не требуется для Розницы.

Шаг 6: Настройка РМК в 1С:Розница для отображения адреса ячейки

После того как информация об адресе ячейки попадает в дополнительный реквизит номенклатуры в Рознице, нам нужно вывести её в РМК.

  1. Переходим в раздел Администрирование -> Настройки РМК.
  2. Выбираем используемое РМК и открываем его настройки.
  3. Находим раздел, отвечающий за настройку табличной части чека ККМ (где отображаются товары).
  4. Добавляем новую колонку в табличную часть и связываем её с нашим дополнительным реквизитом Номенклатуры.ДополнительныеРеквизиты.АдресЯчейки. Точный путь может зависеть от версии Розницы и механизма работы с доп. реквизитами в РМК. Возможно, потребуется небольшая доработка конфигурации РМК или использование расширений для вывода произвольных данных.
    • В современных версиях 1С:Розницы (например, 2.3 и выше) или 1С:УНФ, которая также имеет РМК, часто предусмотрена возможность настройки отображения дополнительных свойств номенклатуры в табличной части РМК или в отдельном информационном окне. Мы можем добавить новый элемент оформления и указать путь к данным.
    • Если типовых механизмов настройки РМК недостаточно, мы можем использовать расширения конфигурации. Расширения позволяют дорабатывать типовой функционал без снятия конфигурации с поддержки. Через расширение можно добавить новую колонку в табличную часть Товары формы РМК и заполнять её значением из дополнительного реквизита номенклатуры при добавлении товара в чек.
  5. После настройки, при добавлении товара в чек, кассир будет видеть в РМК не только наименование и цену, но и адрес ячейки, где данный товар можно найти.

// Пример кода (фрагмент) для расширения, который может быть использован для вывода доп. реквизита в табличную часть РМК
// Предполагается, что расширение добавляет колонку "АдресЯчейки" в табличную часть Товары формы РМК
// и при добавлении строки в табличную часть заполняет её.

// В модуле формы РМК (например, в обработчике ПриИзмененииСтроки или ПриДобавленииСтроки)
// Или в отдельном модуле расширения, подключенном к форме.

&НаСервере
Процедура ПриДобавленииСтрокиТаблицыТоваровНаСервере(СтрокаТовара)
    Если СтрокаТовара.Номенклатура.Пустая() Тогда
        Возврат;
    КонецЕсли;

    // Получаем значение дополнительного реквизита "Адрес ячейки" для текущей номенклатуры
    // Предполагаем, что имя реквизита "АдресЯчейки" совпадает с тем, что мы создали.
    ЗначениеАдреса = ДополнительныеСведения.ПолучитьЗначениеСвойства(СтрокаТовара.Номенклатура, "Адрес ячейки");

    Если ЗначениеАдреса <> Неопределено Тогда
        СтрокаТовара.АдресЯчейки = ЗначениеАдреса;
    Иначе
        СтрокаТовара.АдресЯчейки = "";
    КонецЕсли;
КонецПроцедуры

// В событии ПриИзменении поля Номенклатура в табличной части РМК:
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    Если ТекущаяСтрока <> Неопределено Тогда
        ПриДобавленииСтрокиТаблицыТоваровНаСервере(ТекущаяСтрока);
    КонецЕсли;
КонецПроцедуры

Для корректного вывода колонки АдресЯчейки в табличной части РМК, необходимо сначала добавить эту колонку программно или через настройки формы (если доступно) в конфигурации Розницы или в расширении. Это включает создание колонки в структуре табличной части и привязку её к данным.

Решение 2: Использование поля "Комментарий" или "Описание" номенклатуры

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

Шаг 1: Заполнение поля "Комментарий" в 1С:Управление торговлей

Вместо создания дополнительного реквизита, мы можем использовать стандартное поле Комментарий или Описание в карточке номенклатуры.

  1. При размещении товаров по ячейкам в 1С:УТ, после определения адреса ячейки (например, СТ-П-П), записываем его в поле Комментарий или Описание номенклатуры.
  2. Это также можно автоматизировать с помощью фонового задания, аналогично Шагу 3 из Решения 1, но вместо дополнительного реквизита записывать данные в стандартное поле Комментарий номенклатуры.
    
    // Пример кода для заполнения Комментария
    // ... (получение ОсновнаяЯчейка и АдресЯчейкиСтрокой как в предыдущем примере) ...
    
    НоменклатураОбъект = ВыборкаНоменклатуры.Ссылка.ПолучитьОбъект();
    Если НоменклатураОбъект <> Неопределено Тогда
        НоменклатураОбъект.Комментарий = "Адрес: " + АдресЯчейкиСтрокой;
        Попытка
            НоменклатураОбъект.Записать();
        Исключение
            Сообщить("Ошибка записи комментария для номенклатуры " + НоменклатураОбъект.Наименование + ": " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
    
  3. Недостатки: поле Комментарий является текстовым, не имеет строгой валидации и контроля ввода. Это может привести к ошибкам или несоответствиям в форматах адресов. Кроме того, Комментарий может использоваться для других целей, что приведет к смешиванию информации.

Шаг 2: Настройка синхронизации и отображения в РМК 1С:Розница

Поле Комментарий номенклатуры обычно передается при стандартной синхронизации между УТ и Розницей.

  1. После синхронизации, поле Комментарий будет доступно в карточке номенклатуры в Рознице.
  2. Настраиваем РМК (аналогично Шагу 6 из Решения 1), чтобы отображать колонку с полем Номенклатура.Комментарий в табличной части чека ККМ. Этот метод также может потребовать доработки через расширение, если стандартные настройки РМК не позволяют вывести это поле напрямую как отдельную колонку.

Общие преимущества и рекомендации для обоих решений

  1. Сохранение гибкости РМК: Оба подхода позволяют использовать удобное и гибкое РМК 1С:Розницы, не перегружая его сложным функционалом адресного хранения, который для розничной кассы не нужен.
  2. Справочная информация: Кассиры и продавцы получают необходимую справочную информацию для быстрого поиска товара на складе, что значительно ускоряет обслуживание клиентов.
  3. Актуальность данных: Регулярные фоновые задания и синхронизация обеспечивают актуальность данных об адресах ячеек в Рознице.
  4. Точность адресов: Использование штатного механизма размещения в УТ гарантирует, что адреса ячеек являются корректными и существуют на складе, исключая ошибки, связанные с ручным вводом.
  5. Отключение адресного хранения в Рознице: Критически важно отключить все механизмы, связанные с адресным хранением и ячейками в 1С:Розница. Это предотвратит конфликты при синхронизации и обеспечит стабильную работу системы.
  6. Расширения конфигурации: При реализации таких доработок всегда предпочтительно использовать механизм расширений конфигурации. Это позволяет сохранять типовую конфигурацию на поддержке и упрощает обновления. Расширение может включать в себя:
    • Добавление новых реквизитов (если выбран подход с доп. реквизитами)
    • Изменение форм РМК для вывода новой колонки
    • Модификация логики при добавлении товара в чек для заполнения этой колонки.
  7. Выбор основного адреса: Если товар может храниться в нескольких ячейках, вам потребуется определить логику выбора "основного" адреса для отображения в РМК. Это может быть ячейка с наибольшим остатком, ячейка, где товар был размещен последним, или любая другая, удобная для вашего бизнес-процесса.

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

← На главную