Отчет по командировкам, итого по счетам.

1. jeniks 02.11.16 10:22 Сейчас в теме
Отчет по командировкам формирует расходы согласно документу Авансовый отчет. Итого по месяцам сделано, определены столбцы по виду затрат, нужно в этом отчете формировать: сколько пошло и на какой корреспондирующий счет за месяц.
Сам отчет:
Перем ДатаДеноминации;
Процедура Сформировать()

	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ.НоваяКолонка("Дата");
	ТЗ.НоваяКолонка("КомуЗаЧто");
	ТЗ.НоваяКолонка("Сумма");   
	Если ЦелевоеНазначение.Выбран()=0 Тогда
		Предупреждение("ВЫбрать целевое назначение");
		Возврат;
		СтатусВозврата(0);
		
		
	КонецЕсли;	

	//	
	
	
	Док = СоздатьОбъект("Документ.АвансовыйОтчет");
	Док.ВыбратьДокументы(ДатаНач,ДатаКон);    
	
	Пока Док.ПолучитьДокумент() = 1 Цикл
		Если Док.Проведен() = 1 Тогда          
			Если 	(Док.Цель=ЦелевоеНазначение) Тогда	
				Если ((Счет=1)и(Док.ТипОтчета = 1)) 
				или ((Счет=2)и(Док.ТипОтчета = 2))  Тогда
					
					Док.ВыбратьСтроки();
					Пока Док.ПолучитьСтроку() =1 Цикл
						
						ТЗ.НоваяСтрока();
					//	ТЗ.Дата =СокрЛП(Формат(Док.ДатаДок ,"ДММММГГГГ"));
						ТЗ.Дата =СокрЛП(Формат(Док.ДатаДок ,"ДММММГГГГ"));
						ТЗ.КомуЗаЧто = Док.КомуЗаЧто1;  
						ДатаДеноминации = Дата("01.07.2016");
						Если Док.ДатаДок < ДатаДеноминации Тогда
							
						ТЗ.Сумма = Док.Сумма/10000
					Иначе
						ТЗ.Сумма = Док.Сумма;
						КонецЕсли
						
						
					КонецЦикла;				
				
				КонецЕсли;	
			
			КонецЕсли;	
	
		Иначе
			Продолжить;
		Конецесли;	
	КонецЦикла; 		            
	

   
	Таб = СоздатьОбъект("Таблица");
	Таб.ВывестиСекцию("Шапка"); 
	//
	ТЗ_ИтогПоДню = СоздатьОбъект("ТаблицаЗначений");
	ТЗ_ИтогПоДню.Загрузить(ТЗ);
	ТЗ_ИтогПоДню.Свернуть("Дата", "Сумма");
	//
	//
	ТЗ_ИтогПоКОМУ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ_ИтогПоКому.Загрузить(ТЗ);
	ТЗ_ИтогПоКому.Свернуть("Комузачто", "Сумма");
	//
	Таб.ПрисоединитьСекцию("Шапка_г|Шапка_в");
	ТЗ_ИтогПоКому.ВыбратьСтроки();
	Пока ТЗ_ИтогПоКому.ПолучитьСтроку() = 1 Цикл
		Таб.ПрисоединитьСекцию("Шапка_г|КомуЗаЧто");
	КонецЦикла;  
	Таб.ПрисоединитьСекцию("Шапка_г|ИтогПоДню");
	
	
	 	ТЗ.Свернуть("Дата,Комузачто", "Сумма");
	
	ТЗ_ИтогПоДню.ВыбратьСтроки();
	Пока ТЗ_ИтогПоДню.ПолучитьСтроку() = 1 Цикл
   
		Таб.ВывестиСекцию("Дата|Шапка_в");
		
		ТЗ_ИтогПоКому.ВыбратьСтроки();
		Пока ТЗ_ИтогПоКому.ПолучитьСтроку() = 1 Цикл
			
			ПрТТ = 0;
			
			ТЗ.ВыбратьСтроки();
			Пока ТЗ.ПолучитьСтроку() = 1 Цикл 
				Если (ТЗ.КомуЗаЧто <> ТЗ_ИтогПоКому.КомуЗаЧто)  или
				(ТЗ.Дата <> ТЗ_ИтогПоДню.Дата)  Тогда
					Продолжить;
				Иначе
					Таб.ПрисоединитьСекцию("Дата|КомуЗаЧто");
					ПрТТ = 1;
					Прервать;
				КонецЕсли;
			КонецЦикла; 
			
			Если ПрТТ = 0 Тогда
				Таб.ПрисоединитьСекцию("Дата|Пусто");
			КонецЕсли;                         
			
		КонецЦикла;
		
		Таб.ПрисоединитьСекцию("Дата|ИтогПоДню");
		
	КонецЦикла;
	
	
	Всего = 0;	
	
	Таб.ВывестиСекцию("Итог|Шапка_в");
	ТЗ_ИтогПоКому.ВыбратьСтроки();
	Пока ТЗ_ИтогПоКому.ПолучитьСтроку() = 1 Цикл
		Таб.ПрисоединитьСекцию("Итог|КомуЗаЧто");
		Всего = Всего + ТЗ_ИтогПоКому.Сумма;
	КонецЦикла;  
	Таб.ПрисоединитьСекцию("Итог|ИтогПоДню"); 
	
	Таб.Опции(0,0);
	Таб.Показать("Отчет по кас. аппарату");
	
КонецПроцедуры  
//_______________________
Процедура ПриОткрытии()
	ДатаНач = НачМесяца(ТекущаяДата());
	ДатаКон = КонМесяца(ТекущаяДата());
	Счет=1;
КонецПроцедуры
Показать


Интересуют может запросом или ещё как-то сформировать такие данные?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. jeniks 03.11.16 12:16 Сейчас в теме
Хорошо, это я увидел.
Формирует по месяцам затраты, на разные счета, как мне посчитать сумму по счетам?
Там в документе есть только по конкретному человеку за период сумма затрат и на какой счет. А мне надо за весь месяц, скольку куда пошло.
АвансовыйОтчет
Перем ТаблицаПечФорм,НомерТекущейФормы;  // список печатных форм документа
Перем НачальнаяДатаДокумента,Новый;
Перем Сч18; // ПС 28.07.09      
Перем сФормат,сПропись;

//******************************************************************************
//()
// Параметры:
// Возвращаемое значение: 
// Описание:
Функция ОборотЗаголовок()
	Если Выбран() = 1 Тогда
		стрОборот = "АВАНСОВЫЙ ОТЧЕТ № "+глПреобразоватьНомерДок(НомерДок)
		+" от "+Формат(ДатаДок,"ДДДММГГГГ") + ?(Сотрудник.Выбран()=0,"",": " +Сотрудник);
	Иначе	
		стрОборот = "АВАНСОВЫЙ ОТЧЕТ (новый)";
	КонецЕсли;
	Возврат стрОборот
КонецФункции         
//-----------------------------------------------------------------------------
Процедура ПриУстановкеТипаОтчета()
	
	Если ТипОтчета = 2 Тогда // валютный отчет
		Форма.Заголовок(", валютный, "+Валюта+" (по К-ту 71.2)",1);
		Форма.ИспользоватьСлой("Основной, Шапка, Вал",2);
		Форма.ВалСумма.Видимость(1);
		Форма.ВалНДС.Видимость(1);
		Форма.Сумма.Доступность(0);
		Форма.НДС.Доступность(0);
	Иначе
		Форма.Заголовок(", рублевый (по К-ту 71.1)",1);
		Форма.ИспользоватьСлой("Основной, Шапка",2);
		Форма.ВалСумма.Видимость(0);
		Форма.ВалНДС.Видимость(0);
		Форма.Сумма.Доступность(1);
		Форма.НДС.Доступность(1);     
		
		Пропись(Константа.ОсновнаяВалюта.ИмяФайлаПрописи);
		Если (ДатаДок<Константа.ДатаДеноминации) или (Константа.ДатаДеноминации=Дата(0)) Тогда
			сФормат = "Ч19  ";
			сПропись = "ЧПД";   
		Иначе
			сФормат = "Ч19.2.";
			сПропись = "ЧПДС";   
		КонецЕсли;	
		

	КонецЕсли;
КонецПроцедуры   
//
Процедура ПривыбореПоставщика()                                                      
	Если Кому.Выбран()=1 тогда
		Если (ПустоеЗначение(КомуЗаЧто)=1) ИЛИ (Найти(КомуЗаЧто,СокрЛП(Кому.Наименование))=0) тогда
			КомуЗаЧто = СокрЛП(Кому.Наименование)+", "+СокрЛП(КомуЗаЧто);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры   
//-----------------------------------------------------------------------------
Функция ПоказатьКурс()
	Перем Стр;
	Если Валюта.Выбран() = 1 Тогда
		Стр = Валюта.Курс.Получить(ДатаДок);
	Иначе
		Стр = "";
	КонецЕсли;
	Возврат Стр;
КонецФункции
//-----------------------------------------------------------------------------
Процедура РасчитатьПредыдущийОстаток()
	БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
	БухИт.ИспользоватьСубконто(ВидыСубконто.Сотрудники,Сотрудник,2);
	БухИт.ИспользоватьСубконто(ВидыСубконто.ЦелевоеНазначение,Цель,2);
	Если ТипОтчета = 1 Тогда
		БухИт.ВыполнитьЗапрос(?(Выбран()=1,ТекущийДокумент(),ДатаДок),,"71.1");
		ОстатокПоСчету = БухИт.СНД("С") - БухИт.СНК("С");
	Иначе
		БухИт.ВыполнитьЗапрос(?(Выбран()=1,ТекущийДокумент(),ДатаДок),,"71.2",,Валюта);
		ОстатокПоСчету = БухИт.СНД("В") - БухИт.СНК("В");
	КонецЕсли;
	ОстатокПоСчету = ОстатокПоСчету - Сумма1 - Сумма2 - Сумма3;
	Если ОстатокПоСчету < 0 Тогда
		ТипОстатка = 2; //Перерасход
		ПредОстаток = - ОстатокПоСчету;
	Иначе
		ТипОстатка = 1; //Остаток
		ПредОстаток = ОстатокПоСчету;
	КонецЕсли;
КонецПроцедуры //РасчитатьПредыдущийОстаток
//-----------------------------------------------------------------------------
Функция РасчетОстатка()
	Ост = Сумма1 + Сумма2 + Сумма3;
	
	Если ТипОтчета = 1 Тогда //рублевый
		Ост = Ост - Итог("Сумма");
	Иначе //валютный
		Ост = Ост - Итог("ВалСумма");
	КонецЕсли;
	
	Если ТипОстатка = 1 Тогда //остаток
		Ост = Ост + ПредОстаток;
	Иначе //перерасход
		Ост = Ост - ПредОстаток;
	КонецЕсли;
	Возврат Ост;
КонецФункции  //РасчетОстатка   
 
//-----------------------------------------------------------------------------

Процедура Пересчет(ИмяРеквизита)  
	
	Если (ИмяРеквизита = "Субконто1") Тогда
		
		Если Субконто1.Вид() = СокрЛП(ВидыСубконто.Материалы) Тогда 
			Если ТипОтчета = 2 Тогда // валютный
				ВалСумма = ?(Субконто1.Цена=0,Сумма,Субконто1.Цена*Количество);
			Иначе
				Сумма = ?(Субконто1.Цена=0,Сумма,Субконто1.Цена*Количество);
			КонецЕсли;
		КонецЕсли;	 
		
	ИначеЕсли (ИмяРеквизита = "Субконто2") Тогда  
		
		Если Субконто2.Вид() = СокрЛП(ВидыСубконто.Материалы) Тогда 
			Сумма_ = ?(Субконто2.Цена=0,Сумма,Субконто2.Цена*Количество);
			Если ТипОтчета = 2 Тогда
				ВалСумма = Сумма_; 	
			Иначе
				Сумма = Сумма_;  
			КонецЕсли;
		КонецЕсли;
		
	ИначеЕсли (ИмяРеквизита = "Субконто3") Тогда 
		
		Если Субконто3.Вид() = СокрЛП(ВидыСубконто.Материалы) Тогда  
			Сумма_ = ?(Субконто3.Цена=0,Сумма,Субконто3.Цена*Количество); 
			Если ТипОтчета = 2 Тогда  
				ВалСумма = Сумма_; 
			Иначе
				Сумма = Сумма_; 
			КонецЕсли;
		КонецЕсли;
		
	ИначеЕсли (ИмяРеквизита = "Количество") Тогда
		
		Если Субконто1.Вид() = СокрЛП(ВидыСубконто.Материалы) Тогда 
			Цена1 = Субконто1.Цена;
		ИначеЕсли Субконто2.Вид() = СокрЛП(ВидыСубконто.Материалы) Тогда
			Цена1 = Субконто2.Цена;
		ИначеЕсли Субконто3.Вид() = СокрЛП(ВидыСубконто.Материалы) Тогда
			Цена1 = Субконто3.Цена;
		КонецЕсли;	
		Сумма_ = ?(Цена1 = 0,Сумма,Цена1*Количество);
		Если ТипОтчета = 2 Тогда 
			ВалСумма = Сумма_;	
		Иначе
			Сумма = Сумма_;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

//-----------------------------------------------------------------------------
Процедура ПриВыбореСчета()
	
	Если юСчетВключенВРабочийПлан(КоррСчет, ДатаДок, 1) = 1  Тогда
	
	Иначе
		КоррСчет ="";
	КонецЕсли;
	
	
	
	НазначитьТип("Субконто1", КоррСчет.ВидСубконто(1));
	НазначитьТип("Субконто2", КоррСчет.ВидСубконто(2));
	НазначитьТип("Субконто3", КоррСчет.ВидСубконто(3));
	
	Форма.Количество.Доступность(КоррСчет.Количественный);
	Если КоррСчет.Количественный = 0 Тогда
		Количество = 0;
	КонецЕсли;
	
	Если (КоррСчет.Валютный = 1) и (ТипОтчета = 1) Тогда
		Предупреждение("Корреспондирующий счет не может быть валютным.");
	КонецЕсли;   
	Если (КоррСчет=Счетпокоду(25.1))  или  (КоррСчет=Счетпокоду(23.2))  Тогда
		На20=Перечисление.ДаНет.Да;
	Иначе
		На20=Перечисление.ДаНет.НЕТ;	
	КонецЕсли;	
КонецПроцедуры
//-----------------------------------------------------------------------------
Процедура РассчитатьСумму()
	Если Валюта.Выбран() = 1 Тогда
		КурсВал = Валюта.Курс.Получить(ДатаДок);
		КратностьВал = Валюта.Кратность.Получить(ДатаДок);
	Иначе
		КурсВал = 0;
		КратностьВал = 1;
	КонецЕсли;
	Сумма = ВалСумма*КурсВал/?(КратностьВал=0,1,КратностьВал);
	НДС = ВалНДС*КурсВал/?(КратностьВал=0,1,КратностьВал);
КонецПроцедуры //РассчитатьСумму
//-----------------------------------------------------------------------------
Процедура ВводНового(Копирование);
	Новый = 1;
	Если Копирование = 1 Тогда
		Возврат;
	КонецЕсли;
	
	ТипОтчета = 1;
	Валюта = глЗначениеПоУмолчанию("ОсновнаяВалюта");
	ТипОстатка = 1;
КонецПроцедуры
//-----------------------------------------------------------------------------
Процедура ПриОткрытии()
	ПриЗаписиПерепроводить(1);
	глПроверкаРазрешенияРедактирования(Контекст);
	Если Форма.ТолькоПросмотр() = 1 Тогда
		Форма.КнопкаОК.Доступность(0);
		Форма.КнопкаПоУмолчанию("КнЗакрыть");
	КонецЕсли;
	НачальнаяДатаДокумента = ДатаДок;
	Форма.КоррСчет.ВыборГруппы(0);
	Форма.ИспользоватьЗакладки(1);
	Форма.Закладки.ДобавитьЗначение(1,"Лицевая сторона");
	Форма.Закладки.ДобавитьЗначение(2,"Оборотная сторона");
	ПриУстановкеТипаОтчета(); 
	Форма.тОборот.Заголовок(ОборотЗаголовок()); // ПС 14.09.09
	// Заполним таблицу для выбора печатной формы
	НомерТекущейФормы = глУстановкаКнопкиПечать(Контекст, "Документ." + Вид(),ТаблицаПечФорм);
КонецПроцедуры
//-----------------------------------------------------------------------------
Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
	Если ЗначениеЗакладки = 1 Тогда
		ПриУстановкеТипаОтчета();
	Иначе
		Форма.ИспользоватьСлой("Основной, Таблица",2);
		Форма.Валюта.Видимость(0);
		Форма.Курс.Видимость(0);
		Форма.РамкаВалюты.Видимость(0);
		Форма.тОборот.Заголовок(ОборотЗаголовок()); // ПС 14.09.09
	КонецЕсли;
КонецПроцедуры
//-----------------------------------------------------------------------------
Процедура Печать() 
	
		Пропись(Константа.ОсновнаяВалюта.ИмяФайлаПрописи);
		Если (ДатаДок<Константа.ДатаДеноминации) или (Константа.ДатаДеноминации=Дата(0)) Тогда
			сФормат = "Ч19  ";
			сПропись = "ЧПД";   
		Иначе
			сФормат = "Ч19.2.";
			сПропись = "ЧПДС";   
		КонецЕсли;	
		
	Если (Выбран() = 1) и (Модифицированность() = 0) Тогда 
		// записанный документ и без изменений
	ИначеЕсли Вопрос("Печатную форму можно получить только для записанного
	|авансового отчета. Записать документ?","Да+Нет") = "Да" Тогда
		Если глМожноЗаписатьДокумент(Контекст) = 0 тогда
			Возврат;
		Иначе	
			Записать();                               
		КонецЕсли;
	Иначе
		Возврат;
	КонецЕсли;
	стрНомерДок = глПреобразоватьНомерДок(НомерДок); // ПС 14.09.09
	// {Изм., релиз 10.01.2 ПС 13.01.10  
	пДата     = СтрЗаменить(СтрЗаменить(юШаблонДатыДляРучногоЗаполнения(ДатаДок),"__",". "),"_",". "); 
	// пс}
	
	Таб=СоздатьОбъект("Таблица"); 
  	ИмяФайлаПечатнойФормы = КаталогИБ()+"ExtForms\PrnForms\ju_av.mxl";
  	Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
  		Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
  	Иначе
		Таб.ИсходнаяТаблица("Таблица");
	КонецЕсли;
	
	Таб.ВывестиСекцию("Заголовок");
	
	СтрПредОстаток = "" + ?(ТипОтчета=1,Формат(ПредОстаток,сформат),Формат(ПредОстаток,"Ч015.2. "));
	Если (ТипОтчета = 2) и (ПустоеЗначение(СтрПредОстаток) = 0) Тогда
		СтрПредОстаток = СтрПредОстаток + " " + СокрЛП(Валюта.Наименование);
	КонецЕсли;
	Если ТипОстатка = 1 Тогда
		СтрНачальныйОстаток = СтрПредОстаток;
		СтрНачальныйПерерасход = "";
	Иначе
		СтрНачальныйОстаток = "";
		СтрНачальныйПерерасход = СтрПредОстаток;
	КонецЕсли;
	 
	
	
	
	СтрСумма1 = "" + ?(ТипОтчета=1,Формат(Сумма1,Сформат),Формат(Сумма1,"Ч015.2. "));
	Если (ТипОтчета = 2) и (ПустоеЗначение(СтрСумма1) = 0) Тогда
		СтрСумма1 = СтрСумма1 + " " + СокрЛП(Валюта.Наименование);
	КонецЕсли;
	СтрСумма2 = "" + ?(ТипОтчета=1,Формат(Сумма2,Сформат),Формат(Сумма2,"Ч015.2. "));
	Если (ТипОтчета = 2) и (ПустоеЗначение(СтрСумма2) = 0) Тогда
		СтрСумма2 = СтрСумма2 + " " + СокрЛП(Валюта.Наименование);
	КонецЕсли;
	СтрСумма3 = "" + ?(ТипОтчета=1,Формат(Сумма3,Сформат),Формат(Сумма3,"Ч015.2. "));
	Если (ТипОтчета = 2) и (ПустоеЗначение(СтрСумма3) = 0) Тогда
		СтрСумма3 = СтрСумма3 + " " + СокрЛП(Валюта.Наименование);
	КонецЕсли;
	СтрИтогоПолучено = "" + ?(ТипОтчета=1,Формат(Сумма1 + Сумма2 + Сумма3,Сформат),Формат(Сумма1 + Сумма2 + Сумма3,"Ч015.2. "));
	Если (ТипОтчета = 2) и (ПустоеЗначение(СтрИтогоПолучено) = 0) Тогда
		СтрИтогоПолучено = СтрИтогоПолучено + " " + СокрЛП(Валюта.Наименование);
	КонецЕсли;
	
	Если ТипОтчета = 2 Тогда
		СтрИзрасходовано = "" + Формат(Итог("ВалСумма"),"Ч015.2. ");
		Пропись(Валюта.ИмяФайлаПрописи);
		СтрИзрасходованоПрописью = Формат(Итог("ВалСумма"),"ЧПДС");
		Пропись("");
	Иначе
		СтрИзрасходовано = "" + Формат(Итог("Сумма"),Сформат);
		СтрИзрасходованоПрописью = Формат(Итог("Сумма"),спропись);
	КонецЕсли;
	Если (ТипОтчета = 2) и (ПустоеЗначение(СтрИзрасходовано) = 0) Тогда
		СтрИзрасходовано = СтрИзрасходовано + " " + СокрЛП(Валюта.Наименование);
	КонецЕсли;
	
	ТекОстаток = РасчетОстатка();
	СтрТекОстаток = "" + ?(ТипОтчета=1,Формат(?(ТекОстаток>0,ТекОстаток,-ТекОстаток),сформат),Формат(?(ТекОстаток>0,ТекОстаток,-ТекОстаток),"Ч015.2. "));
	Если (ТипОтчета = 2) и (ПустоеЗначение(СтрТекОстаток) = 0) Тогда
		СтрТекОстаток = СтрТекОстаток + " " + СокрЛП(Валюта.Наименование);
	КонецЕсли;
	Если ТекОстаток > 0 Тогда
		СтрКонечныйОстаток = СтрТекОстаток;
		СтрКонечныйПерерасход = "";
	Иначе
		СтрКонечныйОстаток = "";
		СтрКонечныйПерерасход = СтрТекОстаток;
	КонецЕсли;
	
	НомерСтрокиТаблицы = 1;
	
	Если ТипОтчета = 2 Тогда
		БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
		БухИт.ИспользоватьСубконто(ВидыСубконто.Сотрудники,Сотрудник,2);
		БухИт.ВыполнитьЗапрос(ТекущийДокумент(),,"71.2",,Валюта);
		РублевыйОстаток = БухИт.СНД("С") - БухИт.СНК("С");
		ВалютныйОстаток = БухИт.СНД("В") - БухИт.СНК("В");
		КурсВал = Валюта.Курс.Получить(ДатаДок);
		Кратность = Валюта.Кратность.Получить(ДатаДок);
		Кратность = ?(Кратность=0,1,Кратность);
		НовыйРублевыйОстаток = Окр(ВалютныйОстаток*КурсВал/Кратность,2,1);
		КурсоваяРазница = НовыйРублевыйОстаток - РублевыйОстаток;
		
		Если КурсоваяРазница <> 0 Тогда
			//Таб.ВывестиСекцию("Секция_"+НомерСтрокиТаблицы+"|ДоТаблицы");
			//Таб.ПрисоединитьСекцию("КурсоваяРазница|Таблица");
			//НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;
		КонецЕсли;
	КонецЕсли;
	
//	Таб.ВывестиСекцию("Секция_"+НомерСтрокиТаблицы+"|ДоТаблицы");
//	Таб.ПрисоединитьСекцию("Израсходовано|Таблица");
//	НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;
	
	//Если ТипОтчета = 2 Тогда
	//	Таб.ВывестиСекцию("Секция_"+НомерСтрокиТаблицы+"|ДоТаблицы");
	//	Таб.ПрисоединитьСекцию("ВалИзрасходовано|Таблица");
	//	НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;
	//КонецЕсли;
	
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с (ТекущийДокумент()) по (ТекущийДокумент());
	|ОбрабатыватьДокументы все;
	|КоррСчет = Документ.АвансовыйОтчет.КоррСчет;  
	|Субконто1 = Документ.АвансовыйОтчет.Субконто1;
	|Субконто2 = Документ.АвансовыйОтчет.Субконто2;
	|Субконто3 = Документ.АвансовыйОтчет.Субконто3;
	|Сумма = Документ.АвансовыйОтчет.Сумма;
	|НДС = Документ.АвансовыйОтчет.НДС; 
	|Функция ИтогоПоСчету = Сумма(Сумма);
	|Функция НДСПоСчету = Сумма(НДС); 
	|Группировка КоррСчет;
	//|Группировка Субконто1;  // Закомментировано ПЕ 07.09.09 
	//|Группировка Субконто2;
	//|Группировка Субконто3; 
	|"//}}ЗАПРОС
	;
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;  

	ТаблЗнСчет = СоздатьОбъект("ТаблицаЗначений");
	
	ТаблЗнСчет.НоваяКолонка("КоррСчет");
	ТаблЗнСчет.НоваяКолонка("ПоСчетуБезНДС");       
	
	ТаблЗнРодСчет = СоздатьОбъект("ТаблицаЗначений");
	
	ТаблЗнРодСчет.НоваяКолонка("КоррСчетРодитель");
	ТаблЗнРодСчет.НоваяКолонка("ПоСчетуБезНДС");
	
	Пока (Запрос.Группировка("КоррСчет") = 1) Цикл 
		
		Если ТипОтчета = 1 Тогда
			ПоСчетуБезНДС = Запрос.ИтогоПоСчету - Запрос.НДСПоСчету;
		Иначе
			ПоСчетуБезНДС = Запрос.ИтогоПоСчету - Запрос.НДСПоСчету;
		КонецЕсли;
		
		КоррСчет_ = Запрос.КоррСчет;
		КоррСчетРодитель_ = КоррСчет_.Родитель(1);
		ЭтоГруппа = КоррСчет_.ЭтоГруппа();
		
		Если (КоррСчет_ = КоррСчетРодитель_) Тогда    // в таблицу счетов-родителей
			ТаблЗнРодСчет.НоваяСтрока();
			
			ТаблЗнРодСчет.КоррСчетРодитель = КоррСчетРодитель_;
			ТаблЗнРодСчет.ПоСчетуБезНДС = ПоСчетуБезНДС;
			
			Если ЭтоГруппа = 0 Тогда
				ТаблЗнСчет.НоваяСтрока();
				
				ТаблЗнСчет.КоррСчет = КоррСчет_;
				ТаблЗнСчет.ПоСчетуБезНДС = ПоСчетуБезНДС;
			КонецЕсли;
			
		Иначе 											// в таблицу счетов
			ТаблЗнСчет.НоваяСтрока();
			
			ТаблЗнСчет.КоррСчет = КоррСчет_;
			ТаблЗнСчет.ПоСчетуБезНДС = ПоСчетуБезНДС;
		КонецЕсли;

	КонецЦикла;     
	            
	КолСчетов = ТаблЗнСчет.КоличествоСтрок();
	
	Если КолСчетов > 7 Тогда         // ПЕ 07.09.09 из таблицы с счетами-родителями
		
		ТаблЗнРодСчет.ВыбратьСтроки();
		
		Пока ТаблЗнРодСчет.ПолучитьСтроку()=1 Цикл
			Таб.ВывестиСекцию("Секция_"+НомерСтрокиТаблицы+"|ДоТаблицы");
			КоррСчетВыв = ТаблЗнРодСчет.КоррСчетРодитель; 
			ПоСчетуБезНДС = ТаблЗнРодСчет.ПоСчетуБезНДС;
		
			Таб.ПрисоединитьСекцию("НеПустаяСтрока|Таблица"); 
			
			НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;
			
			Если НомерСтрокиТаблицы > 7 Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
	Иначе                       // из таблицы с счетами
		 
		ТаблЗнСчет.ВыбратьСтроки();
		
		Пока ТаблЗнСчет.ПолучитьСтроку()=1 Цикл
			Таб.ВывестиСекцию("Секция_"+НомерСтрокиТаблицы+"|ДоТаблицы");
			КоррСчетВыв = ТаблЗнСчет.КоррСчет; 
			ПоСчетуБезНДС = ТаблЗнСчет.ПоСчетуБезНДС;
			
			Таб.ПрисоединитьСекцию("НеПустаяСтрока|Таблица"); 
			
			НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1; 
			
			Если НомерСтрокиТаблицы > 7 Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;

	КонецЕсли;
	
	Если (НомерСтрокиТаблицы <= 12) и (Итог("НДС") > 0) Тогда
		Таб.ВывестиСекцию("Секция_"+НомерСтрокиТаблицы+"|ДоТаблицы");
		Если ТипОтчета = 1 Тогда
			ИтогоНДС = Итог("НДС");
		Иначе
			ИтогоНДС = Итог("НДС");
		КонецЕсли;
		Таб.ПрисоединитьСекцию("НДС|Таблица");
		НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;
	КонецЕсли;
	
	Пока НомерСтрокиТаблицы <8 Цикл Таб.ВывестиСекцию("Секция_"+НомерСтрокиТаблицы); 
		НомерСтрокиТаблицы = НомерСтрокиТаблицы+1; 
	КонецЦикла;
	Таб.ВывестиСекцию("Секция_8");
	Таб.ВывестиСекцию("Секция_9|ДоТаблицы");
	Таб.ПрисоединитьСекцию("Израсходовано|Таблица");
	Если ТипОтчета = 1 Тогда Таб.ВывестиСекцию("Секция_10");
	Иначе  Таб.ВывестиСекцию("Секция_10|ДоТаблицы");Таб.ПрисоединитьСекцию("ВалИзрасходовано|Таблица"); КонецЕсли;
	Таб.ВывестиСекцию("Секция_11");
	Таб.ВывестиСекцию("Секция_12");
			
	Таб.ВывестиСекцию("ПослеТаблицы");
	Если ПереводСтраницы=1 Тогда
		Таб.НоваяСтраница();
	КонецЕсли;
	Таб.ВывестиСекцию("Шапка");
	ВыбратьСтроки();
	Пока ПолучитьСтроку()=1 Цикл
		Таб.ВывестиСекцию("Строка");
	КонецЦикла;
	Таб.ВывестиСекцию("Подвал");
	Таб.Опции(0,0,0,0,"ОпцииПечатиАвансовогоОтчета","ПараметрыОкнаАвансовогоОтчета");
	Таб.ТолькоПросмотр(1); 
	Таб.ПараметрыСтраницы(1,,,20,5,5,,,,1);
	//ПараметрыСтраницы(,,,20,5,20,,,,);
	Таб.Показать("Авансовый отчет","");
КонецПроцедуры
//-----------------------------------------------------------------------------
Процедура ПриЗаписи()
	Если глМожноЗаписатьДокумент(Контекст) = 0 Тогда
		СтатусВозврата(0);
		Возврат;
	ИначеЕсли глКонтрольДатыДокумента(Контекст, НачальнаяДатаДокумента) = 1 Тогда
		СтатусВозврата(0);
		Возврат;
	КонецЕсли;
	ВыбратьСтроки();
	Пока ПолучитьСтроку() = 1 Цикл
		Если ТипОтчета = 1 Тогда
			ВалСумма = 0;
		КонецЕсли;
	КонецЦикла;
	Операция.СуммаОперации = Итог("Сумма");
	Операция.Содержание = "Авансовый отчет: "+Сотрудник;
КонецПроцедуры
//----------------------------------------------------------------------------- 
Процедура ПриЗакрытии()
	глОткрытьЖурнал(Контекст, Новый);	
КонецПроцедуры // ПриЗакрытии()  
Процедура ВводНаОсновании(ДокОснование)
    Новый = 1;
	ТипОтчета = 1;
	Валюта = глЗначениеПоУмолчанию("ОсновнаяВалюта");
	ТипОстатка = 1;
	Если ДокОснование.Вид() = "КомандировочноеУдостоверение" Тогда
		Сотрудник = ДокОснование.Сотрудник;
		НаименованиеАванса = "Командировочные";
		Спр = СоздатьОбъект("Справочник.ЦелевоеНазначение");
		Если Спр.НайтиПоНаименованию(СокрП(НаименованиеАванса),0,1) = 1 Тогда 
			Цель = Спр.ТекущийЭлемент();
		КонецЕсли;
		ДокОснование.ВыбратьСтроки();
		НоваяСтрока();
		ДатаС  = ДокОснование.ДатаОтправки;
		ДатаПо = ?(ДокОснование.Срок=0, ДокОснование.ДатаОтправки, ДокОснование.ДатаОтправки + ДокОснование.Срок - 1); // ПС 08.02.10 ЮИ-Бобруйск
		КомуЗаЧто = ДокОснование.Назначение;               
	ИначеЕсли ДокОснование.Вид() = "РасходныйОрдер" Тогда
		Если ТипЗначенияСтр(ДокОснование.Субконто1) = "Справочник" Тогда
			Если (ДокОснование.Субконто1.Вид() = "Сотрудники") И 
			     (ДокОснование.Субконто1.Выбран()=1) Тогда
				Сотрудник = ДокОснование.Субконто1;
				НаименованиеАванса = ДокОснование.Осн;
				Цель = ДокОснование.Назначение;
				ТипОтчета = 1; 
				Получено1 = ""+ДокОснование;
				Дата1 = ДокОснование.ДатаДок;
				Сумма1 = ДокОснование.Сумма;
			КонецЕсли;
		КонецЕсли; 
	ИначеЕсли ДокОснование.Вид() = "ВалРасходныйОрдер" Тогда
		Если ТипЗначенияСтр(ДокОснование.Субконто1) = "Справочник" Тогда
			Если (ДокОснование.Субконто1.Вид() = "Сотрудники") И 
			     (ДокОснование.Субконто1.Выбран()=1) Тогда
				Сотрудник = ДокОснование.Субконто1;
				НаименованиеАванса = ДокОснование.Основание;
				Цель = ДокОснование.Назначение;
				ТипОтчета = 2;
				Получено1 = "Вал.РКО "+ДокОснование.НомерДок;
				Дата1 = ДокОснование.ДатаДок;
				Сумма1 = ДокОснование.Сумма;
				Валюта = ДокОснование.Валюта;
			КонецЕсли;
		КонецЕсли; 
	КонецЕсли;

КонецПроцедуры

//******************************************************************************
// ПоКнопкеПечать()
// 
// Вызывается из формул элементов диалога:
//  Кнопка "кнПечать".
//
// Описание:
//  Определяется соответствующая печатная форма.
// 	
Процедура ПоКнопкеПечать(СразуНаПринтер = 0,КолЭкз = 1)
	  
	
	
	
	Если  ПустоеЗначение(НомерТекущейФормы) = 1  Тогда
		НомерТекущейФормы = 1;
		Форма.кнПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
	КонецЕсли;
	
	Если НомерТекущейФормы = 1  Тогда
		Печать();
	Иначе
		Параметры = СоздатьОбъект("СписокЗначений");
		Параметры.ДобавитьЗначение(Контекст, "Контекст");
		Параметры.ДобавитьЗначение(СразуНаПринтер, "Устройство");
		Параметры.ДобавитьЗначение(КолЭкз, "КоличествоКопий");
		
		ОткрытьФорму("Отчет", Параметры, глКаталогПечФорм+ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы,"Файл"));
	КонецЕсли;
	
КонецПроцедуры // ПоКнопкеПечать()
//******************************************************************************
// ПоКнопкеВыборПечатнойФормы()
//
// Вызывается из формул элементов диалога:
//  Кнопка "кнВыбПечать".
//
// Описание:
//  - открывает список для выбора способа печати. 
//  - формирует таблицу по выбранному способу.
//
Процедура ПоКнопкеВыборПечатнойФормы()
	
    ВыбНомер = глВыборПечатнойФормы("Документ." + Вид(), ТаблицаПечФорм);
	Если ВыбНомер > 0 Тогда
		НомерТекущейФормы = ВыбНомер;
		Форма.кнПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
		ПоКнопкеПечать();
	КонецЕсли;

КонецПроцедуры // ПоКнопкеВыборПечатнойФормы()

//-----------------------------------------------------------------------------
Новый = 0;
ТаблицаПечФорм		= СоздатьОбъект("ТаблицаЗначений");
ТаблицаПечФорм.НоваяКолонка("Название","Строка",,,,30);
ТаблицаПечФорм.НоваяКолонка("Файл","Строка",,,"Файл",10);
ТаблицаПечФорм.НоваяКолонка("Кнопка","Строка",,,,10); 
ТаблицаПечФорм.НоваяКолонка("ФайлОписания","Строка");
	
// добавим информацию о встроенной форме
ТаблицаПечФорм.НоваяСтрока();
ТаблицаПечФорм.Название     = "Печать АО";
ТаблицаПечФорм.Кнопка       = "Печать";

Сч18 = СчетПоКоду("18.3"); // ПС 28.07.09
Показать

2. dump 03.11.16 06:24 Сейчас в теме
Можно. В ТЧ документа есть реквизит КоррСчет - это и есть "на какой корреспондирующий счет"
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот