1С 8.3 Заполнение списка значений для полей наборов данных и параметров в СКД
Данные > Примеры кода 1С > 1С 8.3 Схема компоновки данных (СКД)
Перейти в раздел примеры кода 1С 8.3:

Пруф (оригинал): https://infostart.ru/1c/articles/2421467/

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