![]() |
![]() |
![]() |
|
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
|
Про перечисления: Книга знаний: v8: Работа с перечислениями
|
|||
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 таблице не выполняется и происходит отказ от проведения. Но почему при этом проводился документ для пустого реквизита вхСумма, я так и не понял. Но сейчас уже это не так актуально... Спасибо всем, кто откликнулся! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |