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