Обработка-помощник для СУБД-разработчиков и интеграторов [infostart]

Bot

Администратор
Команда форума
23 Янв 2020
146,077
897
113
Глава 1. Перечисления
Рано или поздно, копающийся в SQL разработчик натыкается на такую штуку как перечисление. Внутри платформы это то, что не вызывает каких-либо затруднений. Для 1С-ника один из самых удобных в работе объектов, все значения предопределены и замечательно отображаются в интерфейсе. И даже в запросах можно прикручивать их прямо в тексте не пользуя для сего параметры. А что если поступить как СУБД-шник. Находим в структуре хранения базы какое-нибудь перечисление, находим таблицу в SQL, открываем содержимое и… видим что-то вроде этого:

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

Предлагаемое решение – собрать значения из базы данных и поместить в какую-либо таблицу вне 1С, после чего вылавливать представления перечислений из нее путем использования банального JOIN. Идея в общем-то не новая и на просторах сети неоднократно мелькала. Я предлагаю только свой инструмент для реализации этого действа, непосредственно из базы 1С, без посредничества COM-соединений и анализа содержимого dbo.Config сторонними средствами.

Для начала в SQL создаем вспомогательную базу данных (или используем уже имеющуюся), а в ней таблицу, в которой запишем связь между хранимыми значениями перечислений и их текстовым представлением.

В 1С полезно подключить эту таблицу как необъектную таблицу внешнего источника данных:

А теперь готовим содержимое и пишем в эту самую таблицу. Опционально – можно просто сохранить собранные значения в файл, а вопрос его загрузки / обработки предоставить Вашему сумрачному гению.

На что стоит обратить внимание – чтобы получить значение бинарной ссылки на уровне СУБД в таком же виде, как она хранится в базе 1С туда приходится передавать Уникальный идентификатор с переставленными относительно записанного значения блоками символов. Т.к. разработка утилиты велась для SQL-сервера 2008 R2, а проверить на чем-либо еще возможность не представилось, гарантий, что для других СУБД алгоритм перестанова точно такой же, нет.

Глава 2. Новая база
Представьте себе, что у вас есть две базы схожей конфигурации, когда-то развернутых франчами в лохматые годы и еще без вашего участия. Обращение к структуре их хранения говорит, что в общем и целом она идентична, если опустить имеющиеся доработки. Гений СУБД слепил отчет, который склеивает данные этих двух баз и базы данных СКУД (электронных пропусков, если кто-то не в теме). Со временем руководство решает, что юрлиц маловато, вы создаете такую же третью базу сами из соответствующего шаблончика, пытаетесь ее интегрировать и … обнаруживаете, что ее структура хранения коренным образом отличается от первых друх, а совпадение заветных цифр в именах полей и таблиц это исключение, а не правило. Поиск и замена соответствующих значений превращается в очень увлекательное занятие, способное убить немалую часть и без того ограниченного времени.

И снова обращаемся к внешним источникам. Создаем в SQL таблицу и подключаем к нашим базам:

Поочередно в каждой из них формируем перечень полей и таблиц структуры хранения и пишем во внешний источник, не забывая про идентификатор базы (По умолчанию этот реквизит заполняется ее именем) и пишем во внешний источник.

После того как информация о структуре хранения обеих баз помещена во внешний источник их можно более-менее удобно сравнить:

Но если у нас получилось узнать какие таблицы хранения обеих баз соответствуют именам таблиц в конфигураторе, ничто не мешает нам поэкспериментировать с рефакторингом запросов на уровне СУБД. К сожалению, как часы эта опция не работает, тем не менее от рутинных операций это избавляет. Для проверки у меня оказались под рукой два актуальных запроса. В режиме из структуры базы 1 в структуру базы 2 отработало на ура.

Сложнее оказалось с приведением к формату 1С. Результат позволяет понять о каких объектах идет речь, но запускаться и работать в консоли запросов просто так не хочет. Если задача стоит именно в том, чтобы перенести чужие труды в 1С, придется еще поработать руками: