Выполняю загрузку информации по номенклатуре в УПП, параллельно мне нужно создать в Документообороте задачу по обработке этой информации. Внутренний документ и маршрут согласования в ДО настроены и работаю успешно.
Через COM подключаюсь к ДО и создаю внутренние задачи, ставлю на контроль без проблем, а с добавлением файла во внутренний документ возникли проблемы. Никто не подключал программно файлы во внутренние документы через COM?
Кусочек РАБОТАЮЩЕГО кода по созданию внутренних документов:
v83_Com = Новый COMObject("v83.ComConnector");// ComConnector");
Попытка
ДО=v83_Com.Connect("Srvr=pc265:2541; Ref=DOCCORP_WORK; Usr=***; PWD=***");
Исключение
СтрСообщения = "Ошибка инициализации! "+ОписаниеОшибки();
Сообщить(СтрСообщения);
КонецПопытки;
НД = ДО.Справочники.ВнутренниеДокументы.СоздатьЭлемент();
СтрЗаполнения = ДО.Справочники.ШаблоныВнутреннихДокументов.НайтиПоНаименованию("Заявка на ввод нового изделия");
НД.Заполнить(СтрЗаполнения);
НД.Организация = ДО.Справочники.Организации.НайтиПоКоду("00-000001");
НД.Наименование = "Заявка на ввод нового изделия "+Строка(ЭтаФорма.ЭлементыФормы.Номенклатура.Значение);
НД.ГрифДоступа = ДО.Справочники.ГрифыДоступа.НайтиПоНаименованию("Общий").Ссылка;
НД.Заголовок = "Заявка на ввод нового изделия "+Строка(ЭтаФорма.ЭлементыФормы.Номенклатура.Значение);
НД.Содержание = "Заявка на ввод нового изделия "+Строка(ЭтаФорма.ЭлементыФормы.Номенклатура.Значение);
НД.КоличествоЛистов = 1;
НД.КоличествоЭкземпляров = 1;
НД.Подготовил = ДО.Справочники.Пользователи.НайтиПоНаименованию(ДО.ПользователиИнформационнойБазы.ТекущийПользователь().FullName).Ссылка;
НД.Подразделение = ДО.РаботаСПользователями.ПолучитьПодразделение(НД.Подготовил);
НД.Ответственный = ДО.Справочники.Пользователи.НайтиПоНаименованию("Игинов Александр Александрович (Главный конструктор)").Ссылка;
НД.ВидДокумента = ДО.Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Заявка на ввод нового изделия").Ссылка;
НД.Утвердил = ДО.Справочники.Пользователи.НайтиПоНаименованию("Игинов Александр Александрович (Главный конструктор)").Ссылка;
НД.Шаблон = ДО.Справочники.ШаблоныВнутреннихДокументов.НайтиПоНаименованию("Заявка на ввод нового изделия").Ссылка;
НД.ВопросДеятельности = ДО.Справочники.ВопросыДеятельности.НайтиПоНаименованию("Формирование нормативно-справочной базы").Ссылка;
НД.Папка = ДО.Справочники.ПапкиВнутреннихДокументов.НайтиПоНаименованию("Заявки").Ссылка;
НД.ДатаСоздания = ТекущаяДата();
Попытка
НД.Записать();
Исключение
Предупреждение("Не удалось записать внутренний документ:" + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
КД = ДО.Справочники.Контроль.СоздатьЭлемент();
КД.Наименование = "Контролировать """ + НД.Наименование+ """""" + " от " + Формат(НД.ДатаСоздания,"ДЛФ=DT");
КД.Автор = ДО.Справочники.Пользователи.НайтиПоНаименованию(ДО.ПользователиИнформационнойБазы.ТекущийПользователь().FullName).Ссылка;
КД.ДатаПостановкиНаКонтроль = ТекущаяДата();
// КД.ИсполнителиСтрокой = ПолучитьИсполнителейСтрокой()
КД.Контролер = НД.Утвердил;
КД.Описание = "Контролировать """ + НД.Наименование+ """" + " от " + Формат(НД.ДатаСоздания,"ДЛФ=DT");
КД.ПоставленНаКонтроль = Истина;
КД.Предмет = НД.Ссылка;
КД.СнятСКонтроля = Ложь;
Попытка
КД.Записать();
Исключение
Предупреждение("Не удалось записать контроль:" + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
Получилось создать файл, получить сведения о файле тоже, но РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(ДО.Справочники.ВнутренниеДокументы.НайтиПоКоду(НД.Код).Ссылка,СвОФайле) Валится с ошибкой. Текст:
ФайлСпецификации = ДО.NewObject("Файл",ЭтотОбъект.ПутьКФайлуСпецификации);
ДО.ФайловыеФункцииСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(ФайлСпецификации);
СвОФайле = ДО.РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией",ФайлСпецификации);
// Создание карточки Файла в БД.
Попытка
СсылкаНаФайл = ДО.РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(ДО.Справочники.ВнутренниеДокументы.НайтиПоКоду(НД.Код).Ссылка,СвОФайле);
Исключение
ТекстОшибки = ДО.ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке());
КонецПопытки;
Ошибка:
{Форма.Форма.Форма(70)}: Ошибка при вызове метода контекста (ОшибкаСозданияНовогоФайла)
ТекстОшибки = ДО.ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке());
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.6.2237): {ОбщийМодуль.ФайловыеФункцииСлужебныйКлиентСервер.Модуль(395)}: Ошибка при вызове метода контекста (КраткоеПредставлениеОшибки)
Несоответствие типов (параметр номер '1')
Вероятно, причина в ссылке на внутренний документ, хотя в контроле ссылка работала успешно!
КД.Предмет = НД.Ссылка;
Может быть нужно загружать файл в Хранилище сразу? И брать ссылку на него в запись справочника Файлы?
(5) Serginio,
Извиняй не понял... Как это сделать? править на той стороне функцию РаботаСФайламиВызовСервера.СоздатьФайлСВерсией для раскодирования Base64Строка(Base64Значение(<Строка>))? или как? Для чего COM объект передавать как строку, вместо ссылки на элемент справочника?
Например для внешних отчетов есть ограничение на работу с файлами
http://www.forum.mista.ru/topic.php?id=698585 Но там это можно обойти через указание на то что отчет не должен работать в безопасном режиме.
ДО.ВнешниеОбработки.Создать(ПутьКОбработке,false);
Скорее всего ты работаешь в безопасном режиме.
А вообще для работы через COM лучше использовать внешние обработки. Проще отлаживать и проще использовать.