COM соединение с базой

Автор SnakePlisskin, 29 августа 2025, 16:43

« назад - далее »

SnakePlisskin

Цитата: Харлампий Дымба от 01 сентября 2025, 11:15Стоит упомянуть, что это реализованный функционал в типовой бухгалтерии 7.70.671 (начиная с 7.70.564 - 12 лет в обед) - обработка ПомощникПереходаНа1С8 умеет делать синхронизацию справочников и документов. Вот это вот все: "Справочник.ПараметрыСинхронногоУчета", "Справочник.МенеджерВыгрузок", "Справочник.МодифицированныеОбъекты", глУчестьЭлементПриИзменении, глУчестьДокументПриИзменении, ACC_ACC8.ert etc. При желании можно и с этими поразбираться и стащить себе схему работы. Я бы, если честно, не стал.

+Вопрос: в исходном коде Строка.Родитель и Строка.РодительКод разве заполнены после выполнения запроса?
 

А вот кстати, да я сейчас посмотрел...родитель и родитель код - для элементов заполнены вообще не правильно, а для самих групп - просто пусто все.

SnakePlisskin

Пошел немного по другому пути, сделал обработку того что мне нужно на стороне 7.7, в 8 сделал вызов функции из 7.7, функция возвращает нужную мне тз , вот только уперся в то что, 8-ка определяет ее просто как COM объект, как побороть ?

   Таблица = Новый ТаблицаЗначений;
   Таблица = V77.глПолучитьРезультатЗапросаДля83();


SnakePlisskin

Попробовал так :

    СтрокаРезультат = V77.ValueToStringInternal(V77.глПолучитьРезультатЗапросаДля83());
    Таблица = ЗначениеИзСтрокиВнутр(СтрокаРезультат);

Ошибка формата потока.

Злоп

Ну так структура внутренняя у ТЗ в клюшках и снеговике - разная, чего ж ты хотел...
.
Пусть тебе клюшечная функция возвращает не ТЗ, а, например, XML или джсон и разбирай их в снеговике штатными средствами.
.
Опять же ничто не мешает в снеговике работать с объектами клюшек
Пишешь в снеговике типа
V77.тз.Выбратьстроки() - и это выполняется в контексте клюшек

SnakePlisskin

Цитата: Злоп от 02 сентября 2025, 16:20Ну так структура внутренняя у ТЗ в клюшках и снеговике - разная, чего ж ты хотел...
.
Пусть тебе клюшечная функция возвращает не ТЗ, а, например, XML или джсон и разбирай их в снеговике штатными средствами.
.
Опять же ничто не мешает в снеговике работать с объектами клюшек
Пишешь в снеговике типа
V77.тз.Выбратьстроки() - и это выполняется в контексте клюшек

Не совсем понял, а как работать вот с этим "V77.тз.Выбратьстроки()" - если на стороне снеговика клюшечная функция возвращает ТЗ а снеговик ее воспринимает как COM объект ?

Все эти мытарства, получились из за того что ссылочные реквизиты в номенклатуре, видятся в снеговике как COMобъекты, банально не понятно как определить ВидНоменклатуры - Товар или Услуги, реквизит которой имеет ссылочный тип...как до него добраться в снеговике ?

Djelf

Ну а как ты в 8ке передашь тз на форму, без массива массивов?
Вроде везде, тз, тз, и тз... Но они все разные тз, просто называются одинаково.
Смирись. Либо сереиализация, через что угодно, либо через файл.

SnakePlisskin

Цитата: Djelf от 02 сентября 2025, 16:52Ну а как ты в 8ке передашь тз на форму, без массива массивов?
Вроде везде, тз, тз, и тз... Но они все разные тз, просто называются одинаково.
Смирись. Либо сереиализация, через что угодно, либо через файл.

А мне не нужна тз на форме - я хотел таблицу значений сформировать в глобальнике - в 7.7, заодно убрав все не примитивные типы, а в снеговике просто получить эту таблицу значений и сделать уже с ней все что нужно

Злоп


Не совсем понял, а как работать вот с этим "V77.тз.Выбратьстроки()" - если на стороне снеговика клюшечная функция возвращает ТЗ?
-
1. Могу тупить/путать
2. Вариант ТИПА v77.тз. Выбратьстроки()
Выполняется не в контексте снеговика, а в контексте клюшек.
Тз при этом д. Б. Доступна в контексте клюшек, т.е. быть глобальной переменной экспортной. Для этой цели в типовых достаточно глобальных переменных таких, типа глРасшифровка, глУсловие и прочих

SnakePlisskin

Цитата: Злоп от 02 сентября 2025, 18:52Не совсем понял, а как работать вот с этим "V77.тз.Выбратьстроки()" - если на стороне снеговика клюшечная функция возвращает ТЗ?
-
1. Могу тупить/путать
2. Вариант ТИПА v77.тз. Выбратьстроки()
Выполняется не в контексте снеговика, а в контексте клюшек.
Тз при этом д. Б. Доступна в контексте клюшек, т.е. быть глобальной переменной экспортной. Для этой цели в типовых достаточно глобальных переменных таких, типа глРасшифровка, глУсловие и прочих

Короче вот так работает.

   тзИзКлюшек = V77.глПолучитьРезультатЗапросаДля83();
   тзИзКлюшек.ВыбратьСтроки();
   Пока тзИзКлюшек.ПолучитьСтроку() = 1 Цикл
      Строка = Таблица.Добавить();
   КонецЦикла;

V77 - это COM соединение.
глПолучитьРезультатЗапросаДля83() - функция в глобальнике в клюшках которая формирует таблицу.

Злоп

типа так.
если углубится, то сможешь воперировать агрегатными объектами 77 прямо из снеговика.
у меня была мега сверочная обработка по Оле (тот же ком?) между двумя базами 77. выборки, сверки ииже бубмли хуяси сесренький козлик. Правда это работало только потому что я не контролировал работу обработки а бил ломом по лицу бухам (условно). Ну не могут они мыслить синтетически/аналитически (по крайне мере рядовые бухи коих тьма), пока не пнешь с пенделя - так и будут сопли жевать или тупить глядя в экран - судя по всему наличие компа окончательно разорвало понимание связей и взаимодействий. Пора возвращаться к бумажным журналам-ордерам и ведомостям. Полная деградация. НУ или я просто злоп. У них 4 - это 2+2. а то что это вообще-то 1+3, 1+1+1+1, 2+1+1 - это где-то в другой вселенной.. некромонгеров...

Злоп

Встречал весьма адекватных бухов, с которыми работать - как журнал "Лиза" - одно удовольствие (мужской вариант журнала - "Лизун"), но в большинстве - просто нажиматели кнопок, карго-культ... я один такой?

SnakePlisskin

Написал на стороне клюшек, функцию через прямой запрос со всеми данными, которые нужны, попутно переведя все что нужно в примитивные типы, на стороне 8-ке только построчно получаю таблицу и уже загружаю в тз снеговика, далее дисконект от базы 7.7, осталось разобраться с зоопарком единиц измерения...

Ветер в поле

Я использую два варианта для совместной работы 1С77 и 1С83. Если нет какой-то суперсложной логики со стороны 77, то 83 прямым запросом лезет в SQL-базу 77. Если на 77 нужно обработать данные по сложным алгоритмам, то используется web-сервер. Есть компонента AddIn.HTTPSrv7 на Инфостарте, которая позволяет 77 выступать web-сервером. Очень прилично и быстро работает. Я обмениваюсь данными в JSON, но не критично. Веб-сервер часто месяцами работает. Нагрузка средняя - в районе 1600 запросов в сутки. Главный плюс использования веб-запросов - ураганная скорость, т.к. можно использовать всякие кэши. Типичный запрос выполняется 10-40 мс + накладные расходы на формирование и передачу запроса, которые очень небольшие. Поэтому синхронизация может выполняться почти непрерывно. У меня такая логика реализована - при создании/изменения в 83, например, пациента, в очередь отправляются данные, что этот элемент надо выгрузить в 77. Раз в 30 секунд происходит выгрузка всех накопившихся данных. Если выгрузить не удалось (веб-сервер подвис, ошибка приключилась), то данные будут накапливаться. Со стороны 77 можно было реализовать так же, но исторически сложилось так, что 83 все изменившиеся данные забирает периодически напрямую из SQL 77. Там в элементах есть реквизит со временем последнего изменения. 83 помнит последнее загруженное изменение и выбирает элементы, которые имеют реквизит с бОльшим временем. Для установки такого реквизита можно использовать триггеры, тогда не приходится вручную следить за его обновлением.

SnakePlisskin

Цитата: Ветер в поле от 04 сентября 2025, 11:54Я использую два варианта для совместной работы 1С77 и 1С83. Если нет какой-то суперсложной логики со стороны 77, то 83 прямым запросом лезет в SQL-базу 77. Если на 77 нужно обработать данные по сложным алгоритмам, то используется web-сервер. Есть компонента AddIn.HTTPSrv7 на Инфостарте, которая позволяет 77 выступать web-сервером. Очень прилично и быстро работает. Я обмениваюсь данными в JSON, но не критично. Веб-сервер часто месяцами работает. Нагрузка средняя - в районе 1600 запросов в сутки. Главный плюс использования веб-запросов - ураганная скорость, т.к. можно использовать всякие кэши. Типичный запрос выполняется 10-40 мс + накладные расходы на формирование и передачу запроса, которые очень небольшие. Поэтому синхронизация может выполняться почти непрерывно. У меня такая логика реализована - при создании/изменения в 83, например, пациента, в очередь отправляются данные, что этот элемент надо выгрузить в 77. Раз в 30 секунд происходит выгрузка всех накопившихся данных. Если выгрузить не удалось (веб-сервер подвис, ошибка приключилась), то данные будут накапливаться. Со стороны 77 можно было реализовать так же, но исторически сложилось так, что 83 все изменившиеся данные забирает периодически напрямую из SQL 77. Там в элементах есть реквизит со временем последнего изменения. 83 помнит последнее загруженное изменение и выбирает элементы, которые имеют реквизит с бОльшим временем. Для установки такого реквизита можно использовать триггеры, тогда не приходится вручную следить за его обновлением.

А есть пример работы с данными SQL базы 7.7 напрямую из 8 ? Ибо уже сутки бьюсь с COM объектом в клиент серверном варианте...пока толку 0.

Ветер в поле

Цитата: SnakePlisskin от 04 сентября 2025, 14:36А есть пример работы с данными SQL базы 7.7 напрямую из 8 ? Ибо уже сутки бьюсь с COM объектом в клиент серверном варианте...пока толку 0.

К сожалению, я не имею доступа к кодам 83. Я отвечаю только за 77.
Знаю, что таблицы 77 в конфигурации 83 подключены через Внешние источники. Тогда в запросах можно использовать русские наименования таблиц и их реквизитов, а не всякие SC1017.SP1020