Подсистема "COMExchange": «прямые» запросы к базе 1С через ADO или как простые элементы сделать “предопределёнными”.

08.02.13

Разработка - Запросы

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

Подсистема «COMExchange» позволяет выполнять запросы через ADO к любым источникам данных при наличии провайдера или драйвера данных, обеспечивающего доступ.
Это в полной мере относится к самой базе 1С клиент-серверной версии.  

Для файловой базы, к сожалению,  эта возможность остаётся не доступной. Конечно, если у вас имеется информация,
где взять нужный провайдер данных, то вы можете воспользоваться  своими «тайными» знаниями и проверить эту статью на файловой базе Smile.
Правда имеется возможность низкоуровневого доступа к файловой базе через ВК 1CDLib.dll (© andrewks), рекомендуемая автором только
для восстановления разрушенных информационных баз.

В целом прямой доступ к базе данных 1С не приветствуется разработчиками платформы.  На это есть определённые причины. 
«Прямые» запросы на чтение данных для платформы 8.х сложны для составления и не дают выигрыша по производительности.
Использование же «прямых» запросов на запись несёт в себе опасность повреждения данных,
но в некоторых случаях они могут оказаться полезны:

  1. Для выполнения «хирургических» операций для исправления данных, так как штатная процедура тестирования-исправления становится неадекватной
    поставленной задаче для большого размера базы (длится неприемлемо долго);
  2. При реорганизации данных (заполнения новых атрибутов объектов);
  3. Для решения нестандартных задач на уровне структуры базы данных;

Подобное использование «прямых» запросов на запись к базе данных 1С для версии 7.7 описано в статье «Последний тюнинг известной обработки 1CQA (консоль прямых запросов 1С++) для 1С:Предприятие-77» .

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

Для прямого доступа к базе 1С нужно создать и заполнить соответствующим образом узел плана обмена «Обмен данными COM»
Это можно сделать вручную, но удобнее воспользоваться формой автоматического заполнения (Рис.1) и создать стандартный узел «ЭтаБазаADO».
При этом потребуется указать информацию, необходимую для аутентификации на сервере 1С (чтобы считать настройки SQL базы данных).

И так задача:
Сделать все простые элементы «предопределёнными» в справочнике «Виды оплат чека ККМ» (входит в состав конфигураций УТ-10.3, УПП),
чтобы ни один пользователь, включая «обычных» программистов 1С, не мог их удалить или пометить на удаление.

Решается она просто:
Надо установить значение 0x1 в поле _IsMetadata в основной таблице справочника.

Пример запроса (Рис.2), выполняющего это действие, можно взять из файла ..Sampels\!ПрямойДоступ1СчерезADO.selx архива комплекта поставки подсистемы.
Кроме установки флага _IsMetadata в этом файле есть примеры запросов, выполняющих другие действия:

  1. Пометка элементов справочника на удаление (Рис.3);
  2. Непосредственное удаление элементов справочника (Рис.4);
  3. Запросы, выполняющие очистку периодического регистра сведений;

Для выполнения примеров запросов из файла требуется:

  1. Установить подсистему «COMExchange» (включая подсистему «ViewValues», входящую в комплект поставки);
  2. Выполнить автоматическое заполнение плана обмена «Обмен данными COM». При этом обязательно нужно заполнить стандартный узел «ЭтаБазаADO», используемый в запросах;
  3. Открыть файл с запросами в обработке «Консоль запросов 1С + ADO» в составе подсистемы;
  4. Заменить слово «ИстинноеИмяСправочника» или «ИстинноеИмяРегистра» на внутреннее имя таблицы в базе.
    Как это сделать прямо из формы консоли, показано на Рис.5, Рис.6 и Рис.7 (для этого потребуется подсистема «ViewValues»);
  5. Указанные примеры запросов написаны для MS SQL (на T-SQL). Если сервер базы данных другой, то возможно в текст запроса потребуется внести изменения.

Комментарии о выполнении "прямого" запроса:

  1. На Рис.8 показан список справочника до выполнения "прямого" запроса.
  2. Результат выполнения "прямого"запроса в консоли показан на Рис.9.
  3. На Рис.10 показан список после выполнения " прямого" запроса. На рисунке хорошо видно, что простые элементы стали выглядеть и вести себя как вполне «предопределённые».  
  4. На Рис.11 и Рис.12 показана безуспешная попытка программного удаления такого «предопределённого» элемента из консоли запросов через меню спец-действий.
  5. Следует отметить, что тестирование-исправление базы в конфигураторе оставляет такие «предопределённые» элементы без изменения. 
    Более того, они остаются без изменения даже при реструктуризации таблицы справочника при обновлении конфигурации,
    если не изменялись предопределённые данные объекта метаданных.

Заключительные замечания:

Во избежание недоразумений, хочется заострить внимание на том, слово "предопределенный" выше по тексту везде используется с кавычками.

Дело в том, что одна установка флага 
_IsMetadata еще не делает элемент "по настоящему" предопределенным, при этом у элемента
не появляется идентификатор, по которому к нему можно обратиться из кода. 

Чтобы сделать элемент собственно предопределенным нужно в конфигурации базы прописать соответствие идентификатора с ссылкой на элемент.
Это можно сделать с помощью многофункционального инструмента
"Enterprise Integrator" (© German).
Что при этом делается с базой можно прочитать в этой статье.

Комментарии

Хочется выразит благодарность Magister за полезное обсуждение этой темы.

 

 

 

 

 

 

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119909    656    389    

701

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5618    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1964    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6089    29    mkalimulin    23    

48

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1714    vandalsvq    7    

28

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5282    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

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

11.10.2023    15954    skovpin_sa    14    

97
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. yuraos 991 06.02.13 21:41 Сейчас в теме
Всем доброго времени суток!
Сразу хочется отметить, что обсуждаемая в статье задача несколько надуманная
и носит чисто демонстрационный характер.
Примеры запросов для очистки данных также не идеальны
(покрайней мере не очищаются связаные записи в таблицах регистрации изменений)
и также служат для демонстрационных целей.
2. Magister 134 06.02.13 22:53 Сейчас в теме
Если так создавать предопределенные элементы - то к ним нельзя обратиться из кода.
Это "ненастоящие" предопредеденные.
Правильный механизм описывал German в статье о Enterprise Integrator, за что ему большое спасибо (приходилось вполне успешно применять).
yuraos; German; +2 Ответить
3. yuraos 991 07.02.13 05:59 Сейчас в теме
(2) Magister, если ты заметил, там слово "предопределенный" везде стоит в кавычках
:)
Ну а Герман безусловно дока в этих делах.
6. yuraos 991 07.02.13 19:53 Сейчас в теме
(2) Magister, а можно ссылочку,
где можно прочитать или даже услышать
про "правильный механизм" именно превращения простых элементов в "настоящие" предопределенные.

я полазил по публикациям о Enterprise Integrator,
полазил по его сайту
и что-то не нашел прямых указаний как это можно там сделать.

Возможно что-то есть в платной версии EI (как говорится среди недокументированных возможностей) ...

Просто самому любопытно, как говорится без всяких задних мыслей.
Эта тема на самом деле не совсем надуманная. Я на нее наткнулся на форуме nowa.cc
7. Magister 134 07.02.13 22:47 Сейчас в теме
(6) Пожалуйста: http://main.1c-ei.ru/Articles/ismeta
Это я проделывал ещё тогда, когда Enterprise Integrator был бесплатным.
9. yuraos 991 08.02.13 07:25 Сейчас в теме
(7) Magister, спасибо за информацию.
Ссылочку пропишу в публикации в близжайшее время,
дабы "не вводить" новичков "во заблуждение".
;)
10. yuraos 991 10.02.13 18:25 Сейчас в теме
(2)(9)Magister,
разяснение (для кого неясна суть вопроса) и ссылка вставлены в текст публикации.
11. Magister 134 10.02.13 20:05 Сейчас в теме
(10) Ок, теперь когда мои претензии удовлетворены - сменил минус на плюс :)
4. МихаилМ 07.02.13 09:32 Сейчас в теме
При тии предопределенность,сделаная по вашей методе, пропадет. мог бы поставил "-" , зато что людей вводите в заблуждение.
5. yuraos 991 07.02.13 18:49 Сейчас в теме
(4) МихаилМ,
"тии" - это надо полагать тестирование-и-исправление?

А вы лично проверяли, пропадает такая "предопределенность" при тестировании-исправлении или нет ?
Или так безапелляционно утверждаете, полагаясь на совершенство платформы ???

Так вот, я спецально проверил это как на платформе 8.1, так и на 8.2 (для справочников).
И правда заключается в том, что тестирование такую "предопределенность" не исправляет.

По моим сведениям она исчезает только в одном случае - при реструктуризации справочника в ходе обновления конфигурации и только тогда, когда изменяются предопределенные данные объекта метаданных. О чем и сообщил в статье.

Впрочем ... для новичка, конечно, такая поспешность в суждениях конечно простительна...
:)
8. andrewks 1367 07.02.13 23:06 Сейчас в теме
насчёт низкоуровневой работы с файловой базой - http://infostart.ru/public/166557/
запись значений полей тоже будет реализована в ближайшее время
Оставьте свое сообщение