|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
Добрый день, Имеется внешняя компонента , написанная на С++, задача которой получение информации из внешней базы данных и возврат результата запроса в виде Таблицы значений в 1С. Для формирования таблицы значений на текуший момент используется интерфейс IDispatch* pBackConnection, получаемый в качестве параметра в функции Init(). Далее я просто, используя функции 1С формирую таблицу значений, заполняю ее и возвращаю ее во второй параметр в CallAsFunc(...). Проблемы начались с переходом на тонких клиентов 1С. На стороне сервера внешняя компонента толком не запускается. Можно запустить на стороне клиента, но это все выглядит как костыли и выпадает из общей логики "клиент-сервер" в 1С. Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п. NativeAPI еще более урезан в этом плане. Танцы с бубном привели к тому, что я смог запустить внешнюю компоненту под сервером 1С, НО работа происходит до того момента, пока не производится попытка вызвать Invoke у pBackConnection. 64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается. Предполагаю, что сервер 1С не обслуживает этот режим работы. Соответственно возникают вопросы, это временно или логика 1С сводится к отмене этой схемы работы? Если создать внутренние структуры 1С (таблицу значений) таким способом нельзя, есть ли в принципе описание, что из себя представляет таблица значений на системном уровне, чтобы попытаться создать ее на С++ , заполнить, а затем просто подсунуть 1С в качестве возвратного параметра? Хотелось бы хотя бы получить направление, в какую сторону копать. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 18:26 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
max950Добрый день, Имеется внешняя компонента , написанная на С++, задача которой получение информации из внешней базы данных и возврат результата запроса в виде Таблицы значений в 1С. Для формирования таблицы значений на текуший момент используется интерфейс IDispatch* pBackConnection, получаемый в качестве параметра в функции Init(). Далее я просто, используя функции 1С формирую таблицу значений, заполняю ее и возвращаю ее во второй параметр в CallAsFunc(...). Проблемы начались с переходом на тонких клиентов 1С. На стороне сервера внешняя компонента толком не запускается. Можно запустить на стороне клиента, но это все выглядит как костыли и выпадает из общей логики "клиент-сервер" в 1С. Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п. NativeAPI еще более урезан в этом плане. Танцы с бубном привели к тому, что я смог запустить внешнюю компоненту под сервером 1С, НО работа происходит до того момента, пока не производится попытка вызвать Invoke у pBackConnection. 64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается. Предполагаю, что сервер 1С не обслуживает этот режим работы. Соответственно возникают вопросы, это временно или логика 1С сводится к отмене этой схемы работы? Если создать внутренние структуры 1С (таблицу значений) таким способом нельзя, есть ли в принципе описание, что из себя представляет таблица значений на системном уровне, чтобы попытаться создать ее на С++ , заполнить, а затем просто подсунуть 1С в качестве возвратного параметра? Хотелось бы хотя бы получить направление, в какую сторону копать. Спасибо. думаю, что это еще больше костыли. сделайте во внешней компоненты запись структуры на диск в xml, а уже потом цепляйте из 1с. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 00:00 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 07:41 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
max950, а зачем ВК? Почему не хотите использовать обычное ADO и весь код в 1С писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 08:28 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
wamacoдумаю, что это еще больше костыли. сделайте во внешней компоненты запись структуры на диск в xml, а уже потом цепляйте из 1с. Не согласен, в моей схеме по сути становится sql клиентом другой базы, и есть возможность одновременно работать сразу с двумя базами. например кассир нажимает одну кнопку и формирует платеж сразу в двух базах, и т.п. Кроме того весь код по обмену по сути можно свести к одной строчке: ТЗ = ВК.ВерутьНужнуюМнеХреньЗаПериод(...); С полученной таблицей значений чистый 1С-ник может дальше делать, что хочет. Причем значения в ТЗ идут с нужными типами. Очень часто речь идет про стандартную бухгалтерию, в которой конфигурация принципиально не меняется, все делается на внешних обработках. Чтобы работать с XML внешняя компонента по сути не нужна (выгрузил в тестовый файл, загрузил из текстового файла), нужен web сервис и программирование 1С по обслуживанию этого сервиса, но это уже другая песня. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 11:32 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
AHDP А на x86 windows seerver работает? Нет, это не тот случай, вертел и 32 и 64 битными версиями, проблема в том, что сервер 1С не хочет работать как COM сервер, т.е. ссылку на себя он типа отдает, но получить что-то вразумительно в ответ у меня не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 11:34 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
DmitriyZmax950, а зачем ВК? Почему не хотите использовать обычное ADO и весь код в 1С писать? Потому что это в некотором роде коммерческий продукт, мы не можем в каждой базе 1С прописывать sql запросы. Все реализуется во внешней компоненте, 1С-ник работает с набором предопределенных функций. просто проект подрос и некоторые программисты 1С хотят, чтобы работа шла между сервером 1С и нашей базой, а не между клиентом и базой. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 11:38 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
max950Потому что это в некотором роде коммерческий продукт, мы не можем в каждой базе 1С прописывать sql запросы. Все реализуется во внешней компоненте, 1С-ник работает с набором предопределенных функций. просто проект подрос и некоторые программисты 1С хотят, чтобы работа шла между сервером 1С и нашей базой, а не между клиентом и базой. что мешает сделать это во внешней обработке? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 11:50 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
Хитроглазыйmax950Потому что это в некотором роде коммерческий продукт, мы не можем в каждой базе 1С прописывать sql запросы. Все реализуется во внешней компоненте, 1С-ник работает с набором предопределенных функций. просто проект подрос и некоторые программисты 1С хотят, чтобы работа шла между сервером 1С и нашей базой, а не между клиентом и базой. что мешает сделать это во внешней обработке? Может быть я не что-то понимаю, но сейчас я во ВК формирую таблицу значений, заполняю ее и отдаю 1С. Т.е.отдаю не простой тип. 1С производи вызов функции, в ответ в памяти у себя получает таблицу значений. Как я могу это сделать через ADO? Или каким другим способом это можно сделать? Проблема в том, что 1С вызывает ВК, и получает от ВК ответ, но ВК не может "дернуть" 1С, чтобы ВК в ней могла сформировать таблицу значений. Возможно я что-то не понимаю. Поясните пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 12:04 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
Сколько, на стороне сервера приложений запущено рабочих процессов? А вы уверены, что рабочий процесс не был перезапущен (менеджером)? А это решение работает в базе, которая развернута в режиме файл-сервер? Таблица значений, оно конечно да... удобно. Но в клиент-сервере с ней много проблем. XML аналогично - тот ещё кастыль, с учетом сугубо своего пространства имен 1С. Как частный случай, могу предложить рассмотреть возврат в виде структуры, которая содержит вложенные структуру (сам так делал). К сожелению, это не временные трудности а путь развития 1С. >>64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается. Или вы не правильно сформулировали или сами не понимаете суть происходящего. Если, у вас имеется ВК в виде 32-х битной dll, то она в принципе не может быть загружена в адресное пространство процесса с не той же разрядностью. >> Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п. А в чем собственно проблемы? >> Предполагаю, что сервер 1С не обслуживает этот режим работы. Этот, это какой? У меня складывается впечатление, что вы хотите сразу предоставить прямой вызов вашей ВК... С точки зрения клиент-сервера вообще, и 1С в частности, это не совсем верно. Было бы лучше бы, если бы, вы давали 1С-нику интерфейс в виде общего модуля или обработки. А уже внутри модуля/обработки делали бы нужные преобразования. Тогда бы, вы могли возвращать значения из ВК в виде массива строк или типа того (1С вполне корректно работает с типами данных COM), а уже в 1С, в вашем модуле, преобразовывать в таблицу значений. Тогда бы и обратный вызов был бы не нужен. ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 21:34 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
The Dim!---А вы уверены, что рабочий процесс не был перезапущен (менеджером)? Не уверен, но если в течении минуты вызов функции не отрабатывает, как ожидается, то что-то идет не так. ---А это решение работает в базе, которая развернута в режиме файл-сервер? В режиме файл-сервера (когда включается ключ "&НаСервере") ВК просто не подключается. Хотя этот вариант на уровне логов ВК еще отслеживал. (танцы с бубном требуют много времени). >>64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается. ---Или вы не правильно сформулировали или сами не понимаете суть происходящего. Если, у вас имеется ВК в виде 32-х битной dll, то она в принципе не может быть загружена в адресное пространство процесса с не той же разрядностью. Наверное я просто недостаточно ясно объяснил. Естественно, у меня два варианта ВК, одна 32-битная, вторая 64-битная. Каждой версии сервера я подсовываю свой вариант. Так вот, 64-битный сервер что-то пытается делать (судя по загрузке процессора), а 32-битный вроде не делает даже попыток. Уточню, что зам процесс загрузки ВК производится и затык происходит в одном и том же месте. Проблема в том , что я никак не могу отследить, что происходит на стороне 1С, 1С реально что-то пытается сделать, или тупо там сейчас стоит затычка. >> Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п. ---А в чем собственно проблемы? Проблема в том , что в режиме управляемых форм клиентская часть не понимает, что такое таблица значений, но при этом я могу полученную таблицу значений разобрать построчно: ТЗ = ВК.ЧтоТоПоказать(...); Для Каждого ТекТЗ Из ТЗ Цикл Код = ТекТЗ.Код; ... КонецЦикла; Вместо того, чтобы сделать просто : ЭлементыФормы.ТабличноеПоле.Значение = ТЗ; Кроме того, есть проблемы с сеансами. Раньше можно было просто объявить: Перем ПодклВК; И дальше использовать ее в разных функциях. Теперь такой номер не проходит. Другая функция не видит эту переменную, каким то образов это нужно хранить на серверной части. Конечно, все это решаемо, но как-то "криво". Все просто говорит о том, что этот обмен логичнее производить на стороне сервера, а сервер не работает как COM сервер. >> Предполагаю, что сервер 1С не обслуживает этот режим работы. ---Этот, это какой? Предполагаю, что 1С в серверной части не работает как COM сервер. ---У меня складывается впечатление, что вы хотите сразу предоставить прямой вызов вашей ВК... С точки зрения клиент-сервера вообще, и 1С в частности, это не совсем верно. Было бы лучше бы, если бы, вы давали 1С-нику интерфейс в виде общего модуля или обработки. А уже внутри модуля/обработки делали бы нужные преобразования. Тогда бы, вы могли возвращать значения из ВК в виде массива строк или типа того (1С вполне корректно работает с типами данных COM), а уже в 1С, в вашем модуле, преобразовывать в таблицу значений. Тогда бы и обратный вызов был бы не нужен. ИМХО. Я вообще в этом смысле минималист, сама библиотека меньше мегабайта размером, dot net не использует, "дешево и сердито", "народу нравится". Возможно придется сделать что-то похожее на Вашу схему, но это тоже в некотором роде "костыли", передавать набор строк, а потом все это собирать в таблицу значений, вместо того, чтобы просто отдать готовую структуру. Проблема собственно в том, что по сути спросить не у кого. Разработчики самой программы 1С такого уровня не доступны. Возможно кто-то из манагеров среднего звена в 1С когда-то решил, что COM - это не модно, а XML - это круто. Хотя перегонять информацию в текст, а потом восстанавливать нужные типы в пределах локальной сети , на мой взгляд излишне. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 11:54 |
|
Работа внешней компоненты с сервером 1С...
|
|||
---|---|---|---|
#18+
max950Кроме того, есть проблемы с сеансами. Раньше можно было просто объявить: Перем ПодклВК; И дальше использовать ее в разных функциях. Теперь такой номер не проходит. Вы пишите одно, и имеете в виду другое. В среде 1С, объявление переменных, которые будут видны в разных сеансах не невозможна сейчас, и не было такой возможности ранее. Другой сеанс, это физически другой процесс. Сеанс, это сеанс подключения к базе данных, т.е. сеанс работы пользователя. Или вы что-то своё вкладываете а это понятие? В рамках одного сеанса можно было, и можно сейчас, объявить переменные в модуле сеанса, которые будут жить и будут видны в рамках сеанса из разных мест... вообще-то, их 4-ре штуки. - Модуль сеанса; - Модуль обычного приложения; - Модуль управляемого приложения; - Модуль внешнего соединения. Ну и естественно, нужно помнить про контекст. Серверный контекст напрямую не доступен на стороне клиента и наоборот. Вообще то, архитектурой 1С предусмотрено, что обмен данными будет идти: - по средствам параметров/возвратов процедур/функций; - по средствам так называемых параметров сеансов (не могут быть объектами, ну собственно видно в палитре). Таблица на форме... а она связана с какой-либо таблицей объекта (обработки, например) ? или нет. Если да, то она доступна и на сервере (&НаСервере) там и редактируйте.... И таки да, ТаблицаЗначений не доступна в УФ на стороне клиента. Ну уж так решила 1С. max950>> Предполагаю, что сервер 1С не обслуживает этот режим работы. ---Этот, это какой? Предполагаю, что 1С в серверной части не работает как COM сервер. Да ладно! Вот с Excel работает, с FSO работает и кучей всего остального, а тут тут не работает. Отлавливайте ошибку и анализируйте.... Попытка ... ваши действия ... Исключение стр = ОписаниеОшибки(); КонецПопытки; ну и далее обрабатывайте стр, которая будут содержать текстовое описание ошибки. max950Я вообще в этом смысле минималист, сама библиотека меньше мегабайта размером ... при современных аппаратных возможностях, это вообще не аргумент. max950Проблема собственно в том, что по сути спросить не у кого. Разработчики самой программы 1С такого уровня не доступны. Возможно кто-то из манагеров среднего звена в 1С когда-то решил, что COM - это не модно, а XML - это круто. Хотя перегонять информацию в текст, а потом восстанавливать нужные типы в пределах локальной сети , на мой взгляд излишне. Сугубо Ваше лично мнение. Ничего общего с реальностью не имеет. Ни в каком виде. Повторю ещё раз, 1С прекрасно работает с COM. Как с in-proc, так и с out-proc. Приведите, код, которым вы загружаете и обращаетесь в ВК. Кстати, ВК... в Вашем случае, это COM или Native API ? Если COM, то вы регистрируете её как... через regsvr32... как тогда "разруливаете" вопрос разрядности? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:05 |
|
|
start [/forum/topic.php?fid=28&gotonew=1&tid=1519191]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 193ms |
0 / 0 |