Суббота, 18.05.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2017 » Октябрь » 24 » 1С и SQLServer (инструменты работы с данными)
22:23
1С и SQLServer (инструменты работы с данными)

1С и SQLServer (инструменты работы с данными)

Если в качестве хранилища информации для «Медицинской базы» выбран SQL Server то вся информация есть в его таблицах. Её можно читать, копировать в другую базу и даже в другой формат. Если уже есть информация в хоть каком-то электронном виде то дальше всё уже относительно просто. Просто, конечно, только при наличии подходящих инструментов. Есть деятельность которую нельзя называть программированием. Но и на использование данных (примерно также как использует базу оператор вбивающий платёжки) это тоже не похоже. Это просто отдельные задачи, для которых используются некие инструменты для работы с информацией.
Пусть я хочу забрать данные из «Медицинской базы» чтобы засунуть их например в какой-то сайт.  Для этого мне неплохо бы узнать что в какой таблице лежит.
Здесь описано как это можно узнать с помощью Profiler-а:
http://akostina76.ucoz.ru/blog/2016-10-21-3537

Всем он хорош. И устанавливать его не надо и все ответы он даёт сразу же. Вот только инструмент этот довольно экзотический даже для программиста. Мало кто додумается до его использования.
А без него та же задача решалась бы скорее всего так:
У 1С есть почти стандартные инструменты, называемые «Консолями запросов». Архив с ними тут:
https://drive.google.com/file/d/0B3i2SFYLER0HZVlycnlMcjdiSE0/view?usp=sharing

Эти консоли позволяют работать и информацией конфигурации без оболочки – программы. Открываются они из запущенной программы через Файл->Открыть:

В консоли можно ввести (справа сверху) любую строку для выборки информации и по кнопке «Выполнить» получить запрошенную информацию:

Меня в данном случае интересует сколько строк в таблице с этими длинными цитатами. Вот так это можно узнать:

Аналогично я могу узнать, что в справочнике объектов у меня 2481 строка, в планах видов характеристик объектов 68, а в характеристиках объектов 8963.
Это я подбираюсь к тому чтобы со стороны SQL сервера собрать информацию регистра сведений (привязка текстовой информации к объектам – болезням):

Вся информация получена с помощью 1С-овского варианта SQL-евских строк – команд. Осталось получить количества строк в таблицах со стороны SQL Server-а.
Я не знаю в каких таблицах находится информация. Мне и надо чтобы SQL сервер просмотрел все таблицы и выдал количество строк в них. Вот текст который позволяет это получить:
declare @sql varchar(max),
                        @tblname sysname,
                        @tblsch sysname
declare @t table ( tablename sysname, [count] bigint)
DECLARE vendor_cursor CURSOR FOR
select TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'
OPEN vendor_cursor
FETCH NEXT FROM vendor_cursor
INTO @tblsch, @tblname
WHILE @@FETCH_STATUS = 0
BEGIN
set @sql = 'select '''+@tblname +''' as tablename , count(*) as cnt from '+@tblsch+'.'+@tblname
print @sql
insert @t(tablename ,[count])
exec (@sql)
    FETCH NEXT FROM vendor_cursor
    INTO @tblsch, @tblname
END
CLOSE vendor_cursor
DEALLOCATE vendor_cursor
select * from @t
 WHERE count=2481 OR count=68 OR count=8963 OR count=7691
Я его, естественно, не сама писала а взяла первый попавшийся отсюда:
http://www.sql.ru/forum/488653/kak-uznat-kolichestvo-zapisey-v-kazhdoy-tablice-bd

Это типовой пример относительно сложной обработки данных всё теми же командами.
Вот и выдал мне сервер список всех нужных мне таблиц:

Названия таблиц есть. Осталось определиться с названиями колонок – полей, в которых хранится информация.
Вот, например, список длинных цитат:

Про поля немного было тут:
http://akostina76.ucoz.ru/blog/2017-07-04-4242

Из всего этого точно нужен уникальный ключ (_IDRef), точно не нужны (если куда-то в другую базу переносить) 1C-овские _Version, _Marked, _IsMetadata. Код (_Code) нужен… только если он нужен. В поле _Description явно содержится наименование потому оно тоже нужно. Судя по типу полей (binary) поля, названия которых начинаются с “_Fld” – ссылки на другие справочники. Что на что ссылается и надо выяснить.
Сама же ссылка в виде длинной уникальной последовательности букв и цифр подходит для использования где угодно. Очень часто ссылки делают не традиционными номерами (новой строке присваивается номер предыдущей + 1)  а именно таким строками типа uniqueidentifier:
https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/uniqueidentifier-transact-sql
… с автозаполнением через  newid() в настройках таблицы. Это кроме всего прочего позволяет без проблем объединять информацию двух и более баз дынных, вводимую на не связанных машинах (при хранении идентификаторов строк в виде цифр могут возникать проблемы, потому и возникли эти последовательности случайных знаков которые точно нигде не повторяться).
Поскольку Profiler я по идейным соображениям не использую определять в каком поле ссылка на объект (справочник объектов) я буду методом научного тыка, т.е связывая таблицу со справочником объектов по этому полю и проверяя нашлось ли что-то. Как и полагается в такой ситуации нужное поле оказалось последним:

Но рисование связей в конструкторе просмотров (view) никак не назовёшь утомительным занятием.
Я хочу собрать всю информацию характеристик (регистр сведений) как на четвёртой картинке. Вот так это выглядит:

Мне этот конструктор представлений (view) потребовался только для того чтобы он нарисовал мне SQL строку. Реально мне конечно нужна не только строка но и какие-то условия на выбранные строки. Например я хочу все симптомы по хроническим заболеваниям.
Вот 30 строк по этому условию:

С таким же успехом можно вместо «хрон» и «симп» ввести любые здесь другие слова. А можно дать пользователю сайта возможности ввести эти строки, засунуть их в запрос и вывести тот же список на сайте (даже не перегоняя никуда информацию из базы 1С).

Просмотров: 227 | Добавил: akostina76 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
«  Октябрь 2017  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz