Paste1C
  • API
  • О проекте
  • Контакты
  • Регистрация
  • Вход
Процедура КнопкаВыполнитьНажатие(Кнопка)
	// Вставить содержимое обработчика.
КонецПроцедуры

Процедура ТестНажатие(Элемент)
	Печать();
КонецПроцедуры

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

	// ТИТУЛЬНЫЙ ЛИСТ

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

		Если НЕ (СсылкаНаОбъект.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
			ПолученоИзКассы         	= ?(СсылкаНаОбъект.КратностьДокумента <> 0, ПолученоИзКассы * СсылкаНаОбъект.КурсДокумента / СсылкаНаОбъект.КратностьДокумента, 0);
			ПолученоПоБанковскимКартам	= ?(СсылкаНаОбъект.КратностьДокумента <> 0, ПолученоПоБанковскимКартам * СсылкаНаОбъект.КурсДокумента / СсылкаНаОбъект.КратностьДокумента, 0);
			ИтогоПолучено 				= ПолученоИзКассы + ПолученоПоБанковскимКартам;
		КонецЕсли;
		
		СуммаДоДокумента = СуммаДоДокумента - ПолученоИзКассы - ПолученоПоБанковскимКартам;
		
	Иначе //получим данные по регистру бухгалтерии
		
		Запрос = Новый Запрос();
		Если НЕ (СсылкаНаОбъект.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
			Запрос.УстановитьПараметр("Счет71", ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицамиВал);
		Иначе
			Запрос.УстановитьПараметр("Счет71", ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами);
		КонецЕсли;
		Запрос.УстановитьПараметр("Сотрудник",  Шапка.ПодотчетноеЛицо);
		Запрос.УстановитьПараметр("Организация",Шапка.Организация);
		Запрос.УстановитьПараметр("ДатаИтогов", СсылкаНаОбъект.МоментВремени());
		Запрос.Текст = "
		|ВЫБРАТЬ
		|	ХозрасчетныйОстатки.Счет,
		|	ХозрасчетныйОстатки.СуммаОстатокДт,
		|	ХозрасчетныйОстатки.СуммаОстатокКт
		|ИЗ
		|	РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаИтогов, Счет В ИЕРАРХИИ (&Счет71), ,
		|	                                        Организация = &Организация И Субконто1 = &Сотрудник) КАК ХозрасчетныйОстатки";
		ПредыдущийАванс = Запрос.Выполнить().Выбрать();
		ПредыдущийАванс.Следующий();
		
		Перерасход = ?(ПредыдущийАванс.СуммаОстатокДт = Null, 0, ПредыдущийАванс.СуммаОстатокКт);
		Остаток    = ?(ПредыдущийАванс.СуммаОстатокКт = Null, 0, ПредыдущийАванс.СуммаОстатокДт);
		ДанныеВал  = МодульВалютногоУчета.ПолучитьКурсВалюты(СсылкаНаОбъект.ВалютаДокумента, СсылкаНаОбъект.Дата);
		
		СуммаДоДокумента = 0;
		
		Если НЕ ЗначениеЗаполнено(Перерасход) Тогда
			Перерасход = 0;
		Иначе
			СуммаДоДокумента = - Число(Перерасход);
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(Остаток) Тогда
			Остаток = 0;
		Иначе
			СуммаДоДокумента = Число(Остаток);
		КонецЕсли;
		
		МассивАвансовыхДокументов = СсылкаНаОбъект.ВыданныеАвансы.ВыгрузитьКолонку("ДокументАванса");
		
		Запрос = Новый Запрос();
		Запрос.УстановитьПараметр("МассивАвансовыхДокументов", МассивАвансовыхДокументов);
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	СУММА(РасходныйКассовыйОрдер.СуммаДокумента) КАК СуммаДокумента
		|ИЗ
		|	Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
		|ГДЕ
		|	РасходныйКассовыйОрдер.Ссылка В(&МассивАвансовыхДокументов)
		|
		|СГРУППИРОВАТЬ ПО
		|	РасходныйКассовыйОрдер.Ссылка
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ВыдачаДенежныхДокументов.СуммаДокумента
		|ИЗ
		|	Документ.ВыдачаДенежныхДокументов КАК ВыдачаДенежныхДокументов
		|ГДЕ
		|	ВыдачаДенежныхДокументов.Ссылка В(&МассивАвансовыхДокументов)";
		Таб = Запрос.Выполнить().Выгрузить();
		ПолученоИзКассы = Число(Таб.Итог("СуммаДокумента"));
		
		Запрос = Новый Запрос();
		Запрос.УстановитьПараметр("МассивАвансовыхДокументов", МассивАвансовыхДокументов);
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	СУММА(ПлатежноеПоручениеИсходящее.СуммаДокумента) КАК СуммаДокумента
		|ИЗ
		|	Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
		|ГДЕ
		|	ПлатежноеПоручениеИсходящее.Ссылка В(&МассивАвансовыхДокументов)
		|
		|СГРУППИРОВАТЬ ПО
		|	ПлатежноеПоручениеИсходящее.Ссылка
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	СУММА(ПлатежныйОрдерСписаниеДенежныхСредств.СуммаДокумента)
		|ИЗ
		|	Документ.ПлатежныйОрдерСписаниеДенежныхСредств КАК ПлатежныйОрдерСписаниеДенежныхСредств
		|ГДЕ
		|	ПлатежныйОрдерСписаниеДенежныхСредств.Ссылка В(&МассивАвансовыхДокументов)
		|
		|СГРУППИРОВАТЬ ПО
		|	ПлатежныйОрдерСписаниеДенежныхСредств.Ссылка
		|";
		
		Таб = Запрос.Выполнить().Выгрузить();
		ПолученоПоБанковскимКартам = Число(Таб.Итог("СуммаДокумента"));
		
		ПолученоИзКассыВВалюте         		= ПолученоИзКассы;
		ПолученоПоБанковскимКартамВВалюте 	= ПолученоПоБанковскимКартам;
		
		КурсоваяРазница = 0;
		Если НЕ (СсылкаНаОбъект.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
			ПолученоИзКассы         = ?(СсылкаНаОбъект.КратностьДокумента <> 0, ПолученоИзКассы * СсылкаНаОбъект.КурсДокумента / СсылкаНаОбъект.КратностьДокумента, 0);
			ПолученоПоБанковскимКартам = ?(СсылкаНаОбъект.КратностьДокумента <> 0, ПолученоПоБанковскимКартам * СсылкаНаОбъект.КурсДокумента / СсылкаНаОбъект.КратностьДокумента, 0);
			
			ЗапросПоПроводкам = Новый Запрос();
			ЗапросПоПроводкам.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
			ЗапросПоПроводкам.УстановитьПараметр("КурсоваяРазница", Справочники.ПрочиеДоходыИРасходы.КурсовыеРазницы);
			ЗапросПоПроводкам.Текст = 
			"ВЫБРАТЬ
			|	СУММА(ВЫБОР
			|			КОГДА ХозрасчетныйДвиженияССубконто.СубконтоДт1 = &КурсоваяРазница
			|				ТОГДА ХозрасчетныйДвиженияССубконто.Сумма
			|			ИНАЧЕ 0
			|		КОНЕЦ) КАК СуммаДт,
			|	СУММА(ВЫБОР
			|			КОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт1 = &КурсоваяРазница
			|				ТОГДА ХозрасчетныйДвиженияССубконто.Сумма
			|			ИНАЧЕ 0
			|		КОНЕЦ) КАК СуммаКт
			|ИЗ
			|	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор = &Ссылка) КАК ХозрасчетныйДвиженияССубконто
			|";
			
			ВыборкаКР = ЗапросПоПроводкам.Выполнить().Выгрузить();
			КурсоваяРазница = ВыборкаКР.Итог("СуммаДт") - ВыборкаКР.Итог("СуммаКт");
			// курсовую разницу не разделяем по видам полученных средств
			Если ПолученоИзКассы > 0 Тогда
				ПолученоИзКассы = ПолученоИзКассы + КурсоваяРазница;
			Иначе
				ПолученоПоБанковскимКартам = ПолученоПоБанковскимКартам + КурсоваяРазница;
			КонецЕсли;
		КонецЕсли;
		
		ИтогоПолучено = ПолученоИзКассы + ПолученоПоБанковскимКартам;
		СуммаДоДокумента = СуммаДоДокумента - ИтогоПолучено;
	КонецЕсли;
	
	//сведения о физ. лице
	//Запрос.УстановитьПараметр("ФизЛицо", 	 СсылкаНаОбъект.ФизЛицо);
	//Запрос.УстановитьПараметр("Организация", СсылкаНаОбъект.Организация);
	//Запрос.Текст =
	//"ВЫБРАТЬ ПЕРВЫЕ 1
	//|	ПОДСТРОКА(СотрудникиОрганизаций.Код, 1, 5) КАК ТабельныйНомер,
	//|	СотрудникиОрганизаций.ПодразделениеОрганизации,
	//|	ПОДСТРОКА(СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код,2,2) КАК КодПодразделения,
	//|	СотрудникиОрганизаций.ТекущаяДолжностьОрганизации КАК Должность
	//|ИЗ
	//|	Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
	//|ГДЕ
	//|	СотрудникиОрганизаций.Физлицо = &Физлицо
	//|	И НЕ СотрудникиОрганизаций.ПометкаУдаления
	//|	И СотрудникиОрганизаций.Организация = &Организация";			
	//
	//Результат 	   = Новый Структура("ТабельныйНомер, ПодразделениеОрганизации, КодПодразделения, Должность");
	//ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
	//
	//Если ВыборкаЗапроса.Следующий() Тогда
	//	ЗаполнитьЗначенияСвойств(Результат, ВыборкаЗапроса);
	//Иначе
	//	// Если в запросе ничего не нашли тогда вернем вместо табельного номера код физ.лица
	//	Результат.ТабельныйНомер = ?(ЗначениеЗаполнено(СсылкаНаОбъект.ФизЛицо), СсылкаНаОбъект.ФизЛицо.Код, "");
	//КонецЕсли; 
	//
	//СведенияОФизЛице = Результат;
	
	СведенияОФизЛице = ПолныеПрава.СведенияОСотруднике(СсылкаНаОбъект.ФизЛицо, СсылкаНаОбъект.Дата, СсылкаНаОбъект.Организация);
	
	СведенияФИОФизЛица = ФормированиеПечатныхФорм.ФамилияИмяОтчество(СсылкаНаОбъект.ФизЛицо, СсылкаНаОбъект.Дата);
	Если СведенияФИОФизЛица.Фамилия <> "" Тогда
		ПодотчетноеЛицо = ПолучитьФамилиюИмяОтчество(СведенияФИОФизЛица.Фамилия, СведенияФИОФизЛица.Имя, СведенияФИОФизЛица.Отчество);
	Иначе
		ПодотчетноеЛицо = ОбщегоНазначения.ФамилияИнициалыФизЛица(Шапка.ПодотчетноеЛицо);
	КонецЕсли;
	
	ОбластьМакета = Макет.ПолучитьОбласть("Титул");
	ОбластьМакета.Параметры.Заполнить(Шапка);
	ОбластьМакета.Параметры.НомерДокумента                = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
	ОбластьМакета.Параметры.ПредставлениеПодотчетногоЛица = ПодотчетноеЛицо;
	ОбластьМакета.Параметры.ТабельныйНомер                = СведенияОФизЛице.ТабельныйНомер;
	Если СсылкаНаОбъект.ОтражатьВБухгалтерскомУчете Тогда
		ОбластьМакета.Параметры.ПредставлениеПодразделения    = СведенияОФизЛице.ПодразделениеОрганизации;
	КонецЕсли;
	ОбластьМакета.Параметры.КодПодразделения              = СведенияОФизЛице.КодПодразделения;
	ОбластьМакета.Параметры.ДолжностьПодотчетногоЛицаПредставление = СведенияОФизЛице.Должность;
	
	ОбластьМакета.Параметры.ПолученоИзКассы            = ПолученоИзКассы;
	ОбластьМакета.Параметры.ПолученоПоБанковскимКартам = ПолученоПоБанковскимКартам;
	
	Если НЕ (СсылкаНаОбъект.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
		ОбластьМакета.Параметры.ПредставлениеВалютыДокумента   		= Шапка.ПредставлениеВалюты;
		ОбластьМакета.Параметры.ПолученоИзКассыВВалюте         		= ПолученоИзКассыВВалюте;
		ОбластьМакета.Параметры.ПолученоПоБанковскимКартамВВалюте	= ПолученоПоБанковскимКартамВВалюте;
	КонецЕсли;

	Если СуммаДоДокумента >= 0 Тогда
		ОбластьМакета.Параметры.НачальныйОстаток    =   СуммаДоДокумента;
	Иначе
		ОбластьМакета.Параметры.НачальныйПерерасход = - СуммаДоДокумента;
	КонецЕсли;
	
	ОбластьМакета.Параметры.ИтогоПолучено = ИтогоПолучено;
	Если НЕ (СсылкаНаОбъект.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
		Израсходовано = Окр(Шапка.СуммаДокумента * СсылкаНаОбъект.КурсДокумента / СсылкаНаОбъект.КратностьДокумента, 2);
		Если НЕ СсылкаНаОбъект.ОтражатьВУправленческомУчете Тогда 
			Израсходовано = Израсходовано + КурсоваяРазница;
		КонецЕсли;
	Иначе
		Израсходовано = Шапка.СуммаДокумента;
	КонецЕсли;
	ОбластьМакета.Параметры.Израсходовано = Израсходовано;

	ОстатокНаКонец = СуммаДоДокумента + ИтогоПолучено - Израсходовано;
	
	Если ОстатокНаКонец >= 0  Тогда
		ОбластьМакета.Параметры.КонечныйОстаток    = ОстатокНаКонец;
	Иначе
		ОбластьМакета.Параметры.КонечныйПерерасход = - ОстатокНаКонец;
	КонецЕсли;

	СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
	ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,");

	Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.ДатаДокумента,);
	Руководитель = Руководители.Руководитель;
	Бухгалтер    = Руководители.ГлавныйБухгалтер;
	Кассир       = Руководители.Кассир;

	Если НЕ (СсылкаНаОбъект.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
		ДляРасчета = Шапка.СуммаДокумента * ДанныеВал.Курс / ДанныеВал.Кратность;
	Иначе
		ДляРасчета = Шапка.СуммаДокумента;	
	КонецЕсли;

	ИспСумма     = Окр(ДляРасчета, 2, 1);
	ЦелСумма     = Цел(ИспСумма);
	КопСумма     = Формат((ИспСумма - ЦелСумма) * 100, "ЧЦ=2; ЧН=00; ЧВН=");

	ОбластьМакета.Параметры.ИзрасходованоРуб    = ЦелСумма;
	ОбластьМакета.Параметры.ИзрасходованоКоп    = КопСумма;

	ОбластьМакета.Параметры.ДатаДокумента       = Шапка.ДатаДокумента;
	ОбластьМакета.Параметры.ГлавныйБухгалтер    = Бухгалтер;
//	ОбластьМакета.Параметры.Кассир              = Кассир;
	ОбластьМакета.Параметры.ОрганизацияПоОКПО   = СведенияОбОрганизации.КодПоОКПО;
	ОбластьМакета.Параметры.СуммаОтчетаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(ИспСумма, мВалютаРегламентированногоУчета) + " (" + ЦелСумма + " руб. " + КопСумма + " коп.)";

	ОбластьМакета.Параметры.ПредставлениеОрганизации           = ПредставлениеОрганизации;
//	ОбластьМакета.Параметры.ПредставлениеГлавногоБухгалтера    = Бухгалтер;

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

	// ОБОРОТНАЯ СТОРОНА
	ЗапросТовары = Новый Запрос();
	
	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	ЗапросТовары.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;

	ЗапросТовары.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
	ЗапросТовары.УстановитьПараметр("Валюта",          СсылкаНаОбъект.ВалютаДокумента);
	ЗапросТовары.УстановитьПараметр("ПустойСчет",      ПланыСчетов.Хозрасчетный.ПустаяСсылка());

	ЗапросТовары.Текст = "
	|ВЫБРАТЬ
	|	Док.ДокументНомер,
	|	Док.ДокументДата,
	|	Док.НаименованиеРасхода,
	|	Док.СчетЗатрат,
	|	Док.СчетНДС,
	|	Док.ПоОтчету,
	|	Док.ПоОтчетуВВалюте,
	|	Док.СуммаНДС,
	|	Док.Договор
	|ПОМЕСТИТЬ ДанныеАвансовогоОтчета
	|ИЗ
	|
	|(
	|ВЫБРАТЬ
	|	АвансовыйОтчет.НомерВходящегоДокумента              КАК ДокументНомер,
	|	АвансовыйОтчет.ДатаВходящегоДокумента               КАК ДокументДата,
	|	АвансовыйОтчет.ВидДокВходящий						КАК НаименованиеРасхода,
	|	АвансовыйОтчет.СчетУчетаБУ                          КАК СчетЗатрат,
	|	АвансовыйОтчет.СчетУчетаНДС                         КАК СчетНДС,
	|	СУММА(АвансовыйОтчет.Сумма)    КАК ПоОтчету,
	|	СУММА(АвансовыйОтчет.Сумма)                         КАК ПоОтчетуВВалюте,
	|	СУММА(АвансовыйОтчет.СуммаНДС) КАК СуммаНДС,
	|	НЕОПРЕДЕЛЕНО                                        КАК Договор
	|ИЗ
	|	Документ.АвансовыйОтчет.Товары КАК АвансовыйОтчет
	|
	|ГДЕ
	|	АвансовыйОтчет.Ссылка = &ТекущийДокумент
	|
	|СГРУППИРОВАТЬ ПО
	|	АвансовыйОтчет.НомерВходящегоДокумента,
	|	АвансовыйОтчет.ДатаВходящегоДокумента,
	|	АвансовыйОтчет.ВидДокВходящий,
	|	АвансовыйОтчет.СчетУчетаБУ,
	|	АвансовыйОтчет.СчетУчетаНДС
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ
	|	АвансовыйОтчет.НомерВходящегоДокумента,
	|	АвансовыйОтчет.ДатаВходящегоДокумента,
	|	АвансовыйОтчет.ВидДокВходящий,
	|	ВЫБОР
	|		КОГДА АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом.Код = АвансовыйОтчет.СчетУчетаРасчетовПоАвансам.Код
	|			ТОГДА АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом.Код
	|		ИНАЧЕ ВЫБОР
	|				КОГДА АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом = &ПустойСчет
	|					ТОГДА """"
	|				ИНАЧЕ АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом.Код
	|			КОНЕЦ + ВЫБОР
	|				КОГДА (НЕ АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом = &ПустойСчет)
	|						И (НЕ АвансовыйОтчет.СчетУчетаРасчетовПоАвансам = &ПустойСчет)
	|					ТОГДА "", ""
	|				ИНАЧЕ """"
	|			КОНЕЦ + ВЫБОР
	|				КОГДА АвансовыйОтчет.СчетУчетаРасчетовПоАвансам = &ПустойСчет
	|					ТОГДА """"
	|				ИНАЧЕ АвансовыйОтчет.СчетУчетаРасчетовПоАвансам.Код
	|			КОНЕЦ
	|	КОНЕЦ,
	|	НЕОПРЕДЕЛЕНО,
	|	СУММА(АвансовыйОтчет.Сумма),
	|	СУММА(АвансовыйОтчет.Сумма),
	|	0,
	|	АвансовыйОтчет.ДоговорКонтрагента
	|ИЗ
	|	Документ.АвансовыйОтчет.ОплатаПоставщикам КАК АвансовыйОтчет
	|
	|ГДЕ
	|	АвансовыйОтчет.Ссылка = &ТекущийДокумент
	|
	|СГРУППИРОВАТЬ ПО
	|	АвансовыйОтчет.НомерВходящегоДокумента,
	|	АвансовыйОтчет.ДатаВходящегоДокумента,
	|	АвансовыйОтчет.ВидДокВходящий,
	|	ВЫБОР
	|		КОГДА АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом.Код = АвансовыйОтчет.СчетУчетаРасчетовПоАвансам.Код
	|			ТОГДА АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом.Код
	|		ИНАЧЕ ВЫБОР
	|				КОГДА АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом = &ПустойСчет
	|					ТОГДА """"
	|				ИНАЧЕ АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом.Код
	|			КОНЕЦ + ВЫБОР
	|				КОГДА (НЕ АвансовыйОтчет.СчетУчетаРасчетовСКонтрагентом = &ПустойСчет)
	|						И (НЕ АвансовыйОтчет.СчетУчетаРасчетовПоАвансам = &ПустойСчет)
	|					ТОГДА "", ""
	|				ИНАЧЕ """"
	|			КОНЕЦ + ВЫБОР
	|				КОГДА АвансовыйОтчет.СчетУчетаРасчетовПоАвансам = &ПустойСчет
	|					ТОГДА """"
	|				ИНАЧЕ АвансовыйОтчет.СчетУчетаРасчетовПоАвансам.Код
	|			КОНЕЦ
	|	КОНЕЦ,
	|	АвансовыйОтчет.ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ
	|	АвансовыйОтчет.НомерВходящегоДокумента,
	|	АвансовыйОтчет.ДатаВходящегоДокумента,
	|	АвансовыйОтчет.ВидДокВходящий,
	|	АвансовыйОтчет.СчетЗатрат,
	|	АвансовыйОтчет.СчетУчетаНДС,
	|	СУММА(АвансовыйОтчет.Сумма),
	|	СУММА(АвансовыйОтчет.Сумма),
	|	СУММА(АвансовыйОтчет.СуммаНДС),
	|	НЕОПРЕДЕЛЕНО
	|ИЗ
	|	Документ.АвансовыйОтчет.Прочее КАК АвансовыйОтчет
	|
	|ГДЕ
	|	АвансовыйОтчет.Ссылка = &ТекущийДокумент
	|
	|СГРУППИРОВАТЬ ПО
	|	АвансовыйОтчет.НомерВходящегоДокумента,
	|	АвансовыйОтчет.ДатаВходящегоДокумента,
	|	АвансовыйОтчет.ВидДокВходящий,
	|	АвансовыйОтчет.СчетЗатрат,
	|	АвансовыйОтчет.СчетУчетаНДС
	|
	|) КАК Док
	|";

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

	ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
	ТабДокумент.Вывести(ОбластьМакета);

	// Выводим табличные части
	ОбластьМакета = Макет.ПолучитьОбласть("Строка");
	НомерСтроки   = 0;

	ИтогоПоОтчету        = 0;
	ИтогоПоОтчетуВВалюте = 0;
	СуммаВВалюте = 0;

	Пока Товар.Следующий() Цикл

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

		Сумма = Товар.ПоОтчету + ?(Шапка.СуммаВключаетНДС, 0, Товар.СуммаНДС);
		
		Если НЕ (Шапка.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
			Сумма         = ?(СсылкаНаОбъект.КратностьДокумента <> 0, Сумма * СсылкаНаОбъект.КурсДокумента / СсылкаНаОбъект.КратностьДокумента, 0);
		КонецЕсли;

		ОбластьМакета.Параметры.ПоОтчету = Сумма;
		ОбластьМакета.Параметры.ПоУчету  = Сумма;
		ИтогоПоОтчету = ИтогоПоОтчету + Сумма;

		Если НЕ (Шапка.ВалютаДокумента = мВалютаРегламентированногоУчета) Тогда
			СуммаВВалюте = Товар.ПоОтчетуВВалюте + ?(Шапка.СуммаВключаетНДС, 0, Товар.СуммаНДС);
			ОбластьМакета.Параметры.ПоУчетуВВалюте  = СуммаВВалюте;
			ОбластьМакета.Параметры.ПоОтчетуВВалюте = СуммаВВалюте;
			ИтогоПоОтчетуВВалюте = ИтогоПоОтчетуВВалюте + СуммаВВалюте;
		Иначе  	
			ОбластьМакета.Параметры.ПоУчетуВВалюте  = 0;
			ОбластьМакета.Параметры.ПоОтчетуВВалюте = 0;
		КонецЕсли;

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

	КонецЦикла;

	// Выводим подвал авансового отчета
	ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
	ОбластьМакета.Параметры.Заполнить(Шапка);
	ОбластьМакета.Параметры.ИтогоПоОтчету                 = ИтогоПоОтчету;
	ОбластьМакета.Параметры.ИтогоПоОтчетувВалюте          = ИтогоПоОтчетуВВалюте;
	ОбластьМакета.Параметры.ИтогоПоУчету                  = ИтогоПоОтчету;
	ОбластьМакета.Параметры.ИтогоПоУчетувВалюте           = ИтогоПоОтчетуВВалюте;
	ОбластьМакета.Параметры.ПредставлениеПодотчетногоЛица = ПодотчетноеЛицо;
	ТабДокумент.Вывести(ОбластьМакета);

	Возврат ТабДокумент;

КонецФункции
{"contextData":{},"contextMarkers":[]}

Публикация кода

Размещая информацию на сайте, Вы подтверждаете согласие со всеми пунктами Пользовательского соглашения

Замечание к коду:

  • Загрузить конфигурацию
    • ERP 2.4
    • Управление торговлей 10.3
    • Управление торговлей 11.4
    • Бухгалтерия 2.0
    • Бухгалтерия 3.0
    • ЗУП 3.1
    • Розница 2.3
    • УНФ 1.6
    • БСП 3.1
  • Тема
    • Светлая
    • Светлая c подсветкой запросов
    • Темная
    • Темная с подсветкой запросов
  • Режим запроса
  • Поделиться
Код:

© Александр Шкураев 2025