Имя: Пароль:
1C
1С v8
Минусы прямых запросов к 1С8
0 zavyzka
 
22.10.18
16:20
У клиентов периодически возникает потребность забирать данные из 1С в какую-то другую внешнюю систему (OLAP и т. д.). Рзаработчики внешних систем всегда предлагают забирать на прямую из ms sql. Я обычно говорю, что это плохое решение и лучше подключаться к 1С, а не к ms sql. Но исчерпывающих доводов, почему плохо забирать из sql предоставить не могу. Просьба поделиться мыслями на эту тему.
96 vitkhv
 
23.10.18
09:19
(94) SSIS да хорошая вещь.
97 vitkhv
 
23.10.18
09:20
(95) Так или иначе, если это делает бухгалтер - это немыслимо.
98 Cyberhawk
 
23.10.18
09:21
(97) Если в организации уровень ИТ-потребностей таков, что там где-то используются вьюшки, тогда немыслимо )
99 END
 
23.10.18
09:22
(96) И не говори. Правда пришлось сломать ментальное сопротивление олапщиков которые то же сначала хотели "SQL запросы прямые".
100 dmpl
 
23.10.18
09:22
(87) И? Это разве не проблема при изменении структуры хранения? Оно делается автоматом, без затрат времени ИТ специалиста?
101 vitkhv
 
23.10.18
09:25
(100) Да, автоматом по ночам.
102 vitkhv
 
23.10.18
09:29
(100) Из моей обработки, по созданию VIEW.

        
    ТекстПредставления="
        |DROP VIEW  IF EXISTS "+ИмяПредставления+"
        |go
        |
        |CREATE VIEW "+ИмяПредставления+"
        | AS
        |SELECT ";
Для Каждого КолонкиБД ИЗ  СтрокаБД.Поля Цикл
..............
КонецЦикла
103 Aleksey
 
23.10.18
09:32
(93) Ну хорошо бухгалтер принес обработку - "расширение".
Я знаю единственный способ добавить расширение - это через предприятие. Через конфигуратор у меня не получается добавить расширение. Научите.
104 Aleksey
 
23.10.18
09:33
(95) обработка в виде расширения
105 vitkhv
 
23.10.18
09:33
(100) Единственное для перечеслений я создаю отдельную таблицу и функцию dbo.ЗНАЧЕНИЕ. И в тексте запроса можно писать так:

WHERE Номенклатура.СтавкаНДС = dbo.ЗНАЧЕНИЕ('Перечисление.СтавкиНДС.НДС18')
106 dmpl
 
23.10.18
09:41
(102) И эту обработку написать быстрее, чем сервис?
107 vitkhv
 
23.10.18
09:42
(106) Почему нет?
108 Cyberhawk
 
23.10.18
09:43
(103) "Через конфигуратор у меня не получается добавить расширение. Научите" // Там неочевидное приходится совершать - добавить новое расширение, а потом загрузить его конфигурацию из файла
109 vitkhv
 
23.10.18
09:43
(106) По крайней мере я напишу ее точно быстрее чем сервис.
110 dmpl
 
23.10.18
09:44
(109) Сейчас-то да, а в первый раз?
111 vitkhv
 
23.10.18
09:44
(104) Я все расширения через конфигуратор добавляю, в чем проблема?
112 vitkhv
 
23.10.18
09:45
(110) В первый раз я свой парсер запросов написал. ))))
113 Cyberhawk
 
23.10.18
09:46
(111) Не создать, а подключить уже созданный файл *.cfe
114 vitkhv
 
23.10.18
09:46
(110) ТК в 2000 сервере нельзя было инсертить виев я про них забыл.
115 vitkhv
 
23.10.18
09:48
(113) через конфигуратор я расширения CFE подключаю. В чем проблема? Те же инструметы разработчика.
116 vitkhv
 
23.10.18
09:53
(113) Я честно говоря даже незнаю как их через предприятие подключать.
117 ADirks
 
23.10.18
09:54
(106) Думаю что быстрее. Более того, написать такую обработку надо всего один раз, дальше оно само. И руками её запускать не нужно. Делается механизм, отслеживающий изменения конфигурации, и запускающий генерацию всего что нужно. Т.е. один раз сделали, и забыли навсегда.
118 gantonio
 
23.10.18
10:02
вот где 1с , а гда олап ? Знаете, что в обработке данных для всяких статистических задач, как бы считается , что 60-80 процентов времени уходит на подготовку данных. Т.е. модель ищется серди мусора, данные чистятся ,находятся нужные.
А вы собираетесь реквизитик добавить , да и вообще сделать какую то проекцию в модель о которой вы ничего не понимаете. да с вами просто никто не хочет общаться на тему высоких материй.
119 Сияющий в темноте
 
23.10.18
10:30
Кстати,когда в какой то таблице в имя поля добавляется удалить,а новые поля не создаются,то таблица в Sql никак не меняется,и никто не узнает,что данных там уже нет.
Если анализ данных требует с ними выполнять множество преобразований,то все равно это будет делаться в отдельной базе,так что со стороны 1с можно написать план обмена,чтобы новую базу заполнять данными,причем тогда,когда это можно,так как изменение данных в процессе их анализа ни к чему хорошему не приводит.
120 Aleksey
 
23.10.18
10:39
(115) Можно создать новый, но не добавить существующий. Вот в этом проблема

А из режима предприятия есть возможность добавить существующий без танцев с бубнами
121 dk
 
23.10.18
11:09
чото вы тут все загоняетесь
vitkhv прав - создание вьюх решает и безопасность и скорость и веб сервисов не надо тьму писать
у нас в 77 тоже вьюхи генерятся - конфу обновили - запустили перегенерацию вьюх и все
122 Cyberhawk
 
23.10.18
11:12
(121) За вьюхами следить надо на уровне изменений в источнике данных (талицах СУБД), а веб-сервис на 1С - только за изменениями на уровне метаданных конфигурации (включая расширения).
У первого частотность возникновения _всегда_ выше, чем у второго, поэтому очевидно, что и следить за реализацией по второму пути придется меньше, чем по первому.
123 dk
 
23.10.18
11:14
что там следить то - поставь на автомат и забудь
124 Cyberhawk
 
23.10.18
11:21
(123) Как предлагаешь этому автомату определять момент, когда уже пора обновить вьюшку?
125 ADirks
 
23.10.18
11:25
(123) не знаю как в восьмёрке это сделать, но уверен, что можно, если подумать.
в семёрке просто: при старте смотрим дату 1cv7.md, сравниваем с константой, если различаются - обновляем.
126 ADirks
 
23.10.18
11:29
Кроме того, вьюхи можно делать чуть сложнее, чем синонимичные. Можно написать некий запрос, собирающий данные из нескольких табличек, с какими-то преобразованиями, и всё что угодно. Пишешь такую вьюшку, и отдаешь её в стороннюю систему - и им проще, и тебе спокойнее.
127 Cyberhawk
 
23.10.18
11:30
(126) "и тебе спокойнее" // Ошибаешься. Это явно не спокойнее, чем веб-/хттп-сервис 1С.
128 ADirks
 
23.10.18
11:39
(127) и в чём принципиальная разница?
в обоих случаях отдаётся только та информация, которая нужна
129 Cyberhawk
 
23.10.18
11:40
(128) См. (122)
130 ADirks
 
23.10.18
11:44
(129) см (126)

подчёркиваю: у нас вьюхи руками никто не обновляет

не надо за этим следить
131 Cyberhawk
 
23.10.18
11:45
(130) См. (124)
132 vitkhv
 
23.10.18
13:20
(123) Хорошая идея
(131) по мотивам (123) при генерации вьюх сохраняем в отдельную таблицу:
SELECT  
      MAX([Modified])
      
  FROM [dbo].[Config]

потом роботом сравниваем опять с MAX(Modified) если больше сохраненной перегенирируем вьюхи.

Ну или тригер на конфиг повешать, но лучше не надо. не люблю тригеры.
133 dmpl
 
23.10.18
13:23
А теперь представим, что 1С переименовала то поле, которое использует OLAP. Например, разбила его на 2. Или наоборот пару полей на один ключ аналитики повесило. И? Усё пропало? Во вьюхе больше нет такого поля. Переписывать ответную часть?
134 APXi
 
23.10.18
13:25
(0) Пускай делают, только права на чтение дать и предупредить что структура может меняться при обновлении.
135 Cool_Profi
 
23.10.18
13:27
(133) У тебя же есть уже генератор вьюх.
136 vitkhv
 
23.10.18
13:32
(120) Не знал. Бухгалтеру такую возможность точно надо забанить, не его это дело.
137 vitkhv
 
23.10.18
13:35
(133) проблема может возникнуть если 1С вдруг решит например из просто ссылочного поля сделать составное, тогда да, тогда придется переделывать. Но опять же, это не так уж сильно напрягает.
138 ADirks
 
23.10.18
13:35
(133) или ответную часть, или вьюху - что-то переписать в любом случае придётся. Лучше вьюху.

(135) не, генератор генерит только вьюхи-синонимы. Для отдачи вовне лучше запилить специальную вьюху, и при изменениях в метаданных модифицировать именно её. Руками. В принципе, это ничем не отличается от веб-сервиса, чуть другие технические моменты.
139 Cyberhawk
 
23.10.18
13:42
(132)
1. На какое событие вешать этого робота-анализатора?
2. Точно без изменения [dbo].[Config] не бывает изменения остальных таблиц (с данными)?
140 vitkhv
 
23.10.18
13:43
(126) А еще такую вьюху, к нескольким таблицам, можно материлизовать, тогда если выборки с отборами, вообще все летать будет.
Да и вообще можно вьюху материализовывать с нужными тебе доп индексами, 1С в запросах к своим таблицам на которую смотрит материализованная вьюха, будет использовать индексы этой вьюхи.
141 Cyberhawk
 
23.10.18
13:45
(138) "В принципе, это ничем не отличается от веб-сервиса" // Конечно же отличается: в случае изменения метаданных конфигурации ты _так и так_ эти изменения применяешь скорее всего в конфигураторе. И сразу же легко средствами конфигуратора находишь, что изменения затрагивают веб-/хттп-сервис.
А вот чтобы изменения в таблицах СУБД выявить, конфигуратором уже не обойдешься.
142 vitkhv
 
23.10.18
13:46
(139) Точно. В этой таблице храниться вся конфа.
Робот из 1С, срабатывающий каждые 5 минут. Так пойдет?
143 vitkhv
 
23.10.18
13:49
(141) Ну это скорее уже мелкие придирки.
Можно и до веб сервисов докопаться, если захотеть.
144 Cyberhawk
 
23.10.18
13:54
(142) Вхолостую 99% времени дергать СУБД - может и ничего оно там не нагружает, но ведь костыль какой-то. Да и задержка может достигать эти 5 минут - это может быть критично для потребителя сервиса.
145 Cyberhawk
 
23.10.18
13:55
(143) Это не придирки, это раскрытие описанного в (122) касательно частотности. В пофигуратор так и так лезть (в 100% случаев).
146 dmpl
 
23.10.18
13:55
(138) Такую вьюху придется модифицировать и при изменении внутренней структуры хранения, а не только при изменении метаданных. Более того, оперируя понятиями только из 1С это делать удобнее.
147 vitkhv
 
23.10.18
13:56
(144) Вы не видели какие запросы в холостую гоняет MDS от Майкрсофт когда опрашивает таблицы на изменения. Нет в этом ничего страшного ни с точки зрения БД, ни сточки зрения клиента в виде 1С.
148 Cyberhawk
 
23.10.18
14:01
(147) Я ж не спорю - наоборот, вполне допускаю, что с точки зрения нагрузки такой "холостой долбеж" никаких последствий вообще не имеет.
Но архитектурно все равно не нравится. Это как из 1С долбить регистр сведений на предмет появления новой записи в логе телефонии, чтоб открыть пользователю карточку звонящего при входящем звонке - тоже "холостой долбеж" 99% времени.
Но вон телефония уже научилась сама стучать по событиям и это конечно кошерно.
Вот и с вьюхами бы так - пусть оно само там определяет, когда надо пересоздать, и пересоздает. Это ты про триггеры и имел в виду наверное?
149 vitkhv
 
23.10.18
14:15
(148) Ну да можно тригер повесить на изменение, но что этот тригер будет запускать? Нам же по идее надо вызвать 1С и выполнить в ней алгоритм перегенерации вьюх.
150 Cyberhawk
 
23.10.18
14:16
(149) Вот в примере выше с телефонией АТС умеет дергать ХТТП-сервис инфобазы 1С. В скуле бы так )
151 vitkhv
 
23.10.18
14:21
(148) Из тригера стучаться по Com к 1С, это жесть полная.  Хотя как я знаю есть один любитель делать обмены на тригерах, он даже статью на инфостарте вроде писал по этому поводу.
152 Cyberhawk
 
23.10.18
14:22
Не, СОМ конечно же не надо
153 igork1966
 
23.10.18
14:23
(34) "А так же за любые последствия (явные и неявные), связанные с нарушением лицензионного соглашения 1С"

Ты думаешь что таким способом ты снимешь ответственность?
Сильно сомневаюсь. Только подтвердишь что при реализации нарушается лицензионное соглашение. От потенциального суда это не спасет. Или расчет что заказчик откажется?
154 vitkhv
 
23.10.18
14:24
(150) А почему нет? Вообще в принципе запросы на опрос таблиц на изменение с определенной периодичностью плохим тоном не считается. Так в принципе многие делают, чтобы триггеры не юзать.
155 Shur1cIT
 
23.10.18
14:27
(0) как всегда всё не читал,
у нас HTTP сервисы нам шлют запрос JSON в нем в обратку шлём,аналогично и мы забираем чрез api сервера.При этом не надо заморачиваться о внутреннем устройстве стороннего ПО и его БД.
это наиболее правильный и современный способ взаимодействовать между двумя по, ну еще более правильно сервис очереди организовать, но для нас это излишне.
156 ADirks
 
23.10.18
14:30
(154) 1C тоже так делает :))
и дело тут даже не в триггерах
157 vitkhv
 
23.10.18
14:32
(153) Лицензионное соглашение от 1С противоретичит законодательству РФ в области правобладания. Единственное, что нельзя по нашему законодательству делать, это увеличивать количество пользователей, а так после покупки ПО ты можешь модернизировать его как хочешь. И по этому не было ни одного прецедента, по преследованию со стороны 1С таких случаев. На Хабре это лицензионное соглашение разбиралось по косточкам.
Суть соглашения, если ты полез напрямую, то 1С от тебя отмораживается, вот и вся его суть.
158 vitkhv
 
23.10.18
14:37
(156) Да хотел написать, что и 1С так делает.))))
Вообще наоборот использование триггеров является плохим тоном в разработке БД.
159 Cool_Profi
 
23.10.18
14:41
(158) @использование триггеров является плохим тоном в разработке БД@

Откуда дровишки?
160 vitkhv
 
23.10.18
14:47
(159)Ну как бы часто такое проскальзывает в обсуждениях на SQL.ru.
ну как пример http://www.sql.ru/forum/1126731/ne-ponyatnoe-povedenie-triggerov?hl=%f2%f0%e8%e3%e3%e5%f0%fb%20%ef%eb%ee%f5%ee%e9%20%f2%ee%ed
161 vitkhv
 
23.10.18
14:48
(159) Ну и как бы уже 15 лет с MSSQL это почти как аксиома.
162 ADirks
 
23.10.18
14:49
(158) Ну, злоупотреблять конечно не стоит. Если в прикладной системе есть нужные события - то пользуемся ими. Но иной раз триггеры - единственно возможный выход. Делал как-то двусторонний обмен с польской программой для расчета окон, так пара триггеров и табличек-очередей решили вопрос. И куча вьюх, да. Поляки потом перенимать опыт приезжали :)
Или например формирование всяких вспомогательных табличек, протоколы там всякие - самый надёжный метод.
163 vitkhv
 
23.10.18
14:51
(162) Скажем так, если можно обойтись без триггера то его задействовать не стоит.
А так да, в момент моей молодости много чего под 77 на триггерах делал. Потом отучился.
164 Сияющий в темноте
 
23.10.18
21:28
С триггерами есть некоторая проблема в оптимизации запросов и пакетном добавлении,когда sql сервер не знает,что будет выполняться в триггере и быстрое добавление в таблицу может обернуться тормозами и блокировками.
Если триггер никуда,кроме самой записи не пишет,то таких проблем нет,но и отслеживание таким триггером не сделаешь.
165 Nyarlathotep
 
23.10.18
22:09
(0) Я не пойму - а чем тебе не нравиться, что они что-то там забирают из базы SQL напрямую? Это нормально... Они же туда ничего не пишут, правильно? Их внешняя система - это их зона ответственности, пусть забирают то, что нужно и сами там разбираются. Тебе то какая разница? Ты просто предупреди их, что с обновлением релиза может измениться структура и наборы таблиц и все, дальше пусть сами.
166 Nyarlathotep
 
23.10.18
22:13
(0) А если не хочешь их в базу пускать - тогда да, сделай или веб-сервис, или буферную базу/таблицу в sql, куда сливай нужные им данные, а они пусть забирают.
167 Nyarlathotep
 
23.10.18
22:20
По поводу же минусов прямых запросов - их нет. Прямой запрос сработает значительно быстрее написанного на языке запросов 1с. Единственное что - тебе придется самому собирать нужные данные из всей этой мошны 1с-ных таблиц. Но это трудно только в первый раз)))
168 vs84
 
24.10.18
00:17
(167) [Прямой запрос сработает значительно быстрее написанного на языке запросов 1с.]

Можно подумать, запросы из 1С шлют не прямые запросы на скл - через прослойку сервера, но точно не о каком "значительно" речи не идет.
169 vs84
 
24.10.18
00:25
(0) если есть прямая доступность от получателя до скл базы, то вполне можно напрямую, почему нет. вьюхи (приведенные к человеческим именам метаданных) хороший способ. Аргументы про то, что структура меняется и "шеф все пропало" несерьезные - даже если не автоматизировать переформирование вьюх по актуальной структуре хранения, то частота с которой возникает изменение имен хранения делает ту проблему ничтожной.
170 Tonik992
 
24.10.18
00:28
(168) Прямой запрос в SSMS будет быстрее, чем где бы то ни было. -)
Впринципе можно отказаться от пользовательского интерфейса, все делать на sql скриптах.
171 Злопчинский
 
24.10.18
00:51
(170) можно вообще от 1С отказаться, зачем лишние проклдадки в достижении результата
172 dmpl
 
24.10.18
07:05
(168) Ну... это можете втирать тем, кто не видел ЧТО сервер шлет в запросах.
173 Cyberhawk
 
24.10.18
07:34
(169) "даже если не автоматизировать переформирование вьюх ...  то частота с которой возникает изменение имен хранения делает ту проблему ничтожной" // Как лихо ты отнес недоступность сервиса для потребителя к ничтожной проблеме, однако...
174 Vladal
 
24.10.18
08:52
(0) "У клиентов периодически возникает потребность забирать данные из 1С в какую-то другую внешнюю систему (OLAP и т. д.). "

Для этого есть Automation
175 vitkhv
 
24.10.18
09:13
(167) Нет там никакого быстрее,если не извращаешся с кучей точек в соединениях и виртуальными таблицами в соединениях. Работают с точно такой же скоростью. Это если запросы одинаковые по подходу в написании. А вот когда начинаешь использовать всякие плюхи в виде великого и могучего T-SQL, ну типа CTE для замены в ИЕРАРХИИ() или для того же разузлования. Запросы к JSON, OPENROWSET, For XML, CLR, самописные функции в запросах, кореллированные подзапросы (1С умеет их только в секции WHERE) , да те же строковые функции TSQL. Тогда да, работает действительно быстрее. И операции модификации таблиц, вот это точно намного быстрее, т.к. 1С умеет только в построчную модификацию.
176 dezss
 
24.10.18
10:05
(102) (175) а можешь показать какой-то конкретный пример как делать вьюхи из 1с?
или пни меня, плз, в нужном направлении, типа гайда "как создать вьюху для чайников")
177 Cyberhawk
 
24.10.18
10:15
(176) Из 1С просто запускается запрос к СУБД, в справке к create view все описано
178 vitkhv
 
24.10.18
10:29
(176) ПолучитьСтруктуруХраненияБД(,Истина)
потом генерируешь текст вьюх и через ADO их создаешь.
179 vitkhv
 
24.10.18
10:33
(176)
Если захочешь использовать точки в таких конструкциях типа Справочник.Номенклатура, обрамляй их []
180 vitkhv
 
24.10.18
10:38
(176) ну и если захочешь сам генерировать GUID в стандарте 1С из MSSQL при создании объектов или на операциях вставки, прочитай вот эти темы:
http://www.sql.ru/forum/1301722-a/guid-iz-1s-v-ms-sql-i-obratno-kak-realizovyvaetsya

и
http://www.sql.ru/forum/1289996-a/dannye-1s

там есть примеры функций преобразования кроме пожалуй функции сгенерированной NEWSEQUENTIALID( ), но и эта функция у меня есть.
181 vitkhv
 
24.10.18
10:45
(176) и не забудь про перечисления, для них у меня отдельная таблица, вьюхь на них лучше не вешать т.к. будет множество юнионов по количеству перечеслений (каждое перечисление в отдельной таблице) и оптимизатор это запрос не сможет правильно обработать, ну либо материализуй такую вьюху.
182 dezss
 
24.10.18
11:27
(177) (181) спасибо, почитаю
183 Асем
 
24.10.18
11:28
Здравствуйте!
Сижу в Sql с таблицами с 1 с
Нужно найти в них факты продаж
c kakimi tablicami luchwe rabotat'?
184 Botanik8888
 
24.10.18
12:26
(183) это очевидно... с продажными
185 vitkhv
 
24.10.18
14:04
(183) Если УТ 10x или УПП, то можно использовать регистр накопления продажи.
Но понятие регистр в 1С это несколько таблиц, с которыми вам предстоит разобраться. Проще всего, через профайлер посмотреть как 1С строит запросы к этому регистру.
186 GANR
 
25.10.18
13:11
А кто-нибудь задумывался, если скажем понадобятся остатки из регистров накопления? Представляете какую страхотень придется городить? Тут уже вьюхи не помогут.
187 dk
 
25.10.18
13:39
(186) дык профайлер никто не отменял
копипастишь изапрос из профайлера
188 VitShvets
 
25.10.18
20:42
(187) Потом выкидываешь получившийся ужос и пишешь нормально :)
Но на посмотреть как принципиально это работает, можно.
189 VitShvets
 
25.10.18
20:46
(186) Если речь об оперативных остатках, это простейший селект к таблице итогов с отборами по дате(5999-11-01) и по складам-товарам, в соответствии с бизнес логикой. Сложнее с получением остатков "на дату", но и там не сложно - суммируется 2 выборки - ближайшие итоги и обороты за дельту дат.
190 МихаилМ
 
25.10.18
21:08
(186) давно задумались . еще создатели 1с++ . запрос простой с учетом , что из итогов можно и вычитать .
191 Злопчинский
 
25.10.18
23:43
(189) дадада, еще характеристики, серийный учет и прочая развесистость
192 Сергиус
 
26.10.18
00:58
(0)Главный минус, это то, что надо знать структуру таблиц и колонок. Если знаешь, то почему бы и нет. Но лучше конечно через родной механизм 1с.
193 МихаилМ
 
26.10.18
02:43
(192) парсите конфиг , через dbnames сопоставляете имена полей и таблиц, храните сопоставление , далее парсите и сопоставляете в триггере только при изменении config .
изредка 1с меняет структуру хранения данных , как с константами.
194 VitShvets
 
26.10.18
13:44
(191) Это вопрос к перечню полей в group by, не более.
195 Demiurg
 
27.10.18
11:33
(0) кроме минусов есть и плюсы, можно READ UNCOMMITTED зарядить, указать в хинтах maxdop и т.п.
так что если 1С-кам жить не мешают, то вам то что
тем более если что работать не будет, сразу на них свалите )))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший