Имя: Пароль:
1C
1С v8
Выполнение функций в другой конфигурации
0 e2v
 
29.07.19
14:53
Совета надо 8)))
Есть две базы 1С.
В одной есть функции возвращающие данные нужные в другой базе.
Как лучше организовать доступ и выполнение?
Проще говоря, хочу из первой конфы выполнить функцию, находящуюся во второй конфе и  обработанные данные вернуть в первую конфу. 8)))
Функция будет выполняться множеством запросов, поэтому скорость имеет значение.
Пробовал по COM-соединению - тормозит.
Подключение как Внешняя База - штука хорошая, но прописывать все справочники и регистрысведений, нужные для запроса, из базы источника - труба.

Чето больше не знаю как еще можно 8))).
Признателен любой идее.
1 palsergeich
 
29.07.19
14:54
(0) через web или http сервисы будет самый правильный вариант ИМХО
2 MyNick
 
29.07.19
14:55
(0) КОМ? Это та технология из прошлого тысячелетия? Когда уже одинэсники начнут спрашивать, что означает эта аббревиатура..
3 e2v
 
29.07.19
15:53
(1) Пробовал, нормально.
Но хотелось бы не менять конфу в базе источнике. Она стандартная.
4 e2v
 
29.07.19
15:54
(2) Технология старая, но вот в такой ситуации ничего другого не придумывается.
8))
5 palsergeich
 
29.07.19
15:54
(3) юзай механизм расширений. Общие модули и веб / http сервисы прекрасно живут в расширениях
6 lodger
 
29.07.19
15:59
(3) сделай расширение.
7 e2v
 
29.07.19
16:06
(5) По расширениям согласен.
Но у меня вопрос другой.
Есть ли кроме COM объекта какой нибудь метод выполнить функцию в другой конфе 1С ?
Мало знаю про это.
Мож еще как-то кто-то делает ?
Может не средствами 1с?
8 Провинциальный 1сник
 
29.07.19
16:22
(7) "Есть ли кроме COM объекта какой нибудь метод выполнить функцию в другой конфе 1С ? "
К сожалению, 1с не реализовала нативный метод межпроцессного взаимодействия, не завязанный на ОС. А COM признали нерекомендуемым и устаревшим..
9 ВикторП
 
29.07.19
16:25
(8) Дайте мне ссылку на "А COM признали нерекомендуемым и устаревшим.." - хочу показать кой- кому
10 e2v
 
29.07.19
16:27
Ясно. 8)))
Как то так и думал. Не могло быть всё хорошо 8)))
11 palsergeich
 
29.07.19
17:05
(9) В стандартах прописано, что исполняемый код должен выполняться на любой ОС.
12 Сияющий в темноте
 
29.07.19
17:14
что мешает реализовать аналог Com в другой ос,тем более,что из всего com нужно только загрузить dll и дать ей управление.
с внешними компонентами научились нативно,вот осталось и подключение нативным сделать.
и,в отличие от DDE,Com не признан устаревшей технологией,тем более,что в windows vista и болен поздних часть системных вызовов построены на технологии Com.
Устаревшим считается технология ActiveX,но она только часть ComponentObjectModel.
13 Сияющий в темноте
 
29.07.19
17:17
И это,я в базовой версии исполнял код о  внешнего вызова через внешнюю обработку и обработчик событий от внешней компоненты.
причем конфа не менялась от слова совсем.
14 Rovan
 
гуру
29.07.19
17:19
(0) "Функция будет выполняться множеством запросов, поэтому скорость имеет значение. "
А если пакетный запрос !?

(7) "Есть ли кроме COM объекта какой нибудь метод выполнить функцию в другой конфе 1С ? "
Есть ! OLE, но он еще более тормознутый !
15 bolero
 
29.07.19
19:30
(9) что там показывать, достаточно попросить на линуксе запустить
16 Жан Пердежон
 
29.07.19
19:57
(0) пили свой веб-сервис
17 Сияющий в темноте
 
29.07.19
20:04
18 Franchiser
 
гуру
29.07.19
20:59
OData
19 H A D G E H O G s
 
29.07.19
21:04
Свой веб-сервис требует своего веб-сервера.
20 palsergeich
 
29.07.19
23:36
(19) Кэп. Не узнаю Вас в гриме)
21 e2v
 
30.07.19
08:20
(18) Вчера дискусия продолжилась. 8)) Я отвалился.
Не ответить не прилично.
ODATA требует настройки веб сервиса в конфигурации источника,
а хотелось бы вообще не прикасаться к источнику , никак, не расширением, ни веб сервисами.
Это связано с проблемами источника.
22 e2v
 
30.07.19
08:23
(14) Пакетный запрос не подходит,т.к. запросы от разных пользователей проходят через
конфигурацию2 в конфигурацию1. Т систематизировать их во времени не удастся. Это HTTP-запросы
из разных приложений.
Или я чего не так понял?
23 e2v
 
30.07.19
08:31
(13) Конечно можно написать запрос (или выполнить функцию) через СОМ.
Но дело в том, что запрос на подключение идет долго. В моем случае.
Может чего поднастроить надо?
Ситуация такая.
Приложение на JAVA посылает POST запрос. Конфа1 на 1С его принимает,
обрабатывает и для ответа привлекает данные из конфы2. Есть таймаут,
в который нужно уложиться с ответом.
К тому же запросов может быть до 20 потоком. И это от одного пользователя.
А их в плане до 20 будет.
Понимаю, это мои проблемы. 8)))
24 ДенисЧ
 
30.07.19
09:03
(23) Если тыкую связку строишь - то грех вторую кнфигурацию не подтюнить
25 e2v
 
30.07.19
09:24
(24) Таки вот и хочу.
Но как ?
Схожусь на вариант 0DATA, но придется веб сервер делать и базу публиковать.
А на ВнешнихИсточникахДанных все шикарно, но писанины много.Например, запрос
к региструсведений.срезпоследних как организовать? Етож целый геморой. 8))
26 ДенисЧ
 
30.07.19
09:26
(25) Тебе функции нужно звать? Или прямо к объектам лазить?
27 e2v
 
30.07.19
09:47
(26) Лучше функции вызывать. Вообще решение проблемы.
Но как это сделать без СОМ соединения не пойму. ODATA пока не в счет.
28 ДенисЧ
 
30.07.19
09:49
(27) хттп-сервис, тебе же же предложили.
29 e2v
 
30.07.19
09:54
(28) Х-м-м. Я всегда страдал плохой дикцией 8)))
Я же говорю, не желательно лезть в конфу источник, даже расширением.
А HTTP сервис подразумевает именно это, писать в конфу. Или я не прав?
Изменения возможны только в конфе1, которая работает с HTTP запросами извне.
30 palsergeich
 
30.07.19
10:06
(29) тебе шашки или ехать?
31 Ник080808
 
30.07.19
10:20
(29) через выполнить команду системы запускаешь вторую базу с выполнением обработки при старте. в обработке пихаешь вызовы конфы. конфу править не нужно) извращение, но если не ком и не править конфу других вариантов нету
32 olegves
 
30.07.19
10:26
(0) у ОМ, где расположена функция долна стоять галка "Внешнее соединение"
33 ДенисЧ
 
30.07.19
10:30
(29) А я тебе ответил в (24)...
34 ДенисЧ
 
30.07.19
10:30
(31) И ты думаешь, это будет быстрее КОМа?
35 Asmody
 
30.07.19
10:32
(0) Пусть твоя база-источник крутит твои запросы в рег.задании и выкладывает результаты в файл с некоторой периодичность. А вторая этот файл читает при необходимости.
36 Asmody
 
30.07.19
10:33
(34) Тут, понимаешь, весь вопрос в том, где ему нужна скорость - при отправке или при получении данных. И какова должна быть реальная актуальность этих данных.
37 Asmody
 
30.07.19
10:34
Так-то можно и какую-нибудь MQ прикрутить
38 Провинциальный 1сник
 
30.07.19
10:37
(29) Это в 1с называется "прогресс". Терпи и получай удовольствие.
39 ДенисЧ
 
30.07.19
10:40
(36) У него будет 20 подключений в минуту ))
Ком-объект можно на клиенте хранить... А 1с запускать каждый раз...
40 lodger
 
30.07.19
10:40
(29) "Я же говорю, не желательно лезть в конфу источник, даже расширением.
А HTTP сервис подразумевает именно это, писать в конфу. Или я не прав? " - нет. не прав.
почитай матчасть http://v8.1c.ru/o7/201410ext/index.htm
41 Asmody
 
30.07.19
10:42
(39) Ему нужна актуальность данных за 5 секунд? Торговый автомат пишет?
42 ДенисЧ
 
30.07.19
10:46
(41) "К тому же запросов может быть до 20 потоком. И это от одного пользователя.
А их в плане до 20 будет"
43 bolero
 
30.07.19
10:54
В случае, когда на конфе-источнике не надо выполнять функции, а только взять данные - я использую прямой доступ к базе и мозги себе не делаю. Веб-сервер для этого не нужен.
44 Ник080808
 
30.07.19
11:04
(43) "прямой доступ к базе " расшифруй
45 e2v
 
30.07.19
13:05
(40) Мат.часть прочел. 8)))
Понял, что плохо разъяснил. 8))
Расширение в любом случае запускается или прикручивается на конфе источнике.
Я физически этого сделать не могу. (не спрашивай почему).
Остается выход - зная конфу источника читать базу удаленно.
46 Жан Пердежон
 
30.07.19
13:15
колхоз - дело добровольное
47 e2v
 
30.07.19
13:15
Народ. Спасибо, что не посылаете. 8)))
Несколько мыслей уже натолкнули.
Проверяю последовательно.
Но в некоторых записях вижу недопонимание.
Если не надоело, еще раз объясню суть проблемы.
Есть веб-приложение на JAVA. Иметь с ним связь можно только
принимая от него запросы-POST и давая ответы на них.
Так как на один запрос надо дать один ответ (технология такая), получается
сколько запросов столько ответов. Тут проблем нет.
Но в ответ надо включить данные из базы 1С из другой конфигурации2 (и на другом сервере).
Множество запросов делать не удобно. Я использую функции, находящиеся в другой конфе2, которые
дают мне нужные данные. Делаю это через СОМ. Но так как запросов много то возникает таймаут из-за тормозов СОМ.
Вот и думаю как это обойти. Т.е. не изменяя конфу2 (базу2) выполнять на ней функции , только быстро.
Как-то так. Вроде понятно 8)))
48 e2v
 
30.07.19
13:16
(46) Не ну если есть что-то вменяемое посоветуй.
Может вне 1С.
49 e2v
 
30.07.19
13:17
(44) Прямой доступ к базе - когда из SQL-и напрямую читаю, минуя 1С предприятие.
50 Вафель
 
30.07.19
13:17
(47) самое простое - увеличить таймаут
51 e2v
 
30.07.19
13:19
(43) Вопрос. А как работать с регистрами. Там таблиц несколько. Есть пример?
52 Жан Пердежон
 
30.07.19
13:19
(48) если возможно  - тащить медленно данные к себе в базу периодически; отдавай их быстро уже из своей базы по запросу
53 e2v
 
30.07.19
13:19
(50) Гы 8)))
54 e2v
 
30.07.19
13:21
(52) Ну да , думал и так.
Пока не пробовал. Думал еще зеркало SQL-ки делать на базу.
Не знаю. Чето как то не красиво 8)))
55 e2v
 
30.07.19
13:24
(41) Не. Организация сделала сайт с оформлением заявок и продаж товаров для работы с клиентами.
Товары в одной базе, цены в другой, клиенты на листочке 8)))
56 Вафель
 
30.07.19
13:27
а почему бы приложению не брать данные из разных баз?
57 e2v
 
30.07.19
13:30
(56) Потому что писали его люди, которые всегда правы 8)))
58 e2v
 
30.07.19
13:31
А вот какие мысли про кэширование СОМ соединения через веб сервер?
Если кто пробовал- хелп мне примерчик.
59 lodger
 
30.07.19
13:37
(47) опубликую базу2 как odata. http://catalog.mista.ru/public/711302/
60 bolero
 
30.07.19
14:49
(49) Например:

CREATE OR REPLACE FUNCTION names.goods_movements()
  RETURNS TABLE (
    period   TIMESTAMP,
    org_bref BYTEA,
    acc      MVARCHAR(10),
    n_bref   BYTEA,
    qty      NUMERIC,
    reg_tref BYTEA,
    reg_rref BYTEA
  )
AS
$$
SELECT *
FROM
  (
    SELECT
      dv."Период"                 period,
      dv."Организация_Ссылка"     org_bref,
      dt."Код"                    acc,
      dvs."Значение_Ссылка"       n_bref,
      dv."КоличествоДт"           qty,
      dvs."Регистратор_СсылкаТип" reg_tref,
      dvs."Регистратор_Ссылка"    reg_bref
    FROM
      names."РегистрБухгалтерии_Хозрасчетный_Субконто" dvs
      JOIN names.trefs tr
           ON dvs."Значение_СсылкаТип" = tr.id_tref AND
              tr.conf_table = 'Справочник_Номенклатура'
      JOIN names."Справочник_Номенклатура" n
           ON dvs."Значение_Ссылка" = n."Ссылка"
      JOIN names."РегистрБухгалтерии_Хозрасчетный" dv
           ON dvs."Регистратор_Ссылка" = dv."Регистратор_Ссылка" AND
              dvs."Регистратор_СсылкаТип" = dv."Регистратор_СсылкаТип" AND
              dvs."НомерСтроки" = dv."НомерСтроки" AND
              dv."Активность" = TRUE
      JOIN names."ПланСчетов_Хозрасчетный" dt
           ON dv."СчетДт_Ссылка" = dt."Ссылка"
             AND dt."Количественный" = TRUE
             AND dt."Вид" = 0 -- Активный
             AND dvs."ВидДвижения" = 0 -- Дебет

    UNION ALL

    SELECT
      dv."Период"                 period,
      dv."Организация_Ссылка"     org_bref,
      kt."Код"                    acc,
      dvs."Значение_Ссылка"       n_bref,
      dv."КоличествоКт" * -1      qty,
      dvs."Регистратор_СсылкаТип" reg_tref,
      dvs."Регистратор_Ссылка"    reg_bref
    FROM
      names."РегистрБухгалтерии_Хозрасчетный_Субконто" dvs
      JOIN names.trefs tr
           ON dvs."Значение_СсылкаТип" = tr.id_tref AND
              tr.conf_table = 'Справочник_Номенклатура'
      JOIN names."Справочник_Номенклатура" n
           ON dvs."Значение_Ссылка" = n."Ссылка"
      JOIN names."РегистрБухгалтерии_Хозрасчетный" dv
           ON dvs."Регистратор_Ссылка" = dv."Регистратор_Ссылка" AND
              dvs."Регистратор_СсылкаТип" = dv."Регистратор_СсылкаТип" AND
              dvs."НомерСтроки" = dv."НомерСтроки" AND
              dv."Активность" = TRUE
      JOIN names."ПланСчетов_Хозрасчетный" kt
           ON dv."СчетКт_Ссылка" = kt."Ссылка"
             AND kt."Количественный" = TRUE
             AND kt."Вид" = 0 -- Активный
             AND dvs."ВидДвижения" = 1 -- Кредит
  ) t
ORDER BY 1, 2, 3, 4, 5
61 e2v
 
30.07.19
15:37
(60) Это не я спрашивал про прямой доступ к базе. 8)))
Согласен, тоже выход, но с объектом ВнешниеИсточникиДанных даже проще.
Иначе SQL-ку надо нормально знать.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан