Глюк v83.ComConnector #700506


#0 by kalleka
цепляюсь через v83.ComConnector с бп 3.0 к бп 3.0 ... Смотрю в отладчике - все странно. то что должно быть датой - comобъект, ссылочные реквизиты - имеют тип дата или число, табличная часть товары - вообще строка. И каждый раз может все это отличаться. Никто не сталкивался с таким?
#1 by Wobland
увидевши необъяснимое, сразу объявил глюком?
#2 by kalleka
Сие есть субъективное толкование) Если дадите разумное объяснение, то плюс вам в карму)
#3 by Wobland
нд не похож на новый документ
#4 by kalleka
вообще не пойми на что похоже
#5 by МимохожийОднако
Что не получилось? я не понял
#6 by kalleka
Пытаюсь создать новый документ РТУ, а создает не пойми что, счет учета - ложь, руководитль - строка, таб часть товары - строка, соответственно ругается на добавление строки
#7 by kalleka
{Форма.Форма.Форма}: Метод объекта не обнаружен (Добавить)             нстр = нд.Товары.Добавить;
#8 by МимохожийОднако
Пытаешься создать в чужой базе?
#9 by kalleka
да, все верно
#10 by Wobland
никто кроме ТС не знает, как получился нд на скрине
#11 by kalleka
сообщить("устанавливается подключение к базе "+стр.путькбазе+"");
#12 by МимохожийОднако
Внешнее соединение не может работать с формой
#13 by kalleka
у меня создание документа идет б.Документы.реализациятоваровуслуг.СоздатьДокумент; Там документобъект возвращается
#14 by Wobland
зато может работать в модуле формы
#15 by МимохожийОднако
Об этом не спорю. Но сообщение об ошибках никак не согласуется с приведенным кодом.
#16 by Wobland
кода тут вообще кот нагадил. смущает слово "форма"? зря
#17 by Hmster
тут такое уже бывало, да и сам видел. попробуй почистить кэш
#18 by hhhh
ком коннектор не работает с формой вообще-то. Зачем вы в форму полезли?
#19 by kalleka
я в нее не лез.
#20 by mdocs
глюк как глюк, чего еще от бетки хотите.
#21 by hhhh
вы почитайте. Вы же написали.
#22 by mdocs
Код в модуле формы уже запрещено писать?
#23 by hhhh
можно. но вызывать из ком-коннектора не надо.
#24 by mdocs
Так вроде ж никто не вызывает
#25 by mdocs
просто ошибка в контексте формы откуда вызывается ком-соединение (если не ошибаюсь).
#26 by kalleka
если кратко - то я цепляюсь к нескольким базам бп 2 и бп 3 и засовываю соединения в массив, все это на сервере.          выполняю там разные действия, потом пытаюсь в этих базах создать РТУ. И если например работать с 2 базами бп 2.0 и бп  3.0, то он начинает косячить. Причем то в бп 3 корректно заведет рту, а в бп 2 нет, то наоборот. И как с этим справится - не пойму
#27 by kalleka
и вот на добавлении строки в табл товары в новосозданном документе он спотыкается. Если смотреть через отладчик, то там как будто не документобъект создается посредством СоздатьДокумент, а что то неведомое с набором реквизитов от рту, а типами значений совсем другими
#28 by Franchiser
что такое б у тебя?
#29 by Franchiser
Делать коннет в цикле и писать в массив это неправильно, возможно в массиве базы переопеределяются, может получится что все базы в результате сошлются на одну единственную имхо.
#30 by Franchiser
Проверь какие базы у тебя в массив записались в результате после добавления.
#31 by kalleka
создатьдокументвдопбазе(док,номб,массивбаз[номб-1]) ... ну а как работать с несколлькими базами? Эта обработка изначально работала на 8.2 с бп 2.0 и еще и с 7-ми базами.
#32 by kalleka
Даже если не на те базы, то во всех из них есть РТУ, с табличной частью товары.
#33 by Franchiser
Попробуй добавлять массив не используя переменную v8. И вообще  приведе весь код, в одном месте б у тебя ком-обьект в другом б это база, где и как используется соединениявернуть.
#34 by Franchiser
И попробуй еще вместо v83.comConnector использовать v82.comconnector для баз 8.2
#35 by kalleka
&НаКлиенте и тут обычно спотыкается
#36 by Wobland
прошло 8 часов. наконец-то начались подробности
#37 by Franchiser
Возможно объект в процедуре  на сервере утебы нет сам объет а псевдообъект, попробуй еобразовать его в ревизитформывзначение. Процедура создатьдокументы расположена в модуле формы что ли?  Не проще было сделать процедуру в модуле объекта или в модуле менеджера? Тогда директива наклиенте не нужна.
#38 by kalleka
Команда да, но потом на сервере идет подключение, и работа в подключении же и идет на сервере
#39 by kalleka
Вообще можно как то уточнить - в какой именно базе соединение? для проверки, а то я уже сам сомневаюсь
#40 by Franchiser
Обратись к какой нибудь константе базы, например заголовок окна программы. Ну и что что на сервере идет подключение, на сервере можно обратиться к реквизитам формы . Директива насервере это позволяет, ошибка будет только если директива   насерверебезконтекста.
#41 by Franchiser
Ты передаешь контекст текущей формы на сервер, реквизит объект - реквизит формы, а не сам объект, думаю в этом и ошибка.
#42 by kalleka
а можно подробнее?? Что то я  недопонимаю чьей именно контекст и в каком месте передается
#43 by Franchiser
У тебя процедура есть в форме Процедура ОсновныеДействияФормыСоздатьДокументыСервер У нее ты не указал директиву, поэтому считается что директива у нее &насервере. При этом возможно обращение как к реквизитам формы так и к рекизитам объекта. Если откроешь документ то в нем есть реквизит который называется Объект - это псевдореквизит самого объекта, к нему ты по ошибке и обращаешься.
#44 by Franchiser
Я имею ввиду в форме документа есть реквизит объект.
#45 by Franchiser
Напиши перед этой процедурой &насерверебезконтекста тогда у тебя вообще будет ошибка так как объект будет недоступен вообще.
#46 by Franchiser
Тебе нужно использовать реквизитформывзначение тогда ты преобразуешь все что есть на форме в объект прикладного типаи дальше будешь работать с ним.
#47 by Franchiser
В серверно процедуре пишешь Док = реквизитформывзначение("объект") дальше обращаешься к доку.
#48 by Franchiser
Что- то я сам запутался, объект у тебя обработка
#49 by kalleka
Спасибо, это я сейчас отработаю, но мне не ясно как это связано с где б - из массива массивбаз, переменной объявленной на сервере. причем б.документы.РеализацияТоваровУслуг.найтипономеру  срабатывает корректно - данные действительно похожи на документссылка
#50 by Franchiser
Убери пока заполнитьзначениясвойств посмотри какие типы у созданного документа в отладчике
#51 by Franchiser
И какие типы в образец
#52 by Franchiser
Насколько корректно платформа относится к хранению com-объектов в реквизите формы непонятно, нужно было в серверной процедуре создавать массив, а на форме хранить строки в списке аверно.
#53 by Franchiser
Просто выходит что ты хранишь ком-объекты полученные подключением на сервере на клиенте что ли, что-то непонятное.
#54 by kalleka
в серверной процедуре создается массив и в нем хранятся эти подключения, с клиентом не пересекается. Переменная создается в серверной части, на форме и в объекте переменной с таким именем нет
#55 by kalleka
я не понял как посмотреть эти типы в сом соединении и поиск по мисте не помог
#56 by Franchiser
образец у тебя com объект ссылка, нд -- comобъет -объект. Непонятно как тут отработает заполнитьзначения свойств. Может оба сделать объектами. Или запрлнять как то иначе.
#57 by kalleka
Кажется начинаю разбираться. Если переоткрыть программу и оставить в списке баз только одну базу, то он подключится, без проблем, хоть к бп 2, хоть к бп 3 Если он например подключится к бп 2.0, то пока не переоткрыть клиента, он некорректно будет работать с бп 3.0 И соответственно наоборот. Получается что нельзя работать с бп 2 и с бп 3 по-очереди. Что то глючит. А по отдельности, все ок
#58 by Franchiser
Ну так разрывай соединение, подключайся по-очереди.
#59 by kalleka
вот нашел похожую тему, только там человек с 8.1 и 8.2 работал одновременно Так и не нашел вопроса как корректно закрывать
#60 by kalleka
мне даже переоткрытие обработки не помогает. Приходится переоткрывать клиента, чтобы все заработало. Моэно конечно инструкцию накатать - сначала работайте с базами бп 2, потом переоткройте 1с и работайте с базами бп 3.0))))
#61 by Franchiser
Вероятно надо избавиться от такой записи    б = новый COMОбъект("v83.ComConnector"); может массив какой то сделать куда писать все ком-соединения. Без использования б
#62 by kalleka
Это локальная переменная, в маленькой процедурке. я пробовал переименовать, я даже пробовал новое создавание подключения каждый раз - не помогает
#63 by Franchiser
Или же сделать    б83 = новый COMОбъект("v83.ComConnector"); и    б82 = новый COMОбъект("v83.ComConnector");
#64 by kalleka
"Сделал две переменные, т.к. вариантов просто не было. Но это не помогло. "
#65 by Franchiser
в управляемых формах хитро все работает. Соединение будет существовать до тех пор пока не обнулишь все объекты которые имеют отношение к соединению сам сталкивался с эти, то есть всякие ком-справочники и документы нужно очищать.
#66 by Franchiser
Присвой значение неопреределено всем созданным справочника , документам , тч, найденным ссылкам и тд.
#67 by kalleka
Так если я обработку закрываю и все-равно не срабатывает? Сейчас конечно попробую обнулить
#68 by Franchiser
После выполнения процедуры не должно оставаться  com-объекта иначе косяки были такие же при подключении к следующей базе. Кстати вспомнил натыкался как раз на то же самое) подключение правда делал к 1с7.7 из тонкого клиента бп 3.0. И проблема решилась после обнуления.
#69 by Franchiser
могу поискать свою обработку и выслать на почту
#70 by Franchiser
Точнее там даже не косяк был просто ошибка неизвестная при попытке соединиться со следующей базой.
#71 by Franchiser
Тогда занимался трансформацией обработки с обычных форм на управляемые...
#72 by kalleka
я обработку с бп 2 на бп 3 переделываю. Я сами подключения обнуляю. Неужели и все переменные надо обнулять, что использовались? Они же локальные и закрываются, по сути
#73 by ДенисЧ
"закрываются, по сути" А ты их локально объявляешь явно?
#74 by Franchiser
у меня также было в обычных формах работало, перевел на управляемые подключалась только первая база. Обнулял подключения не помогло, как все ком-объекты обнулил, стали подключаться остальные базы.
#75 by kalleka
часть неявно кстати
#76 by Franchiser
Ухожу, буду вечером, если нужен будет пример обработки пиши.
#77 by ДенисЧ
Ну вот. Тогда они у тебя не локальные а глобальные. Или явно обнуляй, или явно объявляй в пределах функции.
#78 by kalleka
все вроде обнуляю, а все-равно. Упускаю может что
#79 by kalleka
для каждого стр из Объект.таблбаз цикл             сообщить("устанавливается подключение к базе "+стр.путькбазе+"");              вот тестовое соединение - все обнуляю в цикле, но все-равно вываливается с ошибкой на 2 строчке
#80 by Franchiser
Попробуй каждый объект явно определять и в конце устанавливать в неопределено. Тч товары опиши как то . Может порядок обнуления имеет значение. Контроллируй в отладчике что значение неопределено устанавливается.
#81 by Franchiser
Еще можешь контроллировать что ком-соединение пропало, открыв базу к которой подключаешься и посмотрев активные подключения.
#82 by Franchiser
Для баз 1с 8 возможна так надо: Может так попробуете:                        ВывестиСообщение("Подключение не было установлено!");
#83 by Franchiser
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С