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