Коллеги, добрый день!

Необходимо программно получать табличный документ - результат выполнения отчета "Остатки отпусков " из ЗУПа.
(просьба не спрашивать, почему именно так и зачем)

Формирую по аналогии с отчетом, но табличный документ пустой.
Пожалуйста, подскажите, в чем ошибка.

Спасибо.

```1c
    &НаСервере

    Процедура ЗаполнитьНастройки(НастройкиОтчета,Сотрудник,ДатаОтчета)

    ЭлементыОтбора = НастройкиОтчета.Отбор.Элементы;

    Для Каждого ТекЭлемент Из ЭлементыОтбора Цикл
    Если ТекЭлемент.Использование Тогда

    Продолжить;

    КонецЕсли;

    Если СокрЛП(ТекЭлемент.ЛевоеЗначение) = "Сотрудник" Тогда

    ТекЭлемент.Использование = Истина;

    ТекЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

    ТекЭлемент.ПравоеЗначение = Сотрудник;

    КонецЕСли;

    Если СокрЛП(ТекЭлемент.ЛевоеЗначение) = "ТекущаяОрганизация" Тогда

    ТекЭлемент.Использование = Истина;

    ТекЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

    ТекЭлемент.ПравоеЗначение = Справочники.Организации.НайтиПоНаименованию("ООО РОмашка");

    КонецЕСли;

    КонецЦикла;

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

    &НаСервере

    Функция СформироватьОтчетПООстаткуОтпуска(Сотрудник,ДатаОтчета)

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

    МассивСотрудников.Добавить(Сотрудник);

    // Заполняем регистр ЗаработанныеПраваНаОтпуска.

    ОстаткиОтпусков.РасчетЗаработанныхОтпусков(МассивСотрудников, ДатаОтчета);

    СтандартнаяОбработка = ложь;

    ДокументРезультат = Новый ТабличныйДокумент;

    СхемаКомпоновкиДанных = Отчеты.ОстаткиОтпусков.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

    ВариантНастроек = СхемаКомпоновкиДанных.ВариантыНастроек.ОстаткиОтпусков;

    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;

    КомпоновщикНастроек.Инициализировать(Новый

    ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

    КомпоновщикНастроек.ЗагрузитьНастройки(ВариантНастроек.Настройки);

    НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();

    ЗаполнитьНастройки(НастройкиОтчета,Сотрудник,ДатаОтчета);

    МакетКомпоновки = ЗарплатаКадрыОтчеты.МакетКомпоновкиДанных(СхемаКомпоновкиДанных, НастройкиОтчета, неопределено);

    // Создадим и инициализируем процессор компоновки.

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , неопределено, Истина);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    // Обозначим начало вывода.

    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);

    Возврат ДокументРезультат;

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

    &НаСервере

    Процедура ПоказатьОстатокНаСервере()

    Объект.Результат.Вывести(СформироватьОтчетПООстаткуОтпуска(Объект.Сотрудник,НачалоДня(ТекущаяДата())));

    КонецПроцедуры
```
---
А как мне сформировать отчет программно, но! мне не нужно открывать форму, мне нужно сохранить Табличный Документ в PDF.
---
обработка, если проверять, поменяйте название организации
---
Мы не знатоки, поэтому на ваше оформление вопроса даже смотреть не будем...
---
Раз вывели сотрудника на отбор, то и организацию можно же просто на отбор
---
Не понял. А сейчас как если смотреть на код?
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Как в подавляющем большинстве отчетов в ЗУП, нужно инициализировать общие источники данных.

Вставьте после строки

```1c
    СхемаКомпоновкиДанных = Отчеты.ОстаткиОтпусков.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
```

вот это:

```1c
    СтруктураОбъект = Новый Структура("СхемаКомпоновкиДанных", СхемаКомпоновкиДанных);
    ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(СтруктураОбъект);
```
---
(8) СтруктураОбъект = Новый Структура("СхемаКомпоновкиДанных", СхемаКомпоновкиДанных);
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(СтруктураОбъект);

Ничего не изменилось.
---
Значит что-то не то делаете.
Вот с демо-базы скрин
Ну и отчет приложу на всякий.
---
Спасибо огромное!!!
---
наверное надо условие написать так:
Если ТекЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТекущаяОрганизация") Тогда
или хотя бы так:
Если СокрЛП(ТекЭлемент.ЛевоеЗначение) = "Текущая организация" Тогда
---
```1c
    // Параметры:
    // Объект - отчет
    // ДополнительныеПоляПредставлений - Структура - где ключи - имена представлений запросов,
    // значения - массив с описанием дополнительных полей.
    //
    Процедура ЗаполнитьОбщиеИсточникиДанныхОтчета(Объект, ДополнительныеПоляПредставлений = Неопределено, ТолькоРазрешенные = Истина) Экспорт
```

чот не то вы написали. туда объект передаётся, ибо там дальше строка в этой процедуре

```1c
    ЗаполнитьОбщиеЗапросы(Объект.СхемаКомпоновкиДанных.НаборыДанных, ТолькоРазрешенные);
```
---
Объект там нужен только для того, чтобы из него получить СхемаКомпоновкиДанных. В чем проблема вместо объекта использовать структуру в конкретно этом случае?
---
а, пожалуй да. погорячился. спасибо. как раз сижу не заполняется никак набор данных в "Статистика персонала"
---
Можно ещё програмно вызвать типовой отчёт. Задать нужные параметры и получить сразу результат. Из плюсов такого решения - работать будет независимо от изменений объектов конфигурации ( кроме имени типового отчёта).
---
А как мне сформировать отчет программно, но! мне не нужно открывать форму, мне нужно сохранить Табличный Документ в PDF.
---
У вас итак он программно формируется, вам достаточно у сформированного табличного документа вызвать метод Записать(), в качестве 2 параметра указав ТипФайлаТабличногоДокумента.PDF
При этом на форму вообще необязательно реквизит выносить.
---
Табличный документ у меня не формируется. Как сформировать. Пустой отчет получается.
---
Есть ещё способ рассылки отчёта по почте.
Настраиваете рассылку на e-mail для вашего отчёта. Параметры передаются в форме настройки, выбираете pdf и получаете отчёты на почте. Это вообще без программирования. По аналогии с рассылкой расчётных листов.
---
сотрудник отправляет письмо на почту zup@romashka.ru , 1С забирает письмо, по адресу определяет сотрудника, формирует отчет остаток отпуска, сохраняет в PDF и отправляет на почту сотруднику.

Как сделать без программирования?
---
никак. Надо парсить адрес и дату. По адресу отределять сотрудника. Подставлять в рассылку нужные параметры и отправлять на почту.

Механизм формирования письма для рассылки можно посмотреть в типовой.

Механизм разбора письма писать.

Ещё есть личный кабинет в 1с. Не помню есть ли там остатки отпусков.