Добрый день, Коллеги!
Используем конфиг Бухгалтерия предприятия 3.0, последний релиз.

Стоит задача автоматизировать печать чеков на онлайн ККМ.
Аппарат Атол FPrint-22ПТК.

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

Коллеги, вопрос в том, как программно заставить 1С распечатать чек, если известен документ "Розничная продажа (чек)", из которого его нужно распечатать?
---
По всей видимости беда в том, что драйвера ККТ стоят на компьютере кассира, а не на сервере, где запускается обработка.
А нет ли возможности инициировать печать чека на сервере, чтобы на компьютере кассира ККМ в итоге напечатал чек?
---
если вы можете программно получить чек, в чем проблема вызвать функцию фискализации чека? Можно поглядеть как она вызывается через форму чека и запустить её после сканирования
---
сейчас нет возможности посмотреть, но могу сказать что принцип действия будет такой :
Сканирование
Получение ссылки на чек
Подключение оборудования (взять из формы чека)
Получить параметры фискализации чека (функция в модуле объекта, почти так и называется)
Запустить функцию фискализоватьчек (в модуле объекта)
Отключить оборудование (взять из формы чека)
---
Во вложении скриншот модуля документа РозничнаяПродажа, из которого печатается чек
В модуле нет функций со словом Фискализация и ФискализироватьЧек.
Где же еще можно найти эти функции?
---
Проблема в том, что при нажатии кнопки "Выполнить операцию" на форме оплаты, после которой вручную запускается печать чека, задано выполнение непонятной команды, в которой нет следов обращения к функциям ККМ:

```1c
    &НаКлиенте
    Процедура ВыполнитьОперацию(Команда)
    Если НЕ ПроверитьЗаполнение() Тогда
    Возврат;
    КонецЕсли;

    СтруктураРезультата = СтруктураРезультата();

    Закрыть(СтруктураРезультата);
    КонецПроцедуры
```
---
это функция возврата выбора оплаты, смотрите в форме формадокументаобщая процедуру принять оплату завершение, она туда передаёт данные о выбранных оплатах
---
В функции ПринятьОплату заполняются параметры формы, а затем вызывается форма ФормаОплаты, о которой я уже писал.
Поэтому всё ещё не понятно, как программно запустить печать чека.
---
Нет не ПринятьОплату, а ПринятьОплатуЗавершение
---
Удалось разработать модуль, в котором выполняются функции подключения оборудования и печати чека.
Но! В результате выполнения выдаётся сообщение:

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

Хотя вручную чеки печатаются. В чём может быть проблема?
---
Новая проблема.
В модулях конфигурации при печати чека вводится переменная ОбъектДрайвера.
Свойства этой переменной переданы правильно, вопросов нет.
Но в модулях используются методы, например
Ответ = ОбъектДрайвера.ПолучитьПараметрыККТ(ПараметрыПодключения.ИДУстройства, ПараметрыККТ);
В этом месте вылетает ошибка, что метод не определен.
Продолжаю разбираться, почему ОбъектДрайвера без методов
---
я немного уточню, у вас фпринт подключен в подключаемом оборудовании в бухгалтерии? и у вас онлайн-касса?
---
Продолжаю разбираться, почему ОбъектДрайвера без методов

Потому что ОбъектДрайвера не инициализирован.
---
У нас онлайн касса.
ККМ есть в справочнике "Подключаемое оборудование".
При создании чека ссылка на оборудование передаётся в документ, в поле ИдентификаторУстройства.
ККМ уже полгода нормально функционирует в "ручном" режиме.
---
Оборудование описано в справочнике и имеет свой идентификатор.
В интерактивном интерфейсе оно привязано к рабочему месту конкретного пользователя.

Распечатка чека программно подразумевает, что:

1. Фискальный регистратор определен и подключен.
2. Пользователь с нужными правами определен и рабочее место имеет тот же фискальник.
3. Объект печати определен.
---
Вообще логика печати чека в бухгалтерии следующая:

1. Чек печатается на основании документа (Приходный кассовый ордер - при приеме выручки, и расходный кассовый ордер - при возвратах товара и выдаче ДС покупателю)
2. В документах есть специальный реквизит "Номер чека ККМ", который заполняется только если чек пробит на ККТ из программы корректно.

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

Вариант "Вот массив с данными чека, распечатай его на ККТ" не прокатит.
---
Логика печати чеков вручную у нас никак не привязана к приходным кассовым ордерам.
Приходные кассовые ордера не создаются в 1С в принципе.
Создаются расходные документы по 41 счету и вместе с ними создаются документы Розничная реализация (чек).
Из этого документа кассир вручную запускает печать чека на ККМ.

Конфигурация БП у нас типовая, но в ней происходит какая-то непонятная мне лажа.
В общем модуле ПодключаемоеОборудованиеУниверсальныйДрайверКлиент есть вызовы:
Ответ = ОбъектДрайвера.ПолучитьПараметрыККТ(ПараметрыПодключения.ИДУстройства, ПараметрыККТ);
НО!
Глобальный поиск по конфигурации находит функцию ПолучитьПараметрыККТ только в том же самом модуле, но с другими параметрами:
Функция ПолучитьПараметрыККТ(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры)

В конфигурации нет больше такой функции и совсем не понятно, к чему обращается модуль при выполнении команды ОбъектДрайвера.ПолучитьПараметрыККТ(...)
Поиск ссылки (F12) ссылается на свою же функцию общего модуля ПолучитьПараметрыККТ, которая с другими параметрами...

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

Это вызов функции объекта ОбъектДрайвера.

У вас установлены драйвера ККТ от АТОЛ. В 1С есть обработка обслуживания ТО для драйвера АТОЛ.

ОбъектДрайвера вызывает методы именно драйвера, а не процедуры и функции текущего модуля.
---
В дополнение ко всему мне написала кассир:
"Сегодня не получается выбить нормально чек, т.к. ККМ выдает ошибку.... но если я выключу-включу, чек выбивается..."
Судя по всему связь с ККМ пропадает после выполнения моего модуля...
---
похоже на то, что при попытке печати, идет обращение к ККТ, которая не была освобождена до этого.
Идея следующая. Получаем драйвер, подключаем устройство, печатаем, освобождаем устройство.
Значит где-то не было освобождение устройства, при новой попытке подключить устройство.
---
В моём модуле при попытке освобождения устройства происходит ошибка из-за не возможности выполнить ОбъектДрайвера.ПолучитьПараметрыККТ
Получается, каждый запуск моего модуля блокирует ККТ для дальнейшей работы.
Это подверждается еще и тем, что два раза подряд модуль не запускается. Второй раз при попытке получить оборудование возвращается пустой список.
---
обычно код с получением параметров пускают через модуль с повторно используемых возвращаемых значений, а не напрямую каждый раз.
---
Несколько дней безуспешных попыток меня утомили.
Может быть, тут есть специалисты, которые легко разбираются с печатью фискальных чеков.
Цепляю к сообщению модуль, который получился у меня за несколько дней работы.
Задача модуля - запустить печать чека к документу Чек на ККМ. Номер документа пока фиксированно задается в модуле. Ссылка на оборудование ККМ есть в документе Чек.
Если кто-то сможет настроить печать чека на ККМ в этом модуле без блокировки ККМ, отдам ему с благодарностью 5 СтартМани.
У меня есть СтартМани на другой учетной записи, которая временно заблокирована для написания новых сообщений, поверьте.
---
П.С. Модуль для толстого клиента и обычного приложения, без управляемых форм. Не люблю эти нововведения.
Олдскульные "семерочники" меня поймут :)
---
По всей видимости беда в том, что драйвера ККТ стоят на компьютере кассира, а не на сервере, где запускается обработка.
А нет ли возможности инициировать печать чека на сервере, чтобы на компьютере кассира ККМ в итоге напечатал чек?
---
Для печати чека должны быть права кассира. Для настройки права администратора ККМ. Полных и прав администрирования недостаточно. Беда многих конфигураций в том что многие операции разрешаются только если РольДоступна("Роль") =Истина .
---
В БП 3.0 чеки сейчас печатают чуть ли ни всегда, и отовсюду.
Даже из корректировки долга.
А тем более реализаций, актов и отовсюду :)