День добрый!
Подскажите, подключаюсь к базе 1С через СОМконнектор, делаю запрос к РС, в РС есть реквизит "СостояниеВагона" - Перечисление. Когда выгружаю запрос в таблицу значений, то на месте СостояниеВагона получается ComОбъект, как мне в таком случае найти нужное мне перечисление в базе приемнике и подставить его?
Получить строку его имени, найти соответствующее в базе-клиенте.
http://pro1c.org.ua/index.php?showtopic=218
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";
БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");
ТекстЗапроса = "ВЫБРАТЬ
| ПростойВагона.Период,
| ПростойВагона.НомерВагона,
| ПростойВагона.ПрибытияВагона,
| ПростойВагона.УстановкаПодВыгрузку,
| ПростойВагона.ОкончаниеВыгрузки,
| ПростойВагона.ПрибытиеДокументовПослеДекларирования,
| ПростойВагона.ПрибытиеИнструкцийВОтправкуПОРПВ,
| ПростойВагона.УстановкаПодПогрузку,
| ПростойВагона.ОкончаниеПогрузки,
| ПростойВагона.ПрибытиеДокументовПослеТаможирования,
| ПростойВагона.ВозвратПВст,
| ПростойВагона.ВесПоПрибытию,
| ПростойВагона.Ответственный,
| ПростойВагона.СостояниеВагона,
| ПростойВагона.ПринадлежностьВагона,
| ПростойВагона.НоменклатураПрибытие,
| ПростойВагона.НоменклатураОтправка
|ИЗ
| РегистрСведений.ПростойВагона КАК ПростойВагона";
БазаИсточник_Запрос.Текст = ТекстЗапроса;
ТаблицаДанныхИсточникСОМОбъект = БазаИсточник_Запрос.Выполнить().Выгрузить();
СОМСоединение = Неопределено;
ТЗДанныеИсточник = Новый ТаблицаЗначений;
КЧ = Новый КвалификаторыЧисла(6,3);
ОписаниеТиповЧ = Новый ОписаниеТипов("Число",,,КЧ);
ТЗДанныеИсточник.Колонки.Добавить("Период",,"Период",);
ТЗДанныеИсточник.Колонки.Добавить("НомерВагона",,"Номер вагона",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытияВагона",,"Прибытие вагона",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодВыгрузку",,"Установка под выгрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ОкончаниеВыгрузки",,"Окончание выгрузки",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеДекларирования",,"Прибытие документов после декларирования",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеИнструкцийВОтправкуПОРПВ",,"Прибытие инструкций в отправку ПОР ПВ",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодПогрузку",,"Установка под погрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеТаможирования",,"Прибытие документов после таможирования",);
ТЗДанныеИсточник.Колонки.Добавить("ВозвратПВстКраматорск",,"Возврат ПВ ст.",);
ТЗДанныеИсточник.Колонки.Добавить("СостояниеВагона",,"Состояние вагона",);
ТЗДанныеИсточник.Колонки.Добавить("Ответственный",,"Ответственный",);
ТЗДанныеИсточник.Колонки.Добавить("ПринадлежностьВагона",,"Принадлежность вагона",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураПрибытие",,"Номенклатура прибытие",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураОтправка",,"Номенклатура отправка",);
ТЗДанныеИсточник.Колонки.Добавить("ВесПоПрибытию",ОписаниеТиповЧ,"Вес по прибытию");
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
СтрокаТЗ = ТЗДанныеИсточник.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
КонецЦикла;
ЭлементПеречисленияИсточникГруженый = БазаИсточник.Перечисления.СостояниеВагонов.Груженый.Метаданные().Имя
, то получаю имя самого перечисления, а не имя его значения
http://pro1c.org.ua/redirect.php?http://www.forum.mista.ru/topic.php?id=517668
Помогите пожалуйста, никак не получается....(((
Как получить наименование перечисления с базе источнике?
Пишу так:
ЭлементПеречисленияИсточникГруженый = XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Груженый);
ЭлементПеречисленияИсточникПорожний = XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний);
ЭлементПеречисленияИсточникГруженый = БазаИсточник.Перечисления.СостояниеВагонов.Груженый.Метаданные().Имя
, то получаю имя самого перечисления, а мне нужно имя его значения.Сообщить(БазаИсточник.Перечисления.СостояниеВагонов.Индекс(БазаИсточник.Перечисления.СостояниеВагонов.Порожний))
ЭлементПеречисленияИсточникПорожний = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний)
ИндексПеречисления = База.Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
ИмяЗначенияПеречисления = База.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
СтрокаТЗ = ТЗДанныеИсточник.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
ИмяПеречисления = "СостояниеВагона";
КомОбъект = Строка [ИмяПеречисления];
ИндексПеречисления = БазаИсточник .Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
ИмяЗначенияПеречисления = БазаИсточник .Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];
СтрокаТЗ [ИмяПеречисления] = ЗначениеПеречисления;
КонецЦикла;
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
СтрокаТЗ = ТЗДанныеИсточник.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
ИмяПеречисления = "СостояниеВагона";
КомОбъект = Строка [ИмяПеречисления];
ИндексПеречисления = БазаИсточник .Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
ИмяЗначенияПеречисления = БазаИсточник .Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];
СтрокаТЗ [ИмяПеречисления] = ЗначениеПеречисления;
КонецЦикла;
//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
СтрокаТЗ = ТЗДанныеИсточник.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
ИмяПеречисления = "СостояниеВагонов";
КомОбъект = Строка[ИмяПеречисления]; //ОШИБКА Поле объекта не обнаружено (СостояниеВагонов)
ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
СтрокаТЗ[ИмяПеречисления] = ЗначениеПеречисления;
КонецЦикла;
//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
СтрокаТЗ = ТЗДанныеИсточник.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
ИмяПеречисления = "СостояниеВагонов";
КомОбъект = Строка.СостояниеВагона;
ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект); //РУГАЕТСЯ ВОТ ТУТ
ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
СтрокаТЗ[ИмяПеречисления] = ЗначениеПеречисления;
КонецЦикла;
//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
СтрокаТЗ = ТЗДанныеИсточник.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
ИмяПеречисления = "СостояниеВагонов";
КомОбъект = Строка.СостояниеВагона;
Попытка
ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
СтрокаТЗ.СостояниеВагона = ЗначениеПеречисления;
Исключение
Продолжить;
КонецПопытки;
КонецЦикла;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua