Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 мая 2024, 12:01

Вытаскивание Справочники и перечисления через COM

Автор Vasylii, 11 апр 2023, 09:21

0 Пользователей и 1 гость просматривают эту тему.

Vasylii

В одной базе есть справочник и перечисление, вытащил их в отдельные переменные если проходится отладчиком показывает их значения но не понимаю как эти значения правильно вытащить, накидал код но он не выводить, еще осложняет все то что в базу в которую переношу эти же, элементы имеют ссылочные типы, и не много не понимаю как правильно вытягивать эти значения
СправочникCOM = Подключение.Справочники.ОКЕИ;
ЭлементПеречисления = Подключение.Перечисления.КлассОпасности;

НовыйДок.Код          = Выборка.Код;
НовыйДок.Наименование = Выборка.Наименование;

Внешний_ЕдиницИзмер = Выборка.ЕдиницаИзмерения;
Внешний_КлассОпасности = Выборка.КлассОпасности;

Если ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс0;
ИначеЕсли ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс1;
ИначеЕсли ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс2;
ИначеЕсли ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс3;
ИначеЕсли ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс4;
ИначеЕсли ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс4э;
ИначеЕсли ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс5;
ИначеЕсли ЭлементПеречисления = Внешний_КлассОпасности ТОгда
ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.КлассНеЗадан;
КонецЕсли;
НовыйДок.КлассОпасности = ТекущийКлаОпсаность;

Если Внешний_ЕдиницИзмер = СправочникCOM.НайтиПоКоду("168") ТОГДА
ТекущийЕдинИзмер = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("168");
КонецЕсли;
НовыйДок.ЕдиницаИзмерения = ТекущийЕдинИзмер;

antoneus

А почему в Если куча одинаковых условий, но типа разный результат должен получиться? Что такое Выборка?

Vasylii

antoneus, получаю через ком запросЗапросПрием = Подключение.NewObject("Запрос");
ЗапросПрием.Текст = "ВЫБРАТЬ
| КаталогОтходов.КлассОпасности КАК КлассОпасности,
| КаталогОтходов.Плотность КАК Плотность,
| КаталогОтходов.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| КаталогОтходов.ФизическаяФорма КАК ФизическаяФорма,
| КаталогОтходов.Токсичность КАК Токсичность,
| КаталогОтходов.Пожароопасность КАК Пожароопасность,
| КаталогОтходов.НаличиеМикроорганизмов КАК НаличиеМикроорганизмов,
| КаталогОтходов.Взрывоопасность КАК Взрывоопасность,
| КаталогОтходов.ВысокаяРеакционнаяСпособность КАК ВысокаяРеакционнаяСпособность,
| КаталогОтходов.СодержаниеВозбудителейИнфекционныхБолезней КАК СодержаниеВозбудителейИнфекционныхБолезней,
| КаталогОтходов.ДругиеОпасныеСвойства КАК ДругиеОпасныеСвойства,
| КаталогОтходов.Код КАК Код,
| КаталогОтходов.Наименование КАК Наименование
|ИЗ
| Справочник.КаталогОтходов КАК КаталогОтходов";

antoneus

Ну просто Если надо нормально сделать

Если Внешний_КлассОпасности = Подключение.Перечисления.КлассОпасности.Класс0 Тогда
    ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс0
ИначеЕсли Внешний_КлассОпасности = Подключение.Перечисления.КлассОпасности.Класс1 Тогда
    ТекущийКлаОпсаность = Перечисления.Систем_КлассОпасности.Класс1
и т.д.

Можно, конечно, проще сделать - там через метаданные ну или вначале запилить соответствие местных перечислений тамошним и сделать

ТекущийКлассОпасности = СоответствиеПеречислений.Получить(Выборка.КлассОпасности)

Vasylii

antoneus, загвоздка в том что он ругался на метаданные когда пытался вытаскивать перечисления

antoneus

Ну тогда соответствие запилить и все.

СоответствиеПеречислений = Новый Соответствие;
Соответствие.Вставить(Подключение.Перечисления.КлассОпасности.Класс0, Перечисления.Систем_КлассОпасности.Класс0);
....

а потом из него дергать как я написал.

Vasylii


antoneus

Нет, ну в справочнике можно уже как-то по наименованию искать.

Vasylii

antoneus, пробовал, но значение так же пустое, хотя код отображает если через отладку но по нему не ищется почему то
ЭлементПеречисления = Подключение.Справочники.ОКЕИ.НайтиПоКоду("168");
Если ЭлементПеречисления  ТОГДА
//ТекущийЕдинИзмер = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("168");

antoneus

А в каком случае должно выполниться условие Если ЭлементПеречисления?

Похожие темы (5)

Рейтинг@Mail.ru

Поиск