Odin | База знаний 1С

Как программно полу...
 

Как программно получить регистры ERP с измерениями "Номенклатура" и "Склад"?


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

конфигурация ERP как программно получить все регистры с измерениями Номенклатура и Склад



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

В конфигурации 1С:ERP (8.3) для программного получения всех регистров (накопления, сведений и т.п.), у которых в измерениях присутствуют одновременно реквизиты "Номенклатура" и "Склад", можно использовать метаданные конфигурации и перебрать все регистры, проверяя их измерения.

Пример кода на встроенном языке 1С:

1C
Процедура ПолучитьРегистрыСНоменклатуройИСкладом() Экспорт
    Результат = Новый Массив;

    МетаданныеКонфигурации = Метаданные;

    // Перебираем все регистры накопления
    Для Каждого РегистрНакопления Из МетаданныеКонфигурации.РегистрНакопления Цикл
        ЕстьНоменклатура = Ложь;
        ЕстьСклад = Ложь;

        Для Каждого Измерение Из РегистрНакопления.Измерения Цикл
            ИмяИзмерения = Измерение.Имя;
            Если ИмяИзмерения = "Номенклатура" Тогда
                ЕстьНоменклатура = Истина;
            КонецЕсли;
            Если ИмяИзмерения = "Склад" Тогда
                ЕстьСклад = Истина;
            КонецЕсли;
        КонецЦикла;

        Если ЕстьНоменклатура И ЕстьСклад Тогда
            Результат.Добавить(РегистрНакопления.Имя);
        КонецЕсли;
    КонецЦикла;

    // Аналогично можно проверить регистры сведений, если нужно
    // Для этого раскомментируйте следующий блок:

    /*
    Для Каждого РегистрСведений Из МетаданныеКонфигурации.РегистрСведений Цикл
        ЕстьНоменклатура = Ложь;
        ЕстьСклад = Ложь;

        Для Каждого Измерение Из РегистрСведений.Измерения Цикл
            ИмяИзмерения = Измерение.Имя;
            Если ИмяИзмерения = "Номенклатура" Тогда
                ЕстьНоменклатура = Истина;
            КонецЕсли;
            Если ИмяИзмерения = "Склад" Тогда
                ЕстьСклад = Истина;
            КонецЕсли;
        КонецЦикла;

        Если ЕстьНоменклатура И ЕстьСклад Тогда
            Результат.Добавить(РегистрСведений.Имя);
        КонецЕсли;
    КонецЦикла;
    */

    // Вывод результата
    Для Каждого ИмяРегистра Из Результат Цикл
        Сообщить(ИмяРегистра);
    КонецЦикла;

    Возврат Результат;
КонецПроцедуры

Объяснение:

- Используем объект `Метаданные` для доступа к метаданным конфигурации.
- Перебираем все регистры накопления (`Метаданные.РегистрНакопления`).
- Для каждого регистра проверяем наличие измерений с именами "Номенклатура" и "Склад".
- Если оба измерения присутствуют, добавляем имя регистра в результат.
- Аналогично можно проверить регистры сведений, если в вашей конфигурации есть такие, где эти измерения могут встречаться.
- В конце выводим список найденных регистров.

Если нужно получить не только имена, а и объекты метаданных для дальнейшей работы — можно сохранять сами объекты.

---

Рекомендую посмотреть здесь:
https://infostart.ru/public/1794329/ (пример работы с метаданными в 1С)
https://its.1c.ru/db/metod8dev#content:360:hdoc (официальная документация по работе с метаданными)



   
ОтветитьЦитата