Имя: Пароль:
1C
1С v8
Создать задачу в 1С:Документооборот при событии в 1С:УПП
0 vdeemer
 
26.09.16
16:58
Доброго времени суток!
Задача: при наступлении события в УПП создать в 1С:Документооборот задачу исполнителя. Через COM вроде несложно (предварительно добавил реквизит ИмяПользователяЭДО в УПП):
<code>
Соединение = Неопределено;
СтрокаПодключения = "...";
V8 = Новый COMОбъект("V83.COMConnector");
Попытка
    СоединениеЭДО = V8.Connect(СтрокаПодключения);
    Возврат "";
Исключение
    Возврат("Ошибка открытия информационной базы ЭДО: " + ОписаниеОшибки());
КонецПопытки;    

ЗадачаОбъект = СоединениеЭДО.Задачи.ЗадачаИсполнителя.СоздатьЗадачу();
ЗадачаОбъект.Дата = ТекущаяДатаСеанса();
ЗадачаОбъект.Важность = СоединениеЭДО.Перечисления.ВариантыВажностиЗадачи.Обычная;
ЗадачаОбъект.Исполнитель = СоединениеЭДО.Справочники.Пользователи.НайтиПоНаименованию(Пользователь.ИмяПользователяЭДО, Истина, , );
ЗадачаОбъект.Автор = СоединениеЭДО.Справочники.Пользователи.НайтиПоНаименованию(Пользователь.ИмяПользователяЭДО, Истина, , );
ЗадачаОбъект.Наименование = НаименованиеЗадачи;
ЗадачаОбъект.Описание = ОписаниеЗадачи;
ЗадачаОбъект.Записать();
</code>
При записи ловится ошибка {ОбщийМодуль.ОбщегоНазначения.Модуль(88)}: Значение не является значением объектного типа (Метаданные), причем отладчиком поймать ее в документообороте не могу (файл comcntr....xml согласно ИТС). При подключении к ИБ, вставив Предупреждение(""), я подключаюсь к этому соединению, но поймать ПриЗаписи() для ЗадачиИсполнителя не могу. Что можете посоветовать, уважаемые? Спасибо.
1 vdeemer
 
26.09.16
17:01
"При подключении к ИБ, вставив Предупреждение(""), я подключаюсь к этому соединению" - это про отладчик)))
2 sh8ce
 
26.09.16
17:03
что за процедура в общем модуле?
3 vdeemer
 
26.09.16
17:08
Если я правильно понял, то это ошибка документооборота:
<code>
// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
// по ссылке на объект.
Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты)
....
    Запрос.Текст =
    "ВЫБРАТЬ
    |" + ТекстПолей + "
    |ИЗ
    |    " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
    |ГДЕ
    |    ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
    |";
</code>
4 anatoly
 
26.09.16
17:10
какая версия ДО ?

и по моему правильнее было бы веб-сервисы использовать...
я на них делал согласование документов из УПП.
5 vdeemer
 
26.09.16
17:12
(2) Вызываться она может из огромного количества мест, так что стек вызовов - наше все. Но где поставить точку останова?
(4) Это да, оно и быстрее будет и ERP также решает эту задачу... Но сделать надо быстро, веб-сервис еще поднимать надо(( Хотя если оно так пойдет, то еще большой вопрос, что быстрее выйдет.
6 vdeemer
 
26.09.16
17:15
(4) (1.4.12.1)
7 vdeemer
 
27.09.16
14:40
Если вдруг кому понадобится - проблема была в том, что надо было создавать не задачу исполнителя, а бизнес-процесс. Мне достаточно было ознакомления:
<code>
Менеджер = Справочники.Пользователи.НайтиПоНаименованию(Пользователь, Истина, , );
    НайденныйМенеджер = Менеджер;
    
    СтруктураПроцесса = Новый Структура;
    СтруктураПроцесса.Вставить("Дата", ТекущаяДатаСеанса());
    СтруктураПроцесса.Вставить("Автор", Менеджер);
    СтруктураПроцесса.Вставить("Наименование", Наименование);
    СтруктураПроцесса.Вставить("Описание", Описание);
    
    Исполнители = Новый ТаблицаЗначений;
    Исполнители.Колонки.Добавить("Исполнитель");
    НовыйИсполнитель = Исполнители.Добавить();
    НовыйИсполнитель.Исполнитель = Менеджер;
    СтруктураПроцесса.Вставить("Исполнители", Исполнители);
    
    Предметы = Новый ТаблицаЗначений;
    Предметы.Колонки.Добавить("Предмет");
    СтруктураПроцесса.Вставить("Предметы", Предметы);
    
    БизнесПроцессы.Ознакомление.СоздатьПроцесс(СтруктураПроцесса, Истина);
</code>