Здравствуйте, уважаемые специалисты!
Пришло время заняться обменом при помощи ОЛЕ, возникли вопросики, подскажите, пожалуйста. Подключаюсь так:
Оле = СоздатьОбъект("V1CEnterprise.Application");
…….
//подключение
Рез = Оле.Initialize(Оле.RMTrade,СтрокаЗапуска,);
Подключение проходит нормально. Затем в базе приемнике создаю новый справочник.
НовСпр = Оле.CreateObject("Справочник.Контры");
НовСпр.Новый();
НовСпр.Код = НовСпрКод;
НовСпр.Наименование = НовСпрНаименование;
НовСпр.Записать();
//здесь нужно заполнить реквизиты
//периодический реквизит
НовСпр.ИспользоватьДату(РабочаяДата());
НовСпр.ЮридическийАдрес = НовСпрЮрАдрес;
//далее тип реквизита Перечисление, (ПромВидКлиента – тип Строка, определен ранее)
Если СокрЛП(ПромВидКлиента) = "Организация" Тогда
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.Организация;
ИначеЕсли СокрЛП(ПромВидКлиента) = "ЧастноеЛицо" Тогда
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.ЧастноеЛицо;
КонецЕсли;
НовСпр.Записать();
В итоге, справочник записывается, периодические реквизиты записываются – все нормально, но вот с перечисление – никак не хочет записываться…
В таком варианте ругается
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.Организация;
{C:\1\ЗАГРУЗКА.ERT(142)}: Плохой тип переменной
Были попытки записывать и без условий Если, просто НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.Организация;
Ругается точно также…
Если убирать запись реквизита с типом Перечисление – все нормально записывается.
Подскажите, что делаю не так с перечислением и как же его записать?
Пришло время заняться обменом при помощи ОЛЕ, возникли вопросики, подскажите, пожалуйста. Подключаюсь так:
Оле = СоздатьОбъект("V1CEnterprise.Application");
…….
//подключение
Рез = Оле.Initialize(Оле.RMTrade,СтрокаЗапуска,);
Подключение проходит нормально. Затем в базе приемнике создаю новый справочник.
НовСпр = Оле.CreateObject("Справочник.Контры");
НовСпр.Новый();
НовСпр.Код = НовСпрКод;
НовСпр.Наименование = НовСпрНаименование;
НовСпр.Записать();
//здесь нужно заполнить реквизиты
//периодический реквизит
НовСпр.ИспользоватьДату(РабочаяДата());
НовСпр.ЮридическийАдрес = НовСпрЮрАдрес;
//далее тип реквизита Перечисление, (ПромВидКлиента – тип Строка, определен ранее)
Если СокрЛП(ПромВидКлиента) = "Организация" Тогда
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.Организация;
ИначеЕсли СокрЛП(ПромВидКлиента) = "ЧастноеЛицо" Тогда
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.ЧастноеЛицо;
КонецЕсли;
НовСпр.Записать();
В итоге, справочник записывается, периодические реквизиты записываются – все нормально, но вот с перечисление – никак не хочет записываться…
В таком варианте ругается
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.Организация;
{C:\1\ЗАГРУЗКА.ERT(142)}: Плохой тип переменной
Были попытки записывать и без условий Если, просто НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.Организация;
Ругается точно также…
Если убирать запись реквизита с типом Перечисление – все нормально записывается.
Подскажите, что делаю не так с перечислением и как же его записать?
По теме из базы знаний
- Особенности обмена данными с использованием "ручной" регистрации
- Волшебное улучшение обменов по правилам через COM-соединение
- Используем механизмы обмена данными БСП для произвольного обмена
- Ускорение чтения правил обмена в УПП 1.3 в 20 раз!
- Как сделать интеграцию (обмен) с интернет-магазином? Пошаговый план действий (Часть 1)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Пытаюсь привести свое творение к нормальному виду. Для этого пробую добавить проверку на блокировку объекта при записи в базу приемник. Есть функция Ожидание разблокировки:
Функция ОжиданиеРазблокировки(Спр)
Если Спр.Блокировка(1)=0 Тогда //сначала заблокируем
Возврат ОжиданиеРазблокировки(Спр);
КонецЕсли;
Спр.Блокировка(0); //а теперь разблокируем
Возврат 2;
КонецФункции
До ее вызова определяется - есть ли уже элемент справочника или нет, и если есть, то вызывается функция для проверки блокировки объекта:
Если ОжиданиеРазблокировки(ТекКонтр) <> 2 Тогда
Возврат;
КонецЕсли;
ТекКонтр определяется нормально, но вот в функции, на строке Если Спр.Блокировка(1)=0 Тогда
сразу возникает ошибка - Поле агрегатного объекта не обнаружено (Блокировка)
Наверное, так неправильно передавать в функцию полученный объект, но вот как нужно правильно - пока не понимаю. Или, возможно, сама функция в корне неверна. Направьте, пожалуйста, на путь истинный, спасибо!
Функция ОжиданиеРазблокировки(Спр)
Если Спр.Блокировка(1)=0 Тогда //сначала заблокируем
Возврат ОжиданиеРазблокировки(Спр);
КонецЕсли;
Спр.Блокировка(0); //а теперь разблокируем
Возврат 2;
КонецФункции
До ее вызова определяется - есть ли уже элемент справочника или нет, и если есть, то вызывается функция для проверки блокировки объекта:
Если ОжиданиеРазблокировки(ТекКонтр) <> 2 Тогда
Возврат;
КонецЕсли;
ТекКонтр определяется нормально, но вот в функции, на строке Если Спр.Блокировка(1)=0 Тогда
сразу возникает ошибка - Поле агрегатного объекта не обнаружено (Блокировка)
Наверное, так неправильно передавать в функцию полученный объект, но вот как нужно правильно - пока не понимаю. Или, возможно, сама функция в корне неверна. Направьте, пожалуйста, на путь истинный, спасибо!
При работе через OLE в лоб можно указывать только простые типы значений, строка или число, для присвоения значения ссылочному объекту надо сначала спозиционироваться на нём. В данном случае найти перечисление с помощью методов ЗначениеПоНомеру(Номер), ЗначениеПоИдентификатору(<Идентификатор>) в базе к которой подключились, и найденое значение присваивать.
Значение = Перечисление.ВидыКонтрагентов.ЗначениеПоИдентификатору(ПромВидКлиента);
Здесь значение = Организация
потом
НовСпр.ВидКлиента = Значение;
- выдает все ту же ошибку
пробую
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.ЗначениеПоИдентификатору(ПромВидКлиента);
- та же ошибка (уже как родная...)
на грани помешательства...
Здесь значение = Организация
потом
НовСпр.ВидКлиента = Значение;
- выдает все ту же ошибку
пробую
НовСпр.ВидКлиента = Перечисление.ВидыКонтрагентов.ЗначениеПоИдентификатору(ПромВидКлиента);
- та же ошибка (уже как родная...)
на грани помешательства...
Пробую сделать так:
пишет - Плохой тип переменной
Подскажите, как правильно сделать?
Код |
---|
СпрНИОле = БазаОле.EvalExpr("CreateObject(""Справочник.НалоговыеИнспекции"")");
ОлеНалИнсп = СпрНИОле.НайтиПоНаименованию(НалоговаяИнспекция,0);
Показать полностью |
пишет - Плохой тип переменной
Подскажите, как правильно сделать?
Решение оказалось проще, чем казалось
Код |
---|
СпрНИОле = БазаОле.EvalExpr("CreateObject(""Справочник.НалоговыеИнспекции"")");
ОлеНалИнсп = СпрНИОле.НайтиПоНаименованию(НалоговаяИнспекция.Наименование,0);
Показать полностью |
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот