Имя: Пароль:
1C
1С v8
8.2 Сломал всю голову и убился об стену - создание документа по COM-соединению
0 Vladal
 
06.04.12
07:09
Обыскался по всем учебникам (они у меня для 8.0 и 8.1) и форуму. У людей и в примерах получается.

У меня - нет. Я дятел.

   Сообщить(""+ТекущаяДата()+" Подключение к бухгалтерской базе...");
   V8 = Новый COMОбъект("V82.COMConnector");
   Попытка
       БазаБУ = V8.Connect("File=""D:\1С\v8\БУ"";Usr=Exchange;Pwd=Exchange;");
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;

   НовыйПКО = БУ.Документы.ПКО.CreateDocument();
   НовыйПКО.Записать();

Вот на строке НовыйПКО.Записать(); выходит "Ошибка при вызовеметода контекста (Записать)"
и по кнопке подробнее такое:

{Форма.Форма.Форма(300)}: Ошибка при вызове метода контекста (Записать)
       НовыйПКО.Записать();
по причине:
Произошла исключительная ситуация: Ошибка при выполнении обработчика - 'ПередЗаписью'

Вот этот самый обработчик ПередЗаписью мне не дает покоя.
Он находится только в модуле объекта, в модуле менеджера пусто.
Добавлял ему проверку на внешнее подключение:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Экспорт

   #Если ВнешнееСоединение Тогда
       // Для внешнего соединения запишем без проверок, дальше заполнит пользватель
       Возврат;
   #КонецЕсли
   
   Если ОбменДанными.Загрузка Тогда
       Возврат;
   КонецЕсли;

...
КонецПроцедуры

Все равно ошибка.
Куда копать (по какому столбу дятлить?)
1 КМ155
 
06.04.12
07:13
(0)  БазаБУ = V8.Connect(...
    НовыйПКО = БУ.Документы.ПКО.CreateDocument();

окуеть
2 BuHu
 
06.04.12
07:14
(0)а если перед записью явно прописать  ,что ОбменДанными.Загрузка=Истина ?
3 Cube
 
06.04.12
07:14
Подписка на событие...
4 Vladal
 
06.04.12
07:14
Пардон, дошифровался - правильно так:

   НовыйПКО = БазаБУ.Документы.ПКО.CreateDocument();

... --- в этом месте в отладчике на "этой стороне" доступны все поля документа

   НовыйПКО.Записать();
5 Vladal
 
06.04.12
07:14
(1) не серчай, я агнался.
6 ZanderZ
 
06.04.12
07:15
(0) подписка на событие может...
7 Vladal
 
06.04.12
07:15
(2) ВОт так?

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Экспорт

   #Если ВнешнееСоединение Тогда

       ОбменДанными.Загрузка = Истина;

   #КонецЕсли
8 Defender aka LINN
 
06.04.12
07:17
А код обработчика выложить - не?
9 Cube
 
06.04.12
07:17
Про подписку на событие уже говорили?
10 BuHu
 
06.04.12
07:17
(7) нет , НовыйПКО .ОбменДанными.Загрузка=Истина;
11 Vladal
 
06.04.12
07:18
+(7) Yb[n/
Произошла исключительная ситуация: Ошибка при выполнении обработчика - 'ПередЗаписью'
12 КМ155
 
06.04.12
07:18
(4) сделай то же самое со стороны бухгалтерской базы
   НовыйПКО = Документы.ПКО.СоздатьДокумент();
   НовыйПКО.Записать();

и получишь ответ
13 Vladal
 
06.04.12
07:18
(10) Пробую
14 Vladal
 
06.04.12
07:20
(10) Така сама. ТОлько номер строки сдвинулся ;)

{Форма.Форма.Форма(301)}: Ошибка при вызове метода контекста (Записать)
       НовыйПКО.Записать();
по причине:
Произошла исключительная ситуация: Ошибка при выполнении обработчика - 'ПередЗаписью'
15 Vladal
 
06.04.12
07:20
(12) Делаю.
16 Wobland
 
06.04.12
07:22
я сейчас, может быть, ерунду скажу, но вроде при программного создании документа ему надо дату говорить перед записью
17 КМ155
 
06.04.12
07:22
(15) ну ты догадался, что документа без даты не бывает ?
18 Cube
 
06.04.12
07:24
(15) Кстати, попробуй так:

НовыйПКО = БазаБУ.Документы.ПКО.CreateDocument();
НовыйПКО.УстановитьНовыйНомер();
НовыйПКО.Записать();
19 Vladal
 
06.04.12
07:29
(12) Создается, записывается.

(17) Я дату давал ему, просто выкинул вместе со всеми другими заполняемыми реквизитами.
20 Vladal
 
06.04.12
07:30
НовыйПЛ.Date    05.04.2012 18:31:35    Дата
21 ZanderZ
 
06.04.12
07:31
(19) тебе же говорят - смотри подписку на событие
22 Vladal
 
06.04.12
07:32
(20) к (17)
-----------------

Хотя есть мысль заполниьт документ, как это делается при создании нового.

----------------

(21) в подписках этого документа нет
23 Vladal
 
06.04.12
07:36
(21)Хотя есть.
Там проверка периода. Но период открыт.
Интерактивно от пользователя Exchange создаёт:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   НовыйПКО = Документы.ПКО.СоздатьДокумент();
   НовыйПКО.Дата = РабочаяДата;
   НовыйПКО.Записать();
КонецПроцедуры

При подключении - нет.
24 Vladal
 
06.04.12
07:41
(10) Есть!
Сработало!

Похоже, я тогда или не сохранил обработку или в открытой обработке прото нажал Выполнить, во всяком случае алгоритм был старый.

Помогло:

       НовыйПКО = РДС.Документы.ПутевойЛист.CreateDocument();
       НовыйПКО.ОбменДанными.Загрузка=Истина; // <========= волшебная строчка
       НовыйПКО.Date = ВыборкаДетальныезаписи.Ссылка.Дата;
...
       НовыйПКО.Записать();


Слеующая тема... Что же придумать?
А! не заполняютмся реквизиты документа ;))))
25 Wobland
 
06.04.12
07:41
(24) тебе поможет волшебный символ "="
26 КМ155
 
06.04.12
07:43
(24)[Слеующая тема... Что же придумать? ]
пятничный развод
ТС в топку
27 Vladal
 
06.04.12
07:56
Хотя нет, ссылочные реквизиты и так чудесно заполняются:

   МенеджерКонтрагенты = БазаБУ.Справочники.Контрагенты;
   НовыйПКО.Контрагент = МенеджерКонтрагенты.НайтиПоКоду(ВыборкаДетальныеЗаписи.Ссылка.Контрагент.Код);
28 Vladal
 
06.04.12
07:58
(25) нетЪ!

(26) Мимо. На самом деле это мой вчерашний дятлизм. Сегодня с утра решил на свежую голову.
29 basicm
 
06.04.12
08:19
(27) последная строчка ппц)
30 vmv
 
06.04.12
08:38
да че там было, чувак не увидел подписчик наваяный хитрым студентом в количесве 100 щтук на док
31 hhhh
 
06.04.12
09:38
(30) не, чувак вносил изменения во внешнюю обработку только в конфигураторе
32 Vladal
 
07.04.12
17:51
(30) На самом деле дело было не в подписке. Когда я добавил ОбменДанными.Загрузка = Истина, всё встало на свои места.
33 демотиватор
 
07.04.12
20:20
(32)скверный вредный метод
позволяет записать методологически неверный мусор в базы
34 BuHu
 
07.04.12
20:23
(33) иногда он очень спасает , речь ведь не идет о том что бы дать пользователю где то это использовать. иногда надо что бы не отрабатывались некоторые алгоритмы , если я и так знаю что там все правильно , не надо лезти в конфу и коментировать что то