Создание внешней печатной формы ПКО Бухгалтерия 3.0 с доработкой поля "корреспондирующий счет,субсчет".

1. Nik TS (Elsveir) 16.05.18 14:29 Сейчас в теме
Доброе время суток, делаю тренировочное задание суть которого заключается в том что бы создать внешнюю печатную форму Приходного кассового ордера и доработать в ней поле "корреспондирующий счет,субсчет" так чтобы в нем отображалась проводка по кредиту документа "Поступление наличных", проблема заключается в том что я не могу понять как эту проводку "взять", думаю что наверняка нужно создать какой-нибудь запрос к регистру бухгалтерии, прошу подсказать в каком направлении копать, буду рад любой полезной информации.




Функция ПолучитьТекстЗапросаДляФормированияПечатнойФормыПКО()
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ПриходныйКассовыйОрдер.Номер,
	|	ПриходныйКассовыйОрдер.Дата КАК ДатаДокумента,
	|	ПриходныйКассовыйОрдер.Ссылка,
	|	ПриходныйКассовыйОрдер.Организация,
	|	ПриходныйКассовыйОрдер.СчетКасса,
	|	ПриходныйКассовыйОрдер.СчетУчетаРасчетовСКонтрагентом,
	|	ПриходныйКассовыйОрдер.Контрагент,
	|	ПриходныйКассовыйОрдер.ВидОперации,
	|	ПриходныйКассовыйОрдер.Контрагент.Представление КАК Контрагент,
	|	ПриходныйКассовыйОрдер.ПринятоОт КАК ПринятоОт,
	|	ПриходныйКассовыйОрдер.Основание КАК Основание,
	|	ПриходныйКассовыйОрдер.Приложение КАК Приложение,
	|	ПриходныйКассовыйОрдер.СуммаДокумента КАК Сумма,
	|	ПриходныйКассовыйОрдер.ВалютаДокумента,
	|	ПриходныйКассовыйОрдер.ВалютаДокумента.Представление КАК ВалютаПредставление,
	|	ПриходныйКассовыйОрдер.ПодразделениеОрганизации,
	|	ВЫБОР
	|		КОГДА ПриходныйКассовыйОрдер.ПодразделениеОрганизации.НаименованиеПолное ПОДОБНО """"
	|			ТОГДА ПриходныйКассовыйОрдер.ПодразделениеОрганизации.Наименование
	|		ИНАЧЕ ПриходныйКассовыйОрдер.ПодразделениеОрганизации.НаименованиеПолное
	|	КОНЕЦ КАК ПредставлениеПодразделения,
	|	ПриходныйКассовыйОрдер.СтавкаНДС,
	|	ПриходныйКассовыйОрдер.РасшифровкаПлатежа.(
	|		Ссылка,
	|		НомерСтроки,
	|		ДоговорКонтрагента,
	|		Сделка,
	|		КурсВзаиморасчетов,
	|		СуммаПлатежа,
	|		КратностьВзаиморасчетов,
	|		СуммаВзаиморасчетов,
	|		СтавкаНДС,
	|		СуммаНДС,
	|		СтатьяДвиженияДенежныхСредств,
	|		СчетУчетаРасчетовСКонтрагентом,
	|		СчетУчетаРасчетовПоАвансам,
	|		СчетНаОплату,
	|		СпособПогашенияЗадолженности
	|	)
	|ИЗ
	|	Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
	|ГДЕ
	|	ПриходныйКассовыйОрдер.Ссылка В(&МассивОбъектов)
	|
	|УПОРЯДОЧИТЬ ПО
	|	ПриходныйКассовыйОрдер.Дата,
	|	ПриходныйКассовыйОрдер.Ссылка,
	|	ПриходныйКассовыйОрдер.РасшифровкаПлатежа.НомерСтроки";
	
	Возврат ТекстЗапроса;
	
КонецФункции

// Функция формирует табличный документ с печатной формой ПКО
//
// Возвращаемое значение:
//  Табличный документ - печатная форма
//
Функция ПечатьПКО(МассивОбъектов, ОбъектыПечати)
	Перем ПодразделениеОтветственныхЛиц;
	
	УстановитьПривилегированныйРежим(Истина);
	
	ВалютаРегламентированногоУчета = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета();
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйКассовыйОрдер_КО1";
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_КО1");
	
	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыПКО();
	
	// Введенно пользователем начало
	//  
	//ЗапросКт = Новый Запрос();
	//ЗапросКт.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	//ЗапросКт.Текст = ЗапросКредит();
	//КредитШапка = ЗапросКт.Выполнить().Выбрать();
	
	//Введено пользователем конец
	
	Шапка = Запрос.Выполнить().Выбрать();
	
	ПервыйДокумент = Истина;
	Пока Шапка.Следующий() Цикл
		
		Если НЕ ПервыйДокумент Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		// Запомним номер строки, с которой начали выводить текущий документ.
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		ЕстьРасчетыСКонтрагентами = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыСКонтрагентами(Шапка.ВидОперации);
		ЕстьРасчетыПоКредитам     = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыПоКредитам(Шапка.ВидОперации);
		
		Валютный = Шапка.ВалютаДокумента <> ВалютаРегламентированногоУчета;
		
		// Выводим шапку ПКО
		СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
		
		ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
		
		ОбластьМакета.Параметры.Заполнить(Шапка);
		ОбластьМакета.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
		
		ОбластьМакета.Параметры.СуммаРубКоп       = ?(Валютный, Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2") + " " + СокрЛП(Шапка.ВалютаДокумента), РубКоп(Шапка.Сумма));
		ОбластьМакета.Параметры.Сумма             = Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2") + ?(Валютный, " " + СокрЛП(Шапка.ВалютаДокумента), "");
		ОбластьМакета.Параметры.СуммаПрописью     = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(Шапка.Сумма, Шапка.ВалютаДокумента);
		
		ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
		ОбластьМакета.Параметры.ДатаДокумента     = Шапка.ДатаДокумента;
		ОбластьМакета.Параметры.НомерДокумента    = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Шапка.Номер, Истина, Ложь);
		
		КодыСчетСубсчет = ОпределитьКодыСчетСубсчет(ВалютаРегламентированногоУчета, Шапка);
		
		ОбластьМакета.Параметры.КодДебета = КодыСчетСубсчет.Дебет;
	
		//Если КодыСчетСубсчет.Кредит = " 62.01, 62.02" ИЛИ " 62.02, 62.02"  Тогда
		//	КодыСчетСубсчет.Кредит = "62.02";
		//Иначе
		//	 КодыСчетСубсчет.Кредит = "62.01";
		// КонецЕсли;
		
		
		 
		        
		//ЕСЛИ НЕ Шапка.СчетУчетаРасчетовСКонтрагентом = NULL     Тогда
			  ОбластьМакета.Параметры.СубСчет  = Шапка.СчетУчетаРасчетовСКонтрагентом;
		//Иначе 
		//	ОбластьМакета.Параметры.СубСчет  = КодыСчетСубсчет.Кредит  ;
		
		   //КонецЕсли;
		 
		//ОбластьМакета.Параметры.СубСчет   = КодыСчетСубсчет.Кредит;
		
		ТабНДС = Шапка.РасшифровкаПлатежа.Выгрузить();
		ТабНДС.Свернуть("СтавкаНДС", "СуммаНДС");
		
		ТекстСуммаНДС = "";
		
		Если ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам 
			ИЛИ Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.РозничнаяВыручка Тогда
			
			Для каждого СтрокаНДС Из ТабНДС Цикл
				ТекстСуммаНДС = ТекстСуммаНДС + Символы.ПС + "НДС ("
					+ ?(НЕ ЗначениеЗаполнено(СтрокаНДС.СтавкаНДС), "без налога", СтрокаНДС.СтавкаНДС) + ") "
					+ Формат(СтрокаНДС.СуммаНДС, "ЧЦ=15;ЧДЦ=2;ЧРД=-;ЧН=0-00") + " " + Шапка.ВалютаПредставление;
			КонецЦикла;
			
		Иначе
			ТекстСуммаНДС = ТекстСуммаНДС + Символы.ПС + "НДС (без налога) "
				+ Формат(0, "ЧЦ=15;ЧДЦ=2;ЧРД=-;ЧН=0-00") + " " + Шапка.ВалютаПредставление;
		КонецЕсли;
		
		ТекстСуммаНДС = Сред(ТекстСуммаНДС, 2);
		
		ОбластьМакета.Параметры.ВТомЧисле = ТекстСуммаНДС;
		
		ПодразделениеОтветственныхЛиц = Шапка.ПодразделениеОрганизации;
		
		ОтветственныеЛица = ОтветственныеЛицаБП.ОтветственныеЛица(Шапка.Организация, Шапка.ДатаДокумента, ПодразделениеОтветственныхЛиц);
		
		ОбластьМакета.Параметры.ФИОГлавногоБухгалтера = ОтветственныеЛица.ГлавныйБухгалтерПредставление;
		ОбластьМакета.Параметры.ФИОКассира            = ОтветственныеЛица.КассирПредставление;
		
		ОбластьМакета.Параметры.ПринятоОт  = Шапка.ПринятоОт;
		ОбластьМакета.Параметры.Основание  = Шапка.Основание;
		ОбластьМакета.Параметры.Приложение = Шапка.Приложение;
		
		ТабличныйДокумент.Вывести(ОбластьМакета);
		
		// В табличном документе зададим имя области, в которую был
		// выведен объект. Нужно для возможности печати покомплектно.
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);
		
	КонецЦикла;
	
	Возврат ТабличныйДокумент;
	
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	// Проверяем, нужно ли для макета ПКО формировать табличный документ.
			
		// Формируем табличный документ и добавляем его в коллекцию печатных форм.
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"ПриходныйКассовыйОрдер_КО1", "ПриходныйКассовыйОрдер_КО1", ПечатьПКО(МассивОбъектов, ОбъектыПечати));
	
	
	ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
КонецПроцедуры

Показать
Прикрепленные файлы:
Шаблон2.epf
Ответы
2. Борис (buriZa) 27 16.05.18 15:38 Сейчас в теме
Добрый день!
1) Этот запрос писали вы или он типовой?
2) Счёта Кт может быть два в одном документе. И 62.01 и 62.02, как тогда выводить строки? По строкам счёт и их суммы или одной строкой и общую сумму в ней?
3) Если задача только в том, что вы описали, то вы можете без обращения в документу в запросе сразу брать виртуальную таблицу Регистры бухгалтерии "Хозрасчетный.ОборотыДтКт". В параметрах виртуальной таблицы указывать УсловияСчётаКт (62.01 и 62.02 (Массивом)) и Условия (СубконтоКт3 = Ссылке на приходник). Этого должно быть достаточно (ещё можно указать Периодичность = Авто, там же в параметрах) (Скрин). И в регистре все данные для печати, вроде, есть.
Прикрепленные файлы:
3. Nik TS (Elsveir) 17.05.18 00:11 Сейчас в теме
Здравствуйте.
1) Запрос типовой, был вырван из документа Приходный кассовый ордер в Бухгалтерии.
2) Если честно над этим не задумывался, думаю удобней по строкам.
3) Спасибо!, попробую сделать отпишусь по результату.
4. Nik TS (Elsveir) 17.05.18 07:50 Сейчас в теме
Пока к сожалению ничего не вышло, вот что сделал добавил новый запрос и через него пытаюсь найти поле.
Функция СчетКт()
	ТекстЗапроса =
	"ВЫБРАТЬ
		|	ХозрасчетныйОборотыДтКт.СчетКт,
		|	ХозрасчетныйОборотыДтКт.СубконтоКт3,
		|	ХозрасчетныйОборотыДтКт.Регистратор
		|ИЗ
		|	РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Авто, , , , , ) КАК ХозрасчетныйОборотыДтКт
		|ГДЕ
		|	&СубконтоКт3 = ЗНАЧЕНИЕ(ПриходныйКассовыйОрдер.СубконтоКт3)
		|	 ХозрасчетныйОборотыДтКт.СчетКт = &СчетКт
		|    
		|    
		|
		|СГРУППИРОВАТЬ ПО
		|	ХозрасчетныйОборотыДтКт.ПериодСекунда,
		|	ХозрасчетныйОборотыДтКт.СчетКт,
		|	ХозрасчетныйОборотыДтКт.СубконтоКт3,
		|	ХозрасчетныйОборотыДтКт.Регистратор";
	Возврат ТекстЗапроса

	
	КонецФункции

Функция ПечатьПКО(МассивОбъектов, ОбъектыПечати)
	Перем ПодразделениеОтветственныхЛиц;
	
	УстановитьПривилегированныйРежим(Истина);
	
	ВалютаРегламентированногоУчета = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета();
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйКассовыйОрдер_КО1";
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_КО1");
	
	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыПКО();
	
	// Введенно пользователем начало
	  
	ЗапросКт = Новый Запрос();
	//ЗапросКт.УстановитьПараметр("СубконтоКт3", СубконтоКт3);
	 Массив = Новый Массив;
	Массив.Добавить("62.01");
	Массив.Добавить("62.02");
	ЗапросКт.УстановитьПараметр("СчетКт", Массив);
	ЗапросКт.Текст = СчетКт();
	КредитШапка = ЗапросКт.Выполнить().Выбрать();
	
	//Введено пользователем конец
	
	Шапка = Запрос.Выполнить().Выбрать();
	
	ПервыйДокумент = Истина;
	Пока Шапка.Следующий() Цикл
		
		Если НЕ ПервыйДокумент Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		// Запомним номер строки, с которой начали выводить текущий документ.
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		ЕстьРасчетыСКонтрагентами = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыСКонтрагентами(Шапка.ВидОперации);
		ЕстьРасчетыПоКредитам     = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыПоКредитам(Шапка.ВидОперации);
		
		Валютный = Шапка.ВалютаДокумента <> ВалютаРегламентированногоУчета;
		
		// Выводим шапку ПКО
		СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
		
		ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
		
		ОбластьМакета.Параметры.Заполнить(Шапка);
		ОбластьМакета.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
		
		ОбластьМакета.Параметры.СуммаРубКоп       = ?(Валютный, Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2") + " " + СокрЛП(Шапка.ВалютаДокумента), РубКоп(Шапка.Сумма));
		ОбластьМакета.Параметры.Сумма             = Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2") + ?(Валютный, " " + СокрЛП(Шапка.ВалютаДокумента), "");
		ОбластьМакета.Параметры.СуммаПрописью     = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(Шапка.Сумма, Шапка.ВалютаДокумента);
		
		ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
		ОбластьМакета.Параметры.ДатаДокумента     = Шапка.ДатаДокумента;
		ОбластьМакета.Параметры.НомерДокумента    = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Шапка.Номер, Истина, Ложь);
		
		КодыСчетСубсчет = ОпределитьКодыСчетСубсчет(ВалютаРегламентированногоУчета, Шапка);
		
		ОбластьМакета.Параметры.КодДебета = КодыСчетСубсчет.Дебет;
	
		//Если КодыСчетСубсчет.Кредит = " 62.01, 62.02" ИЛИ " 62.02, 62.02"  Тогда
		//	КодыСчетСубсчет.Кредит = "62.02";
		//Иначе
		//	 КодыСчетСубсчет.Кредит = "62.01";
		// КонецЕсли;
		
			 ОбластьМакета.Параметры.СубСчет  = КредитШапка.СчетКт;


Показать
5. Борис (buriZa) 27 17.05.18 08:32 Сейчас в теме
(4) Цикл сами заполните, надеюсь. Когда в запросе обращаетесь в параметру Массива и т.п. пишите "В (...)". Посмотрите куры Чистова по запросам, очень доходчиво. Я с них начинал. И можете пробовать пользоваться консолью запросов, в гугле их море.
Счета в регистре, да и почти везде хранятся НЕ как ТИП Строка ("62.01"...), а как ссылка на объект ПланыСчетов.Хозрасчетный...
Я в предыдущем сообщение ошибся, МассивОбъектов, что вы печатаете надо приравнивать к регистратору, а не к СубконтоКт3. Третий субконто счетов 62.01 и 62.02 - это партия. Партия может быть как Приходник денег (в случае аванса 62.02), так и документ реализации товаров (если 62.01 оплата закрывает долг покупателя НЕ авансом).
Функция ПечатьПКО(МассивОбъектов, ОбъектыПечати)
	
	Запрос       = Новый Запрос;
	Запрос.Текст = ПолучитьТекстЗапроса();
	
	Массив62 = Новый Массив;
    Массив62.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателями); // 62.01
    Массив62.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным); // 62.02
	
	Запрос.УстановитьПараметр("Массив62", Массив62);
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	
	РезультатЗапроса = Запрос.Выполнить();
	Шапка            = РезультатЗапроса.Выбрать();
	
	Пока Шапка.Следующий() Цикл
		
		// к примеру у вас 2а документа, в одном СчётКт = 62.02, во втором 62.01 и 62.02
		// При выполение запроса получим три строки
		// Обойдите в цикле, но не забывайте про мой 2й вопрос и берите НЕ сумму документа, а СуммаОборот из запроса
		// т.к. во втором документе сумма документа может = 10 руб., а по запросу и проводкам на 62.01 = 4 руб. | на 62.02 = 6 руб.
		
	КонецЦикла;
		
КонецФункции // ПечатьПКО()

Функция ПолучитьТекстЗапроса()
	
	Текст = 
	"ВЫБРАТЬ
	|	ХозрасчетныйОборотыДтКт.Регистратор КАК Регистратор,
	|	ХозрасчетныйОборотыДтКт.СубконтоКт3 КАК ДокументПартии,
	|	ХозрасчетныйОборотыДтКт.СчетКт КАК СчетКт,
	|	СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК СуммаОборот
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Авто, , , СчетКт В (&Массив62), , ) КАК ХозрасчетныйОборотыДтКт
	|ГДЕ
	|	ХозрасчетныйОборотыДтКт.Регистратор В(&МассивОбъектов)
	|
	|СГРУППИРОВАТЬ ПО
	|	ХозрасчетныйОборотыДтКт.СчетКт,
	|	ХозрасчетныйОборотыДтКт.Регистратор,
	|	ХозрасчетныйОборотыДтКт.СубконтоКт3";
	
	Возврат Текст;
	
КонецФункции // ПолучитьТекстЗапроса()
Показать
6. Nik TS (Elsveir) 17.05.18 08:44 Сейчас в теме
Спасибо!, сейчас попробую реализовать,
с запросами у меня действительно не очень.....
Оставьте свое сообщение