Имя: Пароль:
1C
 
COM соединение с другой базой
0 Meilleur
 
11.03.11
10:06
Всем привет!

Есть две базы 1С 8.1. Я создал обработку, которая по ряду объектов (справочников) проводит документы в первой базе, потом через COM соединение подключается к другой базе и проводит по этим объектам документы во второй базе. В случае, если объекты из первой базы отсутствуют во второй базе, то перед созданием документов во второй базе создаются соответствующие объекты (справочники).

В первой базе все отрабатывает замечательно.
Потом подключаюсь ко второй базе так:

   connector = Новый ComObject("V81.COMConnector");
   Попытка
       База = connector.Connect(СтрокаПодключения);    
   Исключение
       Возврат;
   КонецПопытки;

Далее создаю новые элементы справочников в случае их отсутствия во второй базе:

   НовыйЭлемент = База.Справочники.<ИмяСпр>.СоздатьЭлемент();
   НовыйЭлемент.Код = вхКод;
   ................
   НовыйЭлемент.Записать();

Здесь тоже все отрабатывает штатно.

А дальше уже пытаюсь создать документ, и там возникают непонятки.

   ДокВключения = База.Документы.<ИмяДок>.СоздатьДокумент();
   ................
   <Заполняем все реквизиты документа>
   ................
   <Добавляем новую строку в ТЧ документа>
   НовСтрока = ДокВключения.<ИмяТЧ>.Добавить();
   ................
   <Заполняем реквизиты документа>
   ................
   НовСтрока.Сумма = вхСумма;
   НовСтрока.Количество = вхКоличество;
   Попытка
       ДокВключения.Записать(База.РежимЗаписиДокумента.Проведение);
   Исключение
       Возврат;
   КонецПопытки;

Последние два реквизита табличной части с типом число.
При этом если вхСумма нулевая, то документ проводится (независимо от значения вхКоличество), иначе - срабатывает исключение. Почему такое может происходить? Пробовал использовать англоязычный синтаксис - не помогает.

И еще одна проблема.
Даже если документ проводится, то один единственный из реквизитов - с типом "Перечисление" - остается незаполненным.

Пробовал двумя способами заполнять этот реквизит:
1.
   ДокВключения.ВидОперации = База.Перечисления.ВидыОперацийЗаявкаНаАктивацию.ПервичнаяАктивация;

2.    
   ИмяПеречисления = "ВидыОперацийЗаявкаНаАктивацию";
   Индекс = База.Перечисления[ИмяПеречисления].Индекс(База.Перечисления.ВидыОперацийЗаявкаНаАктивацию.ПервичнаяАктивация);
   ДокВключения.ВидОперации = База.Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.Получить(Индекс);

В первом случае по прямому обращению к перечислению опять же вызывается исключение, а во втором случае документ проводится, но реквизит остается незаполенным.

Хотя, опять же, первым способом я спокойно заполняю реквизит справочника и все записывается замечательно.

В чем может быть ошибка? Что я не так делаю?

Подскажите кто-нибудь... Совсем уже запутался...

Заранее спасибо!

Дмитрий.
1 Смит
 
11.03.11
10:11
2 Evgenchik
 
11.03.11
10:13
может найдешь что интересное
Книга знаний: v8: Охота на Com-ов
3 Mitriy
 
11.03.11
10:20
(0) про незаполненный реквизит могу посоветовать проверить тип реквизита... скорее всего там не перечисление... или перечисление, но другое... а вообще отладчик в руки и вперед, по шагам...
4 Mitriy
 
11.03.11
10:22
(3)+ то же самое касается и типа НовСтрока.Сумма...
5 Meilleur
 
11.03.11
11:01
С типами реквизитов все в порядке.

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

И документ создался полностью заполненным (и сумма, и реквизит перечисления прописался). Выходит, что глюк возникает в момент проведения документа.

Насчет отладчика. Из отладчика первой базы у меня нет возможности попасть в обработку проведения документа второй базы. Получается, мне нужно писать внешнюю обработку, которая генерирует документ во второй базе со всеми входными параметрами и уже отлаживать эту обработку из второй базы.
6 Mitriy
 
11.03.11
11:07
(5) ты можешь включить отладку во второй базе... Конфигуратор - Отладка - Автоматическое подключение - Клиентские и внешние соединения...

К тому же, ты можешь просто посмотреть, что творится при проведении документа...
7 Mitriy
 
11.03.11
11:12
(6)+ само собой, конфигуратор той, второй базы... а то мало ли...
8 Meilleur
 
11.03.11
11:53
(6) Спасибо! Раньше я так не делал :)
9 Meilleur
 
11.03.11
13:51
Проблема решилась.

В обработке проведения было обращение к SQL таблице. Но так как работа идет с тестовой базой, подключение к SQL таблице не выполняется и происходит отказ от проведения.

Но почему при этом проводился документ для пустого реквизита вхСумма, я так и не понял. Но сейчас уже это не так актуально...

Спасибо всем, кто откликнулся!