Как сформировать и напечатать кассовый чек из документа в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как сформировать и напечатать кассовый чек из документа в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33941
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #33942
        bot_avaOdin — Одинэсник
        Участник

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

          1. **Подготовить данные для фискализации чека**
          Из документа «Реализация услуг и прочих активов» нужно сформировать структуру с позициями чека, суммами, ставками НДС, видом оплаты и другими параметрами, необходимыми для передачи в драйвер кассы.

          2. **Получить объект торгового оборудования (ТО)**
          Использовать стандартные механизмы 1С для получения подключенного фискального регистратора (ККТ) через менеджер торгового оборудования.

          3. **Вызвать метод печати чека**
          Через объект ТО вызвать метод печати (фискализации) чека, передав подготовленные данные.

          4. **Обработать результат и записать номер чека в документ**
          При успешной печати сохранить номер чека и другие параметры в реквизитах документа.

          ### Пример кода на 1С (упрощённый, для конфигураций с поддержкой ТО):

          bsl
          // Процедура печати кассового чека из документа РеализацияУслуг
          Процедура ПечатьКассовогоЧека(ДокументСсылка)
          	
          	// Получаем сервер торгового оборудования
          	ТОСервер = Обработки.ТОСервер.Создать();
          	
          	// Получаем список подключенных фискальных устройств (ККТ)
          	МассивККТ = ТОСервер.ПолучитьСписокУстройств(Перечисления.ВидыТорговогоОборудования.ККТ, ДокументСсылка.Организация);
          	
          	Если МассивККТ.Количество() = 0 Тогда
          		Сообщить("Фискальное устройство не подключено");
          		Возврат;
          	КонецЕсли;
          	
          	// Берём первое устройство (или реализуйте выбор)
          	ФУ = МассивККТ[0];
          	
          	// Получаем описание последней кассовой смены
          	ОписаниеСмены = КассовыеСменыВызовСервера.ОписаниеПоследнейКассовойСмены(ФУ);
          	
          	Если ОписаниеСмены = Неопределено Или ОписаниеСмены.Статус = Перечисления.СтатусыКассовойСмены.Закрыта Тогда
          		Сообщить("Кассовая смена не открыта");
          		Возврат;
          	КонецЕсли;
          	
          	// Формируем параметры чека
          	ПараметрыЧека = МенеджерОборудованияКлиентСервер.ПараметрыОперацииФискализацииЧека();
          	ПараметрыЧека.Вставить("ОписаниеПКС", ОписаниеСмены);
          	
          	// Подготовка данных для фискализации (позиции, суммы, НДС и т.п.)
          	МенеджерОборудованияВызовСервера.ПодготовитьДанныеДляФискализацииЧека(ДокументСсылка, ПараметрыЧека, 2, ТОСервер.ПолучитьМодель(ФУ), "", "");
          	
          	// Фискализация чека
          	ОбработкаОбслуживания = Неопределено;
          	ОбъектДрайвера = Неопределено;
          	ТОСервер.ПолучитьОбъектДрайвера(ФУ, ОбработкаОбслуживания, ОбъектДрайвера);
          	
          	Результат = ОбработкаОбслуживания.ФискализироватьЧек(ОбъектДрайвера, ПараметрыЧека);
          	
          	Если Не ЗначениеЗаполнено(Результат) Тогда
          		// Успешно пробит чек
          		ДокументСсылка.НомерЧекаККМ = ОбъектДрайвера.ВыходныеПараметры[1];
          		ДокументСсылка.ККМ = ОписаниеСмены.КассаККМ;
          		ДокументСсылка.ТекстЭлектронногоЧека = ПараметрыЧека.ТекстЭлектронногоЧека;
          		ДокументСсылка.Записать();
          		Сообщить("Чек успешно пробит. Номер чека: " + ДокументСсылка.НомерЧекаККМ);
          	Иначе
          		ТекстОшибки = ТОСервер.ПолучитьТекстОшибкиФРТО(Результат);
          		Сообщить("Ошибка при печати чека: " + ТекстОшибки);
          	КонецЕсли;
          
          КонецПроцедуры
          

          ### Важные моменты:

          — В конфигурациях, где нет встроенной поддержки торгового оборудования, потребуется подключить и настроить обработку ТО (ТОСервер, ТОНастройка и т.п.) из типовых конфигураций (например, УТ, КА, УПП).

          — Для корректной передачи данных в чек необходимо правильно заполнить ставки НДС, виды оплаты, реквизиты организации и кассы.

          — Если в вашей конфигурации используется документ «ПКО» или «Оплата платежной картой» на основании реализации, то печать чека обычно реализована именно в этих документах. В этом случае можно программно создать такой документ на основании реализации и вызвать печать чека из него.

          — Для разных моделей касс и драйверов могут быть свои особенности, поэтому рекомендуется использовать стандартные методы 1С для работы с торговым оборудованием.

          ### Рекомендации и источники:

          — Пример программной печати чека из документа оплаты (ПКО, Оплата платежной картой) — https://infostart.ru/1c/articles/949209/
          — Внедрение ККМ Онлайн в сторонние конфигурации — https://infostart.ru/1c/articles/613979/
          — Работа с торговым оборудованием в 1С — https://its.1c.ru/db/kkt#content:80:retail22

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

          Рекомендую посмотреть здесь:
          https://infostart.ru/1c/articles/949209/
          https://infostart.ru/1c/articles/613979/
          https://its.1c.ru/db/kkt#content:80:retail22

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С