Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обмен данными через СОМConnector
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
День добрый!
Подскажите, подключаюсь к базе 1С через СОМконнектор, делаю запрос к РС, в РС есть реквизит "СостояниеВагона" - Перечисление. Когда выгружаю запрос в таблицу значений, то на месте СостояниеВагона получается ComОбъект, как мне в таком случае найти нужное мне перечисление в базе приемнике и подставить его?
Petre
Получить строку его имени, найти соответствующее в базе-клиенте.
Ardi
необходимо зарегистрироваться для просмотра ссылки
kosalex
Цитата(Petre @ 28.10.14, 9:59) необходимо зарегистрироваться для просмотра ссылки
Получить строку его имени, найти соответствующее в базе-клиенте.


Имею вот такой код:
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");

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

БазаИсточник_Запрос.Текст = ТекстЗапроса;

ТаблицаДанныхИсточникСОМОбъект = БазаИсточник_Запрос.Выполнить().Выгрузить();
СОМСоединение = Неопределено;
    
ТЗДанныеИсточник = Новый ТаблицаЗначений;

КЧ = Новый КвалификаторыЧисла(6,3);
ОписаниеТиповЧ = Новый ОписаниеТипов("Число",,,КЧ);

ТЗДанныеИсточник.Колонки.Добавить("Период",,"Период",);
ТЗДанныеИсточник.Колонки.Добавить("НомерВагона",,"Номер вагона",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытияВагона",,"Прибытие вагона",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодВыгрузку",,"Установка под выгрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ОкончаниеВыгрузки",,"Окончание выгрузки",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеДекларирования",,"Прибытие документов после декларирования",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеИнструкцийВОтправкуПОРПВ",,"Прибытие инструкций в отправку ПОР ПВ",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодПогрузку",,"Установка под погрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеТаможирования",,"Прибытие документов после таможирования",);
ТЗДанныеИсточник.Колонки.Добавить("ВозвратПВстКраматорск",,"Возврат ПВ ст.",);
ТЗДанныеИсточник.Колонки.Добавить("СостояниеВагона",,"Состояние вагона",);
ТЗДанныеИсточник.Колонки.Добавить("Ответственный",,"Ответственный",);
ТЗДанныеИсточник.Колонки.Добавить("ПринадлежностьВагона",,"Принадлежность вагона",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураПрибытие",,"Номенклатура прибытие",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураОтправка",,"Номенклатура отправка",);
ТЗДанныеИсточник.Колонки.Добавить("ВесПоПрибытию",ОписаниеТиповЧ,"Вес по прибытию");




Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
КонецЦикла;


Как получить имя? Если можно, то на моем примере

Если написать вот так:
ЭлементПеречисленияИсточникГруженый = БазаИсточник.Перечисления.СостояниеВагонов.Груженый.Метаданные().Имя
, то получаю имя самого перечисления, а не имя его значения
Ardi
необходимо зарегистрироваться для просмотра ссылки
kosalex
Помогите пожалуйста, никак не получается....(((

Как получить наименование перечисления с базе источнике?

Пишу так:
ЭлементПеречисленияИсточникГруженый = XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Груженый);
ЭлементПеречисленияИсточникПорожний = XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний);


Ошибка!


Пишу так:
ЭлементПеречисленияИсточникГруженый = БазаИсточник.Перечисления.СостояниеВагонов.Груженый.Метаданные().Имя
, то получаю имя самого перечисления, а мне нужно имя его значения.

Плиз! Подскажите...
alex040269
Сообщить(БазаИсточник.Перечисления.СостояниеВагонов.Индекс(БазаИсточник.Перечисления.СостояниеВагонов.Порожний))


ЭлементПеречисленияИсточникПорожний = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний)
Batchir
ИндексПеречисления = База.Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
ИмяЗначенияПеречисления = База.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];
kosalex
Цитата(Batchir @ 30.10.14, 10:45) необходимо зарегистрироваться для просмотра ссылки
ИндексПеречисления = База.Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
ИмяЗначенияПеречисления = База.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];


Не получается....ппц....куда это вставлять в моем коде?

Процедура ЗагрузитьДанныеПростойВагонаСБазыТест() Экспорт;
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");

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

БазаИсточник_Запрос.Текст = ТекстЗапроса;

ТаблицаДанныхИсточникСОМОбъект = БазаИсточник_Запрос.Выполнить().Выгрузить();

СОМСоединение = Неопределено;


ТЗДанныеИсточник = Новый ТаблицаЗначений;

КЧ = Новый КвалификаторыЧисла(6,3);
ОписаниеТиповЧ = Новый ОписаниеТипов("Число",,,КЧ);

ТЗДанныеИсточник.Колонки.Добавить("Период",,"Период",);
ТЗДанныеИсточник.Колонки.Добавить("НомерВагона",,"Номер вагона",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытияВагона",,"Прибытие вагона",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодВыгрузку",,"Установка под выгрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ОкончаниеВыгрузки",,"Окончание выгрузки",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеДекларирования",,"Прибытие документов после декларирования",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеИнструкцийВОтправкуПОРПВ",,"Прибытие инструкций в отправку ПОР ПВ",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодПогрузку",,"Установка под погрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеТаможирования",,"Прибытие документов после таможирования",);
ТЗДанныеИсточник.Колонки.Добавить("ВозвратПВстКраматорск",,"Возврат ПВ ст.",);
ТЗДанныеИсточник.Колонки.Добавить("СостояниеВагона",,"Состояние вагона",);
ТЗДанныеИсточник.Колонки.Добавить("Ответственный",,"Ответственный",);
ТЗДанныеИсточник.Колонки.Добавить("ПринадлежностьВагона",,"Принадлежность вагона",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураПрибытие",,"Номенклатура прибытие",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураОтправка",,"Номенклатура отправка",);
ТЗДанныеИсточник.Колонки.Добавить("ВесПоПрибытию",ОписаниеТиповЧ,"Вес по прибытию");


Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
КонецЦикла;

НаборЗаписейПриемник = РегистрыСведений.ПростойВагона.СоздатьНаборЗаписей();
НаборЗаписейПриемник.Записывать = Истина;


Для Каждого СтрокаДанных Из ТЗДанныеИсточник Цикл
    
    //Поиск ссылок на объекты
    Если СтрокаДанных.ПринадлежностьВагона.Description <> "" Тогда
        
        ПоискПринадлежностьВагона = Справочники.ПринадлежностьВагонов.НайтиПоНаименованию(СтрокаДанных.ПринадлежностьВагона.Description,Истина);
        Если Не ПоискПринадлежностьВагона.Пустая() Тогда
            СтрокаДанных.ПринадлежностьВагона = ПоискПринадлежностьВагона;    
        Иначе
        обПринадлежностьВагона = Справочники.ПринадлежностьВагонов.СоздатьЭлемент();
        обПринадлежностьВагона.Наименование = СтрокаДанных.ПринадлежностьВагона.Description;
        обПринадлежностьВагона.Записать();
        СтрокаДанных.ПринадлежностьВагона = обПринадлежностьВагона;
        КонецЕсли;
    КонецЕсли;

    Если СтрокаДанных.НоменклатураПрибытие.Description <> "" Тогда
    
        ПоискНоменклатураПрибытие =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураПрибытие.Description,Истина);
        Если Не ПоискНоменклатураПрибытие.Пустая() Тогда
            СтрокаДанных.НоменклатураПрибытие = ПоискНоменклатураПрибытие;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураПрибытие.Description;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураПрибытие = обНоменклатура;
        КонецЕсли;    
    КонецЕсли;
    
    Если СтрокаДанных.НоменклатураОтправка.Description <> "" Тогда
        ПоискНоменклатураОтправка =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураОтправка.Description,Истина);
        Если Не ПоискНоменклатураОтправка.Пустая() Тогда
            СтрокаДанных.НоменклатураОтправка = ПоискНоменклатураОтправка;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураОтправка;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураОтправка = обНоменклатура;
        КонецЕсли;
    КонецЕсли;
    
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
    НаборЗаписейПриемник.Записать();
КонецЦикла;
КонецПроцедуры


Получилось прочитать название значения перечисления в базе источнике. Как теперь его сравнивать с тем значением которое я считал? Крыша едет не спеша....

Процедура ЗагрузитьДанныеПростойВагонаСБазыТест() Экспорт;
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");

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

БазаИсточник_Запрос.Текст = ТекстЗапроса;

ТаблицаДанныхИсточникСОМОбъект = БазаИсточник_Запрос.Выполнить().Выгрузить();

//Сдесь получаю наименование значений перечисления
НаименованиеПеречисленияП = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний);
НаименованиеПеречисленияГ = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Груженый);

СОМСоединение = Неопределено;


ТЗДанныеИсточник = Новый ТаблицаЗначений;

КЧ = Новый КвалификаторыЧисла(6,3);
ОписаниеТиповЧ = Новый ОписаниеТипов("Число",,,КЧ);

ТЗДанныеИсточник.Колонки.Добавить("Период",,"Период",);
ТЗДанныеИсточник.Колонки.Добавить("НомерВагона",,"Номер вагона",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытияВагона",,"Прибытие вагона",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодВыгрузку",,"Установка под выгрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ОкончаниеВыгрузки",,"Окончание выгрузки",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеДекларирования",,"Прибытие документов после декларирования",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеИнструкцийВОтправкуПОРПВ",,"Прибытие инструкций в отправку ПОР ПВ",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодПогрузку",,"Установка под погрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеТаможирования",,"Прибытие документов после таможирования",);
ТЗДанныеИсточник.Колонки.Добавить("ВозвратПВстКраматорск",,"Возврат ПВ ст.",);
ТЗДанныеИсточник.Колонки.Добавить("СостояниеВагона",,"Состояние вагона",);
ТЗДанныеИсточник.Колонки.Добавить("Ответственный",,"Ответственный",);
ТЗДанныеИсточник.Колонки.Добавить("ПринадлежностьВагона",,"Принадлежность вагона",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураПрибытие",,"Номенклатура прибытие",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураОтправка",,"Номенклатура отправка",);
ТЗДанныеИсточник.Колонки.Добавить("ВесПоПрибытию",ОписаниеТиповЧ,"Вес по прибытию");

//В этом цикле нужно подставлять наименование перечисления и искать его в базе приемнике //КАК ЭТО СДЕЛАТЬ?
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
КонецЦикла;

НаборЗаписейПриемник = РегистрыСведений.ПростойВагона.СоздатьНаборЗаписей();
НаборЗаписейПриемник.Записывать = Истина;


Для Каждого СтрокаДанных Из ТЗДанныеИсточник Цикл
    
    //Поиск ссылок на объекты
    Если СтрокаДанных.ПринадлежностьВагона.Description <> "" Тогда
        
        ПоискПринадлежностьВагона = Справочники.ПринадлежностьВагонов.НайтиПоНаименованию(СтрокаДанных.ПринадлежностьВагона.Description,Истина);
        Если Не ПоискПринадлежностьВагона.Пустая() Тогда
            СтрокаДанных.ПринадлежностьВагона = ПоискПринадлежностьВагона;    
        Иначе
        обПринадлежностьВагона = Справочники.ПринадлежностьВагонов.СоздатьЭлемент();
        обПринадлежностьВагона.Наименование = СтрокаДанных.ПринадлежностьВагона.Description;
        обПринадлежностьВагона.Записать();
        СтрокаДанных.ПринадлежностьВагона = обПринадлежностьВагона;
        КонецЕсли;
    КонецЕсли;

    Если СтрокаДанных.НоменклатураПрибытие.Description <> "" Тогда
    
        ПоискНоменклатураПрибытие =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураПрибытие.Description,Истина);
        Если Не ПоискНоменклатураПрибытие.Пустая() Тогда
            СтрокаДанных.НоменклатураПрибытие = ПоискНоменклатураПрибытие;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураПрибытие.Description;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураПрибытие = обНоменклатура;
        КонецЕсли;    
    КонецЕсли;
    
    Если СтрокаДанных.НоменклатураОтправка.Description <> "" Тогда
        ПоискНоменклатураОтправка =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураОтправка.Description,Истина);
        Если Не ПоискНоменклатураОтправка.Пустая() Тогда
            СтрокаДанных.НоменклатураОтправка = ПоискНоменклатураОтправка;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураОтправка;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураОтправка = обНоменклатура;
        КонецЕсли;
    КонецЕсли;
    
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
    НаборЗаписейПриемник.Записать();
КонецЦикла;
КонецПроцедуры
Batchir
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);

    ИмяПеречисления = "СостояниеВагона";
    КомОбъект = Строка [ИмяПеречисления];
    
    ИндексПеречисления = БазаИсточник .Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
    ИмяЗначенияПеречисления = БазаИсточник .Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];

    СтрокаТЗ [ИмяПеречисления] = ЗначениеПеречисления;

КонецЦикла;


Как-то так.

Но я бы дополнительно посоветовал сохранять найденные соответствия в какой-то кэш и если в нем не найдено, то лезть в БазаИсточник за данными
kosalex
Цитата(Batchir @ 30.10.14, 14:40) необходимо зарегистрироваться для просмотра ссылки
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);

    ИмяПеречисления = "СостояниеВагона";
    КомОбъект = Строка [ИмяПеречисления];
    
    ИндексПеречисления = БазаИсточник .Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
    ИмяЗначенияПеречисления = БазаИсточник .Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];

    СтрокаТЗ [ИмяПеречисления] = ЗначениеПеречисления;

КонецЦикла;


Как-то так.

Но я бы дополнительно посоветовал сохранять найденные соответствия в какой-то кэш и если в нем не найдено, то лезть в БазаИсточник за данными




Что делает вот это "КомОбъект = Строка [ИмяПеречисления];" ? /Вылетает ошибка/

Пишу так:
//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
        
СтрокаТЗ = ТЗДанныеИсточник.Добавить();

    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
    ИмяПеречисления = "СостояниеВагонов";
    КомОбъект = Строка[ИмяПеречисления]; //ОШИБКА  Поле объекта не обнаружено (СостояниеВагонов)    
    
    ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
    ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
    СтрокаТЗ[ИмяПеречисления] = ЗначениеПеречисления;

    
КонецЦикла;



Нашол что не так, вот код:
//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
    ИмяПеречисления = "СостояниеВагонов";
    КомОбъект = Строка.СостояниеВагона;
    
    ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект); //РУГАЕТСЯ ВОТ ТУТ
    ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
    СтрокаТЗ[ИмяПеречисления] = ЗначениеПеречисления;
    
КонецЦикла;



Описание ошики:
ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.4.408): Несоответствие типов (параметр номер '1')


ПОЛУЧИЛОСЬ!СПАСИБО!

//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
    
    ИмяПеречисления = "СостояниеВагонов";
    КомОбъект = Строка.СостояниеВагона;
    
    Попытка
    ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
    ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
    СтрокаТЗ.СостояниеВагона = ЗначениеПеречисления;
    Исключение
    Продолжить;
    КонецПопытки;
    
КонецЦикла;

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.