Почему в карточке партнера в 1С:ERP нет поля «Электронный чек» и как настроить печать чека для ИП

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

При оформлении наличных или безналичных расчетов с контрагентами в 1С:ERP через документ «Приходный кассовый ордер» пользователи часто сталкиваются с ситуацией, когда в карточке партнера на вкладке «Общие» отсутствует реквизит Электронный чек (вариант отправки электронного чека). Особенно часто это происходит при работе с индивидуальными предпринимателями. Рассмотрим причины такого поведения типовой конфигурации, выясним требования законодательства по 54-ФЗ и разберем варианты решения проблемы — от стандартного пользовательского интерфейса до программной доработки через расширение.

Причины скрытия реквизита «Электронный чек» в типовой конфигурации

Проанализируем логику разработчиков конфигурации 1С:ERP (и аналогичных решений, таких как «Комплексная автоматизация» или «Управление торговлей»). Отображение поля ВариантОтправкиЭлектронногоЧека в форме элемента справочника Партнеры жестко управляется программным кодом формы и зависит от соблюдения нескольких условий:

  1. Включена ли системная функциональная опция отправки чеков по SMS и электронной почте (путь в системе: НСИ и администрирование -> Настройка НСИ и разделов -> Продажи -> Розничные продажи -> ФЗ-54).
  2. Установлен ли для партнера флаг Клиент.
  3. Каков статус контрагента в поле ЮрФизЛицо (или КомпанияЧастноеЛицо). В типовом механизме поле Электронный чек отображается исключительно для партнеров с признаком Частное лицо.

Если контрагент зарегистрирован как Индивидуальный предприниматель или Юридическое лицо, система считает его субъектом B2B-взаимодействия. Разработчики 1С изначально закладывали предварительный выбор способа отправки чека (на постоянной основе) только для классических розничных покупателей — физических лиц.

Особенности расчетов с ИП и требования 54-ФЗ

Рассмотрим важный законодательный нюанс, который необходимо учитывать бухгалтеру и системному администратору при попытке обойти типовые механизмы. В соответствии с Федеральным законом № 54-ФЗ и форматами фискальных документов (ФФД 1.05, 1.2), при расчетах между организациями и ИП с использованием наличных денежных средств или с предъявлением электронного средства платежа фискальный чек пробивать обязательно.

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

  1. Тег 1227 — Наименование покупателя (клиента), то есть указание «ИП Фамилия И.О.» или название организации.
  2. Тег 1228 — ИНН покупателя (клиента).

Попытки завести фиктивное «Физическое лицо» вместо ИП для того, чтобы заставить 1С показать поле отправки чека, с последующим оформлением документа «Взаимозачет задолженности» являются ошибочными. В таком случае в ККТ передается чек физлица без тегов 1227 и 1228, что влечет за собой налоговые риски: покупатель-ИП не сможет правомерно учесть такой чек в составе своих профессиональных расходов, а продавцу грозит штраф за нарушение порядка применения контрольно-кассовой техники.

Штатный способ отправки электронного чека без доработки конфигурации

Отсутствие реквизита в карточке партнера вовсе не блокирует саму возможность отправки электронного чека покупателю-ИП. Разберем по шагам, как решить эту задачу штатным функционалом:

  1. Убедимся, что в карточке партнера или контрагента на закладке «Адреса и телефоны» корректно указаны действующий адрес электронной почты и номер мобильного телефона.
  2. Создаем и проводим документ «Приходный кассовый ордер» с операцией «Поступление оплаты от клиента». Проверяем, что в документе выбран правильный объект расчетов (Заказ клиента, Счет на оплату или Накладная) и заполнен ИНН контрагента.
  3. Нажимаем гиперссылку Пробить чек. При наличии подключенной фискальной техники откроется окно Предпросмотр чека.
  4. Непосредственно в форме предпросмотра оператор вручную выбирает вариант: Отправить Email или Отправить SMS. Контактные данные (почта или телефон) автоматически подтянутся в выпадающий список из контактной информации партнера и контрагента.

Нужно ли заполнять email и телефон для печати бумажного чека на ККТ АТОЛ?

Ответим на второй вопрос автора: достаточно ли указать email и телефон на закладке «Адреса и телефоны» для печати бумажного чека на фискальном регистраторе (например, АТОЛ FPrint-22ПТК)?

Для вывода обычного бумажного чека заполнять электронную почту и телефон не требуется. Касса ККМ печатает бумажный чек по умолчанию на кассовой ленте, если не задана явная команда на отказ от печати. Заполнение реквизитов связи необходимо исключительно для отправки фискальных данных клиенту в электронном виде (через ОФД или локальные почтовые/SMS-сервисы).

Если стоит задача, наоборот, экономить ленту и формировать только электронный чек без физической печати, необходимо:

  1. В окне предпросмотра чека перед пробитием снять флаг Печатать фискальный чек на ККТ.
  2. В настройках драйвера ККТ АТОЛ активировать режим отключения печати бумажного чека при наличии электронного адреса абонента.

Программное решение через расширение конфигурации

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

Разберем пример кода процедуры ЗаполнитьПараметрыОтправкиЭлектронногоЧекаПоПартнеру, которая считывает признак отправки и контактные данные как с уровня Партнера, так и с уровня связанного Контрагента:


Процедура ЗаполнитьПараметрыОтправкиЭлектронногоЧекаПоПартнеру(Форма) Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.НеОтправлять; 
	
	// Если партнер в форме не выбран, получаем его из реквизитов контрагента
	Если Не ЗначениеЗаполнено(Форма.Партнер) Тогда
				
		ВариантОтправкиЭлектронногоЧека = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Форма.Контрагент.Партнер, "ВариантОтправкиЭлектронногоЧека");
		
		Форма.ВариантОтправкиЭлектронногоЧекаПартнера = ВариантОтправкиЭлектронногоЧека;
		Если Не ЗначениеЗаполнено(ВариантОтправкиЭлектронногоЧека) Тогда
			ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.НеОтправлять;
		КонецЕсли;
		
		ИсточникиКонтактнойИнформации = Новый Массив;
		ИсточникиКонтактнойИнформации.Добавить(Форма.Контрагент.Партнер);
		
		ВидыКонтактнойИнформации = Новый Массив;
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.ТелефонПартнера);
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.EmailПартнера);	 
		
		// Подключаем контактную информацию самого контрагента
		ИсточникиКонтактнойИнформации.Добавить(Форма.Контрагент); 
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента);
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.EmailКонтрагента);
		
		КонтактнаяИнформацияОбъекта = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ИсточникиКонтактнойИнформации,, ВидыКонтактнойИнформации, ТекущаяДатаСеанса());
		
		Для Каждого ЭлементКонтактнойИнформации Из КонтактнаяИнформацияОбъекта Цикл
			
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера Тогда
				Форма.Телефон10Знаков = РозничныеПродажиКлиентСервер.НомерТелефонаВФормате10Знаков(ЭлементКонтактнойИнформации.Представление);
				Форма.Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Форма.Телефон10Знаков);
				Форма.Элементы.Телефон.СписокВыбора.Добавить(Форма.Телефон);
			КонецЕсли;
			
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.EmailПартнера Тогда
				Форма.Email = ЭлементКонтактнойИнформации.Представление;
				Форма.Элементы.Email.СписокВыбора.Добавить(Форма.Email);
			КонецЕсли;
			
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента Тогда
				Форма.Телефон10Знаков = РозничныеПродажиКлиентСервер.НомерТелефонаВФормате10Знаков(ЭлементКонтактнойИнформации.Представление);
				Форма.Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Форма.Телефон10Знаков);
				Форма.Элементы.Телефон.СписокВыбора.Добавить(Форма.Телефон);
			КонецЕсли;
			
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.EmailКонтрагента Тогда
				Форма.Email = ЭлементКонтактнойИнформации.Представление;
				Форма.Элементы.Email.СписокВыбора.Добавить(Форма.Email);
			КонецЕсли;
			
		КонецЦикла;
		
		Если Форма.Элементы.Телефон.СписокВыбора.Количество() > 0 Тогда
			Форма.Элементы.Телефон.КнопкаВыпадающегоСписка = Истина;
		КонецЕсли;
		
		Если Форма.Элементы.Email.СписокВыбора.Количество() > 0 Тогда
			Форма.Элементы.Email.КнопкаВыпадающегоСписка = Истина;
		КонецЕсли;
		
	КонецЕсли;	
	
	Если ЗначениеЗаполнено(Форма.Партнер) И Форма.Партнер <> Справочники.Партнеры.РозничныйПокупатель Тогда
		ВариантОтправкиЭлектронногоЧека = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Форма.Партнер,
														 Метаданные.Справочники.Партнеры.Реквизиты.ВариантОтправкиЭлектронногоЧека.Имя);
		
		ИсточникиКонтактнойИнформации = Новый Массив;
		ИсточникиКонтактнойИнформации.Добавить(Форма.Партнер);
		
		ВидыКонтактнойИнформации = Новый Массив;
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.ТелефонПартнера);
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.EmailПартнера);
		
		// Дополнительно опрашиваем контрагента
		ИсточникиКонтактнойИнформации.Добавить(Форма.Контрагент); 
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента);
		ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.EmailКонтрагента);
		
		КонтактнаяИнформацияОбъекта = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ИсточникиКонтактнойИнформации,, ВидыКонтактнойИнформации, ТекущаяДатаСеанса());
		
		АдресEmail = "";
		Телефон10Знаков = "";
		Телефон = "";
		Для Каждого ЭлементКонтактнойИнформации Из КонтактнаяИнформацияОбъекта Цикл
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера Тогда
				Телефон10Знаков = РозничныеПродажиКлиентСервер.НомерТелефонаВФормате10Знаков(ЭлементКонтактнойИнформации.Представление);
				Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Телефон10Знаков);
				Форма.Элементы.Телефон.СписокВыбора.Добавить(Телефон);
			КонецЕсли;
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.EmailПартнера Тогда
				АдресEmail = ЭлементКонтактнойИнформации.Представление;
				Форма.Элементы.Email.СписокВыбора.Добавить(АдресEmail);
			КонецЕсли;   
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента Тогда
				Форма.Телефон10Знаков = РозничныеПродажиКлиентСервер.НомерТелефонаВФормате10Знаков(ЭлементКонтактнойИнформации.Представление);
				Форма.Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Форма.Телефон10Знаков);
				Форма.Элементы.Телефон.СписокВыбора.Добавить(Форма.Телефон);
			КонецЕсли;
			Если ЭлементКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.EmailКонтрагента Тогда
				АдресEmail = ЭлементКонтактнойИнформации.Представление;
				Форма.Элементы.Email.СписокВыбора.Добавить(АдресEmail);
			КонецЕсли;
		КонецЦикла;
		
		Если Форма.Элементы.Телефон.СписокВыбора.Количество() > 0 Тогда
			Форма.Элементы.Телефон.КнопкаВыпадающегоСписка = Истина;
		КонецЕсли;
		
		Если Форма.Элементы.Email.СписокВыбора.Количество() > 0 Тогда
			Форма.Элементы.Email.КнопкаВыпадающегоСписка = Истина;
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(ВариантОтправкиЭлектронногоЧека) Тогда
			ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.НеОтправлять;
			Если Не ПолучитьФункциональнуюОпцию("ПечататьБумажныйЧек") Тогда
				Если Не ПустаяСтрока(АдресEmail) Тогда
					ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьEmail;
				ИначеЕсли Не ПустаяСтрока(Телефон10Знаков) Тогда
					ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьSMS;	
				КонецЕсли;
			КонецЕсли;	
		КонецЕсли;
		
		Если ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьEmail Тогда
			Если Не ПустаяСтрока(АдресEmail) Тогда
				Форма.Email = АдресEmail;
			КонецЕсли;
		ИначеЕсли ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьSMS Тогда
			Если Не ПустаяСтрока(Телефон10Знаков) Тогда
				Форма.Телефон10Знаков = Телефон10Знаков;
				Форма.Телефон = Телефон;
			КонецЕсли;
		КонецЕсли;

	КонецЕсли;
		
	РозничныеПродажиКлиентСервер.УстановитьВариантОтправкиЭлектронногоЧека(Форма, ВариантОтправкиЭлектронногоЧека);
	
КонецПроцедуры

Данный фрагмент кода позволяет подтягивать контакты для отправки чека не только из справочника Партнеры, но и из связанного справочника Контрагенты, где для ИП и организаций почта и номер телефона заполняются чаще всего. Это избавляет кассира от необходимости каждый раз вводить данные вручную при пробитии чека из ПКО.

← На главную