powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Работа внешней компоненты с сервером 1С...
12 сообщений из 12, страница 1 из 1
Работа внешней компоненты с сервером 1С...
    #38842064
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Имеется внешняя компонента , написанная на С++, задача которой получение информации из внешней базы данных и возврат результата запроса в виде Таблицы значений в 1С.
Для формирования таблицы значений на текуший момент используется интерфейс IDispatch* pBackConnection, получаемый в качестве параметра в функции Init(). Далее я просто, используя функции 1С формирую таблицу значений, заполняю ее и возвращаю ее во второй параметр в CallAsFunc(...).
Проблемы начались с переходом на тонких клиентов 1С. На стороне сервера внешняя компонента толком не запускается. Можно запустить на стороне клиента, но это все выглядит как костыли и выпадает из общей логики "клиент-сервер" в 1С. Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п.
NativeAPI еще более урезан в этом плане.
Танцы с бубном привели к тому, что я смог запустить внешнюю компоненту под сервером 1С, НО работа происходит до того момента, пока не производится попытка вызвать Invoke у pBackConnection. 64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается.
Предполагаю, что сервер 1С не обслуживает этот режим работы.
Соответственно возникают вопросы, это временно или логика 1С сводится к отмене этой схемы работы? Если создать внутренние структуры 1С (таблицу значений) таким способом нельзя, есть ли в принципе описание, что из себя представляет таблица значений на системном уровне, чтобы попытаться создать ее на С++ , заполнить, а затем просто подсунуть 1С в качестве возвратного параметра? Хотелось бы хотя бы получить направление, в какую сторону копать.


Спасибо.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842233
wamaco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max950Добрый день,

Имеется внешняя компонента , написанная на С++, задача которой получение информации из внешней базы данных и возврат результата запроса в виде Таблицы значений в 1С.
Для формирования таблицы значений на текуший момент используется интерфейс IDispatch* pBackConnection, получаемый в качестве параметра в функции Init(). Далее я просто, используя функции 1С формирую таблицу значений, заполняю ее и возвращаю ее во второй параметр в CallAsFunc(...).
Проблемы начались с переходом на тонких клиентов 1С. На стороне сервера внешняя компонента толком не запускается. Можно запустить на стороне клиента, но это все выглядит как костыли и выпадает из общей логики "клиент-сервер" в 1С. Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п.
NativeAPI еще более урезан в этом плане.
Танцы с бубном привели к тому, что я смог запустить внешнюю компоненту под сервером 1С, НО работа происходит до того момента, пока не производится попытка вызвать Invoke у pBackConnection. 64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается.
Предполагаю, что сервер 1С не обслуживает этот режим работы.
Соответственно возникают вопросы, это временно или логика 1С сводится к отмене этой схемы работы? Если создать внутренние структуры 1С (таблицу значений) таким способом нельзя, есть ли в принципе описание, что из себя представляет таблица значений на системном уровне, чтобы попытаться создать ее на С++ , заполнить, а затем просто подсунуть 1С в качестве возвратного параметра? Хотелось бы хотя бы получить направление, в какую сторону копать.


Спасибо.

думаю, что это еще больше костыли. сделайте во внешней компоненты запись структуры на диск в xml, а уже потом цепляйте из 1с.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842301
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842311
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max950, а зачем ВК? Почему не хотите использовать обычное ADO и весь код в 1С писать?
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842536
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wamacoдумаю, что это еще больше костыли. сделайте во внешней компоненты запись структуры на диск в xml, а уже потом цепляйте из 1с.

Не согласен, в моей схеме по сути становится sql клиентом другой базы, и есть возможность одновременно работать сразу с двумя базами. например кассир нажимает одну кнопку и формирует платеж сразу в двух базах, и т.п.
Кроме того весь код по обмену по сути можно свести к одной строчке:
ТЗ = ВК.ВерутьНужнуюМнеХреньЗаПериод(...);
С полученной таблицей значений чистый 1С-ник может дальше делать, что хочет. Причем значения в ТЗ идут с нужными типами.
Очень часто речь идет про стандартную бухгалтерию, в которой конфигурация принципиально не меняется, все делается на внешних обработках.
Чтобы работать с XML внешняя компонента по сути не нужна (выгрузил в тестовый файл, загрузил из текстового файла), нужен web сервис и программирование 1С по обслуживанию этого сервиса, но это уже другая песня.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842541
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AHDP А на x86 windows seerver работает?

Нет, это не тот случай, вертел и 32 и 64 битными версиями, проблема в том, что сервер 1С не хочет работать как COM сервер,
т.е. ссылку на себя он типа отдает, но получить что-то вразумительно в ответ у меня не получается.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842547
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitriyZmax950, а зачем ВК? Почему не хотите использовать обычное ADO и весь код в 1С писать?

Потому что это в некотором роде коммерческий продукт, мы не можем в каждой базе 1С прописывать sql запросы. Все реализуется во внешней компоненте, 1С-ник работает с набором предопределенных функций.
просто проект подрос и некоторые программисты 1С хотят, чтобы работа шла между сервером 1С и нашей базой, а не между клиентом и базой.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842565
Хитроглазый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max950Потому что это в некотором роде коммерческий продукт, мы не можем в каждой базе 1С прописывать sql запросы. Все реализуется во внешней компоненте, 1С-ник работает с набором предопределенных функций.
просто проект подрос и некоторые программисты 1С хотят, чтобы работа шла между сервером 1С и нашей базой, а не между клиентом и базой.

что мешает сделать это во внешней обработке?
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38842597
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хитроглазыйmax950Потому что это в некотором роде коммерческий продукт, мы не можем в каждой базе 1С прописывать sql запросы. Все реализуется во внешней компоненте, 1С-ник работает с набором предопределенных функций.
просто проект подрос и некоторые программисты 1С хотят, чтобы работа шла между сервером 1С и нашей базой, а не между клиентом и базой.

что мешает сделать это во внешней обработке?

Может быть я не что-то понимаю, но сейчас я во ВК формирую таблицу значений, заполняю ее и отдаю 1С. Т.е.отдаю не простой тип.
1С производи вызов функции, в ответ в памяти у себя получает таблицу значений.
Как я могу это сделать через ADO? Или каким другим способом это можно сделать?
Проблема в том, что 1С вызывает ВК, и получает от ВК ответ, но ВК не может "дернуть" 1С, чтобы ВК в ней могла сформировать таблицу значений. Возможно я что-то не понимаю. Поясните пожалуйста.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38843360
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько, на стороне сервера приложений запущено рабочих процессов?
А вы уверены, что рабочий процесс не был перезапущен (менеджером)?
А это решение работает в базе, которая развернута в режиме файл-сервер?

Таблица значений, оно конечно да... удобно. Но в клиент-сервере с ней много проблем. XML аналогично - тот ещё кастыль, с учетом сугубо своего пространства имен 1С. Как частный случай, могу предложить рассмотреть возврат в виде структуры, которая содержит вложенные структуру (сам так делал).

К сожелению, это не временные трудности а путь развития 1С.

>>64-битная версия сервера 8.2 что-то пытается делать, пока не отваливается по таймауту, 32-битная (ВК естественно тоже 32 битная) просто сразу отваливается.

Или вы не правильно сформулировали или сами не понимаете суть происходящего.
Если, у вас имеется ВК в виде 32-х битной dll, то она в принципе не может быть загружена в адресное пространство процесса с не той же разрядностью.

>> Например клиент не понимает, что такое таблица значений, проблемы с "глобальными" переменными, сеансами и т.п.
А в чем собственно проблемы?

>> Предполагаю, что сервер 1С не обслуживает этот режим работы.
Этот, это какой?

У меня складывается впечатление, что вы хотите сразу предоставить прямой вызов вашей ВК... С точки зрения клиент-сервера вообще, и 1С в частности, это не совсем верно. Было бы лучше бы, если бы, вы давали 1С-нику интерфейс в виде общего модуля или обработки. А уже внутри модуля/обработки делали бы нужные преобразования. Тогда бы, вы могли возвращать значения из ВК в виде массива строк или типа того (1С вполне корректно работает с типами данных COM), а уже в 1С, в вашем модуле, преобразовывать в таблицу значений. Тогда бы и обратный вызов был бы не нужен. ИМХО.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38843655
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 - это круто.
Хотя перегонять информацию в текст, а потом восстанавливать нужные типы в пределах локальной сети , на мой взгляд излишне.
...
Рейтинг: 0 / 0
Работа внешней компоненты с сервером 1С...
    #38843895
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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... как тогда "разруливаете" вопрос разрядности?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Работа внешней компоненты с сервером 1С...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]