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С).
|