Как стать автором
Обновить

Комментарии 32

Sprache для прототипов использовать не пробовали?
Выигрывает у регулярок во всем кроме скорости парсинга. И тяжелый парсер потом не факт, что вообще понадобится.

Не знал про эту библиотеку. Посмотрел бегло, судя по примерам, вроде это какая-то надстройка над regexp-ами? Там можно для не регулярных языков обычные грамматики писать?
все, разобрался с parser combinator-ами, выглядит клево, да

Я использовал Sprache для реализации статического анализа формул. Получилось шикарно, новый функционал добавлялся без изменения кода и поведения для старого.
С регулярками очень быстро получалась write-only каша без малейших признаков композабельности.

спасибо большое за статью, хотелось бы уточнить
специальным идентификатором, который 1С называет областью

вы имеете в виду «разделители»?
Да, в конфигурации «1С: Бухгалтерия» есть специальный общий реквизит «ОбластьДанныхОсновныеДанные», который выступает таким универсальным разделителем. Это просто целочисленный идентификатор, 1С автоматически подставляет его для всех использующих объектов.
Это просто дополнительная колонка для таблицы
Разделитель
image


Надо учитывать при генерации запросов. Не для всех объектов надо использовать разделение, пихать разделитель в запросы.
Да, вы правы, мы сейчас это не учитываем. Мы даже не учитываем, используется ли «ОбластьДанныхОсновныеДанные» конкретным объектом, и добавляем условие на равенство областей вообще ко всем джойнам в исходном запросе. Учитывать это не сложно, просто потребность не возникала.
Еще, может конечно не по теме, но все таки спрошу, как обстоят дела с соблюдением
Лицензии ?


Формально она у вас нарушена.
Мы ничего не делаем, что перечислено в п. 65 и не строим решение на платформе 1С: Предприятие. Мы просто читаем данные из базы PostgreSQL, восстановленной из бэкапа, находящейся вне платформы 1С.
Т.е. у вас схема работы:
1. Рабочая база отдельно, в ней работают пользователи в 1С Предприятии в «обычном интерфейсе» через клиента 1С
2. Создаете копию рабочей базы средствами SQL и к ней формируете прямые запросы.

В компанию 1С обращались с вопросом правомерности использования такого варианта работы?
1С не приветствует сторонний доступ к своим данным


Да, мы не хотим вмешиваться в работу 1С и её дестабилизировать, это совершенно не в наших интересах.
В компанию 1С не обращались, потому что нам не кажется, что мы что-то нарушаем, зачем уточнять то, в чем ты уверен :slightly_smiling_face:
В компанию 1С не обращались, потому что нам не кажется, что мы что-то нарушаем, зачем уточнять то, в чем ты уверен

Я бы не был так уверен.

1. Вы обращаетесь к базе 1С через СОМ-коннектор — это правомерное использование, которое должно быть обеспечено лицензией — к этому вопросов вообще нет.
2. А вот после того как вы сходили в базу 1С, у вас наступает как бы «амнезия», и вы начинаете говорить что вы идете с помощью запросов не в базу 1С, а в какаю-то другую.

Либо я тогда не понял вашу схему работы, либо есть какое-то лукавство.
Процитирую статью комментарии к который мы с вами пишем: «Выполнять эти запросы через стандартное COM апи 1С — не лучшая идея. Во-первых, это долго — обойти тысячу баз и запустить на каждой из них все запросы занимает 10 часов. Во-вторых, это существенно нагружает сервер 1С, которому обычно и так несладко живётся. Неприятно ради аудита замедлять текущую ежедневную работу людей.» Мы не используем com коннекторы, хотя пользуемся ими для других задач.
И следующая цитата:
«Осознав всё это, мы написали утилиту, которая преобразовывает запрос с диалекта 1С в обычный SQL, запускает его параллельно на всех физических серверах PostgreSQL, результат объединяет и складывает в отдельную таблицу в MS SQL. В результате время сбора данных сократилось с 10 часов до 3 минут.»
Вот эту вторую штуку мы делаем на базе, к которой 1с вообще не ходит, восстановленной из бэкапа и развёрнутой сбоку. В чем лукавство и амнезия?
преобразовывает запрос с диалекта 1С в обычный SQL, запускает его параллельно на всех физических серверах PostgreSQL

1. Получается Вы обращаетесь к данным базы 1С
результат объединяет и складывает в отдельную таблицу в MS SQL

2. Т.е. вы данные периодически в этой отдельной базе обновляете читая опять же данные базы 1С.

Пока у меня складывается ощущение что этим действиями нарушается п. 65, а именно:

"Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных «1С: Предприятия»."
Хм… а не проще ли выполнить запрос на языке 1с в консоли запросов и посмотреть через sql profiler что передаёт сервер-1с sql-серверу? Можно даже автоматизировать это всё, наверное.

Имхо, это намного проще, чем учитывать все нюансы работы регистров, общих реквизитов и т.д.
Предлагаете написать запускатор запросов всех комбинаций и вылавливатель их в профайлере?
Не знаю, может и проще. Все равно пришлось бы патчить запрос, хотя бы чтобы он по нужным нам областям работал, а не только по одной. Ну и от 1С зависимость: запрос меняется — нужно 1С дергать, а подключение к нему через COM — процесс очень не быстрый.
В этом случае придётся запрофилировать запрос для каждой области данных, то есть 1000 профилирований сделать для каждого запроса, это кажется утомительным.
НЛО прилетело и опубликовало эту надпись здесь
Вы совершенно правы :)
Спасибо за комментарий! По пунктам:


COM.v83 и windows-окружение. Для нас это не проблема, т.к. основное приложение у нас на .net и все равно нужны виндовые машины. Про comctrl.dll честно говоря не понял проблему, если речь про то, что на одной машине через него можно ходить только в одну версию платформы, то это как раз то, что нам нужно. Уточню, все эти нюансы относятся только к процедуре выкачивания метаданных из 1С, для выпонения запросов 1С не нужен.


Про другие Linq-провайдеры. Я смотрел на те из них, на которые есть ссылки со странички на github-е. Мне хотелось легкий и невербозный дизайн, бесплатность и open source. В них я этого не нашел. Возможно я пропустил какие-то другие решения.


У нас 5 физических баз PostgreSQL, на каждой из которых крутится около двухсот баз 1С, данные разводятся действительно стандартным разделителем «ОбластьДанныхОсновныеДанные». Не очень понял, какой от сюда вывод, Fresh умеет запускать запросы на всех клиентских базах?


Про задачи для бухгалтера — интересно, но нам в первую очередь нужно средство мониторинга, чтобы каждый день на скраме видеть, у каких бухгалтеров где проблемы. С задачами нам пришлось бы незакрытые задачи импортировать из каждой 1С-ной базы в нашу общую базу. Кроме того, если появляется новый вид проверки нам нужно будет как-то быстро добавить его во все наши тысячу баз. Это возможно сделать эффективно?


Metadata.js — смотрели, но у нас есть отдельное приложение на .net, которое помимо интеграции с 1С еще много полезной бизнес-логики крутит, так что в 1С ходить удобнее прямо из него.


MSSQL — там у нас лежит разная статистика из всевозможных источников, не только 1С, просто исторически так сложилось.


Про 10 часов в исходной задаче. Это суммарное время прогона всех запросов, реализующих наши проверки, на каждой из тысячи баз. По большей части там всевозможные хитрые проверки на дубликаты разных сущностей — контрагентов, договоров, документов.


Рекомендации 1С это одно, а реальная жизнь — немного другое. Вполне допускаю, что мы не знали про какие-то уже готовые решения, когда начинали делать эту штуку. Я вот, например, вообще c 1С первый раз связался пол года назад :) Поэтому спасибо вам за полезные ссылки и наводки. Тем не менее, проблемы нужно как-то решать, и у нашего подхода есть свои плюсы. Мы можем, например, очень быстро проверять гипотезы о бизнесе клиента, находить паттерны в данных и как-то реагировать на них.
Metadata.js — смотрели
Она в основном про offline-first + серверный и клиентский javascript с использованием документов и справочников в стиле 1С. Если у вас бизнеслогика на .net, metadata.js вряд ли будет полезной
Vanessa вообще классная, особенно раздел http://www.vanessa-sharp.ru/reference-linq.html
alexey-lustin, AST запросов обнаружил, спасибо. MIT, насколько я знаю, позволяет утаскивать к себе, но надо будет еще подробнее поглядеть.
да, позволяет
использовать расширение конфигурации — можно посмотреть как это сделано у Евгении Карук http://infostart.ru/public/426393/

Не нашел в профиле ни одной публикации связанной с расширением, может речь идет про доклад на infostart event?
время сбора данных сократилось с 10 часов до 3 минут

У нас обход (например с подобным простым запросом) 500 областей штатными методами платформы выполняется за 3мин. Сейчас проверил.
Кто-то что-то делает не так…
при этом половину времени занимает подключение к базам по COM (5шт)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий