Доступно

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

Тема в разделе "Бухгалтерия и финансы", создана пользователем finnk1c, 25 сен 2023.

Цена: 1350р.-91%
Взнос: 109р.
96%

Основной список: 19 участников

Статус обсуждения:
Комментирование ограничено.
  1. 25 сен 2023
    #1
    finnk1c
    finnk1c ЧКЧлен клуба
    Обработка-помощник для СУБД-разработчиков и интеграторов [infostart]

    Решаем пару типичных проблем, с которыми сталкиваются разработчики, использующие базу 1С на уровне SQL-сервера или иной СУБД.

    Предисловие
    Так сложилось, что среди программистов 1С не принято работать с данными базы на уровне СУБД без особой на то надобности. И действительно – а зачем, если платформа, выполняя роль посредника, умеет представить структуру базы в более удобном для разработки виде и избавляет от многой части рутины. У многих такая особая надобность вообще не наступает, у многих ограничивается операциями по восстановлению поврежденных баз. Однако остается пара случаев, не укладывающихся в общую картину. Во-первых это интеграция с базами данных, не 1С происхождения, выполняемая опять же не со стороны 1С. (т.е. база 1С служит исключительно источником данных). Во-вторых - встречающийся временами подвид разработчика, который здорово ориентируется в СУБД и имеет минимальное представление об 1С. И совсем не обязательно это фанатик, действующий согласно собственных предубеждений. Такой сумрачный гений, например, может просто быть иностранцем из мест более далеких, чем СНГ, со всем вытекающими - непониманием текстов типовых конфигураций для России и СНГ еще на уровне букв. Скорее всего, если таковой появился у Вас, он делегирован головной компанией для выполнения первого пункта, но попутно может кодить и что-то, что способен сделать и нормальный 1С-ник, не покидая привычной платформы, но нет времени / непрофильная область / руководитель любит Excel и косо смотрит на 1С или же на классические базы данных как таковые. В общем отказываться от помощи наотрез было бы глупо.

    Как работают те, кто пользует базу 1С на уровне СУДБ? Обычно такой мастер вооружается обработкой, раскрывающей структуру хранения таблиц, опционально – консолью запросов и SQL Server Profiler (или его аналогом, если речь все-таки не о SQL Server) . Нельзя не признать, что такой подход дает свои плоды. Толи свежая, оторванная от 1С, голова, толи особенности используемых инструментов позволяют решить часть проблем, до которых у нас 1С-ников или не доходили руки, или не хватало знаний и умений для их решения. Все бы хорошо, но через некоторое время…

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

    [​IMG]

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

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

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

    [​IMG]

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

    [​IMG]

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

    [​IMG]

    [​IMG]

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

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

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

    [​IMG]

    [​IMG]

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

    [​IMG]

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

    [​IMG]

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

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


    [​IMG]

    Скрытая ссылка
     
  2. Последние события

    1. skladchik.com
      Складчина доступна.
      13 янв 2024
    2. skladchik.com
      Хранитель хранитель.
      13 янв 2024
    3. skladchik.com
      Складчина закрыта.
      10 дек 2023
    4. skladchik.com
      Складчина доступна.
      15 окт 2023

    Последние важные события

    1. skladchik.com
      Складчина доступна.
      13 янв 2024
    2. skladchik.com
      Хранитель хранитель.
      13 янв 2024
    3. skladchik.com
      Складчина закрыта.
      10 дек 2023
    4. skladchik.com
      Складчина доступна.
      15 окт 2023
  3. Обсуждение
  4. 25 сен 2023
    #2
    ZibukaZavr
    ZibukaZavr ЧКЧлен клуба
    Интригует...
     
Статус обсуждения:
Комментирование ограничено.