Для каждого СтрокаТЧ Из МассивСтрок Цикл




Текст запроса

 

Начнём с текста запроса, помещённого в функцию "ПолучитьДанныеДокументов".

Там в конце производится отбор по наименованию показателя, чтобы оно было подобно "Фиксированная сумма для надбавка ИСН по дням". Не знаю, надо ли на самом деле по наименованию показателя делать отбор, но оставил.

 

Нужно было группировать строки от разных документов, поэтому сделал концовку запроса так:

|ГДЕ

| ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Показатель.Наименование ПОДОБНО ""Фиксированная сумма для надбавка ИСН по дням""

| И КадровыйПереводСпискомСотрудники.Ссылка В (&Ссылка)

|УПОРЯДОЧИТЬ ПО

| КадровыйПереводСпискомСотрудники.Ссылка, КадровыйПереводСпискомСотрудники.НомерСтроки

|ИТОГИ ПО

| КадровыйПереводСпискомСотрудники.Ссылка

|АВТОУПОРЯДОЧИВАНИЕ";

 

Получение данных печати

 

В функции "ПолучитьДанныеПечати" я соответственно пробегаю сначала группировку по документам, затем уже детальную:

 

&НаСервере

Функция ПолучитьДанныеПечати(знач МассивДокументов, знач ИмяМакета, знач ТипМакета) Экспорт

 

ДанныеПоВсемОбъектам = Новый Соответствие;

 

РезультатЗапросаПоВсемПечатаемымДокументам = ПолучитьДанныеДокументов(МассивДокументов);

ВыборкаПоДокументам = РезультатЗапросаПоВсемПечатаемымДокументам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка");

Пока ВыборкаПоДокументам.Следующий() Цикл

МассивСтрок = Новый Массив;

ВыборкаДетальныеЗаписи = ВыборкаПоДокументам.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

МассивСтрок.Добавить(ПолучитьДанныеОбъекта(ВыборкаДетальныеЗаписи));

КонецЦикла;

ДанныеПоВсемОбъектам.Вставить(ВыборкаПоДокументам.Ссылка, МассивСтрок);

КонецЦикла;

 

ОписаниеОбластей = Новый Соответствие;

 

ДвоичныеДанныеМакетов = Новый Соответствие;

ТипыМакетов = Новый Соответствие;

 

ДвоичныеДанныеМакетов.Вставить(ИмяМакета, РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"));

ТипыМакетов.Вставить(ИмяМакета, ТипМакета);

 

ОписаниеОбластей.Вставить(ИмяМакета, ПолучитьОписаниеОбластейМакетаОфисногоДокумента());

 

Возврат Новый Структура("Данные, Макеты",

ДанныеПоВсемОбъектам,

Новый Структура("ОписаниеОбластей, ТипыМакетов, ДвоичныеДанныеМакетов",

ОписаниеОбластей,

ТипыМакетов,

ДвоичныеДанныеМакетов));

 

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

 

Изменено то, что помещается в соответствие "ДанныеПоВсемОбъектам". Каждому документу теперь соответствует массив. В массиве столько элементов, сколько строк табличной части выбрано из документа запросом. Я условно считаю каждый элемент этого массива строкой табличной части.

При добавлении данных в этот массив, я не указываю имени макета, как у Вас это было. Вроде бы макет один и тот же, это имя не нужно.

 

Процедура Печать

 

Данные другие, поэтому и процедура Печать поменялась. Я жирным выделил изменившиеся места.

 

&НаКлиенте

Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт

 

ПараметрКоманды = ОбъектыНазначения;

 

ИмяМакета = ИдентификаторКоманды;

ТипМакета = "DOC"; //Варианты: "DOC", "ODT"

 

МакетИДанныеОбъекта = ЭтаФорма.ПолучитьДанныеПечати(ПараметрКоманды,ИмяМакета,ТипМакета);

 

Для Каждого ДокументСсылка Из ОбъектыНазначения Цикл

ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета];

ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;

Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей;

МассивСтрок = МакетИДанныеОбъекта.Данные[ДокументСсылка];

 

Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета);

Если Макет = Неопределено Тогда

Продолжить;

КонецЕсли;

 

ЗакрытьОкноПечатнойФормы = Ложь;

Попытка

ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета, Макет);

Если ПечатнаяФорма = Неопределено Тогда

УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);

Продолжить;

КонецЕсли;

 

Для каждого СтрокаТЧ Из МассивСтрок Цикл

Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Договор"]);

УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, СтрокаТЧ, Ложь);

ВставитьРазрывСтраницы(ПечатнаяФорма);

КонецЦикла;

 

УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма);

 

Исключение

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));

УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма);

УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);

Возврат;

КонецПопытки;

 

УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, Ложь);

УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);

//КонецЦикла;

КонецЦикла;

 

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

 

Как видим, добавилась ещё процедура "ВставитьРазрывСтраницы". Это, чтобы каждая новая строка из табличной части выводилась, начиная с новой страницы.

 

4. Процедура "ВставитьРазрывСтраницы"

 

Пришлось в Word с помощью макроса выяснять, как называется процедура вставки разрыва страницы.

 

&НаКлиенте

Процедура ВставитьРазрывСтраницы(Знач Handler)

ActiveDocument = Handler.COMСоединение.ActiveDocument;

ПозицияОкончанияДокумента = ActiveDocument.Range().End;

ActiveDocument.Range(ПозицияОкончанияДокумента-1, ПозицияОкончанияДокумента-1).InsertBreak();

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

 

 

Всё. Только эти 4 изменения.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: