При обновлении конфигурации столкнулись со следующим моментом:
- Старая конфигурация работала в режиме совместимости "с 8.2.13";
- Новую конфигурацию перевели на режим совместимости "Не использовать".
- Все хорошо бы вроде, но в старой конфе используется конструкция типа
Новый ХранилищеЗначений(Переменная)
При этом Переменная имеет тип COMОбъект. В старой версии эта конструкция работает, а в новой выкидывает ошибку. Собственно, эта конструкция относится к защите одного из модулей конфигурации, и он не находится на поддержке у производителя. Не хотелось бы в нее влезать.
Так вот вопросы:
1. Это был баг в режиме совместимости, что COMОбъект мог сериализоваться?
2. Что мы приобретаем, включив режим совместимости "Не использовать" (8.2.14)?
При отказе от совместимости с 8.2.14 вы теряете, например, механизм общих реквизитов и разделения данных - это основная "фишка" релиза. Еще там есть поддержка новых функций СКД.
Поподробнее, что у вас с выходом за пределы размерности?
1. Это был баг в режиме совместимости, что COMОбъект мог сериализоваться?
слова все умные повторяют... 1С ляпнет - "сериализация", и остальные за ней, даже не зная, что такое "сериализация", повторяют с умным видом - умные слова, а понимая под "сериализовать" тупое раскладывание объекта в строку.
Если бы 1С придерживалась значений терминов, а не брала готовые названия и "натягивала" их на свою ж для своих экспериментов, смущая умы многочисленных студентов, то и вопросов бы подобных не было: есть механизм сериализации - объекты сериализуются, нет - не выгружаются.
А тут - 1С просто выкинула хранение COM-объекта из ХранилищеЗначений, посчитав, что и "так слишком много возможностей" (а по-правде - огребла массу ошибок из-за представлений и битых выгрузок COM-объектов вследствии непродуманности всей схемы "типа объектная платформа", и таким кардинальным способом решила закрыть огромный пласт проблем: нет выгрузки - нет проблем).
(10) AlX0id,
Тут основная проблема в том, что мне очень сильно не хочется вмешиваться в код защиты сторонних разработчиков :( Мало ли что еще там всплывет..
да ничего там не всплывет. Делайте теперь аналоги COM-объектов в базе-приемнике, ищите соответствия COM-объектам базы-источника, и "сериализуйте" их уже в этой базе на здоровье, восклицая "ай-да я! ай да 1С! вот ведь так!" :D
сложно наверное работать с 1С и так люто ненавидеть?
вот когда будете именно РАБОТАТЬ с 1С, да чтоб действительно автоматизировать сектора деятельности фирм-предприятий, а не графики "повысим-углубим" рисовать, да чтоб пользователям было удобно, а не как сказала 1С, да чтобы работало качественно и надежно, а не декларируемо и абы как - вот тогда и поговорим.
А не задачки тестовые решать да семинары посещать.
И что вы, если не секрет,
не секрет, который раскрыт выше - что и как и зачем.
кстати, нет, не сложно.
Потому что я знаю, что это за херня, и сразу делаю так, как мне нужно, а не как каким-то там неведомым "методистам 1С".
И потому, что знаю, чего ожидать от этого "г", и насколько оно получится "конфеткой".
я так думаю, в то место, где он извлекается из ХЗ, и надо перенести код, предшествующий помещению его в ХЗ (т.е. код, где этот объект создаётся)
Предшествует подключение к менеджеру лицензий, а это ой, какая не быстрая процедура.. и если ее каждый раз выполнять при попытке получения оного com-объекта.. Умру либо я, либо пользователи )
(7) andrewks,
Ну там как.. На дубе утка, в утке яйцо..
Com-Объект в структуре, структура в хранилище, а хранилище в параметре )
Если выносить com-объект из структуры, придется основательно перелопатить чужой код защиты, а этого не хотелось бы делать по двум причинам:
1. Все же это код защиты - не комильфо в нем копаться..
2. Там достаточно много обращений к этой структуре - соответственно, нужно порядком времени, чтобы это все отладить..
Мне все же интереснее, что же я теряю при отказе от режима совместимости 8.2.14 - так как, как оказалось чуть позднее опубликования данного вопроса - вылезла еще одна ошибка с "выходом за пределы размерности", которая так же решается отключением режима совместимости :(
При отказе от совместимости с 8.2.14 вы теряете, например, механизм общих реквизитов и разделения данных - это основная "фишка" релиза. Еще там есть поддержка новых функций СКД.
Поподробнее, что у вас с выходом за пределы размерности?
(9) juntatalor,
Могу - тут спора нет. Но как я уже говорил - защита не моя. И часть кода зашита на ключе - что может помешать варианту поиска с заменой..
Тут основная проблема в том, что мне очень сильно не хочется вмешиваться в код защиты сторонних разработчиков :( Мало ли что еще там всплывет..
В принципе, без общих реквизитов и разделения данных я проживу.. Да и клиенты тоже :)
Насчет новых функций СКД - сомневаюсь, что они пропадут в режиме совместимости 8.2.13.. Хотя тут надо тестить..
По первому вопросу:
В том что com-объект можно было сохранить в хранилище значения (сериализировать) - это ошибка в 1С исправленная при работе без режима совместимости. Более подробно можно найти в этой ветке партнерского форума http:_//partners.v8.1c.ru/forum/thread.jsp?id=1058206#1058206
Если кратко:
- Как тогда хранить COM Объект на сервере?
- Никак. Скажем так - закрыли недокументированную возможность ввиду неоднозначности ее работы.
Собственно, на форуме это обсуждалось.
Пример:
Сервер1 - ОС Windows
Сервер2 - ОС Linux
Что делать, если управление получит Сервер2?
По второму:
Из глобального: использование общих реквизитов и разделителей. Если нужны частности то лучше сюда http:_//downloads.v8.1c.ru/content/Platform/8_2_14_540/V8Update.htm
p.s. В ссылках для работы убрать символ подчеркивания
(17) SkorikA,
Я видел эту тему на партнерском форуме.
Но, во-первых, там речь о 8.3, а у меня 8.2.15.318, о которой там как раз и написано, что есть возможность поместить com-объект )
Во-вторых, речь о сериализации именно на сервере. В моем случае она ругается, как на сервере, так и не на сервере.
(18)Хм..
А переписать код на использование функций с повторным использованием нельзя?
Например как в БСП ОбменДаннымиПовтИсп.ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы
По ошибке: а какой текст собственно выдается? У меня просто при десериализации получается "Неопределено" на платформе 8.2.15.318 в режиме совместимости 8.2.13
А переписать код на использование функций с повторным использованием нельзя?
По практике - переписать можно все, что угодно. Но так как это не мои работодатели, а клиенты - стоимость оной переписки для них будет не сильно низка. По крайней мере, не ниже стоимости решения о том, чтобы не выключать режим совместимости.
По ошибке: а какой текст собственно выдается? У меня просто при десериализации получается "Неопределено" на платформе 8.2.15.318 в режиме совместимости 8.2.13
"Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент" - только на английском.
В общем, поковырявшись еще на форуме партнеров, нашел следующую фразу:
Данное изменение описано в файле "Отличия текущей версии от предыдущих и особенности перехода"
downloads.v8.1c.ru/conte... »»
"Не поддерживается помещение в хранилище значения данных, которые не поддерживают сериализацию. В режиме совместимости поведение не изменилось."
Как-то так - раньше можно было пихать чо угодно, а теперь только сериализуемое.
В общем, для себя выводы сделал.
Бонус отдаю juntatalor за разъяснение того, что теряю в режиме совместимости.
Остальные активные участники темы могут обратиться за "спасибом" в личку - отсыплю пару см )