Создание и запись документа через COM

1. ranis888 104 25.03.19 15:27 Сейчас в теме
....// Создание соединения
МенеджерДокумента = ComConnection.Документы.РеализацияТоваровУслуг; 
Документ = МенеджерДокумента.СоздатьДокумент();  
Документ.Дата=ТекущаяДата();
Документ.Записать(РежимЗаписиДокумента.Проведение);    


Но в конечном итоге не сохраняется документ
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. qazaas 25.03.19 15:42 Сейчас в теме
(1) Для начала просто следует проверить - может вам не удается подключиться вовсе (код весь не видно, а данный кусок может находится в условии/попытке).
6. ranis888 104 25.03.19 15:45 Сейчас в теме
(4) Так если бы не подключился, то ругался бы что документ не нашелся
19. furman2000 16 26.03.19 06:51 Сейчас в теме
(6)
Правильно Вам говорят, СОМ использовать только для получения данных из другой базы, а дольше создание документа.
По СОМ например, нельзя использовать процедуры, которые заполняют другие поля.
А иногда их так хочется использовать.
28. SlavaKron 26.03.19 15:22 Сейчас в теме
(19) Думаю можно, если во внешней базе запустить текущую обработку в качестве агента. Тут можно почитать https://infostart.ru/public/387577/
9. ranis888 104 25.03.19 15:47 Сейчас в теме
(4)
Код

Процедура КнопкаВыполнитьНажатие(Кнопка)
   СтрокаПодключения =
       "file='\\fin3\Обмен\Ленар абый\'; usr='Админ'; pwd='';";
   ComConnector = ПолучитьCOMОбъектПоВерсииПлатформы();
   СообщениеПользователю = Новый СообщениеПользователю;
 
   Попытка
      ComConnection = COMConnector.Connect(СтрокаПодключения);
   Исключение
      СообщениеПользователю.Текст = "Ошибка подключения: " + ОписаниеОшибки();
      СообщениеПользователю.Сообщить();
      Возврат;
   КонецПопытки;
МенеджерДокумента = ComConnection.Документы.РеализацияТоваровУслуг;
ComConnection.УстановитьБезопасныйРежим(Ложь);
   ComConnection.УстановитьПривилегированныйРежим(Истина);
Документ = МенеджерДокумента.СоздатьДокумент();  
Документ.Дата=ТекущаяДата();
Документ.Number ="00000000008";
Документ.Записать();
    
   
КонецПроцедуры

Функция ПолучитьCOMОбъектПоВерсииПлатформы() Экспорт
    
   // Определяем имя COM-объекта по версии платформы
   ИмяComОбъекта = "";
   Инфо = Новый СистемнаяИнформация;
   Если Найти(Инфо.ВерсияПриложения, "8.3") > 0 Тогда
      ИмяComОбъекта = "V83.COMConnector";
   ИначеЕсли Найти(Инфо.ВерсияПриложения, "8.2") > 0 Тогда
       ИмяComОбъекта = "V82.COMConnector";
   Иначе
       ВызватьИсключение "Не удалось определить версию платформы";
   КонецЕсли;
    
   // Инициализируем COM-объект и соединение
   COMConnector = Новый COMОбъект(ИмяComОбъекта);
    
   Возврат COMConnector;
    
КонецФункции

Показать полностью
11. YannikAlx 43 25.03.19 15:49 Сейчас в теме
(1) Если вы просто балуетесь,то можно искать причины - почему не работает.
Я же увидел элементарную "ошибку" - СОМ очень удобен, чтобы подключиться и просто получить из другой базы данные , но создавать документ и вообще делать любые изменения - не лучшая идея.
Так что зеркалируйте свои действия и запускайте свою обработку из той базы , где хотите что-то создать
13. ranis888 104 25.03.19 15:53 Сейчас в теме
(11)
Я же увидел элементарную "ошибку" СОМ
В чем ошибка?
17. YannikAlx 43 25.03.19 16:58 Сейчас в теме
(13) Синтаксической ошибки не подразумевалось -"Ошибка" было в кавычках...
Имелось ввиду , что не целесообразно СОМ объект использовать для создания документов в другой базе , вместо того , чтобы просто получить необходимые данные СОМ объектом и создать документ в текущей базе, запуская обработку зеркально...
15. Comandante 206 25.03.19 15:59 Сейчас в теме
(1) Попробуй не проводить документ, а просто записать.
И добавь ОбменДанными = Истина;

Документ.ОбменДанными = Истина;
Документ.Записать(Режимзаписидокумента.Запись);
16. ranis888 104 25.03.19 16:29 Сейчас в теме
(15)
Все, вопрос закрыт. Проблема в своей глупости и невнимательности. Оказывается стоял отбор, а документы то создавались
29. user740006 26.03.19 16:01 Сейчас в теме
МенеджерДокумента = ComConnection.Документы.РеализацияТоваровУслуг;
Документ = МенеджерДокумента.СоздатьДокумент();
Документ.Дата=ТекущаяДата();
Документ.Записать(МенеджерДокумента .РежимЗаписиДокумента.Проведение);
AndrewUs; +1 Ответить
2. noprogrammer 237 25.03.19 15:38 Сейчас в теме
Возможно "перед записью" стоит "отказ" при каких нибудь условиях ( что нибудь не заполнено и т.д.)
3. ranis888 104 25.03.19 15:40 Сейчас в теме
(2)

И как это проверить через другую базу?
5. noprogrammer 237 25.03.19 15:43 Сейчас в теме
Если Документ.ПроверитьЗаполнение() Тогда 


Но это лишь отчасти может помочь.
7. ranis888 104 25.03.19 15:46 Сейчас в теме
(5) Так заметил такое, поставил номер документа в ручную, документ не создался. Попробовал в ручную создать документ и нумерация началась со следующего
8. ranis888 104 25.03.19 15:46 Сейчас в теме
(5)
Документ.ПроверитьЗаполнение()

Возвращает истину
10. ranis888 104 25.03.19 15:48 Сейчас в теме
Все, вопрос закрыт. Проблема в своей глупости и невнимательности. Оказывается стоял отбор, а документы то создавались
12. popro 25.03.19 15:49 Сейчас в теме
Сначала напиши код в базе в которой создаешь документ, отладь все ошибки. Потом перенеси в ComConnection. Уверен что документ не проведется только с заполненной датой.
14. ranis888 104 25.03.19 15:54 Сейчас в теме
(12) Это был набросок только. Я раньше не работал КомОбъектами
18. YannikAlx 43 25.03.19 17:02 Сейчас в теме
(14) Вот раз начинания, то и привыкайте -Проще СОМ использовать всего лишь для получения данных, не более.
Меньше различных проблем.
Простота - сестра гениальности...
20. ranis888 104 26.03.19 07:55 Сейчас в теме
(18) Ну теперь то я научился и создавать документы
21. YannikAlx 43 26.03.19 09:09 Сейчас в теме
(20) Можно научиться и левой рукой есть и правой рукой чесать левое ухо...
Не рационально это...
22. ranis888 104 26.03.19 09:13 Сейчас в теме
(21) А если стоит задача ограничить доступ к основной базе?
24. lordxxl 26.03.19 09:17 Сейчас в теме
(22) А если так, то используй web-сервисы
25. ranis888 104 26.03.19 09:27 Сейчас в теме
(24) Да в принципе задача уже решена, осталось пару колонок из табличной части доделать и все
23. lordxxl 26.03.19 09:14 Сейчас в теме
Не слушай никого! Поступай как говорит разум. А он говорит следующее - запусти конфигуратор базы к которой по ком подключаешься и далее Отладка - Подключение - Автоматическое подключение - Ставь галку "Клиентские и внешние соединения на сервере" и будет тебе отладка в коме. (Так же разум говорит что сервер должен быть в -debug)
26. ranis888 104 26.03.19 09:31 Сейчас в теме +0.1 $m
(23) почему приходиться так описывать ?
СомТовары.Номенклатура = ComConnection.Справочники.Номенклатура.НайтиПоКоду(Строка.Номенклатура.Код);


Если написать
СомТовары.Номенклатура = Строка.Номенклатура

Не срабатывает
27. popro 26.03.19 10:45 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот