![]() |
![]() |
![]() |
|
Проблема с OLE | ☑ | ||
---|---|---|---|---|
0
SyncMaster7
08.08.12
✎
11:39
|
Платформа 8.2.15.289. Конфигурация УПП 1.3.28.1. Необходимо по OLE перекинуть данные по договорам из обной базы в другую. Конфигурации одинаковые и без изминений.
Пишу внешную обработку. Создаю коннект. Все работает. Данные прочитать из второй базы можно. Но как только я пробую создать в ней новый элемент - получаю ошибку: {Форма.Форма.Форма(30)}: Ошибка при вызове метода контекста (СоздатьЭлемент) СпрДоговорыКонтрагентов.СоздатьЭлемент(); по причине:Произошла исключительная ситуация (1C:Enterprise 8.2.15.289): {ОбщийМодуль.ОбщегоНазначения.Модуль(29,2)}: Переменная не определена (ОбщегоНазначенияКлиентСервер) Иду по ошибке - там процедура - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Таблица2, ТаблицаРезультат); Зашел в ОбщийМодуль.ОбщегоНазначения там нахожу данную процедуру ДополнитьТаблицу. К тому же она - Экспорт. Вот текст: // Вставить содержимое обработчика. V8 = Новый COMObject ("V82.COMConnector"); // создается объект COM -соединение Попытка Соединение = V8.Connect ("Srvr =""appl-srv""; Ref = ""it""; Usr =""User""; Pwd = ""123"""); Исключение Предупреждение (" База данных не открыта! "); Возврат; КонецПопытки; СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов; СпрДоговорыКонтрагентов.СоздатьЭлемент(); СпрДоговорыКонтрагентов.Комментарий = " Перенос: cоздан автоматически "; СпрДоговорыКонтрагентов.Наименование = " Test "; СпрДоговорыКонтрагентов.Записать(); В чем проблема? |
|||
1
Лоботряс
08.08.12
✎
11:42
|
7-рошник?
|
|||
2
бомболюк
08.08.12
✎
11:42
|
ну значит этот общий модуль недоступен для внешнего соединения, чего ж тут непонятного то.
|
|||
3
Лоботряс
08.08.12
✎
11:44
|
(2) Не.
Вот сюда смотри СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов; СпрДоговорыКонтрагентов.СоздатьЭлемент(); СпрДоговорыКонтрагентов.Комментарий = " Перенос: cоздан автоматически "; СпрДоговорыКонтрагентов.Наименование = " Test "; СпрДоговорыКонтрагентов.Записать(); |
|||
4
Галахад
гуру
08.08.12
✎
11:44
|
Не проще читать данные по оле, а писать уже нормально, в текущую базу?
|
|||
5
SyncMaster7
08.08.12
✎
11:45
|
Так везде и всюду (начиная с книжек Радченко или Габеца) приводят именно такой пример текста, как у меня.
И в 8.1 у меня оно работало. Да и с 7-й проблем не было. Что предпринять то, вроде задачка совсем простая, а не получается. |
|||
6
DrShad
08.08.12
✎
11:46
|
(3) а что там не так?
|
|||
7
DrShad
08.08.12
✎
11:46
|
(5) и именно со справочником договоров у Радченко или Габеца дословно так?
|
|||
8
SyncMaster7
08.08.12
✎
11:47
|
Надо именно из базы, где запускается обработка данные по договору скинуть во вторую базу. То есть, создавать новый элемент справочника надо именно там.
|
|||
9
бомболюк
08.08.12
✎
11:47
|
(3) процедура этого модуля вызывается где нить в модуле объекта. Объект создается во внешнем соединении, а модуль наверняка для внешнего соединения недоступен. Проверь, есть там галка соответствующая?
|
|||
10
SyncMaster7
08.08.12
✎
11:49
|
Галка для работы с внешним соединением есть.
|
|||
11
SyncMaster7
08.08.12
✎
11:51
|
В книжках приводят примеры для справочника Организации и Номенклатура.
Но я для примера и их пробовал - та же ошибка. |
|||
12
бомболюк
08.08.12
✎
11:52
|
Подписки на события тоже проверь
|
|||
13
SyncMaster7
08.08.12
✎
11:55
|
Кстати, если поменять V8 = Новый COMObject ("V82.COMConnector"); на V8 = Новый COMObject ("V82.Application"); и грузить полное приложение, то ошибка выскакивает уже другая:
{Форма.Форма.Форма(25)}: Значение не является значением объектного типа (Справочники) СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов; |
|||
14
бомболюк
08.08.12
✎
11:57
|
(13) в Application и COMConnector по разному соединение организуется. Сделай не
Соединение = V8.Connect ("Srvr =""appl-srv""; Ref = ""it""; Usr =""User""; Pwd = ""123"""); а Соединение = V8; Соединение.Connect ("Srvr =""appl-srv""; Ref = ""it""; Usr =""User""; Pwd = ""123"""); |
|||
15
Галахад
гуру
08.08.12
✎
12:00
|
Гм.
ОбщегоНазначенияКлиентСервер <> ОбщегоНазначения Или в описании ошибки ошибка? |
|||
16
Лоботряс
08.08.12
✎
12:02
|
(6) Не рабочий код
|
|||
17
DrShad
08.08.12
✎
12:02
|
(16) почему?
|
|||
18
бомболюк
08.08.12
✎
12:02
|
(16) гыыы, точняк
|
|||
19
SyncMaster7
08.08.12
✎
12:04
|
Сорри, конечно модуль ОбщегоНазначенияКлиентСервер, а не ОбщегоНазначения.
И галка на внешнее соединение у него не стоит. Поскольку конфу трогать нельзя - какие есть варианты обхода? |
|||
20
Лоботряс
08.08.12
✎
12:04
|
(17)Б_ть, потому что он менеджеру присваивает значения а не элементу...
|
|||
21
Галахад
гуру
08.08.12
✎
12:04
|
(16) Покажи рабочий.
|
|||
22
Галахад
гуру
08.08.12
✎
12:05
|
(20) А, точно.
|
|||
23
Лоботряс
08.08.12
✎
12:05
|
СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов;
НовыйЭлемент = СпрДоговорыКонтрагентов.СоздатьЭлемент(); НовыйЭлемент.Комментарий = " Перенос: cоздан автоматически "; НовыйЭлемент.Наименование = " Test "; НовыйЭлемент.Записать(); |
|||
24
DrShad
08.08.12
✎
12:05
|
(20) точно, пора на свалку :)
|
|||
25
Лоботряс
08.08.12
✎
12:06
|
Я ж говорю - семерочник...
|
|||
26
Лоботряс
08.08.12
✎
12:06
|
(25)Не в обиду:))
|
|||
27
SyncMaster7
08.08.12
✎
12:13
|
Да фигня вопрос. Просто всю голову сломал с OLE, а на присвоения уже не обращал внимание.
Вернул V8 = Новый COMObject ("V82.COMConnector"); Вставил код Лоботряса - получил ошибку {Форма.Форма.Форма(31)}: Поле объекта не обнаружено (Справочники) СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов; |
|||
28
DrShad
08.08.12
✎
12:15
|
(27) ты же божился что у Габеца слово в слово
|
|||
29
Лоботряс
08.08.12
✎
12:18
|
Не могет быть... А соединение точно подключилось? Или у тебя в подключаемой конфе нет справочников...
|
|||
30
SyncMaster7
08.08.12
✎
12:22
|
Габец Простые примеры разработки стр.348.
Про коннект опускаю - там к файловой базе. Далее - МенеджерНоменклатуры = Открытие.Справочники.Номенклатура; МенеджерОрганизации = Открытие.Справочники.Организации; Далее идет обработка выборки и в ней: Если Организация.Пустая() Тогда Организация = МенеджерОрганизации.СоздатьЭлемент(); Организация.Код = Код; Организация.Записать(); КонецЕсли; |
|||
31
DrShad
08.08.12
✎
12:23
|
(30) ну и совсем не похоже на то что было у тебя
|
|||
32
SyncMaster7
08.08.12
✎
12:23
|
Точно подключилось. Я могу из справочника ДоговораКонтрагентов получить любые данные.
Может тут собака порылась в SQL базе, а не в файловой? |
|||
33
DrShad
08.08.12
✎
12:23
|
(32) да разницы нет
|
|||
34
hhhh
08.08.12
✎
12:24
|
(30) ты там точно в полуобморочном состоянии? Лоботряс тебе V8= кинул для Application, а ты его в (27) В COMConnector присобачиваешь.
|
|||
35
Лоботряс
08.08.12
✎
12:25
|
(32)А как получаешь?
|
|||
36
SyncMaster7
08.08.12
✎
12:26
|
Да я уже понял, что накосячил с присвоением. Поправил, но ошибка все равно возникает. Теперь с самим справочником.
А если вернуть Application, то получаю ошибку {Форма.Форма.Форма(31)}: Поле объекта не обнаружено (ДоговорыКонтрагентов) СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов; |
|||
37
Галахад
гуру
08.08.12
✎
12:27
|
(36) Ты целиком код показывай. С соединением.
|
|||
38
SyncMaster7
08.08.12
✎
12:27
|
Да я уже все варианты перебираю. И с COMConnector и с Application.
Но вообще-то надо для COMConnector сделать. |
|||
39
SyncMaster7
08.08.12
✎
12:30
|
Вот полный код:
Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. // Вставить содержимое обработчика. //V8 = Новый COMObject ("V82.COMConnector"); V8 = Новый COMObject ("V82.Application"); // создается объект COM -соединение Попытка Соединение = V8; Соединение.Connect ("Srvr =""appl-srv""; Ref = ""it""; Usr =""User""; Pwd = ""12345"""); Исключение Предупреждение (" База данных не открыта! "); Возврат; КонецПопытки; //МенеджерДоговораУПП = Соединение.Справочники.ДоговорыКонтрагентов; //НовыйДоговорУПП = МенеджерДоговораУПП.СоздатьЭлемент(); //НовыйДоговорУПП.Комментарий = " Перенос: cоздан автоматически "; //НовыйДоговорУПП.Наименование= " Перенос: cоздан автоматически "; //НовыйДоговорУПП.Записать(); //Выборка = СпрДоговорыКонтрагентов.Выбрать(); //Пока Выборка.Следующий() Цикл // Сообщить(Выборка.Наименование); // ОбработкаПрерыванияПользователя() //КонецЦикла; СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов; НовыйЭлемент = СпрДоговорыКонтрагентов.СоздатьЭлемент(); НовыйЭлемент.Комментарий = " Перенос: cоздан автоматически "; НовыйЭлемент.Наименование = " Test "; НовыйЭлемент.Записать(); Сообщить(" Перенос: cоздан автоматически "+НовыйЭлемент.Ссылка); КонецПроцедуры |
|||
40
SyncMaster7
08.08.12
✎
12:49
|
Какие-нибудь идеи еще будут? Может это трабл с платформой - и стоит перейти на 16? Или как?
|
|||
41
Галахад
гуру
08.08.12
✎
12:50
|
(40) Покажи как получаешь:
"Я могу из справочника ДоговораКонтрагентов получить любые данные" |
|||
42
SyncMaster7
08.08.12
✎
13:07
|
V8 = Новый COMObject ("V82.COMConnector");
// создается объект COM -соединение Попытка Соединение = V8.Connect ("Srvr =""appl-srv""; Ref = ""it""; Usr =""User""; Pwd = ""12345"""); Сообщить("Ок"); Исключение Предупреждение (" База данных не открыта! "); Возврат; КонецПопытки; ОрганизацияУПП = Соединение.Справочники.Организации; Сообщить("Найдена организация с кодом 000000020 ее ИНН "+ ОрганизацияУПП.НайтиПоКоду("000000020").ИНН); МенеджерДоговораУПП = Соединение.Справочники.ДоговорыКонтрагентов; НовыйДоговор = МенеджерДоговораУПП.НайтиПоКоду("000021128"); Сообщить("Найден договор с кодом 000021128 "+ НовыйДоговор.Наименование); Получаю сообщения: Ок Найдена организация с кодом 000000020 ее ИНН 5008053412 Найден договор с кодом 000021128 Химмашстарт |
|||
43
Галахад
гуру
08.08.12
✎
13:11
|
V8 = Новый COMObject ("V82.COMConnector");
// создается объект COM -соединение Попытка Соединение = V8.Connect ("Srvr =""appl-srv""; Ref = ""it""; Usr =""User""; Pwd = ""12345"""); Сообщить("Ок"); Исключение Предупреждение (" База данных не открыта! "); Возврат; КонецПопытки; СпрДоговорыКонтрагентов = Соединение.Справочники.ДоговорыКонтрагентов; НовыйЭлемент = СпрДоговорыКонтрагентов.СоздатьЭлемент(); НовыйЭлемент.Комментарий = " Перенос: cоздан автоматически "; НовыйЭлемент.Наименование = " Test "; НовыйЭлемент.Записать(); |
|||
44
SyncMaster7
08.08.12
✎
13:14
|
Естественно я попробовал данный код перед отправкой предыдущего сообщения.
И получаю ошибку с которой начинал данную тему: {Документ.Договор.Форма.ФормаДокумента.Форма(155)}: Ошибка при вызове метода контекста (СоздатьЭлемент) НовыйДоговор = МенеджерДоговораУПП.СоздатьЭлемент(); по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.15.289): {ОбщийМодуль.ОбщегоНазначения.Модуль(29,2)}: Переменная не определена (ОбщегоНазначенияКлиентСервер) Я уже понял, что модуль ОбщегоНазначенияКлиентСервер не имеет галочки Внешнее соединение. Вопрос прежний - как это обойти без изменения конфигурации? |
|||
45
hhhh
08.08.12
✎
13:22
|
(44) ну проанализируй при каких условиях вызывается
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Таблица2, ТаблицаРезультат); и сделай, чтобы эти условия не возникли. |
|||
46
hhhh
08.08.12
✎
13:23
|
может там константа какая-нибудь есть типа "ДополнятьТаблицы"
|
|||
47
Лоботряс
08.08.12
✎
13:30
|
(45)+ Причем вызывается эта процедура откуда-то из модуля объекта документа. Из обработки заполнения наверное?
|
|||
48
SyncMaster7
08.08.12
✎
13:32
|
Ради интереса установил галку ОбщегоНазначенияКлиентСервер у и получил очередную ошибку
{Документ.Договор.Форма.ФормаДокумента.Форма(157)}: Ошибка при вызове метода контекста (Записать) НовыйЭлемент.Записать(); по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.15.289): Не удалось записать: "Договор контрагента"! |
|||
49
Лоботряс
08.08.12
✎
13:33
|
СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ОбработкаЗаполнения (Filling) ... Возникает при вводе элемента справочника на основании, а также при выполнении метода Заполнить, при вводе на основании, а также при интерактивном вводе нового. В процедуре-обработчике этого события должен быть описан сам алгоритм заполнения реквизитов элемента справочника на основании переданного значения. |
|||
50
Лоботряс
08.08.12
✎
13:34
|
Но тут ведь вроде как раз неинтерактивный ввод нового. Непонятно...
|
|||
51
SyncMaster7
08.08.12
✎
13:37
|
Однозначно. Создается именно новый элемент. Без всякого основания.
|
|||
52
zladenuw
08.08.12
✎
13:38
|
ну так есть подписки на события. может там участвует твой объект. вот он и лезет бог знает куда
|
|||
53
Лоботряс
08.08.12
✎
13:39
|
А если это неинтерактивный ввод, то откуда скажите мне формы взялись которые в(48)?
|
|||
54
SyncMaster7
08.08.12
✎
13:41
|
Это из первой конфигурации. В ней на форме документа Договор есть кнопка, при нажатии на которую и должен быть записан договор во вторую конфигурацию.
|
|||
55
Галахад
гуру
08.08.12
✎
13:42
|
(54) Чо-та не понял, почему же другую конфигурацию нельзя менять, если эту можно?
|
|||
56
SyncMaster7
08.08.12
✎
13:48
|
По хорошему обе конфы менять нельзя. Просто ради проверки в конфе приемнике я установил галочку на модуль ОбщегоНазначенияКлиентСервер и ошибка эта исчезла.
Появилась следующая - с записью нового элемента справочника ДоговораКонтрагентов. |
|||
57
Andreyyy
08.08.12
✎
13:52
|
(0) СпрДоговорыКонтрагентов.ОбменДанными.Загрузка = Истина;
|
|||
58
Лоботряс
08.08.12
✎
13:55
|
(57)+1 можно попробовать...
|
|||
59
SyncMaster7
08.08.12
✎
14:08
|
Попробовал. Получил ошибку
{Документ.Договор.Форма.ФормаДокумента.Форма(154)}: Поле объекта не обнаружено (ОбменДанными) СпрДоговорыКонтрагентов.ОбменДанными.Загрузка = Истина; Хотя хелп такой метод у справочника показывает. Но видимо для справочника из другой конфигурации по ОЛЕ не работает. |
|||
60
Лоботряс
08.08.12
✎
14:09
|
НовыйЭлемент.ОбменДанными.Загрузка = истина;
|
|||
61
Лоботряс
08.08.12
✎
14:09
|
(60) опять же
|
|||
62
SyncMaster7
08.08.12
✎
14:33
|
Заработало. Большое спасибо.
Остался только вопрос с галочкой на ОбщегоНазначенияКлиентСервер. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |