СКД. Расчетный листок, не формирует тело. ЗУП 2.0 (2.0.21.6) для Казахстана
Доброго времени суток! Подскажите пожалуйста по СКД. Запрашиваю через http-сервис Расчетный листок нужного сотрудника. Конфа древняя, функция формирования РЛ выполняется в директиве "На клиенте", соответственно не могу обратиться к ним. Пришлось отдельным программным выводом, получилось такое:
В итоге табличный документ превращаю в PDF и забираю. Но в моей функции РЛ наполовину, тело отсутствует. В процессе компоновки если вычислить, внутри мало макетов, когда в типовой в разы больше... В прикрепленке полный вывод РЛ и мой. Куда копать подскажите плиз?
Моя функция |
---|
Функция ПрограммноСформироватьОтчетНаСервере(Период, Организация)
ОбъектОтчетНаСервере = отчеты.РасчетныеЛисткиОрганизаций.Создать();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
СхемаСКД = ОбъектОтчетНаСервере.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикНастроекДанныхОтчета = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекДанныхОтчета.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД));
КомпоновщикНастроекДанныхОтчета.ЗагрузитьНастройки(ОбъектОтчетНаСервере.КомпоновщикНастроек.Настройки);
ПараметрыДанных = КомпоновщикНастроекДанныхОтчета.Настройки.ПараметрыДанных.Элементы;
ЭлементНачалоПериода = ПараметрыДанных.Найти("НачалоПериода");
ЭлементНачалоПериода.Использование = Истина;
ЭлементНачалоПериода.Значение = НачалоМесяца(Период);
ЭлементКонецПериода = ПараметрыДанных.Найти("КонецПериода");
ЭлементКонецПериода.Использование = Истина;
ЭлементКонецПериода.Значение = КонецМесяца(Период);
ЭлементКонецПериода = ПараметрыДанных.Найти("Группировать");
ЭлементКонецПериода.Использование = Истина;
ЭлементКонецПериода.Значение = Ложь;
ЭлементКонецПериода = ПараметрыДанных.Найти("ВыводитьЗаймы");
ЭлементКонецПериода.Использование = Истина;
ЭлементКонецПериода.Значение = Истина;
ЭлементКонецПериода = ПараметрыДанных.Найти("ВыводитьДоходы");
ЭлементКонецПериода.Использование = Истина;
ЭлементКонецПериода.Значение = Истина;
ЭлементКонецПериода = ПараметрыДанных.Найти("ВыводитьДокументВыплаты");
ЭлементКонецПериода.Использование = Истина;
ЭлементКонецПериода.Значение = Истина;
ОтборКомпоновщика = КомпоновщикНастроекДанныхОтчета.Настройки.Отбор;
СотрудникОтбор = ОтборКомпоновщика.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
СотрудникОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
СотрудникОтбор.Использование = Истина;
СотрудникОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник");
СотрудникОтбор.ПравоеЗначение = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию("Иванов Иван");
ОрганизацияОтбор = ОтборКомпоновщика.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОрганизацияОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОрганизацияОтбор.Использование = Истина;
ОрганизацияОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
ОрганизацияОтбор.ПравоеЗначение = Организация;
КомпоновщикНастроекДанныхОтчета.ЗагрузитьПользовательскиеНастройки(ОбъектОтчетНаСервере.КомпоновщикНастроек.ПользовательскиеНастройки);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаСКД, КомпоновщикНастроекДанныхОтчета.ПолучитьНастройки(), ДанныеРасшифровки);
НачисленияУдержания = Новый ТаблицаЗначений;
НачисленияУдержания.Колонки.Добавить("ВидДвижения");
НачисленияУдержания.Колонки.Добавить("ВидДвиженияВычет");
НачисленияУдержания.Колонки.Добавить("ВидДвиженияКорректировка");
НачисленияУдержания.Колонки.Добавить("ВидДвиженияСуммаУменьшенияОблагаемогоДохода");
НачисленияУдержания.Колонки.Добавить("ВидДвиженияУд");
НачисленияУдержания.Колонки.Добавить("ВидДоговора");
НачисленияУдержания.Колонки.Добавить("ВОСМСЗаМесяц");
НачисленияУдержания.Колонки.Добавить("ВОСМССНачалаГода");
НачисленияУдержания.Колонки.Добавить("ВычетСНачалаГода");
НачисленияУдержания.Колонки.Добавить("ГоловнаяОрганизация");
НачисленияУдержания.Колонки.Добавить("Должность");
НачисленияУдержания.Колонки.Добавить("ДоходыСНачалаГода");
НачисленияУдержания.Колонки.Добавить("ЗаймыОстаток");
НачисленияУдержания.Колонки.Добавить("ИПНСНачалаГода");
НачисленияУдержания.Колонки.Добавить("КонецПогашения");
НачисленияУдержания.Колонки.Добавить("НачалоПогашения");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияВидНачисления");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияВидУдержания");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияОтработанныеДни");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияОтработанныеЧасы");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияПериодНачисления");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияПериодУдержания");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияСуммаНачисления");
НачисленияУдержания.Колонки.Добавить("НачисленияУдержанияСуммаУдержания");
НачисленияУдержания.Колонки.Добавить("НеОблагаемыеИПНДоходыСНачалаГода");
НачисленияУдержания.Колонки.Добавить("ООСМСЗаМесяц");
НачисленияУдержания.Колонки.Добавить("ООСМССНачалаГода");
НачисленияУдержания.Колонки.Добавить("ОПВСНачалаГода");
НачисленияУдержания.Колонки.Добавить("ОППВЗаМесяц");
НачисленияУдержания.Колонки.Добавить("ОППВСНачалаГода");
НачисленияУдержания.Колонки.Добавить("Организация");
НачисленияУдержания.Колонки.Добавить("ПериодПогашения");
НачисленияУдержания.Колонки.Добавить("ПериодРегистрации");
НачисленияУдержания.Колонки.Добавить("ПодразделениеОрганизации");
НачисленияУдержания.Колонки.Добавить("ПризнакУпорядочиванияСтрок");
НачисленияУдержания.Колонки.Добавить("Размер");
НачисленияУдержания.Колонки.Добавить("СальдоКонечное");
НачисленияУдержания.Колонки.Добавить("СальдоНачальное");
НачисленияУдержания.Колонки.Добавить("Сотрудник");
НачисленияУдержания.Колонки.Добавить("СуммаВзаиморасчетовКонечныйОст");
НачисленияУдержания.Колонки.Добавить("СуммаВзаиморасчетовНачальныйОст");
НачисленияУдержания.Колонки.Добавить("ТабельныйНомер");
НачисленияУдержания.Колонки.Добавить("ТарифныйРазряд");
НачисленияУдержания.Колонки.Добавить("ТекстДолгНаКонецПериода");
НачисленияУдержания.Колонки.Добавить("ТекстДолгНаНачалоПериода");
НачисленияУдержания.Колонки.Добавить("ФизЛицо");
НачисленияУдержания.Колонки.Добавить("ФИО");
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("НачисленияУдержания", НачисленияУдержания);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
ДокументРезультат = Новый ТабличныйДокумент;
ДокументРезультат.АвтоМасштаб = Истина;
ДокументРезультат.ОтображатьЗаголовки = Ложь;
ДокументРезультат.ОтображатьСетку = Ложь;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Возврат ДокументРезультат;
КонецФункции Показать |
Типовой код формирования на клиенте |
---|
Функция СформироватьОтчет(Результат, ДанныеРасшифровки = Неопределено, ВыводВФормуОтчета = Ложь, ВыводитьПоСтраницам = Ложь) Экспорт
СохранитьНастройкуТабличногоДокумента(Результат);
Если ДанныеРасшифровки = Неопределено Тогда
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КонецЕсли;
НастрокаПоУмолчанию = КомпоновщикНастроек.ПолучитьНастройки();
ТиповыеОтчеты.ПолучитьПримененуюНастройку(ЭтотОбъект);
ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Группировать"));
Если ЗначениеПараметра.Использование и НЕ ЗначениеПараметра.Значение тогда
УдалитьГруппировку();
КонецЕсли;
// Получить настройки схемы компоновки данных
Настройки = КомпоновщикНастроек.Настройки;
// Преобразовать отбор по физ лицу в отбор по сотруднику
Для Каждого ЭлементОтбора Из Настройки.Отбор.Элементы Цикл
Если НЕ ЭлементОтбора.Использование Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементОтбора) <> Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник") И
(ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно
ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии)
И ЭлементОтбора.ПравоеЗначение <> Справочники.СотрудникиОрганизаций.ПустаяСсылка()
И НЕ ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементОтбора.ПравоеЗначение, "ЭтоГруппа") Тогда
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФизЛицо");
ЭлементОтбора.ПравоеЗначение = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементОтбора.ПравоеЗначение, "ФизЛицо");
ИначеЕсли ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник") И
(ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке
ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии) Тогда
ОтборБезГрупп = Истина;
СписокФизЛиц = Новый СписокЗначений;
Для Каждого ЭлементСписка Из ЭлементОтбора.ПравоеЗначение Цикл
Если ЭлементСписка.Значение <> Справочники.СотрудникиОрганизаций.ПустаяСсылка() И НЕ ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементСписка.Значение, "ЭтоГруппа") Тогда
СписокФизЛиц.Добавить(ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементСписка.Значение, "ФизЛицо"));
Иначе
ОтборБезГрупп = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ОтборБезГрупп Тогда
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФизЛицо");
ЭлементОтбора.ПравоеЗначение = СписокФизЛиц;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("парамВалютаРегламентУчета", Константы.ВалютаРегламентированногоУчета.Получить());
ЗначениеНачалоПараметра = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
НачалоПериода = ЗначениеНачалоПараметра.Значение;
ЗначениеКонецПараметра = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
КонецПериода = ЗначениеКонецПараметра.Значение;
ЗначениеВыводитьДокументВыплаты = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьДокументВыплаты"));
ДетализацияВыплат = ЗначениеВыводитьДокументВыплаты.Значение;
ЗначениеВыводитьЗаймы = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаймы"));
ВыводитьЗаймы = ЗначениеВыводитьЗаймы.Значение;
ЗначениеВыводитьДоходы = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьДоходы"));
ВыводитьДоходы = ЗначениеВыводитьДоходы.Значение;
ПараметрНачалоПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
ПараметрКонецПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
Если НачалоПериода = '00010101' И (КонецПериода = '00010101' ИЛИ Год(КонецПериода) = Год(Дата('00010101235959'))) Тогда
НачалоПериода = НачалоМесяца(ТекущаяДата());
КонецПериода = КонецМесяца(ТекущаяДата());
ИначеЕсли НачалоПериода = '00010101' Тогда
НачалоПериода = НачалоМесяца(КонецПериода);
ИначеЕсли КонецПериода = '00010101' Тогда
КонецПериода = КонецМесяца(НачалоПериода);
ИначеЕсли НачалоПериода > КонецПериода ИЛИ КонецПериода < НачалоПериода Тогда
КонецПериода = КонецМесяца(НачалоПериода);
КонецЕсли;
ПараметрКонецПериода.Использование = Истина;
ПараметрНачалоПериода.Использование = Истина;
ПараметрКонецПериода.Значение = КонецПериода;
ПараметрНачалоПериода.Значение = НачалоПериода;
Если НачалоПериода <> Неопределено И КонецПериода <> Неопределено Тогда
УправлениеОтчетами.ЗаменитьВСКДТекстЗапросКалендаря(СхемаКомпоновкиДанных, НачалоПериода, КонецПериода, СоответствиеНаборовДанныхИЗапросов);
КонецЕсли;
// установим параметры и текст запроса построителя запроса
ПостроительОтчетов = Новый ПостроительОтчета;
НастроитьПостроительЗапросов(ПостроительОтчетов, ДетализацияВыплат);
// установим отбор р/л без без начислений и удержаний
ГруппаОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ГруппаОтбора.Использование = Истина;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвижения")).Поле;
ЭлементОтбора.ПравоеЗначение = "1";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияУд")).Поле;
ЭлементОтбора.ПравоеЗначение = "2";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияВычет")).Поле;
ЭлементОтбора.ПравоеЗначение = "5";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияКорректировка")).Поле;
ЭлементОтбора.ПравоеЗначение = "5";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияСуммаУменьшенияОблагаемогоДохода")).Поле;
ЭлементОтбора.ПравоеЗначение = "5";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.Элементы.Найти("СальдоНачальное").Поле;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.Элементы.Найти("СальдоКонечное").Поле;
ЭлементОтбора.ПравоеЗначение = 0;
ЗначениеОтбораСотрудника = Неопределено;
ЕстьОтборПоФизЛицу = Ложь;
Для Каждого ЭлементОтбора Из Настройки.Отбор.Элементы Цикл
// если отбор установлен по сотруднику
Если ЭлементОтбора.Использование И ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник") Тогда
Если ЭлементОтбора.ПравоеЗначение <> Неопределено И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Тогда
ЗначениеОтбораСотрудника = ЭлементОтбора;
КонецЕсли;
КонецЕсли;
//если отбор установлен по физлицу
Если ЭлементОтбора.Использование И ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементОтбора.ЛевоеЗначение = СписокПолейОтбора.Получить(0).Значение Тогда
Если ЭлементОтбора.ПравоеЗначение <> Неопределено И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Тогда
ЕстьОтборПоФизЛицу = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НЕ ЕстьОтборПоФизЛицу И ЗначениеОтбораСотрудника <> Неопределено
И ((ТипЗнч(ЗначениеОтбораСотрудника.ПравоеЗначение) = Тип("СправочникСсылка.СотрудникиОрганизаций")
И НЕ ЗначениеОтбораСотрудника.ПравоеЗначение.ЭтоГруппа)
ИЛИ ТипЗнч(ЗначениеОтбораСотрудника.ПравоеЗначение) = Тип("СписокЗначений")) Тогда
ОтборПоФизЛицу = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборПоФизЛицу.ВидСравнения = ЗначениеОтбораСотрудника.ВидСравнения;
ОтборПоФизЛицу.Использование = Истина;
ОтборПоФизЛицу.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ФизЛицо")).Поле;
Если ТипЗнч(ЗначениеОтбораСотрудника.ПравоеЗначение) = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда
ОтборПоФизЛицу.ПравоеЗначение = ЗначениеОтбораСотрудника.ПравоеЗначение.Физлицо;
ИначеЕсли ТипЗнч(ЗначениеОтбораСотрудника.ПравоеЗначение) = Тип("СписокЗначений") Тогда
СписокЗначенийОтбораФизЛиц = Новый СписокЗначений;
Для Каждого ЭлементСписка Из ЗначениеОтбораСотрудника.ПравоеЗначение Цикл
Если ТипЗнч(ЭлементСписка.Значение) = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда
СписокЗначенийОтбораФизЛиц.Добавить(ЭлементСписка.Значение.ФизЛицо);
КонецЕсли;
КонецЦикла;
ОтборПоФизЛицу.ПравоеЗначение = СписокЗначенийОтбораФизЛиц;
Иначе
Настройки.Отбор.Элементы.Удалить(ОтборПоФизЛицу);
КонецЕсли;
КонецЕсли;
// установим отборы в построителе запросов
Для Каждого ЭлементОтбора Из Настройки.Отбор.Элементы Цикл
Если ЭлементОтбора.Использование И ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И СписокПолейОтбора.НайтиПоЗначению(ЭлементОтбора.ЛевоеЗначение) <> Неопределено
Тогда
ВидСравненияОтбора = Неопределено;
Если ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
ВидСравненияОтбора = ВидСравнения.Равно;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда
ВидСравненияОтбора = ВидСравнения.ВСписке;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда
ВидСравненияОтбора = ВидСравнения.НеРавно;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда
ВидСравненияОтбора = ВидСравнения.ВСпискеПоИерархии;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии Тогда
ВидСравненияОтбора = ВидСравнения.ВИерархии;
КонецЕсли;
Если ВидСравненияОтбора <> Неопределено Тогда
Имя = Строка(ЭлементОтбора.ЛевоеЗначение);
ПостроительОтчетов.Отбор.Добавить(Имя);
ПостроительОтчетов.Отбор[Имя].ВидСравнения = ВидСравненияОтбора;
Если ЭлементОтбора.ПравоеЗначение <> Неопределено И ЭлементОтбора.ПравоеЗначение <> NULL И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Тогда
ПостроительОтчетов.Отбор[Имя].Значение = ЭлементОтбора.ПравоеЗначение;
КонецЕсли;
ПостроительОтчетов.Отбор[Имя].Использование = Истина;
КонецЕсли;
КонецЕсли;
// если отбор установлен по сотруднику
Если ЭлементОтбора.Использование И ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементОтбора.ЛевоеЗначение = СписокПолейОтбора.Получить(1).Значение Тогда
Если ЭлементОтбора.ПравоеЗначение <> Неопределено И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Тогда
ЗначениеОтбораСотрудника = ЭлементОтбора;
КонецЕсли;
КонецЕсли;
// если отбор установлен по физлицу
Если ЭлементОтбора.Использование И ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементОтбора.ЛевоеЗначение = СписокПолейОтбора.Получить(0).Значение Тогда
Если ЭлементОтбора.ПравоеЗначение <> Неопределено И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Тогда
ЕстьОтборПоФизЛицу = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// заполним ТЗ "НачисленияУдержания"
ЗаполнитьВнешнийИсточникДанных(ПостроительОтчетов);
//Установить параметрыы расшифровки макета
Для Каждого МакетГруппировки Из СхемаКомпоновкиДанных.МакетыГруппировок Цикл
Если МакетГруппировки.ИмяГруппировки = "СтрокаНачисленийУдержаний" Тогда
ИмяМакетаСтрокаНачислений = МакетГруппировки.Макет;
КонецЕсли;
Если МакетГруппировки.ИмяГруппировки = "ДоходыВНатуральнойФормеВыплата" Тогда
ИмяМакетаДоходыВнатруальнойФорме = МакетГруппировки.Макет;
КонецЕсли;
Если МакетГруппировки.ИмяГруппировки = "ВычетСтрока" Тогда
ИмяМакетаВычетСтрока = МакетГруппировки.Макет;
КонецЕсли;
КонецЦикла;
СотрудникМесяц = Новый ПараметрКомпоновкиДанных("СотрудникМесяц");
СотрудникМесяц1 = Новый ПараметрКомпоновкиДанных("СотрудникМесяц");
СотрудникМесяц2 = Новый ПараметрКомпоновкиДанных("СотрудникМесяц");
МакетСтрокиНачисленийУдержаний = СхемаКомпоновкиДанных.Макеты.Найти(ИмяМакетаСтрокаНачислений);
МакетСтрокиДоходовВыплат = СхемаКомпоновкиДанных.Макеты.Найти(ИмяМакетаДоходыВнатруальнойФорме);
МакетСтрокиВычеты = СхемаКомпоновкиДанных.Макеты.Найти(ИмяМакетаВычетСтрока);
ЯчейкиСтрокиНачисленийУдержаний = МакетСтрокиНачисленийУдержаний.Макет[0].Ячейки;
ЯчейкиСтрокиДоходовВыплат = МакетСтрокиДоходовВыплат.Макет[0].Ячейки;
ЯчейкиСтрокиВычеты = МакетСтрокиВычеты.Макет[0].Ячейки;
Для Сч = 0 По 16 Цикл
ЯчейкиСтрокиНачисленийУдержаний[Сч].Оформление.Элементы.Найти("Details").Значение = СотрудникМесяц;
ЯчейкиСтрокиДоходовВыплат[Сч].Оформление.Элементы.Найти("Details").Значение = СотрудникМесяц1;
ЯчейкиСтрокиВычеты[Сч].Оформление.Элементы.Найти("Details").Значение = СотрудникМесяц2;
КонецЦикла;
УстановитьВыводДополнительнойИнформации(Настройки.Структура, ВыводитьДоходы, ВыводитьЗаймы);
// создадим структуру с внешним набором данных
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("НачисленияУдержания", НачисленияУдержания);
// получим макет компоновки данных
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
// создадим и инициализируем процессор компоновки данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
// очистим результирующий табличный документ
Результат.Очистить();
Если ВыводВФормуОтчета Тогда
ВыводЗаголовкаОтчета(Результат);
КонецЕсли;
// удалим отбор пустых строк начислений
Настройки.Отбор.Элементы.Удалить(ГруппаОтбора);
//Настройки.Отбор.Элементы.Удалить(ГруппаОтбораСальдо);
Если ОтборПоФизЛицу <> Неопределено Тогда
Настройки.Отбор.Элементы.Удалить(ОтборПоФизЛицу);
КонецЕсли;
// выведем отчет в табличный документ "Результат"
ВывестиРезультатВТабличныйДокумент(ПроцессорКомпоновки, Результат, ВыводитьПоСтраницам);
УправлениеОтчетами.УстановитьЗапросыСКДПоСоответсвию(СхемаКомпоновкиДанных.НаборыДанных, СоответствиеНаборовДанныхИЗапросов);
Результат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
Если ВыводВФормуОтчета Тогда
ТиповыеОтчеты.УправлениеОтображениемЗаголовкаТиповогоОтчета(ЭтотОбъект, Результат);
КонецЕсли;
Результат.Область(1, 1, 1, 1).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
КомпоновщикНастроек.ЗагрузитьНастройки(НастрокаПоУмолчанию);
ВосстановитьНастройкуТабличногоДокумента(Результат);
Возврат Результат;
КонецФункции Показать |
В итоге табличный документ превращаю в PDF и забираю. Но в моей функции РЛ наполовину, тело отсутствует. В процессе компоновки если вычислить, внутри мало макетов, когда в типовой в разы больше... В прикрепленке полный вывод РЛ и мой. Куда копать подскажите плиз?
Прикрепленные файлы:
Найденные решения
(7)
В макете есть набор данных объект, который по сути содержит большую часть инфы по начислению. У тебя этот набор не заполняется же. Ты просто передаешь пустую ТЗ, а в стандартном коде ТЗ заполняется наверно в построителе
вот здесь
// заполним ТЗ "НачисленияУдержания"
ЗаполнитьВнешнийИсточникДанных(ПостроительОтчетов);
В макете есть набор данных объект, который по сути содержит большую часть инфы по начислению. У тебя этот набор не заполняется же. Ты просто передаешь пустую ТЗ, а в стандартном коде ТЗ заполняется наверно в построителе
вот здесь
// установим параметры и текст запроса построителя запроса
ПостроительОтчетов = Новый ПостроительОтчета;
НастроитьПостроительЗапросов(ПостроительОтчетов, ДетализацияВыплат);
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
мне кажется не хватает отборов
// установим отбор р/л без без начислений и удержаний
ГруппаОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ГруппаОтбора.Использование = Истина;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвижения")).Поле;
ЭлементОтбора.ПравоеЗначение = "1";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияУд")).Поле;
ЭлементОтбора.ПравоеЗначение = "2";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияВычет")).Поле;
ЭлементОтбора.ПравоеЗначение = "5";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияКорректировка")).Поле;
ЭлементОтбора.ПравоеЗначение = "5";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("ВидДвиженияСуммаУменьшенияОблагаемогоДохода")).Поле;
ЭлементОтбора.ПравоеЗначение = "5";
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.Элементы.Найти("СальдоНачальное").Поле;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Настройки.ДоступныеПоляОтбора.Элементы.Найти("СальдоКонечное").Поле;
ЭлементОтбора.ПравоеЗначение = 0;
Показать
(7)
В макете есть набор данных объект, который по сути содержит большую часть инфы по начислению. У тебя этот набор не заполняется же. Ты просто передаешь пустую ТЗ, а в стандартном коде ТЗ заполняется наверно в построителе
вот здесь
// заполним ТЗ "НачисленияУдержания"
ЗаполнитьВнешнийИсточникДанных(ПостроительОтчетов);
В макете есть набор данных объект, который по сути содержит большую часть инфы по начислению. У тебя этот набор не заполняется же. Ты просто передаешь пустую ТЗ, а в стандартном коде ТЗ заполняется наверно в построителе
вот здесь
// установим параметры и текст запроса построителя запроса
ПостроительОтчетов = Новый ПостроительОтчета;
НастроитьПостроительЗапросов(ПостроительОтчетов, ДетализацияВыплат);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот