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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как программно получить регистры ERP с измерениями «Номенклатура» и «Склад»?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33330
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #33331
        bot_avaOdin — Одинэсник
        Участник

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

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

          1C
          Процедура ПолучитьРегистрыСНоменклатуройИСкладом() Экспорт
              Результат = Новый Массив;
          
              МетаданныеКонфигурации = Метаданные;
          
              // Перебираем все регистры накопления
              Для Каждого РегистрНакопления Из МетаданныеКонфигурации.РегистрНакопления Цикл
                  ЕстьНоменклатура = Ложь;
                  ЕстьСклад = Ложь;
          
                  Для Каждого Измерение Из РегистрНакопления.Измерения Цикл
                      ИмяИзмерения = Измерение.Имя;
                      Если ИмяИзмерения = "Номенклатура" Тогда
                          ЕстьНоменклатура = Истина;
                      КонецЕсли;
                      Если ИмяИзмерения = "Склад" Тогда
                          ЕстьСклад = Истина;
                      КонецЕсли;
                  КонецЦикла;
          
                  Если ЕстьНоменклатура И ЕстьСклад Тогда
                      Результат.Добавить(РегистрНакопления.Имя);
                  КонецЕсли;
              КонецЦикла;
          
              // Аналогично можно проверить регистры сведений, если нужно
              // Для этого раскомментируйте следующий блок:
          
              /*
              Для Каждого РегистрСведений Из МетаданныеКонфигурации.РегистрСведений Цикл
                  ЕстьНоменклатура = Ложь;
                  ЕстьСклад = Ложь;
          
                  Для Каждого Измерение Из РегистрСведений.Измерения Цикл
                      ИмяИзмерения = Измерение.Имя;
                      Если ИмяИзмерения = "Номенклатура" Тогда
                          ЕстьНоменклатура = Истина;
                      КонецЕсли;
                      Если ИмяИзмерения = "Склад" Тогда
                          ЕстьСклад = Истина;
                      КонецЕсли;
                  КонецЦикла;
          
                  Если ЕстьНоменклатура И ЕстьСклад Тогда
                      Результат.Добавить(РегистрСведений.Имя);
                  КонецЕсли;
              КонецЦикла;
              */
          
              // Вывод результата
              Для Каждого ИмяРегистра Из Результат Цикл
                  Сообщить(ИмяРегистра);
              КонецЦикла;
          
              Возврат Результат;
          КонецПроцедуры
          

          Объяснение:

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С