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

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

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

Наш клиент задал вопрос о возможности продажи комплектами в РМК на примере стакана 0,5 и напитка 0,5. Он хотел бы, чтобы при выборе тары автоматически добавлялось нужное количество напитка. Кроме того, возникли вопросы по отладке формы РМК, где точки останова не срабатывали.

Продажа напитков с автоматическим учетом тары в РМК

Прежде чем погружаться в технические детали, давайте проанализируем ситуацию и возможные сценарии. Основная задача — обеспечить удобную и корректную продажу напитков на розлив вместе с тарой, при этом динамически регулируя количество напитка в зависимости от объема выбранной тары. Мы рассмотрим три основных подхода:

  1. Использование стандартного функционала "Наборы" (Комплекты).
  2. Доработка РМК для динамического пересчета количества напитка.
  3. Продажа "комплексной" номенклатуры с последующей разборкой в бэк-офисе.

Использование стандартного функционала "Наборы" (Комплекты)

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

Как настроить стандартный комплект:

  1. Создаем новую карточку номенклатуры, которая будет представлять наш комплект, например, "Стакан напитка 0,5".
  2. В этой карточке номенклатуры переходим по кнопке "Перейти" и выбираем пункт "Комплектующие".
  3. Нажимаем кнопку "Создать" для добавления компонентов.
  4. Добавляем две позиции комплектующих: "Стакан 0,5" и "Напиток 0,5". Указываем необходимое количество для каждого компонента (например, 1 штука стакана и 0,5 литра напитка).
  5. Заполняем все необходимые реквизиты для комплектующих и самого комплекта.
  6. После этого устанавливаем цены номенклатуры для нового комплекта.
  7. При необходимости, если вы заранее собираете такие комплекты на складе, можем использовать документ "Сборка товаров", который находится в меню "Склад".

Ограничения стандартного подхода:

Хотя этот метод прост в реализации, он имеет существенные ограничения для нашей задачи:

Таким образом, для сценария с динамическим изменением количества напитка в зависимости от объема тары, стандартный функционал "Наборы" может оказаться неудобным и неэффективным. Автор вопроса подтвердил эти опасения, указав, что "придётся делать много комплектов, и приходовать комплекты", что не соответствует желаемой гибкости.

Доработка РМК для динамического пересчета количества напитка

Это решение является наиболее гибким и позволяет реализовать желаемое поведение: автоматическое добавление или корректировку количества напитка при выборе тары. Мы будем дописывать код в обработку РМК.

Основная идея реализации:

Мы добавляем к номенклатуре "Тара" специальный реквизит, например, Емкость (или ОбъемТары), где будем указывать объем данной тары в литрах. Затем, при добавлении тары в табличную часть документа или при изменении ее количества, система будет проверять, является ли предыдущая строка напитком, и корректировать его количество в соответствии с емкостью выбранной тары.

Разберем по шагам, как это можно реализовать:

  1. Добавление реквизита "Емкость" к номенклатуре "Тара":

    Нам потребуется внести изменения в конфигурацию. Откроем конфигуратор, найдем справочник Номенклатура. Добавим новый реквизит, например, с именем Емкость и типом Число (с точностью до двух-трех знаков после запятой, чтобы учитывать объемы типа 0,5, 0,33 и т.д.). Для удобства использования в РМК, этот реквизит следует сделать доступным на форме элемента номенклатуры для групп "Тара" или "Упаковка", чтобы пользователи могли его заполнять.

    Пример: Для стакана 0,5 литра мы укажем Емкость = 0,5, для бутылки 1 литр — Емкость = 1.

  2. Определение точек вмешательства в РМК:

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

    Мы будем работать с событиями табличной части документа чека ККМ, которая отображается в РМК. Наиболее подходящие процедуры:

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

    Конкретные названия процедур зависят от версии Розницы и могут быть найдены в модуле формы РМК. Часто используются методы типа ПриИзмененииСтрокиТаблицыТовары или обработчики событий поля количества.

  3. Логика пересчета:

    В выбранных процедурах мы реализуем следующий алгоритм:

    
    // Предполагаем, что у нас есть доступ к табличной части товаров РМК (например, "Объект.Товары")
    // и текущей измененной/добавленной строке (например, "ТекущаяСтрока")
    
    Если ТекущаяСтрока.Номенклатура.ЭтоТара Тогда // Необходимо определить признак тары (например, через группу или доп. реквизит)
        // Ищем предыдущую строку в табличной части
        ИндексТекущейСтроки = Объект.Товары.Индекс(ТекущаяСтрока);
        Если ИндексТекущейСтроки > 0 Тогда
            ПредыдущаяСтрока = Объект.Товары[ИндексТекущейСтроки - 1];
            Если ПредыдущаяСтрока.Номенклатура.ЭтоНапитокРазливной Тогда // Необходимо определить признак разливного напитка
                // Получаем емкость из номенклатуры тары
                ЕмкостьТары = ТекущаяСтрока.Номенклатура.Емкость;
                // Корректируем количество напитка в предыдущей строке
                // Умножаем емкость на количество выбранных тар
                ПредыдущаяСтрока.Количество = ЕмкостьТары * ТекущаяСтрока.Количество;
                // Оповещаем пользователя о пересчете, если необходимо
                // и обновляем общую сумму чека
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    

    Мы должны определить признак того, что номенклатура является тарой (например, по группе номенклатуры, или по дополнительному реквизиту ВидНоменклатуры). Аналогично, нужно определить, что предыдущая позиция — это разливной напиток.

  4. Обработка изменения количества тары:

    Мы также должны предусмотреть ситуацию, когда кассир меняет количество тары. В этом случае логика пересчета количества напитка должна сработать повторно. Это реализуется в обработчике события ПриИзменении поля "Количество" для строки табличной части товаров.

  5. Обучение продавцов:

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

Важные моменты при доработке:

Продажа "комплексной" номенклатуры с последующей разборкой в бэк-офисе

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

Суть подхода:

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

Как это работает:

  1. Создание "комплексной" номенклатуры: В справочнике Номенклатура создаем позиции типа "Пиво светлое 0.5л", "Пиво светлое 1л", "Квас 0.5л" и так далее. Это будут обычные номенклатурные позиции, которые продавец выбирает в РМК.
  2. Продажа в РМК: Продавец просто пробивает "Пиво светлое 1л". В табличной части чека ККМ будет отображаться одна строка: "Пиво светлое 1л" в количестве 1 штуки.
  3. Постобработка в бэк-офисе: После закрытия смены и загрузки данных из 1С:Розницы в центральную учетную систему (например, 1С:Управление торговлей или 1С:ERP), мы программно "разузловываем" эту позицию. Это можно сделать двумя способами:
    • С использованием документа "Сборка/Разборка товаров": В центральной базе создается документ "Разборка товаров", который берет "Пиво светлое 1л" и превращает его в "Пиво (разливное)" в количестве 1 литра и "Бутылка 1л" в количестве 1 штуки.
    • С использованием собственных обработок: Написание скриптов или регламентных заданий, которые анализируют проданные "комплексные" номенклатуры и корректируют остатки по компонентам (пиво и тара) в учетной системе.

Преимущества и недостатки:

Каждый из этих вариантов имеет свои плюсы и минусы, и выбор конкретного решения зависит от требований клиента, сложности бизнес-процессов и готовности к программным доработкам. Самым гибким для динамического учета является доработка РМК.

Отладка РМК: Решение проблем с несрабатывающими точками останова

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

Настройка отладки в клиент-серверном режиме

Если ваша база данных работает в клиент-серверном варианте (например, на SQL Server), то для отладки серверного кода, который может выполняться при работе РМК, необходимо настроить отладку на сервере 1С:Предприятия. Без этой настройки точки останова в серверном коде срабатывать не будут, даже если отладчик подключен к клиентскому приложению.

  1. Запуск сервера с ключом -debug:

    Один из способов – это запустить службу сервера 1С:Предприятия с параметром -debug. Это позволяет серверу принимать соединения от отладчика. После запуска серверного процесса с этим ключом, перезапустите службу 1С:Предприятия.

  2. Включение режима отладки через консоль кластера серверов 1С:

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

  3. Подключение к серверному процессу:

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

Выбор места для точек останова и особенности событий форм

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

  1. События формы и фокус:

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

  2. Модули объекта и общие модули:

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

  3. Асинхронные вызовы и фоновые задания:

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

Очистка кэша 1С:Предприятия

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

Как очистить кэш:

  1. Ручная очистка: Закройте все сеансы 1С. В проводнике перейдите в каталоги %LOCALAPPDATA%\1C\1CE\ и %APPDATA%\1C\1CE\. Удалите все подкаталоги с длинными буквенно-цифровыми именами (GUID).
  2. Запуск с ключом /ClearCache: При запуске 1С:Предприятия из командной строки или через ярлык можно добавить параметр /ClearCache. Например: "C:\Program Files\1cv8\8.3.X.XXX\bin\1cv8.exe" ENTERPRISE /F"C:\Path\To\Your\Base" /ClearCache.

Обновление конфигурации базы данных

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

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

Проверка режима совместимости

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

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

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

← На главную