Изменения модулей форм документов ПриходныйОрдер, РасходныйОрдер для конфигураций 1С 7.7 "Бухгалтерский учет, ред. 4.5"
Вставки авторского кода для лучшего ориентирования отмечены комментарием //тщи


1) В модуле формы документа ПриходныйОрдер (Приходный кассовый ордер) заменить процедуры  ПечатьЧека() и ПризнакПробитияЧека() , добавить процедуру Наим():
//Для отключения передачи данных о покупателе в ОФД можно добавить в шапку документа реквизит "НеПередаватьКлиентаВОФД" и вывести его на форме документа в виде флажка (подробнее см. в файле Buh662_54FZ.md)

//******************************************************************************
Функция Наим(Спр)   //тщи
	Если ПустоеЗначение(Спр) = 1 Тогда
	ИначеЕсли ТипЗначенияСтр(Спр) = "Справочник" Тогда
		Если Метаданные.Справочник(Спр.Вид()).Реквизит("ПолнНаименование").Выбран() = 0 Тогда
		ИначеЕсли ПустоеЗначение(Спр.ПолнНаименование) = 0 Тогда
		    Возврат сокрлп(Спр.ПолнНаименование)
		КонецЕсли;
	    //Возврат сокрлп(Спр.Наименование)
	КонецЕсли;
	
	Возврат сокрлп(Спр)
	
КонецФункции

//******************************************************************************
Функция ПризнакПробитияЧека()
    
	Если НомерЧекаККМ <> 0 Тогда
  		Если НомерЧекаККМ > 0  Тогда
 			ПечФПД = "";
			Если Метаданные.Документ(Вид()).РеквизитШапки("ФПД").Выбран() = 0 Тогда  //[+] тщи
			ИначеЕсли ПустоеЗначение(ПолучитьАтрибут("ФПД"))= 0 Тогда
  				ПечФПД = ", ФПД: "+ Сокрлп(ПолучитьАтрибут("ФПД"))
  			КонецЕсли;                                        //[-] тщи
			Возврат "№ чека: "+СокрЛП(НомерЧекаККМ) + ПечФПД; //тщи  + ПечФПД
		Иначе
			Возврат "Чек пробит";
		КонецЕсли;
	Иначе
		Возврат "";
    КонецЕсли;
	
КонецФункции

//******************************************************************************
Процедура ПечатьЧека()
	Если НомерЧекаККМ <> 0 Тогда
	    Предупреждение("Чек уже пробит на фискальном регистраторе!",60);
		Возврат;
	ИначеЕсли глФРВкл=0 Тогда
	    Предупреждение("Фискальный регистратор не подключен!",60);
		Возврат;
	ИначеЕсли (УчитыватьНП=1) и (СтавкаНП.Ставка<>0) Тогда
	    Предупреждение("Чтобы распечатать чек на фискальном регистраторе" + РазделительСтрок +
		               "необходимо, чтобы ставка НП была равна 0!",60);
		Возврат;
	ИначеЕсли ПометкаУдаления()=1 Тогда
	    Предупреждение("Документ помечен на удаление, поэтому" + РазделительСтрок +
		               "нельзя пробить чек на фискальном регистраторе!",60);
		Возврат;
	ИначеЕсли Проведен()=0 Тогда
		Если Вопрос("Провести документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда
		    Возврат;
		КонецЕсли;
		Попытка
			Если Записать()=0 Тогда Возврат КонецЕсли; //тщи
			Если Провести()=0 Тогда Возврат КонецЕсли; //тщи
		Исключение
			Возврат;
		КонецПопытки;
	ИначеЕсли Модифицированность()=1 Тогда
		Если Вопрос("Сохранить документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда
		    Возврат;
		КонецЕсли;
		Попытка
			Если Записать()=0 Тогда Возврат КонецЕсли; //тщи
		Исключение
			Возврат;
		КонецПопытки;
	КонецЕсли;
	
	Список = СоздатьОбъект("ТаблицаЗначений");
	Список.НоваяКолонка("ТовНаим"   , "Строка");
	Список.НоваяКолонка("Цена"      , "Число",15,2);	//тщи
	Список.НоваяКолонка("Количество", "Число");
	Список.НоваяКолонка("НДС"       , "Число");
	Список.НоваяКолонка("Сумма"	    , "Число",15,2);	//[+] тщи 54ФЗ ТИС988
	Список.НоваяКолонка("СуммаНДС"	, "Число",15,2);	//тщи
	Список.НоваяКолонка("ПредметРасчета"   , "Число");  //тщи для ФФД 1.05 и выше
	Список.НоваяКолонка("СпособРасчета"    , "Число");  //тщи для ФФД 1.05 и выше
	Список.НоваяКолонка("ЕдИзм"   	, "Строка");		//тщи для ФФД 1.05 и выше
		//Наличие суффикса "_п" в наименовании тега определяет будет ли выведено в чеке значение тега нефискальной строкой для удобства пользователя, или будет значение только передано в ОФД.
		//Рекомендуем управлять печатью тегов настройками драйвера ККТ
	Список.НоваяКолонка("Тег1229",	"Число");		//Акциз, заполняется если предмет расчета признается объектом налогообложения акцизами и расчет осуществляется между организациями и (или) индивидуальными предпринимателями с использованием наличных денежных средств и (или) с предъявлением электронных средств платежа.
	Список.НоваяКолонка("Тег1230",	"Строка",3);	//код страны происхождения товара (для России и группы стран (например, Евросоюз) не заполняется)
	Список.НоваяКолонка("Тег1231",	"Строка");		//Номер таможенной декларации

	ДокумОснование = "";
	Скидка            = 0; //тщи 54ФЗ перенес выше
	
	Если ПустоеЗначение(ДокументПоставки) = 0 Тогда
		Если (ДокументПоставки.Вид() = "ПродажаВРозницу")
			или (ДокументПоставки.Вид() = "РасходнаяНакладная")
			или (ДокументПоставки.Вид() = "РеализацияОтгруженнойПродукции")
			или (ДокументПоставки.Вид() = "ОказаниеУслуг")
			или (ДокументПоставки.Вид() = "ВыполнениеЭтапаРабот")
			или (ДокументПоставки.Вид() = "ОтпускМатериаловНаСторону")
			или (ДокументПоставки.Вид() = "Счет") Тогда
	        //Если ДокументПоставки.Итог("Всего") = Сумма Тогда	//тщи 54ФЗ
			    ДокумОснование = ДокументПоставки;
			//КонецЕсли;	                                    //тщи 54ФЗ
		КонецЕсли;
	КонецЕсли;	
	
	СтавкаНДСПоДокОснованию = СтавкаНДС.Ставка;                                                                                 
	Если (НДС = 0) и (нрег(Лев(СтавкаНДС.Наименование,3)) = "без") Тогда //Без налога (НДС)
		СтавкаНДСПоДокОснованию    = -1                                              //для разделения ставок 0% и Без НДС
	КонецЕсли;								
	ПринятоОтОснование = ?(ПустаяСтрока(ПринятоОт)=0,"Принято от ","")+СокрЛП(СокрЛП(ПринятоОт)+" "+СокрЛП(Основание)); 		
	
	Если ПустоеЗначение(ДокумОснование) = 1 Тогда  //[-] тщи 54ФЗ
		Список.НоваяСтрока();
		Список.ТовНаим    = ПринятоОтОснование;  //тщи 54ФЗ
		Список.Цена       = Сумма;
		Список.Количество = 1;
		Список.НДС        = СтавкаНДСПоДокОснованию;	//тщи 54ФЗ
		Список.Сумма      = 0; //Сумма;                 //[+] тщи 54ФЗ

	Иначе

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

		ДокумОснование.ВыбратьСтроки();

		Если Метаданные.Документ(ДокумОснование.Вид()).РеквизитШапки("ВариантРасчетаНалогов").Выбран() = 1 Тогда
			РеквСуммаВклНДС = ДокумОснование.ВариантРасчетаНалогов.СуммаВключаетНДС
		Иначе
			РеквСуммаВклНДС = 1
		КонецЕсли;
		
		Пока ДокумОснование.ПолучитьСтроку() = 1 Цикл
			Список.НоваяСтрока();
			Если (ДокумОснование.Вид() = "ОказаниеУслуг") Тогда
				Номенклатура    = ДокумОснование.Услуга;
				СтавкаНДСПоДок = ДокумОснование.Услуга.СтавкаНДС.Получить(ДокумОснование.ДатаДок);
			ИначеЕсли (ДокумОснование.Вид() = "ВыполнениеЭтапаРабот") Тогда
				Номенклатура    = ДокумОснование.Работа;
				СтавкаНДСПоДок = ДокумОснование.Работа.СтавкаНДС.Получить(ДокумОснование.ДатаДок);
			ИначеЕсли (ДокумОснование.Вид() = "ОтпускМатериаловНаСторону") Тогда
				Номенклатура    = ДокумОснование.Материал;
				СтавкаНДСПоДок = СтавкаНДС; //???
			Иначе
				Номенклатура    = ДокумОснование.Товар;
				СтавкаНДСПоДок = ДокумОснование.Товар.СтавкаНДС.Получить(ДокумОснование.ДатаДок);
			КонецЕсли;
			Список.ТовНаим    = Наим(Номенклатура);
			Список.ЕдИзм	  = сокрлп(Номенклатура.ЕдиницаИзмерения);
			Если (СтавкаНДСПоДок.Ставка = 0) и (нрег(Лев(СтавкаНДСПоДок.Наименование,3)) = "без") Тогда //Без налога (НДС)
				Список.НДС = -1                                              //для разделения ставок 0% и Без НДС
			Иначе
				Список.НДС = СтавкаНДСПоДок.Ставка
			КонецЕсли;								
			Список.Цена       = ДокумОснование.Цена;
			Если (ДокумОснование.Вид() = "ОтпускМатериаловНаСторону") Тогда
				Список.Количество = ДокумОснование.КоличествоОтпущено;
			Иначе
				Список.Количество = ДокумОснование.Количество;
			КонецЕсли;
			Список.Сумма	  = ДокумОснование.Всего;
			Если РеквСуммаВклНДС = 0 Тогда
				Если Список.Сумма-ДокумОснование.НДС <> 0 Тогда  //включим в цену НДС (с учетом скидки)
					Список.Цена  = Список.Цена * (1+ДокумОснование.НДС / (Список.Сумма-ДокумОснование.НДС));
				КонецЕсли;
				//Список.Цена = Список.Цена * (1+СтавкаНДСПоДок.Ставка/100);
			КонецЕсли;                                                          
			Если Метаданные.Документ(ДокумОснование.Вид()).РеквизитТабличнойЧасти("НДС").Выбран() = 1 Тогда
				Список.СуммаНДС	  = ДокумОснование.НДС
			КонецЕсли;

			Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("АлкогольнаяПродукция").Выбран()=1 Тогда
				Список.ПредметРасчета = ?(Номенклатура.АлкогольнаяПродукция=1, 2, 1) //Т - Товар, АТ - Подакцизный товар
			Иначе
				Список.ПредметРасчета = 1; //Т - ТОВАР
			КонецЕсли;
			Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("ТипНоменклатуры").Выбран()=0 Тогда
			ИначеЕсли Найти(Номенклатура.ТипНоменклатуры.Идентификатор(), "Услуга")>0 Тогда
				Список.ПредметРасчета = 4; //У - УСЛУГА
			ИначеЕсли Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Работа Тогда
				Список.ПредметРасчета = 3; //Р - РАБОТА
			КонецЕсли;
			Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("ПодакцизныйТовар").Выбран()=0 Тогда  //алкоголь, сигареты, машинные масла, сахаросодержащие напитки и проч.
			ИначеЕсли (Список.ПредметРасчета = 1) и (Номенклатура.ПодакцизныйТовар=1) Тогда //меняем Т на АТ
				Список.ПредметРасчета = 2 //АТ - Подакцизный товар
			КонецЕсли;
            
			ЭтоИмпортныйТовар = 0;
			Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("СтранаПроисхожд").Выбран()=0 Тогда
			ИначеЕсли Номенклатура.СтранаПроисхожд <> 1 Тогда //Страна происхожд. <> Россия, значит ГТД в чек передаем
				ЭтоИмпортныйТовар = 1;
				Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("ГТД").Выбран()=0 Тогда
				ИначеЕсли ПустоеЗначение(Номенклатура.ГТД) = 0 Тогда //берем сначала из спр. Номенклатура, потом заменим из с/ф, если будет указано в с/ф
					Список.Тег1230 = Число(Номенклатура.ГТД.КодПоОКСМ); //Если код страны происхождения имеет длину меньше 3 цифр, то он дополняется справа пробелами
					Список.Тег1231 = Номенклатура.ГТД.Наименование;
				КонецЕсли;
			КонецЕсли;
			Если ТЗсГТД <> 0 Тогда //берем Акциз и ГТД из подчиненной счет-фактуры, будем считать, что товар не был в с/ф раздроблен по разным ГТД ???
				ТЗсГТД.ВыбратьСтроки();
				Пока ТЗсГТД.ПолучитьСтроку()=1 Цикл
				    Если (ТЗсГТД.Товар=Номенклатура) и (ТЗсГТД.Количество<>0) и (ТЗсГТД.Количество=Список.Количество) Тогда //нашли
						Список.Тег1229 = ТЗсГТД.АкцизСумма;
						Если (ЭтоИмпортныйТовар=1) и (ПустоеЗначение(ТЗсГТД.ГТД) = 0)  Тогда
							Список.Тег1230 = Число(ТЗсГТД.ГТД.КодПоОКСМ); //Если код страны происхождения имеет длину меньше 3 цифр, то он дополняется справа пробелами
							Список.Тег1231 = ТЗсГТД.ГТД.Наименование;
							ТЗсГТД.Количество = 0; //чтобы повторно не пе использовать при повторах товара в чеке
						КонецЕсли;
				    КонецЕсли;
				КонецЦикла;
			ИначеЕсли ЭтоИмпортныйТовар = 0 Тогда
			ИначеЕсли Метаданные.Документ(ДокумОснование.Вид()).РеквизитТабличнойЧасти("ГТД").Выбран() = 0 Тогда
			ИначеЕсли ПустоеЗначение(ДокумОснование.ГТД) = 0  Тогда
				Список.Тег1230 = Число(ДокумОснование.ГТД.КодПоОКСМ); //Если код страны происхождения имеет длину меньше 3 цифр, то он дополняется справа пробелами
				Список.Тег1231 = ДокумОснование.ГТД.Наименование;
			КонецЕсли;
			
			Список.СпособРасчета = 4; //[-] тщи  4-Полный расчет, здесь возможны нюансы, если расчет неполный: 
		КонецЦикла;	
		//Если глЕстьРеквизитШапки("Скидка",ДокумОснование.Вид()) = 1 Тогда
		//	Скидка = ДокумОснование.Скидка.Процент
		//КонецЕсли;
		
	КонецЕсли;                                     //[-] тщи 54ФЗ
	
	СуммаЧека         = Сумма;
	//Получено          = Сумма;                   //тщи
	ПризнВозврата     = 0;
	НомерСекции       = 1;
	НомерЧека         = 0;
    
	//[+] тщи 54ФЗ
	Если Список.КоличествоСтрок() > 0 Тогда
		Список.НоваяКолонка("Данные54ФЗ");			//инфа записывается в виде списка значений в первую строку таблицы СписокТоваров
		Список.ПолучитьСтрокуПоНомеру(1);
		Список.Данные54ФЗ = СоздатьОбъект("СписокЗначений");
		Данные = Список.Данные54ФЗ;
		Данные.ДобавитьЗначение(Контекст,"Контекст");
		Если Метаданные.Документ(Вид()).РеквизитШапки("АдресПокупателя").Выбран() = 1 Тогда                //если диалог документ доработан для указания адреса покупателя
			Данные.ДобавитьЗначение(сокрлп(ПолучитьАтрибут("АдресПокупателя")),"АдресПокупателя");	//если закомментировать эту строку, то АдресПокупателя будет запрошен в обработке обслуживания ФР; если передать пустую строку (""), то будет выводиться бумажный чек без запроса АдресаПокупателя
		КонецЕсли;

		Если Метаданные.Документ(Вид()).РеквизитШапки("ОплатаКартой").Выбран() = 1 Тогда                       //если диалог документ доработан для указания типа оплаты картой
			ПризнакОплатыКартой = ПолучитьАтрибут("ОплатаКартой");
			Данные.ДобавитьЗначение(ПризнакОплатыКартой,"ТипОплаты");	 	//чтобы не запрашивать тип оплаты в отдельном диалоге перед печатью чека, (т.к. тип оплаты вводится в чеке), 1 -  запрашивать тип оплаты в отдельном диалоге перед печатью чека. Для работы этого параметра обязательно передавать параметр Контекст!
		Иначе
			ПризнакОплатыКартой = 0
		КонецЕсли;
		
		Если Метаданные.Документ(Вид()).РеквизитШапки("Получено").Выбран() = 1 Тогда                       //если диалог документ доработан для указания типа оплаты картой
			Получено = ПолучитьАтрибут("Получено");     //получено НАЛИЧНЫМИ (остальное - КАРТА)
			Если (Получено=0) и (ПризнакОплатыКартой=0) Тогда
				Получено = СуммаЧека
			КонецЕсли;
		Иначе
			Получено = ?(ПризнакОплатыКартой = 1, 0, СуммаЧека)
		КонецЕсли;
	
		Если (Получено < СуммаЧека) и (ПризнакОплатыКартой = 0) Тогда  		//тщи если Получено < СуммаЧека, то значит оплата идет по банковской карте
	 		Предупреждение("Полученной суммы недостаточно для оплаты!",60);
	 		Возврат
	 	КонецЕсли;
	 	
		Данные.ДобавитьЗначение(ПринятоОтОснование, "Основание");
		Данные.ДобавитьЗначение(СтавкаНДСПоДокОснованию, "НДСпоУмолч");
	 	Если ПустоеЗначение(ДокумОснование) = 0 Тогда
			Данные.ДобавитьЗначение(ДокумОснование,"Документ");	//ссылка на документ-основание
		КонецЕсли;
	 	Если КоррСчет.ВидСубконто(2) = ВидыСубконто.Договоры Тогда
			Данные.ДобавитьЗначение(Субконто2.Наименование,"Договор");	//договор контрагента
		КонецЕсли;
		
		Если ПустоеЗначение(ДокумОснование) = 1 Тогда //если был частичный возврат по пред.чеку
		ИначеЕсли Метаданные.Документ(ДокумОснование.Вид()).РеквизитШапки("ФПД").Выбран() = 1 Тогда  //если вводим чек для омены предыдущего (РКО), то желательно передавать ФПД отменяемого чека
			Данные.ДобавитьЗначение(ДокумОснование.ФПД,"Тег1192");
		ИначеЕсли Метаданные.Документ(ДокумОснование.Вид()).РеквизитШапки("ДокументОснование").Выбран() = 0 Тогда //если был частичный возврат по пред.чеку
		ИначеЕсли ПустоеЗначение(ДокумОснование.ДокументОснование) = 0 Тогда
			Док = СоздатьОбъект("Документ");
			Док.ВыбратьПодчиненныеДокументы(,,ДокумОснование.ДокументОснование);
			Пока Док.ПолучитьДокумент() = 1 Цикл
				Если Док.ТекущийДокумент() = ТекущийДокумент() Тогда
				ИначеЕсли Метаданные.Документ(Док.Вид()).РеквизитШапки("ФПД").Выбран() = 0 Тогда //если вводим чек для омены предыдущего (РКО), то желательно передавать ФПД отменяемого чека
				ИначеЕсли ПустоеЗначение(Док.ФПД) = 0 Тогда   //??? алгоритм может запутаться, если пробиты множественные возвраты
					Данные.ДобавитьЗначение(Док.ФПД,"Тег1192");
					прервать
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		Если ?(Метаданные.Документ(Вид()).РеквизитШапки("НеПередаватьКлиентаВОФД").Выбран()=0,0,ПолучитьАтрибут("НеПередаватьКлиентаВОФД")) = 1 Тогда //теги 1227 и 1228 не нужно передавать в ОФД
		ИначеЕсли РозничнаяВыручка = 1 Тогда
		ИначеЕсли КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда

			 	Если ПустоеЗначение(Субконто1) = 1 Тогда
			 		Предупреждение("Не указан контрагент!",60);
			 		Возврат
				//ИначеЕсли ПустоеЗначение(Субконто1.ИНН) = 1 Тогда  //для ФФД 1.1
			 	//	Предупреждение("Не указан ИНН контрагента!",60);
			 	//	Возврат
			 	КонецЕсли;

		 		КлиентИНН = сокрлп(Субконто1.ИНН); 
				поз = Найти(КлиентИНН, "/");
				Если поз > 0 Тогда
					КлиентИНН = лев(КлиентИНН, поз-1)
				Иначе
					поз = Найти(КлиентИНН, "\");
					Если поз > 0 Тогда
						КлиентИНН = лев(КлиентИНН, поз-1)
					КонецЕсли;
				КонецЕсли;
			 	//??? добавить проверку КЧ ИНН
				Если ПустоеЗначение(Субконто1.ПолнНаименование) = 0 Тогда
					Данные.ДобавитьЗначение(Субконто1.ПолнНаименование,	"Клиент");    //"Тег1227"
			 	КонецЕсли;
				Если Число(КлиентИНН) <> 0 Тогда
					Данные.ДобавитьЗначение(КлиентИНН, "КлиентИНН"); //"Тег1228"
			 	КонецЕсли;
		КонецЕсли;

	Иначе
 		Предупреждение("Нет позиций для вывода в чек ККМ!",60);
 		Возврат
	КонецЕсли;
	//[-] тщи 54ФЗ   
	
	Если глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека) = 1 Тогда
		НомерЧекаККМ = ?(НомерЧека = 0, -1, НомерЧека);
		Попытка						//[+] тщи 54ФЗ
			АдресПокупателя = Данные.Получить("АдресПокупателя");
			НомерСменыККМ 	= Данные.Получить("НомерСмены");
			Получено 		= Данные.Получить("Получено");
			ФПД 			= Данные.Получить("ФПД");
			НомерФД 		= Данные.Получить("НомерФД");
			Если СуммаЧека>Получено Тогда
				Картой = СуммаЧека-Получено;
				ОплатаКартой = 1;
			Иначе
				Картой = 0;
				ОплатаКартой = 0;
			КонецЕсли
		Исключение КонецПопытки;	//[-] тщи 54ФЗ
		ПриЗаписиПерепроводить(0);
		Записать();
		ПриЗаписиПерепроводить(1);
	КонецЕсли;
	
КонецПроцедуры

2) В модуле формы документа РасходныйОрдер (Расходный кассовый ордер) заменить процедуры  ПечатьЧека() и ПризнакПробитияЧека() , добавить процедуру Наим():
//Для отключения передачи данных о покупателе в ОФД можно добавить в шапку документа реквизит "НеПередаватьКлиентаВОФД" и вывести его на форме документа в виде флажка (подробнее см. в файле Buh662_54FZ.md)

//******************************************************************************
Функция Наим(Спр)   //тщи
	Если ПустоеЗначение(Спр) = 1 Тогда
	ИначеЕсли ТипЗначенияСтр(Спр) = "Справочник" Тогда
		Если Метаданные.Справочник(Спр.Вид()).Реквизит("ПолнНаименование").Выбран() = 0 Тогда
		ИначеЕсли ПустоеЗначение(Спр.ПолнНаименование) = 0 Тогда
		    Возврат сокрлп(Спр.ПолнНаименование)
		КонецЕсли;
	    //Возврат сокрлп(Спр.Наименование)
	КонецЕсли;
	
	Возврат сокрлп(Спр)
	
КонецФункции

//******************************************************************************
Функция ПризнакПробитияЧека()
    
	Если НомерЧекаККМ <> 0 Тогда
  		Если НомерЧекаККМ > 0  Тогда
 			ПечФПД = "";
			Если Метаданные.Документ(Вид()).РеквизитШапки("ФПД").Выбран() = 0 Тогда  //[+] тщи
			ИначеЕсли ПустоеЗначение(ПолучитьАтрибут("ФПД"))= 0 Тогда
  				ПечФПД = ", ФПД: "+ Сокрлп(ПолучитьАтрибут("ФПД"))
  			КонецЕсли;                                        //[-] тщи
			Возврат "№ чека: "+СокрЛП(НомерЧекаККМ) + ПечФПД; //тщи  + ПечФПД
		Иначе
			Возврат "Чек пробит";
		КонецЕсли;
	Иначе
		Возврат "";
    КонецЕсли;
	
КонецФункции

//******************************************************************************
Процедура ПечатьЧека()
	Если НомерЧекаККМ <> 0 Тогда
	    Предупреждение("Чек уже пробит на фискальном регистраторе!",60);
		Возврат;
	ИначеЕсли глФРВкл=0 Тогда
	    Предупреждение("Фискальный регистратор не подключен!",60);
		Возврат;
	ИначеЕсли ПометкаУдаления()=1 Тогда
	    Предупреждение("Документ помечен на удаление, поэтому" + РазделительСтрок +
		               "нельзя пробить чек на фискальном регистраторе!",60);
		Возврат;
	ИначеЕсли Проведен()=0 Тогда
		Если Вопрос("Провести документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда
		    Возврат;
		КонецЕсли;
		Попытка
			Если Записать()=0 Тогда Возврат КонецЕсли; //тщи
			Если Провести()=0 Тогда Возврат КонецЕсли; //тщи
		Исключение
			Возврат;
		КонецПопытки;
	ИначеЕсли Модифицированность()=1 Тогда
		Если Вопрос("Сохранить документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда
		    Возврат;
		КонецЕсли;
		Попытка
			Если Записать()=0 Тогда Возврат КонецЕсли; //тщи
		Исключение
			Возврат;
		КонецПопытки;
	КонецЕсли;
	
	Список = СоздатьОбъект("ТаблицаЗначений");
	Список.НоваяКолонка("ТовНаим"   , "Строка");
	Список.НоваяКолонка("Цена"      , "Число",15,2);	//тщи
	Список.НоваяКолонка("Количество", "Число");
	Список.НоваяКолонка("НДС"       , "Число");
	Список.НоваяКолонка("Сумма"	    , "Число",15,2);	//[+] тщи 54ФЗ ТИС988
	Список.НоваяКолонка("СуммаНДС"	, "Число",15,2);	//тщи
	Список.НоваяКолонка("ПредметРасчета"   , "Число");  //тщи для ФФД 1.05 и выше
	Список.НоваяКолонка("СпособРасчета"    , "Число");  //тщи для ФФД 1.05 и выше
	Список.НоваяКолонка("ЕдИзм"   	, "Строка");		//тщи для ФФД 1.05 и выше
		//Наличие суффикса "_п" в наименовании тега определяет будет ли выведено в чеке значение тега нефискальной строкой для удобства пользователя, или будет значение только передано в ОФД.
		//Рекомендуем управлять печатью тегов настройками драйвера ККТ
	Список.НоваяКолонка("Тег1229",	"Число");		//Акциз, заполняется если предмет расчета признается объектом налогообложения акцизами и расчет осуществляется между организациями и (или) индивидуальными предпринимателями с использованием наличных денежных средств и (или) с предъявлением электронных средств платежа.
	Список.НоваяКолонка("Тег1230",	"Строка",3);	//код страны происхождения товара (для России и группы стран (например, Евросоюз) не заполняется)
	Список.НоваяКолонка("Тег1231",	"Строка");		//Номер таможенной декларации

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

	Иначе

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

		ДокумОснование.ВыбратьСтроки();
		
		Если Метаданные.Документ(ДокумОснование.Вид()).РеквизитШапки("ВариантРасчетаНалогов").Выбран() = 1 Тогда  //[+] тщи
			РеквСуммаВклНДС = ДокумОснование.ВариантРасчетаНалогов.СуммаВключаетНДС
		Иначе
			РеквСуммаВклНДС = 1
		КонецЕсли;                                                              //[-] тщи
		
		Пока ДокумОснование.ПолучитьСтроку() = 1 Цикл
			Список.НоваяСтрока();
			СтавкаНДСПоДок = ПолучитьПустоеЗначение("Справочники.СтавкиНДС"); //???
			Если (ДокумОснование.Вид() = "УслугиСтороннихОрганизаций") Тогда
				Номенклатура    = ДокумОснование.НаименованиеУслуги;
			ИначеЕсли (ДокумОснование.Вид() = "ПоступлениеОборудования") Тогда
				Номенклатура    = ДокумОснование.Оборудование;
			ИначеЕсли (ДокумОснование.Вид() = "ПоступлениеОС") Тогда
				Номенклатура    = ДокумОснование.ОС;
			ИначеЕсли (ДокумОснование.Вид() = "ПоступлениеНМА") Тогда
				Номенклатура    = ДокумОснование.НМА;
			ИначеЕсли (ДокумОснование.Вид() = "ПоступлениеМатериалов") Тогда
				Номенклатура    = ДокумОснование.Материал;
			ИначеЕсли (ДокумОснование.Вид() = "ОказаниеУслуг") Тогда
				Номенклатура    = ДокумОснование.Услуга;
				СтавкаНДСПоДок = ДокумОснование.Услуга.СтавкаНДС.Получить(ДокумОснование.ДатаДок);
			ИначеЕсли (ДокумОснование.Вид() = "ВыполнениеЭтапаРабот") Тогда
				Номенклатура    = ДокумОснование.Работа;
				СтавкаНДСПоДок = ДокумОснование.Работа.СтавкаНДС.Получить(ДокумОснование.ДатаДок);
			ИначеЕсли (ДокумОснование.Вид() = "ОтпускМатериаловНаСторону") Тогда
				Номенклатура    = ДокумОснование.Материал;
			Иначе
				Номенклатура    = ДокумОснование.Товар;
				СтавкаНДСПоДок = ДокумОснование.Товар.СтавкаНДС.Получить(ДокумОснование.ДатаДок);
			КонецЕсли;
			Список.ТовНаим    = Наим(Номенклатура);
			Список.ЕдИзм	  = сокрлп(Номенклатура.ЕдиницаИзмерения);
			Если (СтавкаНДСПоДок.Ставка = 0) и (нрег(Лев(СтавкаНДСПоДок.Наименование,3)) = "без") Тогда //Без налога (НДС)
				Список.НДС    = -1                                              //для разделения ставок 0% и Без НДС
			Иначе
				Список.НДС    = СтавкаНДСПоДок.Ставка
			КонецЕсли;								
			Если Метаданные.Документ(ДокумОснование.Вид()).РеквизитТабличнойЧасти("Цена").Выбран()=1 Тогда
				Список.Цена       = ДокумОснование.Цена;
			КонецЕсли;
			Если Метаданные.Документ(ДокумОснование.Вид()).РеквизитТабличнойЧасти("Количество").Выбран()=1 Тогда
				Список.Количество = ДокумОснование.Количество;
			Иначе
				Список.Количество = 1;
			КонецЕсли;
			Список.Сумма	  = ДокумОснование.Всего;
			Если РеквСуммаВклНДС = 0 Тогда
				Если Список.Сумма-ДокумОснование.НДС <> 0 Тогда  //включим в цену НДС (с учетом скидки)
					Список.Цена  = Список.Цена * (1+ДокумОснование.НДС / (Список.Сумма-ДокумОснование.НДС));
				КонецЕсли;
				//Список.Цена = Список.Цена * (1+СтавкаНДСПоДок.Ставка/100);
			КонецЕсли;                                                          
			Если Метаданные.Документ(ДокумОснование.Вид()).РеквизитТабличнойЧасти("НДС").Выбран() = 1 Тогда
				Список.СуммаНДС	  = ДокумОснование.НДС
			КонецЕсли;

			Если ТипЗначения(Номенклатура) <> 11 Тогда //не Справочник
				Список.ПредметРасчета = 1; //Т - ТОВАР
			Иначе
				Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("АлкогольнаяПродукция").Выбран()=1 Тогда
					Список.ПредметРасчета = ?(Номенклатура.АлкогольнаяПродукция=1, 2, 1) //Т - Товар, АТ - Подакцизный товар
				Иначе
					Список.ПредметРасчета = 1; //Т - ТОВАР
				КонецЕсли;
				Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("ТипНоменклатуры").Выбран()=0 Тогда
				ИначеЕсли Найти(Номенклатура.ТипНоменклатуры.Идентификатор(), "Услуга")>0 Тогда
					Список.ПредметРасчета = 4; //У - УСЛУГА
				ИначеЕсли Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Работа Тогда
					Список.ПредметРасчета = 3; //Р - РАБОТА
				КонецЕсли;
				Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("ПодакцизныйТовар").Выбран()=0 Тогда  //алкоголь, сигареты, машинные масла, сахаросодержащие напитки и проч.
				ИначеЕсли (Список.ПредметРасчета = 1) и (Номенклатура.ПодакцизныйТовар=1) Тогда //меняем Т на АТ
					Список.ПредметРасчета = 2 //АТ - Подакцизный товар
				КонецЕсли;
			КонецЕсли;

			ЭтоИмпортныйТовар = 0;
			Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("СтранаПроисхожд").Выбран()=0 Тогда
			ИначеЕсли Номенклатура.СтранаПроисхожд <> 1 Тогда //Страна происхожд. <> Россия, значит ГТД в чек передаем
				ЭтоИмпортныйТовар = 1;
				Если Метаданные.Справочник(Номенклатура.Вид()).Реквизит("ГТД").Выбран()=0 Тогда
				ИначеЕсли ПустоеЗначение(Номенклатура.ГТД) = 0 Тогда //берем сначала из спр. Номенклатура, потом заменим из с/ф, если будет указано в с/ф
					Список.Тег1230 = Число(Номенклатура.ГТД.КодПоОКСМ); //Если код страны происхождения имеет длину меньше 3 цифр, то он дополняется справа пробелами
					Список.Тег1231 = Номенклатура.ГТД.Наименование;
				КонецЕсли;
			КонецЕсли;
			Если ТЗсГТД <> 0 Тогда //берем Акциз и ГТД из подчиненной счет-фактуры, будем считать, что товар не был в с/ф раздроблен по разным ГТД ???
				ТЗсГТД.ВыбратьСтроки();
				Пока ТЗсГТД.ПолучитьСтроку()=1 Цикл
				    Если (ТЗсГТД.Товар=Номенклатура) и (ТЗсГТД.Количество<>0) и (ТЗсГТД.Количество=Список.Количество) Тогда //нашли
						Список.Тег1229 = ТЗсГТД.АкцизСумма;
						Если (ЭтоИмпортныйТовар=1) и (ПустоеЗначение(ТЗсГТД.ГТД) = 0)  Тогда
							Список.Тег1230 = Число(ТЗсГТД.ГТД.КодПоОКСМ); //Если код страны происхождения имеет длину меньше 3 цифр, то он дополняется справа пробелами
							Список.Тег1231 = ТЗсГТД.ГТД.Наименование;
							ТЗсГТД.Количество = 0; //чтобы повторно не пе использовать при повторах товара в чеке
						КонецЕсли;
				    КонецЕсли;
				КонецЦикла;
			ИначеЕсли ЭтоИмпортныйТовар = 0 Тогда
			ИначеЕсли Метаданные.Документ(ДокумОснование.Вид()).РеквизитТабличнойЧасти("ГТД").Выбран() = 0 Тогда
			ИначеЕсли ПустоеЗначение(ДокумОснование.ГТД) = 0  Тогда
				Список.Тег1230 = Число(ДокумОснование.ГТД.КодПоОКСМ); //Если код страны происхождения имеет длину меньше 3 цифр, то он дополняется справа пробелами
				Список.Тег1231 = ДокумОснование.ГТД.Наименование;
			КонецЕсли;
			
			Список.СпособРасчета = 4; //[-] тщи  4-Полный расчет, здесь возможны нюансы, если расчет неполный: 
		КонецЦикла;	
		//Если глЕстьРеквизитШапки("Скидка",ДокумОснование.Вид()) = 1 Тогда
		//	Скидка = ДокумОснование.Скидка.Процент
		//КонецЕсли;
		
	КонецЕсли;                                     //[-] тщи 54ФЗ
	
	СуммаЧека         = Сумма;
	//Получено          = Сумма;                   //тщи
	ПризнВозврата     = 1;
	НомерСекции       = 1;
	НомерЧека         = 0;
    
	//[+] тщи 54ФЗ
	Если Список.КоличествоСтрок() > 0 Тогда
		Список.НоваяКолонка("Данные54ФЗ");			//инфа записывается в виде списка значений в первую строку таблицы СписокТоваров
		Список.ПолучитьСтрокуПоНомеру(1);
		Список.Данные54ФЗ = СоздатьОбъект("СписокЗначений");
		Данные = Список.Данные54ФЗ;
		Данные.ДобавитьЗначение(Контекст,"Контекст");
		Если Метаданные.Документ(Вид()).РеквизитШапки("АдресПокупателя").Выбран() = 1 Тогда                //если диалог документ доработан для указания адреса покупателя
			Данные.ДобавитьЗначение(сокрлп(ПолучитьАтрибут("АдресПокупателя")),"АдресПокупателя");	//если закомментировать эту строку, то АдресПокупателя будет запрошен в обработке обслуживания ФР; если передать пустую строку (""), то будет выводиться бумажный чек без запроса АдресаПокупателя
		КонецЕсли;

		Если Метаданные.Документ(Вид()).РеквизитШапки("ОплатаКартой").Выбран() = 1 Тогда                       //если диалог документ доработан для указания типа оплаты картой
			ПризнакОплатыКартой = ПолучитьАтрибут("ОплатаКартой");
			Данные.ДобавитьЗначение(ПризнакОплатыКартой,"ТипОплаты");	 	//чтобы не запрашивать тип оплаты в отдельном диалоге перед печатью чека, (т.к. тип оплаты вводится в чеке), 1 -  запрашивать тип оплаты в отдельном диалоге перед печатью чека. Для работы этого параметра обязательно передавать параметр Контекст!
		Иначе
			ПризнакОплатыКартой = 0
		КонецЕсли;
		
		Если Метаданные.Документ(Вид()).РеквизитШапки("Получено").Выбран() = 1 Тогда                       //если диалог документ доработан для указания типа оплаты картой
			Получено = ПолучитьАтрибут("Получено");     //получено НАЛИЧНЫМИ (остальное - КАРТА)
			Если (Получено=0) и (ПризнакОплатыКартой=0) Тогда
				Получено = СуммаЧека
			КонецЕсли;
		Иначе
			Получено = ?(ПризнакОплатыКартой = 1, 0, СуммаЧека)
		КонецЕсли;
	
		Если (Получено < СуммаЧека) и (ПризнакОплатыКартой = 0) Тогда  		//тщи если Получено < СуммаЧека, то значит оплата идет по банковской карте
	 		Предупреждение("Полученной суммы недостаточно для оплаты!",60);
	 		Возврат
	 	КонецЕсли;
	 	
		Данные.ДобавитьЗначение(ПринятоОтОснование, "Основание");
		Данные.ДобавитьЗначение(СтавкаНДСПоДокОснованию, "НДСпоУмолч");
	 	Если ПустоеЗначение(ДокумОснование) = 0 Тогда
			Данные.ДобавитьЗначение(ДокумОснование,"Документ");	//ссылка на документ-основание
		КонецЕсли;
	 	Если КоррСчет.ВидСубконто(2) = ВидыСубконто.Договоры Тогда
			Данные.ДобавитьЗначение(Субконто2.Наименование,"Договор");	//договор контрагента
		КонецЕсли;
	 	
		Если ПустоеЗначение(ДокумОснование) = 1 Тогда //если был частичный возврат по пред.чеку
		ИначеЕсли Метаданные.Документ(ДокумОснование.Вид()).РеквизитШапки("ФПД").Выбран() = 1 Тогда  //если вводим чек для омены предыдущего (РКО), то желательно передавать ФПД отменяемого чека
			Данные.ДобавитьЗначение(ДокумОснование.ФПД,"Тег1192");
		ИначеЕсли Метаданные.Документ(ДокумОснование.Вид()).РеквизитШапки("ДокументОснование").Выбран() = 0 Тогда //если был частичный возврат по пред.чеку
		ИначеЕсли ПустоеЗначение(ДокумОснование.ДокументОснование) = 0 Тогда
			Док = СоздатьОбъект("Документ");
			Док.ВыбратьПодчиненныеДокументы(,,ДокумОснование.ДокументОснование);
			Пока Док.ПолучитьДокумент() = 1 Цикл
				Если Док.ТекущийДокумент() = ТекущийДокумент() Тогда
				ИначеЕсли Метаданные.Документ(Док.Вид()).РеквизитШапки("ФПД").Выбран() = 0 Тогда //если вводим чек для омены предыдущего (РКО), то желательно передавать ФПД отменяемого чека
				ИначеЕсли ПустоеЗначение(Док.ФПД) = 0 Тогда   //??? алгоритм может запутаться, если пробиты множественные возвраты
					Данные.ДобавитьЗначение(Док.ФПД,"Тег1192");
					прервать
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		Если ?(Метаданные.Документ(Вид()).РеквизитШапки("НеПередаватьКлиентаВОФД").Выбран()=0,0,ПолучитьАтрибут("НеПередаватьКлиентаВОФД")) = 1 Тогда //теги 1227 и 1228 не нужно передавать в ОФД
		ИначеЕсли КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда

			 	Если ПустоеЗначение(Субконто1) = 1 Тогда
			 		Предупреждение("Не указан контрагент!",60);
			 		Возврат
				//ИначеЕсли ПустоеЗначение(Субконто1.ИНН) = 1 Тогда  //для ФФД 1.1
			 	//	Предупреждение("Не указан ИНН контрагента!",60);
			 	//	Возврат
			 	КонецЕсли;

		 		КлиентИНН = сокрлп(Субконто1.ИНН); 
				поз = Найти(КлиентИНН, "/");
				Если поз > 0 Тогда
					КлиентИНН = лев(КлиентИНН, поз-1)
				Иначе
					поз = Найти(КлиентИНН, "\");
					Если поз > 0 Тогда
						КлиентИНН = лев(КлиентИНН, поз-1)
					КонецЕсли;
				КонецЕсли;
			 	//??? добавить проверку КЧ ИНН
				Если ПустоеЗначение(Субконто1.ПолнНаименование) = 0 Тогда
					Данные.ДобавитьЗначение(Субконто1.ПолнНаименование,	"Клиент");    //"Тег1227"
			 	КонецЕсли;
				Если Число(КлиентИНН) <> 0 Тогда
					Данные.ДобавитьЗначение(КлиентИНН, "КлиентИНН"); //"Тег1228"
			 	КонецЕсли;
		КонецЕсли;

	Иначе
 		Предупреждение("Нет позиций для вывода в чек ККМ!",60);
 		Возврат
	КонецЕсли;
	//[-] тщи 54ФЗ   
    
	Если глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека) = 1 Тогда
		НомерЧекаККМ = ?(НомерЧека = 0, -1, НомерЧека);
		Попытка						//[+] тщи 54ФЗ
			АдресПокупателя = Данные.Получить("АдресПокупателя");
			НомерСменыККМ 	= Данные.Получить("НомерСмены");
			Получено 		= Данные.Получить("Получено");
			ФПД 			= Данные.Получить("ФПД");
			НомерФД 		= Данные.Получить("НомерФД");
			Если СуммаЧека>Получено Тогда
				Картой = СуммаЧека-Получено;
				ОплатаКартой = 1;
			Иначе
				Картой = 0;
				ОплатаКартой = 0;
			КонецЕсли
		Исключение КонецПопытки;	//[-] тщи 54ФЗ
		ПриЗаписиПерепроводить(0);
		Записать();
		ПриЗаписиПерепроводить(1);
	КонецЕсли;
	
КонецПроцедуры

3) В шапку документов ПриходныйОрдер и РасходныйОрдер добавить новые реквизиты: ФПД и НеПередаватьКлиентаВОФД.
Реквизит НеПередаватьКлиентаВОФД вывести на диалог формы документов в виде флажка.
Реквизит ФПД отображается в текством реквизите ТекстНомерЧекаККМ, для этого нужно увеличить его на диалоге формы документа по шиирине, чтобы вместить номер чека и номер ФПД.