База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно получить регистры ERP с измерениями «Номенклатура» и «Склад»? › RE: Как программно получить регистры ERP с измерениями “Номенклатура” и “Склад”?
В конфигурации 1С:ERP (8.3) для программного получения всех регистров (накопления, сведений и т.п.), у которых в измерениях присутствуют одновременно реквизиты «Номенклатура» и «Склад», можно использовать метаданные конфигурации и перебрать все регистры, проверяя их измерения.
Пример кода на встроенном языке 1С:
1C
Процедура ПолучитьРегистрыСНоменклатуройИСкладом() Экспорт
Результат = Новый Массив;
МетаданныеКонфигурации = Метаданные;
// Перебираем все регистры накопления
Для Каждого РегистрНакопления Из МетаданныеКонфигурации.РегистрНакопления Цикл
ЕстьНоменклатура = Ложь;
ЕстьСклад = Ложь;
Для Каждого Измерение Из РегистрНакопления.Измерения Цикл
ИмяИзмерения = Измерение.Имя;
Если ИмяИзмерения = "Номенклатура" Тогда
ЕстьНоменклатура = Истина;
КонецЕсли;
Если ИмяИзмерения = "Склад" Тогда
ЕстьСклад = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьНоменклатура И ЕстьСклад Тогда
Результат.Добавить(РегистрНакопления.Имя);
КонецЕсли;
КонецЦикла;
// Аналогично можно проверить регистры сведений, если нужно
// Для этого раскомментируйте следующий блок:
/*
Для Каждого РегистрСведений Из МетаданныеКонфигурации.РегистрСведений Цикл
ЕстьНоменклатура = Ложь;
ЕстьСклад = Ложь;
Для Каждого Измерение Из РегистрСведений.Измерения Цикл
ИмяИзмерения = Измерение.Имя;
Если ИмяИзмерения = "Номенклатура" Тогда
ЕстьНоменклатура = Истина;
КонецЕсли;
Если ИмяИзмерения = "Склад" Тогда
ЕстьСклад = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьНоменклатура И ЕстьСклад Тогда
Результат.Добавить(РегистрСведений.Имя);
КонецЕсли;
КонецЦикла;
*/
// Вывод результата
Для Каждого ИмяРегистра Из Результат Цикл
Сообщить(ИмяРегистра);
КонецЦикла;
Возврат Результат;
КонецПроцедуры
Объяснение:
— Используем объект `Метаданные` для доступа к метаданным конфигурации.
— Перебираем все регистры накопления (`Метаданные.РегистрНакопления`).
— Для каждого регистра проверяем наличие измерений с именами «Номенклатура» и «Склад».
— Если оба измерения присутствуют, добавляем имя регистра в результат.
— Аналогично можно проверить регистры сведений, если в вашей конфигурации есть такие, где эти измерения могут встречаться.
— В конце выводим список найденных регистров.
Если нужно получить не только имена, а и объекты метаданных для дальнейшей работы — можно сохранять сами объекты.
—
Рекомендую посмотреть здесь:
https://infostart.ru/public/1794329/ (пример работы с метаданными в 1С)
https://its.1c.ru/db/metod8dev#content:360:hdoc (официальная документация по работе с метаданными)