Код:
&НаКлиенте
Процедура Сформировать(Команда)
//Получим адрес во временном хранилище сформированного в ФормируемТЗНаСервере() файла "двоичных данных"
АдресВХранилище = ФормируемТЗНаСервере();
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
//Запишем его во временный файл
ПолноеИмяВремФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанные.Записать(ПолноеИмяВремФайла);
НаличиеExcel = Истина;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
НаличиеExcel = Ложь;
КонецПопытки;
//Так как всё в Windows, то будем, всё же, работать с каталогом "Мои документы" пользователя
WshShell = Новый COMОбъект("WScript.Shell");
WshSpecialFolders = WshShell.SpecialFolders();
МоиДокументы = WshSpecialFolders.Item("MyDocuments");
Если Прав(МоиДокументы,1) <> "\" Тогда
МоиДокументы = МоиДокументы + "\";
КонецЕсли;
Если НаличиеExcel Тогда
//Откроем временный файл
КнигаExcel = Excel.WorkBooks.Open(ПолноеИмяВремФайла);
//и запишем его в формате XLS в каталог "Мои документы"
ИмяФайла = Формат(ТекущаяДата(), "ДФ=""ддММгггг-ЧЧммсс""");
ПолноеИмяФайла = МоиДокументы + ИмяФайла + ".xls";
ФайлСуществует = 1;
Пока ФайлСуществует = 1 Цикл
ФайлВывода = Новый Файл(ПолноеИмяФайла);
Если НЕ ФайлВывода.Существует() Тогда
ФайлСуществует = 0;
Иначе
ИмяФайла = ИмяФайла + "1";
ПолноеИмяФайла = МоиДокументы + ИмяФайла + ".xls";
КонецЕсли;
КонецЦикла;
КнигаExcel.SaveAs(ПолноеИмяФайла, -4143);
Excel.Application.Quit();
//Удалим временный файл
УдалитьФайлы(ПолноеИмяВремФайла);
Иначе
//перепишем временный файл в каталог "Мои документы"
ПолноеИмяФайла = МоиДокументы + ИмяФайла + ".xml";
ФайлСуществует = 1;
Пока ФайлСуществует = 1 Цикл
ФайлВывода = Новый Файл(ПолноеИмяФайла);
Если НЕ ФайлВывода.Существует() Тогда
ФайлСуществует = 0;
Иначе
ИмяФайла = ИмяФайла + "1";
ПолноеИмяФайла = МоиДокументы + ИмяФайла + ".xml";
КонецЕсли;
КонецЦикла;
ПереместитьФайл(ПолноеИмяВремФайла,ПолноеИмяФайла);
КонецЕсли;
//И запустим файл (ну, точнее говоря, ассоциированное с ним приложение)
ЗапуститьПриложение(ПолноеИмяФайла);
КонецПроцедуры
&НаСервере
Функция ФормируемТЗНаСервере()
ЕстьВходящееСальдо = 0;
ЕстьОборотыПоДебету = 0;
ЕстьОборотыПоКредиту = 0;
ЕстьИсходящееСальдо = 0;
ЗапросОстатки = Новый Запрос;
ЗапросОстатки.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет,
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.СуммаОстатокДт,
| ХозрасчетныйОстатки.СуммаОстатокКт,
| ХозрасчетныйОстатки.СуммаОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет, ,Организация = &Организация) КАК ХозрасчетныйОстатки
|ГДЕ
| ХозрасчетныйОстатки.Субконто1 = &Субконто1";
ЗапросОстатки.УстановитьПараметр("Дата", НачалоДня(Отчет.ДатаНачала));
ЗапросОстатки.УстановитьПараметр("Счет", Отчет.Счет);
ЗапросОстатки.УстановитьПараметр("Организация", Отчет.Организация);
ЗапросОстатки.УстановитьПараметр("Субконто1", Отчет.РасСчет);
ВыборкаВходящееСальдо = ЗапросОстатки.Выполнить().Выбрать();
Если ВыборкаВходящееСальдо.Количество() > 0 Тогда
ЕстьВходящееСальдо = 1;
КонецЕсли;
ЗапросОборотыДт = Новый Запрос;
ЗапросОборотыДт.Текст = "ВЫБРАТЬ
| ХозрасчетныйДвиженияССубконто.Период,
| ХозрасчетныйДвиженияССубконто.СчетКт,
| ХозрасчетныйДвиженияССубконто.Сумма,
| ХозрасчетныйДвиженияССубконто.Содержание,
| ХозрасчетныйДвиженияССубконто.Регистратор
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНачальная,&ДатаКонечная,Организация = &Организация
| И СчетДт = &СчетДт
| И Активность = ИСТИНА) КАК ХозрасчетныйДвиженияССубконто
|ГДЕ
| ХозрасчетныйДвиженияССубконто.СубконтоДт1 = &Субконто1
|УПОРЯДОЧИТЬ ПО
| СчетКт.Код,
| ХозрасчетныйДвиженияССубконто.Период
|ИТОГИ Сумма(Сумма) ПО
| ОБЩИЕ,
| СчетКт";
ЗапросОборотыДт.УстановитьПараметр("ДатаНачальная", НачалоДня(Отчет.ДатаНачала));
ЗапросОборотыДт.УстановитьПараметр("ДатаКонечная", КонецДня(Отчет.ДатаЗавершения));
ЗапросОборотыДт.УстановитьПараметр("СчетДт", Отчет.Счет);
ЗапросОборотыДт.УстановитьПараметр("Организация", Отчет.Организация);
ЗапросОборотыДт.УстановитьПараметр("Субконто1", Отчет.РасСчет);
ВыборкаДебет = ЗапросОборотыДт.Выполнить().Выбрать();
Если ВыборкаДебет.Количество() > 0 Тогда
ЕстьОборотыПоДебету = 1;
КонецЕсли;
ЗапросОборотыКт = Новый Запрос;
ЗапросОборотыКт.Текст = "ВЫБРАТЬ
| ХозрасчетныйДвиженияССубконто.Период,
| ХозрасчетныйДвиженияССубконто.СчетДт,
| ХозрасчетныйДвиженияССубконто.Сумма,
| ХозрасчетныйДвиженияССубконто.Содержание,
| ХозрасчетныйДвиженияССубконто.Регистратор
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНачальная,&ДатаКонечная,Организация = &Организация
| И СчетКт = &СчетКт
| И Активность = ИСТИНА) КАК ХозрасчетныйДвиженияССубконто
|ГДЕ
| ХозрасчетныйДвиженияССубконто.СубконтоКт1 = &Субконто1
|УПОРЯДОЧИТЬ ПО
| СчетДт.Код,
| ХозрасчетныйДвиженияССубконто.Период
|ИТОГИ Сумма(Сумма) ПО
| ОБЩИЕ,
| СчетДт";
ЗапросОборотыКт.УстановитьПараметр("ДатаНачальная", НачалоДня(Отчет.ДатаНачала));
ЗапросОборотыКт.УстановитьПараметр("ДатаКонечная", КонецДня(Отчет.ДатаЗавершения));
ЗапросОборотыКт.УстановитьПараметр("СчетКт", Отчет.Счет);
ЗапросОборотыКт.УстановитьПараметр("Организация", Отчет.Организация);
ЗапросОборотыКт.УстановитьПараметр("Субконто1", Отчет.РасСчет);
ВыборкаКредит = ЗапросОборотыКт.Выполнить().Выбрать();
Если ВыборкаКредит.Количество() > 0 Тогда
ЕстьОборотыПоКредиту = 1;
КонецЕсли;
ЗапросОстатки.УстановитьПараметр("Дата", Новый Граница(КонецДня(Отчет.ДатаЗавершения), ВидГраницы.Включая));
ВыборкаИсходящееСальдо = ЗапросОстатки.Выполнить().Выбрать();
Если ВыборкаИсходящееСальдо.Количество() > 0 Тогда
ЕстьИсходящееСальдо = 1;
КонецЕсли;
//Опишем - куда мы будем выводить файл. Т.е. в текст.
НовДок = Новый ТекстовыйДокумент;
//Заполняем заголовок (описание, разметка)
СтрокаДоб = "";
СтрокаДоб = "<?xml version=""1.0""?>
|<?mso-application progid=""Excel.Sheet""?>
|<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""
| xmlns:o=""urn:schemas-microsoft-com:office:office""
| xmlns:x=""urn:schemas-microsoft-com:office:excel""
| xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""
| xmlns:html=""http://www.w3.org/TR/REC-html40"">
| <DocumentProperties xmlns=""urn:schemas-microsoft-com:office:office"">
| <Author>Kir</Author>
| <LastAuthor>Kir</LastAuthor>
| <Created>2015-04-17T13:47:09Z</Created>
| <LastSaved>2015-04-17T13:49:11Z</LastSaved>
| <Version>14.00</Version>
| </DocumentProperties>
| <OfficeDocumentSettings xmlns=""urn:schemas-microsoft-com:office:office"">
| <AllowPNG/>
| </OfficeDocumentSettings>
| <ExcelWorkbook xmlns=""urn:schemas-microsoft-com:office:excel"">
| <WindowHeight>13350</WindowHeight>
| <WindowWidth>23955</WindowWidth>
| <WindowTopX>360</WindowTopX>
| <WindowTopY>135</WindowTopY>
| <ProtectStructure>False</ProtectStructure>
| <ProtectWindows>False</ProtectWindows>
| </ExcelWorkbook>
| <Styles>
| <Style ss:ID=""Default"" ss:Name=""Normal"">
| <Alignment ss:Vertical=""Bottom""/>
| <Borders/>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""/>
| <Interior/>
| <NumberFormat/>
| <Protection/>
| </Style>
| <Style ss:ID=""m47348820"">
| <Alignment ss:Horizontal=""Right"" ss:Vertical=""Bottom""/>
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| </Style>
| <Style ss:ID=""m47348840"">
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| <NumberFormat ss:Format=""#,##0.00"р."""/>
| </Style>
| <Style ss:ID=""m47348148"">
| <Alignment ss:Horizontal=""Center"" ss:Vertical=""Bottom""/>
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| </Style>
| <Style ss:ID=""m47348168"">
| <Alignment ss:Horizontal=""Right"" ss:Vertical=""Bottom""/>
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| </Style>
| <Style ss:ID=""m47348208"">
| <Alignment ss:Horizontal=""Center"" ss:Vertical=""Bottom""/>
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| </Style>
| <Style ss:ID=""m47348228"">
| <Alignment ss:Horizontal=""Right"" ss:Vertical=""Bottom""/>
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| </Style>
| <Style ss:ID=""m47347760"">
| <Alignment ss:Horizontal=""Right"" ss:Vertical=""Bottom""/>
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| </Style>
| <Style ss:ID=""m47347780"">
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| <NumberFormat ss:Format=""#,##0.00"р."""/>
| </Style>
| <Style ss:ID=""s63"">
| <Alignment ss:Horizontal=""Center"" ss:Vertical=""Bottom""/>
| </Style>
| <Style ss:ID=""s73"">
| <Borders>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| </Style>
| <Style ss:ID=""s90"">
| <Alignment ss:Horizontal=""Center"" ss:Vertical=""Bottom""/>
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| </Style>
| <Style ss:ID=""s100"">
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <NumberFormat ss:Format=""@""/>
| </Style>
| <Style ss:ID=""s101"">
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <NumberFormat ss:Format=""Short Date""/>
| </Style>
| <Style ss:ID=""s102"">
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <NumberFormat ss:Format=""#,##0.00"р."""/>
| </Style>
| <Style ss:ID=""s103"">
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| </Style>
| <Style ss:ID=""s111"">
| <Borders>
| <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>
| </Borders>
| <Font ss:FontName=""Calibri"" x:CharSet=""204"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/>
| <NumberFormat ss:Format=""#,##0.00"р."""/>
| </Style>
| </Styles>";
НовДок.ДобавитьСтроку(СтрокаДоб);
//Заполним информацию о листе
СтрокаДоб = "";
СтрокаДоб = " <Worksheet ss:Name=""Лист1"">
| <Table ss:ExpandedColumnCount=""5"" x:FullColumns=""1""
| x:FullRows=""1"" ss:DefaultRowHeight=""15"">
| <Column ss:AutoFitWidth=""0"" ss:Width=""225""/>
| <Column ss:AutoFitWidth=""0"" ss:Width=""375""/>
| <Column ss:AutoFitWidth=""0"" ss:Width=""53.25""/>
| <Column ss:AutoFitWidth=""0"" ss:Width=""87"" ss:Span=""1""/>";
НовДок.ДобавитьСтроку(СтрокаДоб);
//Начинаем заполнять шапку
СтрокаДоб = "";
СтрокаДоб = " <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""s63""><Data ss:Type=""String"">Журнал-ордер синтетического счета</Data></Cell>
| </Row>
| <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""s63""><Data ss:Type=""String"">ОписаниеСчетаПредприятия</Data></Cell>
| </Row>
| <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""s63""><Data ss:Type=""String"">ОписаниеПериода</Data></Cell>
| </Row>
| <Row>
| <Cell ss:MergeAcross=""4""/>
| </Row>";
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСчетаПредприятия",Отчет.Счет.Код + Символы.НПП+Отчет.РасСчет.Наименование + Символы.НПП + "... по предприятю..." + Символы.НПП + Отчет.Организация.Наименование);
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеПериода","с" + Символы.НПП + Формат(Отчет.ДатаНачала, "ДФ=""дд ММММ гггг""") + Символы.НПП +"по" + Символы.НПП + Формат(Отчет.ДатаЗавершения, "ДФ=""дд ММММ гггг"""));
НовДок.ДобавитьСтроку(СтрокаДоб);
//Начальное сальдо
СтрокаДоб = "";
СтрокаДоб = " <Row>
| <Cell ss:MergeAcross=""1"" ss:StyleID=""m47347760""><Data ss:Type=""String"">ОписаниеСальдо</Data></Cell>
| <Cell ss:MergeAcross=""2"" ss:StyleID=""m47347780""ЗначениеСальдо
| </Row>";
//На всякий случай запомним, как будет выглядеть строка, если есть сальдо
//| <Cell ss:MergeAcross=""2"" ss:StyleID=""m47347780""><Data ss:Type=""Number"">84236.34</Data></Cell>
Если Отчет.Счет.Вид = ВидСчета.Активный Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСальдо","Начальное сальдо (дебет)");
Иначе
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСальдо","Начальное сальдо (кредит)");
КонецЕсли;
Если ЕстьВходящееСальдо = 1 Тогда
Пока ВыборкаВходящееСальдо.Следующий() Цикл
Если Отчет.Счет.Вид = ВидСчета.Активный Тогда
ВходящееСальдо = ВыборкаВходящееСальдо.СуммаОстатокДт;
Иначе
ВходящееСальдо = ВыборкаВходящееСальдо.СуммаОстатокКт;
КонецЕсли;
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ЗначениеСальдо","><Data ss:Type=""Number"">"+Формат(ВходящееСальдо,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ=")+"</Data></Cell>");
КонецЦикла;
Иначе
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ЗначениеСальдо","/>");
КонецЕсли;
НовДок.ДобавитьСтроку(СтрокаДоб);
//Обороты по дебету (заголовок)
СтрокаДоб = "";
СтрокаДоб = " <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""s73""/>
| </Row>
| <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""m47348148""><Data ss:Type=""String"">Дебет</Data></Cell>
| </Row>
| <Row>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Наименование кор. счета</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Содержание хозяйственной операции</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Дата</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Сумма</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Итого</Data></Cell>
| </Row>";
НовДок.ДобавитьСтроку(СтрокаДоб);
ИтогПоНаправлению = 0.0;
//Обороты по дебету (строки)
Если ЕстьОборотыПоДебету = 1 Тогда
СтрокаДоб = "";
СтрокаСтарт = "";
СтрокаСтарт = " <Row>
| <Cell ss:StyleID=""s100""ОписаниеСчета
| <Cell ss:StyleID=""s100""><Data ss:Type=""String"">ОписаниеОперации</Data></Cell>
| <Cell ss:StyleID=""s101""><Data ss:Type=""String"">ДатаОперации</Data></Cell>
| <Cell ss:StyleID=""s102""><Data ss:Type=""Number"">СуммаОперации</Data></Cell>
| <Cell ss:StyleID=""s102""ИтогПоОперации
| </Row>";
//На всякий случай - запомним, как должна выглядеть строка, если все поля заполнены
//СтрокаСтарт = " <Row>
//| <Cell ss:StyleID=""s100""><Data ss:Type=""String"">50.01Касса организации</Data></Cell>
//| <Cell ss:StyleID=""s100""><Data ss:Type=""String"">Торговая выручка сдана в банк</Data></Cell>
//| <Cell ss:StyleID=""s101""><Data ss:Type=""String"">16.02.2015</Data></Cell>
//| <Cell ss:StyleID=""s102""><Data ss:Type=""Number"">40000</Data></Cell>
//| <Cell ss:StyleID=""s102""><Data ss:Type=""Number"">40000</Data></Cell>
//| </Row>";
КоличествоСчетов = 0;
КоличествоСтрокПоСчету = 0;
СуммаПоСчету = 0.0;
ИтогПоНаправлению = 0.0;
НужнаЗапись = Ложь;
Пока ВыборкаДебет.Следующий() Цикл
Если ВыборкаДебет.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
КоличествоСчетов = КоличествоСчетов + 1;
Если КоличествоСчетов <> 1 Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоОперации","><Data ss:Type=""Number"">"+Формат(СуммаПоСчету,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ=")+"</Data></Cell>");
КонецЕсли;
СуммаПоСчету = ВыборкаДебет.Сумма;
КоличествоСтрокПоСчету = 0;
НовДок.ДобавитьСтроку(СтрокаДоб);
НужнаЗапись = Ложь;
ИначеЕсли ВыборкаДебет.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда
ИтогПоНаправлению = ВыборкаДебет.Сумма;
Иначе
Если НужнаЗапись Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоОперации","/>");
НовДок.ДобавитьСтроку(СтрокаДоб);
НужнаЗапись = Ложь;
КонецЕсли;
КоличествоСтрокПоСчету = КоличествоСтрокПоСчету + 1;
СтрокаДоб = "";
СтрокаДоб = СтрокаСтарт;
Если КоличествоСтрокПоСчету = 1 Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСчета","><Data ss:Type=""String"">"+ВыборкаДебет.СчетКт.Код + Символы.НПП + ВыборкаДебет.СчетКт.Наименование+"</Data></Cell>");
Иначе
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСчета","/>");
КонецЕсли;
СтрокаСодержание = СтрЗаменить(ВыборкаДебет.Содержание, Символы.ПС, " ");
СтрокаСодержание = СтрЗаменить(СтрокаСодержание, " ", " ");
Если ВыборкаДебет.Регистратор.Метаданные().Имя = Метаданные.Документы.ПоступлениеНаРасчетныйСчет.Имя Тогда
Если Найти(СтрокаСодержание,ВыборкаДебет.Регистратор.НазначениеПлатежа) <> 1 Тогда
СтрокаСодержание = ВыборкаДебет.Регистратор.НазначениеПлатежа + " " +СтрокаСодержание;
СтрокаСодержание = СтрЗаменить(СтрокаСодержание, Символы.ПС, " ");
СтрокаСодержание = СтрЗаменить(СтрокаСодержание, " ", " ");
КонецЕсли;
КонецЕсли;
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеОперации",СтрокаСодержание);
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ДатаОперации",Формат(ВыборкаДебет.Период, "ДФ=""дд.ММ.гггг"""));
СтрокаДоб = СтрЗаменить(СтрокаДоб,"СуммаОперации",Формат(ВыборкаДебет.Сумма,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ="));
НужнаЗапись = Истина;
КонецЕсли;
КонецЦикла;
Если КоличествоСчетов > 0 Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоОперации","><Data ss:Type=""Number"">"+Формат(СуммаПоСчету,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ=")+"</Data></Cell>");
НовДок.ДобавитьСтроку(СтрокаДоб);
КонецЕсли;
КонецЕсли;
//Обороты по дебету (итог)
СтрокаДоб = "";
СтрокаДоб = " <Row>
| <Cell ss:MergeAcross=""3"" ss:StyleID=""m47348168""><Data ss:Type=""String"">Итого дебет:</Data></Cell>
| <Cell ss:StyleID=""s111""><Data ss:Type=""Number"">ИтогПоДебету</Data></Cell>
| </Row>
| <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""s73""/>
| </Row>";
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоДебету",Формат(ИтогПоНаправлению,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ="));
НовДок.ДобавитьСтроку(СтрокаДоб);
//Обороты по кредиту (заголовок)
СтрокаДоб = "";
СтрокаДоб = " <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""m47348208""><Data ss:Type=""String"">Кредит</Data></Cell>
| </Row>
| <Row>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Наименование кор. счета</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Содержание хозяйственной операции</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Дата</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Сумма</Data></Cell>
| <Cell ss:StyleID=""s90""><Data ss:Type=""String"">Итого</Data></Cell>
| </Row>";
НовДок.ДобавитьСтроку(СтрокаДоб);
ИтогПоНаправлению = 0.0;
//Обороты по кредите (строки)
Если ЕстьОборотыПоКредиту = 1 Тогда
СтрокаДоб = "";
СтрокаСтарт = "";
СтрокаСтарт = " <Row>
| <Cell ss:StyleID=""s100""ОписаниеСчета
| <Cell ss:StyleID=""s100""><Data ss:Type=""String"">ОписаниеОперации</Data></Cell>
| <Cell ss:StyleID=""s101""><Data ss:Type=""String"">ДатаОперации</Data></Cell>
| <Cell ss:StyleID=""s102""><Data ss:Type=""Number"">СуммаОперации</Data></Cell>
| <Cell ss:StyleID=""s102""ИтогПоОперации
| </Row>";
КоличествоСчетов = 0;
КоличествоСтрокПоСчету = 0;
СуммаПоСчету = 0.0;
ИтогПоНаправлению = 0.0;
НужнаЗапись = Ложь;
Пока ВыборкаКредит.Следующий() Цикл
Если ВыборкаКредит.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
КоличествоСчетов = КоличествоСчетов + 1;
Если КоличествоСчетов <> 1 Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоОперации","><Data ss:Type=""Number"">"+Формат(СуммаПоСчету,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ=")+"</Data></Cell>");
КонецЕсли;
СуммаПоСчету = ВыборкаКредит.Сумма;
КоличествоСтрокПоСчету = 0;
НовДок.ДобавитьСтроку(СтрокаДоб);
НужнаЗапись = Ложь;
ИначеЕсли ВыборкаКредит.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда
ИтогПоНаправлению = ВыборкаКредит.Сумма;
Иначе
Если НужнаЗапись Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоОперации","/>");
НовДок.ДобавитьСтроку(СтрокаДоб);
НужнаЗапись = Ложь;
КонецЕсли;
СтрокаДоб = "";
СтрокаДоб = СтрокаСтарт;
КоличествоСтрокПоСчету = КоличествоСтрокПоСчету + 1;
Если КоличествоСтрокПоСчету = 1 Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСчета","><Data ss:Type=""String"">"+ВыборкаКредит.СчетДт.Код + Символы.НПП + ВыборкаКредит.СчетДт.Наименование+"</Data></Cell>");
Иначе
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСчета","/>");
КонецЕсли;
СтрокаСодержание = СтрЗаменить(ВыборкаКредит.Содержание, Символы.ПС, " ");
СтрокаСодержание = СтрЗаменить(СтрокаСодержание, " ", " ");
Если ВыборкаКредит.Регистратор.Метаданные().Имя = Метаданные.Документы.ПоступлениеНаРасчетныйСчет.Имя Тогда
Если Найти(СтрокаСодержание,ВыборкаКредит.Регистратор.НазначениеПлатежа) <> 1 Тогда
СтрокаСодержание = ВыборкаКредит.Регистратор.НазначениеПлатежа + " " +СтрокаСодержание;
СтрокаСодержание = СтрЗаменить(СтрокаСодержание, Символы.ПС, " ");
СтрокаСодержание = СтрЗаменить(СтрокаСодержание, " ", " ");
КонецЕсли;
КонецЕсли;
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеОперации",СтрокаСодержание);
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ДатаОперации",Формат(ВыборкаКредит.Период, "ДФ=""дд.ММ.гггг"""));
СтрокаДоб = СтрЗаменить(СтрокаДоб,"СуммаОперации",Формат(ВыборкаКредит.Сумма,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ="));
НужнаЗапись = Истина;
КонецЕсли;
КонецЦикла;
Если КоличествоСчетов > 0 Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоОперации","><Data ss:Type=""Number"">"+Формат(СуммаПоСчету,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ=")+"</Data></Cell>");
НовДок.ДобавитьСтроку(СтрокаДоб);
КонецЕсли;
КонецЕсли;
//Обороты по кредиту (итог)
СтрокаДоб = "";
СтрокаДоб = " <Row>
| <Cell ss:MergeAcross=""3"" ss:StyleID=""m47348228""><Data ss:Type=""String"">Итого кредит:</Data></Cell>
| <Cell ss:StyleID=""s111""><Data ss:Type=""Number"">ИтогПоКредиту</Data></Cell>
| </Row>
| <Row>
| <Cell ss:MergeAcross=""4"" ss:StyleID=""s73""/>
| </Row>";
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ИтогПоКредиту",Формат(ИтогПоНаправлению,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ="));
НовДок.ДобавитьСтроку(СтрокаДоб);
//Конечное сальдо
СтрокаДоб = "";
СтрокаДоб = " <Row>
| <Cell ss:MergeAcross=""1"" ss:StyleID=""m47348820""><Data ss:Type=""String"">ОписаниеСальдо</Data></Cell>
| <Cell ss:MergeAcross=""2"" ss:StyleID=""m47348840""ЗначениеСальдо
| </Row>";
Если Отчет.Счет.Вид = ВидСчета.Активный Тогда
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСальдо","Конечное сальдо (дебет)");
Иначе
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ОписаниеСальдо","Конечное сальдо (кредит)");
КонецЕсли;
Если ЕстьИсходящееСальдо = 1 Тогда
Пока ВыборкаИсходящееСальдо.Следующий() Цикл
Если Отчет.Счет.Вид = ВидСчета.Активный Тогда
ИсходящееСальдо = ВыборкаИсходящееСальдо.СуммаОстатокДт;
Иначе
ИсходящееСальдо = ВыборкаИсходящееСальдо.СуммаОстатокКт;
КонецЕсли;
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ЗначениеСальдо","><Data ss:Type=""Number"">"+Формат(ИсходящееСальдо,"ЧЦ=15; ЧДЦ=2; ЧРД='.'; ЧГ=")+"</Data></Cell>");
КонецЦикла;
Иначе
СтрокаДоб = СтрЗаменить(СтрокаДоб,"ЗначениеСальдо","/>");
КонецЕсли;
НовДок.ДобавитьСтроку(СтрокаДоб);
//Завершение книги
СтрокаДоб = "";
СтрокаДоб = " </Table>
| <WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel"">
| <PageSetup>
| <Header x:Margin=""0.3""/>
| <Footer x:Margin=""0.3""/>
| <PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/>
| </PageSetup>
| <Print>
| <ValidPrinterInfo/>
| <PaperSizeIndex>9</PaperSizeIndex>
| <HorizontalResolution>600</HorizontalResolution>
| <VerticalResolution>600</VerticalResolution>
| </Print>
| <Selected/>
| <Panes>
| <Pane>
| <Number>3</Number>
| <RangeSelection>R1C1:R1C5</RangeSelection>
| </Pane>
| </Panes>
| <ProtectObjects>False</ProtectObjects>
| <ProtectScenarios>False</ProtectScenarios>
| </WorksheetOptions>
| </Worksheet>
|</Workbook>";
НовДок.ДобавитьСтроку(СтрокаДоб);
ВремФайл = ПолучитьИмяВременногоФайла("txt");
НовДок.Записать(ВремФайл);
ДвоичДанные = Новый ДвоичныеДанные(ВремФайл);
Адрес = ПоместитьВоВременноеХранилище(ДвоичДанные, УникальныйИдентификатор);
УдалитьФайлы(ВремФайл);
Возврат Адрес;
КонецФункции