Добрый день!

Делаю интеграцию с 1С 8.2 на стороне Terrasoft:

1c_import_ts.png

Скриптами получаю "контактную информацию" из "контактного лица". Вот запрос:

var Object1C = Param.Obj1C;            
                var ContactInfo = Object1C.NewObject("Запрос");          
                ContactInfo.text = "ВЫБРАТЬ КонтактнаяИнформация.Объект," + '\n'+
                                "КонтактнаяИнформация.Тип," + '\n'+
                                "КонтактнаяИнформация.Вид," + '\n'+
                                "КонтактнаяИнформация.Представление," + '\n'+
                                "КонтактнаяИнформация.Поле1," + '\n'+
                                "КонтактнаяИнформация.Поле2," + '\n'+
                                "КонтактнаяИнформация.Поле3," + '\n'+
                                "КонтактнаяИнформация.Поле4," + '\n'+
                                "КонтактнаяИнформация.Поле5," + '\n'+
                                "КонтактнаяИнформация.Поле6," + '\n'+
                                "КонтактнаяИнформация.Поле7," + '\n'+
                                "КонтактнаяИнформация.Поле8," + '\n'+
                                "КонтактнаяИнформация.Поле9," + '\n'+
                                "КонтактнаяИнформация.Поле10," + '\n'+
                                "КонтактнаяИнформация.Комментарий," + '\n'+
                                "КонтактнаяИнформация.ЗначениеПоУмолчанию" + '\n'+
                        "ИЗ" + '\n'+
                                "РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация" + '\n' +
                        "ГДЕ"+ '\n' +
                                "КонтактнаяИнформация.Объект = &Ссылка1;";                 
                ContactInfo.УстановитьПараметр("Ссылка1", Select1C[QueryLink].Ссылка);                                       
                var SContactInfo = ContactInfo.execute()               
                var RContactInfo = SContactInfo.Выгрузить();

В 1С это так выглядит:

1c_import.png

Из "Представление" (1) значение получаю без проблем!

Как получить значение перечисления "Тип" (2)? Может кто-то уже такое делал?

Спасибо!

Нравится

8 комментариев
Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.Другое

Если нам нужно получить тип из 1С, тогда вот пример скрипта:

var EnumName = 'ТипыКонтактнойИнформации';
var EnumIndex = Param.Obj1C.Перечисления[EnumName].Индекс(Select1C.Тип);
var Name = Select1C.Тип.Метаданные().EnumValues.Get(EnumIndex).Имя; 

Обратите внимание, это для 1С 8.х

В 1С 77 название можно было получить проще: Select1C.Тип.Представление()

Пробовал следующий код:

var EnumName = 'ТипыКонтактнойИнформации';
var EnumIndex = Param.Obj1C.Перечисления[EnumName].Индекс(RContactInfo.Получить(i).Тип);
var Name = Select1C.Тип.Метаданные().EnumValues.Get(EnumIndex).Имя;

Name из undefined ((((

Александр, а что у Вас в RContactInfo?

Это переменная с результатом выполнения запроса:

var SContactInfo = ContactInfo.execute()                
var RContactInfo = SContactInfo.Выгрузить();

Александр, в данном случае необходимо произвести отладку и выяснить, что у нас в RContactInfo.Получить(i).Тип

Для корректной работы функции должна быть ссылка на элемент перечисления. В случае, если у нас там что-то другое, код работать не будет.

RContactInfo.Получить(i).Тип - закрытый объект, как узнать ссылка это или скажем посмотреть его свойства?

Александр, попробуйте сравнить значение. Например, есть Вам точно известно, что тип в данном регистре - Адрес, тогда:

if (Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.Адрес == RContactInfo.Получить(i).Тип){
//если выполняется, тогда равно.
}else{
это не ссылка на элемент перечисления.
}

Еще один из способов получения названия элемента из ссылки на него описан здесь: http://www.community.terrasoft.ua/blogs/8329#comment-34738

Спасибо. нашел решение проблемы!

Показать все комментарии

Подскажите, как настроить интеграцию с перечислениями 1с?
Конкретно:
Есть справочник договоров в 1с, там есть реквизит ссылающийся на перечисление (Статус договора).
Делаю интеграцию этого перечисления и справочника статусов договоров - успешно.
Но если при интеграции самих договоров ставить соответствие поля реквизита, ссылающегося на это перечисления и справочника состояний договоров, при импорте пишутся ошибки неподходящих методов.

Получить значение перечисления напрямую способами:
var St = Select1C[QueryLink].Статус;
не получается, непонятно к чему потом обращаться (St.EnumCode отдает ничто)...

Нравится

1 комментарий

Решено, надо обращаться через .Идентификатор()

Показать все комментарии