При разработке собственных отчетов на схеме компоновки данных (СКД) в конфигурации «Зарплата и управление персоналом», редакция 3.1 (ЗУП 3.1), разработчики часто сталкиваются с неожиданной проблемой. При попытке настроить параметры отчета и указать конкретные значения по умолчанию для плана видов расчета Начисления диалоговое окно выбора в Конфигураторе оказывается абсолютно пустым. В нем невозможно выбрать ни «Оклад», ни «Больничный», ни какое-либо другое привычное начисление.
В этой статье мы подробно разберем, почему так происходит, проанализируем архитектурные изменения платформы и конфигурации, а также рассмотрим три практических способа решения этой задачи в зависимости от ваших целей.
Если вы ранее работали с конфигурациями на платформе «1С:Предприятие 8.2» (например, ЗУП 2.5), то наверняка помните, что базовые виды расчетов были жестко зафиксированы в метаданных как предопределенные элементы. Их можно было легко выбрать в Конфигураторе в любом месте: в коде, в настройках СКД или в параметрах виртуальных таблиц.
В ЗУП 3.1 разработчики фирмы «1С» кардинально изменили подход к проектированию. Теперь практически все виды расчетов (начисления и удержания) создаются динамически в режиме «1С:Предприятие». Это происходит либо при первом запуске информационной базы, либо при включении соответствующих настроек расчета зарплаты (функциональных опций), например, при активации возможности расчета командировок, ночных часов или сдельной оплаты.
Поскольку Конфигуратор оперирует исключительно метаданными и «не знает» о содержимом конкретных пользовательских баз данных, он физически не может отобразить список начислений. План видов расчета Начисления в дереве метаданных пуст — в нем нет предопределенных элементов. Следовательно, задать жесткие ссылки по умолчанию напрямую в СКД через Конфигуратор невозможно.
Если вам необходимо, чтобы при первом открытии отчета в параметрах по умолчанию уже был заполнен определенный список начислений (например, только оклады или только премии), лучшим решением будет программная инициализация параметров в модуле отчета.
Рассмотрим по шагам, как реализовать этот алгоритм:
&Начисления) укажите тип данных ПланВидовРасчетаСсылка.Начисления.ПриКомпоновкеРезультата.Проанализируем пример кода, который выполняет поиск нужных элементов по их символьным кодам в базе данных и заполняет параметр СКД перед выводом отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Получаем настройки компоновщика
Настройки = КомпоновщикНастроек.Настройки;
ПараметрНачисления = Настройки.ПараметрыДанных.Элементы.Найти("Начисления");
// Проверяем, существует ли параметр и не заполнен ли он уже пользователем
Если ПараметрНачисления <> Неопределено И Не ПараметрНачисления.Использование Тогда
СписокЗначений = Новый СписокЗначений;
// Пишем запрос для поиска ссылок на начисления по их кодам в конкретной базе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Ссылка КАК Ссылка
|ИЗ
| ПланВидовРасчета.Начисления КАК Начисления
|ГДЕ
| Начисления.Код В (&МассивКодов)
| И НЕ Начисления.ПометкаУдаления";
// Задаем коды видов расчета, которые нам нужны по умолчанию
МассивКодов = Новый Массив;
МассивКодов.Добавить("Оклад");
МассивКодов.Добавить("ДГПХ"); // Договор ГПХ
Запрос.УстановитьПараметр("МассивКодов", МассивКодов);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СписокЗначений.Добавить(Выборка.Ссылка);
КонецЦикла;
// Заполняем параметр и активируем его использование
Если СписокЗначений.Количество() > 0 Тогда
ПараметрНачисления.Значение = СписокЗначений;
ПараметрНачисления.Использование = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Преимущества: Пользователь сразу видит заполненный список начислений, но при этом сохраняет полную свободу действий — он может удалить лишние элементы или добавить новые прямо на форме отчета.
Если жестко заданный список по умолчанию не требуется, а нужно просто дать пользователю возможность самостоятельно выбирать начисления на форме отчета в режиме «1С:Предприятие», задача существенно упрощается.
Выполним следующие настройки в СКД:
&Начисления выбираем тип ПланВидовРасчетаСсылка.Начисления.В режиме «1С:Предприятие» при нажатии на кнопку выбора в этом параметре откроется полноценное диалоговое окно со списком всех начислений, которые реально созданы и используются в текущей базе данных. Пользователь сможет добавлять их по одному, формируя нужный список для фильтрации.
Чтобы сохранить этот список для последующих запусков отчета, пользователю достаточно сохранить этот вариант отчета под своим именем (через меню «Варианты отчета -> Сохранить как»).
Если вам категорически не хочется писать программный код в модуле отчета, а список начислений должен быть строго определен и зашит внутри схемы, можно использовать обходной путь с текстовыми кодами начислений.
Разберем, как реализовать этот подход:
&КодыНачислений с типом данных Строка и включаем опцию «Доступен список значений».
ГДЕ
Взаиморасчеты.ВидРасчета.Код В (&КодыНачислений)
Минусы метода: Этот способ менее эстетичен и неудобен для конечного пользователя. Если ему потребуется изменить состав фильтра, вместо удобного выбора элементов из справочника с понятными наименованиями ему придется вручную вводить текстовые коды начислений без права на опечатку.
При использовании Способа 2 или динамического заполнения часто возникает проблема: если пользователь очистил или изменил список начислений, стандартная кнопка платформы «Установить стандартные настройки» сотрет все его правки, но параметр останется пустым, так как в самом Конфигураторе значения по умолчанию не заданы.
Для решения этой проблемы при проектировании серьезных отчетов применяют механизм предопределенных вариантов отчетов БСП (Библиотеки стандартных подсистем). Вы можете один раз настроить отчет в режиме «1С:Предприятие», заполнить параметры ссылками, сохранить этот вариант и интегрировать его в конфигурацию как поставляемый. Тогда при сбросе настроек система будет возвращаться к вашему сохраненному варианту, где все ссылки уже корректно заполнены.