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


1) В модуле формы документа ЧекККМ заменить процедуру ПробитьЧекНаККМ():
//вариант без выбра типа оплаты (НАЛИЧНЫЕ / БЕЗНАЛ) и адреса покупателя на форме документа (выбор производится в отдельном окне при пробитии чека)
//Для добавления возможности выбора типа оплаты на ДИАЛОГЕ документа, используйте файл TIS987_54FZ.md (также дополнительно взять оттуда изменения модулей формы и проведения документа - они немного отличаются от этого варианта)

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

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

	ПризнВозврата = ?(ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек, 0, 1);
	ЧекПробитККМ  = глФРПечататьЧек(СписокТоваров, Итог("Сумма"), ?((Получено=0)и(ПризнакОплатыКартой=0),Итог("Сумма"),Получено), Скидка.Процент, ПризнВозврата, Склад.НомерСекции, НомерЧека); //тщи ?(Получено=0,Итог("Сумма"),Получено) -> ?((Получено=0)и(ПризнакОплатыКартой=0),Итог("Сумма"),Получено)   //если Получено < СуммаЧека, то значит оплата идет по банковской карте

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


2) В модуле формы документа ПКО (Приходный кассовый ордер) заменить процедуру ПечатьЧека():

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

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

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

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

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


3) В модуле формы документа РКО (Расходный кассовый ордер) заменить процедуру ПечатьЧека():

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

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

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

	Иначе
 		Предупреждение("Нет позиций для вывода в чек ККМ!",60);
 		Возврат
	КонецЕсли;
	//[-] тщи 54ФЗ

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

4) в документ РКО добавлен  ввод на основании документа СтрокаВыпискиПриход, внесены изменения в функцию ЗаполнениеПоДокументуОснованию(), в настройку "Ввод на основании" добавлен документ СтрокаВыпискиПриход в списке "Вводить на основании" (подробнее см. в файле TIS987_54FZ.md)

5) В модуле формы документа СтрокаВыпискиПриход ДОБАВИТЬ (т.к. их там нет) процедуры ПризнакПробитияЧека() и ПечатьЧека():

//******************************************************************************
Функция ПризнакПробитияЧека()	//тщи
    
	Если НомерЧекаККМ <> 0 Тогда
  		Если НомерЧекаККМ > 0  Тогда
			Возврат "№ чека: "+СокрЛП(НомерЧекаККМ);
		Иначе
			Возврат "Чек пробит";
		КонецЕсли;
	Иначе
		Возврат "";
    КонецЕсли;
	
КонецФункции

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

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

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

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

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


6) В модуле формы документа СтрокаВыпискиПриход в начале процедуры ВводНового() добавить строчку:
	НомерЧекаККМ  = 0;

Процедура ВводНового(Скопирован) 
	НомерЧекаККМ  = 0;	//тщи

7) На диалог формы документа СтрокаВыпискиПриход ДОБАВИТЬ (т.к. их там нет) реквизиты ТекстНомерЧекаККМ и кнЧек (по аналогии см. документ ПриходныйОрдер)

8) В модуле формы документа СтрокаВыпискиРасход ДОБАВИТЬ (т.к. их там нет) процедуры ПризнакПробитияЧека() и ПечатьЧека():

//******************************************************************************
Функция ПризнакПробитияЧека()	//тщи
    
	Если НомерЧекаККМ <> 0 Тогда
  		Если НомерЧекаККМ > 0  Тогда
			Возврат "№ чека: "+СокрЛП(НомерЧекаККМ);
		Иначе
			Возврат "Чек пробит";
		КонецЕсли;
	Иначе
		Возврат "";
    КонецЕсли;
	
КонецФункции

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

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

		Данные.ДобавитьЗначение(1,"ТипОплаты");	 	//чтобы не запрашивать тип оплаты в отдельном диалоге перед печатью чека, (т.к. тип оплаты вводится в чеке), 1 -  запрашивать тип оплаты в отдельном диалоге перед печатью чека. Для работы этого параметра обязательно передавать параметр Контекст!
		
		Получено = 0;
	 	
		Данные.ДобавитьЗначение(ПринятоОтОснование, "Основание");
		Данные.ДобавитьЗначение(СтавкаНДСПоДокОснованию, "НДСпоУмолч");
	 	Если ПустоеЗначение(ДокумОснование) = 0 Тогда
			Данные.ДобавитьЗначение(ДокумОснование,"Документ");	//ссылка на документ-основание
		КонецЕсли;
	 	Если ПустоеЗначение(Договор) = 0 Тогда
			Данные.ДобавитьЗначение(Договор.Наименование,"Договор");	//договор контрагента
		КонецЕсли;

	Иначе
 		Предупреждение("Нет позиций для вывода в чек ККМ!",60);
 		Возврат
	КонецЕсли;
	//[-] тщи 54ФЗ

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


9) В модуле формы документа СтрокаВыпискиРасход в начале процедуры ВводНового() добавить строчку:
	НомерЧекаККМ  = 0;

Процедура ВводНового(Скопирован) 
	НомерЧекаККМ  = 0;	//тщи

10) На диалог формы документа СтрокаВыпискиРасход ДОБАВИТЬ (т.к. их там нет) реквизиты ТекстНомерЧекаККМ и кнЧек (по аналогии см. документ ПриходныйОрдер)


11) для корректной работы для документа Реализация типовой ТИС, ред. 9.2 нужно в модуле формы документа в процедуре ПоКнопкеПечать() заменить строчку:
		Параметры.ДобавитьЗначение(?((Модифицированность()=0) и (ПустоеЗначение(ТекущийДокумент())=0), ТекущийДокумент(), глВзятьКонтекст(Контекст)), "Контекст");
на
		Параметры.ДобавитьЗначение(глВзятьКонтекст(Контекст), "Контекст");


12) ВНИМАНИЕ!!! Для релиза ТиС 988 или более нового нужно добавить при вызове функции глФРПечататьЧек() два дополнительных пустых аргумента (, "", "") в конце:
глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека, "", "")