Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: НазначитьВид OLE com
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Acid
Камрады - встал на грабли...
Проблема в следующем:
Есть документ с реквизитом "Справочник" (неопределенного вида). Нужно программно НазначитьВид() этому реквизиту.
Конструкции которые не работают:
Вариант 1:
Док.ТМЦ = текТМЦ;
//Такая конструкция срабатывает, если на форме отсутствует команда привязки вида Форма.НеИзменятьВид(1)


Вариант 2:
База77.ExecuteBatch("Назначитьвид("+Док.ТМЦ+",""ТМЦ"")");

Вариант 3:
База77.НазначитьВид(Док.ТМЦ,"ТМЦ");
Naghual
НазначитьВид(ТМЦ,"ТМЦ");
НазначитьВид(ТМЦ,"Инвестиции");


В чем, собственно, трудность и зачем у вас так сложно?
Acid
Acid @ Сегодня, 17:44 необходимо зарегистрироваться для просмотра ссылки ,
Варианты 2 и 3 "как-бы" работают, т.е. исключения не происходит.
А на 1-ом получаю исключение (

трудность в том, что это подключение из 8-ки по com-соединению.
И эта конструкция не работает.
Naghual
А какого вида значение у вашего ТМЦ изначально, в конфигураторе?
Acid
Naghual @ Сегодня, 17:52 необходимо зарегистрироваться для просмотра ссылки ,
Справочник
Naghual
Для начала, вместо "ExecuteBatch" попробуйте использовать "EvalExpr".


Хотя вполне должна работать конструкция "Док.ТМЦ = текТМЦ". Конечно, при условии, что текТМЦ является внутренним объектом базы 7.7 а не строкой, объектом ОЛЕ или объектом 8.х.
Acid
Такое тоже не работает
База77.EvalExpr("НазначитьВид("+Док.ТМЦ+",""ТМЦ"")");


не то, чтобы совсем не работает, но на строке
Док.ТМЦ = текТМЦ;

вылетает исключение.
Naghual
ТМЦ - это реквизит документа или его многострочной части? Если последнее, то его необходимо позиционировать для начала (новая строка, получить строку...)
Описание исключения есть? Без этого непонятно.
Acid
Нашел источник всех бед -
1. при ОЛЕ и КОМ использовать метод НазначитьВид() не нужно.
2. После создания нового элемента справочника, нужно его найти при помощи создания нового объекта. И потом возможно будет присваивание
нТМЦ = База.CreateObject("Справочник.ТМЦ"); 
    Если нТМЦ.НайтиЭлемент(текТМЦ)=1 Тогда
        текТМЦ="";
        Док.ТМЦ = нТМЦ.ТекущийЭлемент();

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