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