POWERED BY RBSOFT

Многопользовательская печать чеков в 1С: Комплексная автоматизация 1, 1С:Управление торговлей 10.3

> Сервер ККМ > СерверККМ V3 > Интеграция с 1С
Дата обновления: 11 июля 2024 г. Дата публикации: 27 мая 2024 г.

Сокращения

  • 1С:УТ10 — 1С:Управление торговлей 10.3

  • 1С:КА1 — 1С:Комплексная автоматизация 1.x

Проблема

Типовая конфигурация запоминает на каждое рабочее место список оборудования. Оборудование привязывается к сетевому имени компьютера.

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

И тут нас ожидают две проблемы:

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

Описание сбоя в работе алгоритма типовой 1С:УТ10, 1С:КА1

Допустим, у нас есть два пользователя 1С, которые хотят работать с одной сетевой кассой. В 1С настроено подключение к одной ККМ. Каждое рабочее место может работать с ККМ.

В процессе работы с кассой в 1С открывается документ «Кассовая смена», привязанная к рабочему месту пользователя по идентификатору рабочего места

Далее, второй пользовать пытается печатать.

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

Решение

Для организации многопользовательской печати следует использовать специальное программное обеспечение «РБ-Софт:Сервер ККМ».

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

Опишем решение для конфигурации «1С:Комплексная автоматизация 1.1».

Функция описания последней кассовой смены находится в общем модуле КассовыеСменыВызовСервера.

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

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

Любой из пользователей сможет открыть кассовую смену. Далее все пользователи смогут пробивать чеки на общую ККМ. В конце дня любой из пользователей сможет закрыть кассовую смену.