Как доработать режим продажи (фискальный и нефискальный) в 1С:Аптека и 1С:Розница

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

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

Анализ задачи и выбор стратегии реализации

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

Существует два основных подхода к решению этой задачи:

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

Способ 1: Программная печать нефискальных строк

Разберем, как работает печать на ККТ через БПО (Библиотеку подключаемого оборудования). Когда мы пробиваем обычный чек, 1С вызывает метод ФискализироватьЧек. Чтобы напечатать нефискальный документ на Штрих-М, нам нужно использовать методы печати текста.

Посмотрим на логику работы с драйвером. Для формирования нефискального чека на фискальном регистраторе последовательность команд должна быть следующей:

  1. Открыть нефискальный документ командой OpenNonFiscalDocument (или ОткрытьНефискальныйДокумент).
  2. Циклически выводить строки текста (наименование товара, количество, цена) через метод PrintString (или ПечатьТекста).
  3. Закрыть нефискальный документ и, при необходимости, вызвать команду отрезки ленты.

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


// Пример упрощенной логики печати нефискального текста
ОбъектДрайвера.OpenNonFiscalDocument();
Для Каждого СтрокаТЧ Из СпТовары Цикл
    ТекстСтроки = СтрокаТЧ.Номенклатура.Наименование + " " + СтрокаТЧ.Цена;
    ОбъектДрайвера.StringForPrinting = ТекстСтроки;
    ОбъектДрайвера.PrintString();
КонецЦикла;
ОбъектДрайвера.CloseNonFiscalDocument();

Важный момент: Не все современные онлайн-кассы (особенно с учетом законодательства Казахстана KZ) позволяют свободно печатать нефискальные документы без открытия смены или вне рамок фискального режима. Однако печать произвольного текста (слип-чеков) обычно поддерживается всеми моделями Штрих-М.

Способ 2: Настройка распределения продаж (Рекомендуемый)

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

1. Создание касс: В справочнике Кассы ККМ создаем две кассы. Первая — основная, с типом "Фискальный регистратор". Вторая — "управленческая", которую можно настроить как "Принтер чеков" (эмулятор) или привязать к тому же устройству, но с использованием другого драйвера (текстовая печать).

2. Доработка интерфейса РМК: В форме оплаты добавляем переключатель или две разные кнопки оплаты: "Оплата (ФИСК)" и "Оплата (НЕФИСК)".

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

Формирование отчетности и Z-отчетов

Выясним причину беспокойства автора темы по поводу Z-отчетов. Физический Z-отчет, который печатает сама касса при закрытии смены, формируется на основе данных из фискальной памяти (или ФН). Если мы печатали нефискальные чеки методом PrintString, суммы по ним не попадут в память ККТ и, следовательно, в железный Z-отчет. Это именно то, что требовалось заказчику для "регламентированного" учета.

В программе 1С ситуация иная. Документ ОтчетОРозничныхПродажах (ООРП) собирает данные из всех проведенных чеков. Чтобы разделить учет:

Выборочный обмен с 1С:Бухгалтерия 3.0

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

  1. Использование признака организации: Самый простой путь — вести фискальные продажи по одной организации, а нефискальные — по другой. В настройках синхронизации данных 1С можно указать фильтр по конкретной организации.
  2. Дополнительные реквизиты: Если организация одна, добавим в документы (Поступление товаров, ООРП) дополнительный реквизит (флаг) ПередаватьВБухгалтерию (тип Булево).
  3. Настройка правил обмена: В мониторе синхронизации данных перейдем в "Состав отправляемых данных". Мы можем программно или вручную ограничить регистрацию объектов. В модуле синхронизации (если используется EnterpriseData) можно прописать условие в расширении:

// Пример условия в правилах регистрации объектов
Если НЕ ПолучитьДополнительныйРеквизит(Объект, "ПередаватьВБухгалтерию") Тогда
    Отказ = Истина;
КонецЕсли;

Особенности для Казахстана (Штрих-М-ФР-Ф-KZ)

Проанализируем специфику оборудования, упомянутого в теме. Модели с индексом KZ работают с учетом местных налоговых требований. При использовании драйвера 4.9 следует помнить:

Итоговые рекомендации

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

Для программиста, который "не шарит в оборудовании", этот путь наиболее безопасен, так как он опирается на стандартные объекты конфигурации 1С, а не на прямое управление портами и низкоуровневыми командами драйвера Штрих-М.

← На главную