Свет мой, SQL, скажи, да всю правду доложи!
Я ль в инете всех шустрее, всех прикольней и умнее?
Пушкин – АС!
Благодарности авторам:
Хочется сразу сказать огромное спасибо авторам обработки, создавших для администраторов и разработчиков такой прекрасный инструмент.
Отдельная признательность Ivanu T Berezdetsky за реализацию поддержки выполнения пакетов запросов. До этого мне приходилось сначала выводить оттранслированный текст запроса в окне сообщений, а затем выполнять его в QA на сервере.
Исходные версии обработки и много другого полезного можно найти на сайте: http://www.dev.citykirov.ru/.
Обсуждение обработки и разные ее модификации смотрите на форуме: http://www.1cpp.ru/forum/YaBB.pl?num=1157967835.
Требования:
1) Обязательно - наличие предварительно загруженных (или лежащих в одном каталоге с 1CQA) внешних компонент 1СPP.dll (www.1cpp.ru) и FormEx.dll (www.dorex.pro).
2) Желательно, чтобы в конфигурации был класс определенный пользователем "Общие.Форма.Привязка" (www.dev.citykirov.ru ,автор Дмитрий Ощепков). Обсуждение класса на форуме 1СРР: http://www.1cpp.ru/forum/YaBB.pl?num=1200464076. При отсутствии класса обработка работать будет, но без привязок элементов в форме.
3) Желательно (для возможности укладывать списки объектов во временные таблицы) иметь для редактирования списков обработку под именем ПодборUChoice (улучшенная обработка УОПО). Она может быть встроена или лежать в одном каталоге с 1CQA. Без этой обработки будут не доступны специальные типы параметров запроса, через которые создаются временные таблицы.
4) При большом желании (для редактирования запроса в диалоге конструктора) требуется наличие внешней компоненты qryConsole.dll(автор Ivan T Berezdetsky). Обработка при открытии пытается ее загрузить (так же как 1CPP). Если загрузить не удается, то соответствующие элементы управления в обработке становятся недоступными.
Установочный дистрибутив и обсуждение внешней компоненты - на форуме: http://www.1cpp.ru/forum/YaBB.pl?num=1193394153. Для работы ВК qryConsole.dll обязательна установка Office web components (OWC11). Иначе обработка будет вас малоприятно ругать при открытии (беда устраняется или установкой OWC11, или удалением/переименованием файла библиотеки – чтоб вообще не грузилась).
Описание файлов поставки:
1) Консоль1CQA.rar - обработка 1CQA под именем «Консоль1CQA» (иначе не встраивается);
2) FormEx1CPP.rar – библиотеки 1CPP.dll, FormEx.dll и класс "Общие.Форма.Привязка";
3) PlugIns.rar – вспомогательные обработки ПодборUChoice и ИзменениеВремениДокумента. Последняя обработка используется в меню действий со значением в ячейке таблицы результатов запроса по двойному клику мыши (Рис.11) для изменения даты-времени документа.
4) Samples.rar – разные примеры запросов, использованные в публикации.
5) Консоль1CQA_ALL.rar – полный набор файлов поставки (все 4 архива);
Описание установки:
1) Обеспечить загрузку 1CPP.dll и FormEx.dll (обязательно):
Библиотеки можно скачать с сайтов разработчиков или взять из каталога файла поставки \..\FormEx1CPP.rar\FormEx1CPP\DLL\:
Файл 1CPP2037.dll – библиотека 1CPP версии 2.0.3.7, рекомендуемый релиз с ядром FormEx. Для него загрузка FormEx.dll не требуется.
Файл 1CPP2507.dll – библиотека 1CPP версии 2.5.0.7, рекомендуемый релиз с раздельной загрузкой FormEx.
Файл 1CPP3220.dll – библиотека 1CPP версии 3.2.2.0 (последняя с сайта разработчиков)
Файл 1CPP32316.dll – библиотека 1CPP версии 3.2.2.8 (одна из последних тестовых версий с форума: http://www.1cpp.ru/forum/YaBB.pl?num=1288774760/all )
Файл FormEx205101.dll – библиотека FormEx версии 2.0.5.101 (самая последняя).
При копировании файлов из имени следует убрать цифры версий.
Загружать библиотеки можно стандартным способом в процедуре ПриНачалеРаботыСистемы():
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы ()+"1CPP.dll");
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы ()+"FormEx.dll");
Если же 1QA будет использоваться как внешняя, то достаточно скопировать файлы dll в каталог обработки. Она сама их загрузит при открытии.
2) Подключить класс "Общие.Форма.Привязка" (желательно):
Можно из каталога файла поставки \..\FormEx1CPP.rar\FormEx1CPP\ в каталог базы скопировать файлы Defcls.prm и КОП_ОбщиеФормаПривязка.ert.
А можно включить класс в конфигурацию. Для этого туда нужно добавить из одноименных внешних файлов обработки Defcls и КОП_ОбщиеФормаПривязка.
ВНИМАНИЕ! Если у вас уже используются другие классы, то придется добавить описание класса в файл Defcls.prm или обработку Defcls из соответствующих файлов.
3) Вспомогательные обработки (желательно):
Скопировать из каталога файла поставки \..\PlugIns.rar\PlugIns\ в каталог обработки 1CQA или добавить в конфигурацию под теми же именами.
4) Конструктор запросов (при большом желании):
Установить внешнюю компоненту qryConsole.dll из скаченного дистрибутива (смотри выше). И обязательно установить Office web components (OWC11)!
Описание добавлений и улучшений в предлагаемой версии:
1) Для баз DBF добавлена возможность выбирать интерфейс доступа к данным ODBC или OLEDB (Рис.2). Для использования OLEDB требуется установить OLEDB vfpoledb provider v9. В базах DBF через ODBC, честно говоря, мне не удалось заставить работать прямые запросы. Через OLEDB вроде все работает.
Для баз SQL по ряду соображений я решил оставить доступ только через ODBC (Рис.1).
2) Для баз SQL добавлена возможность редактировать текст запроса в диалоге конструктора запросов, поставляемого ВК qryConsole.dll (Рис.3 и Рис.4). Для баз DBF эта возможность, к сожалению, недоступна в текущей версии этой ВК.
3) Расширен список типов, которые могут принимать параметры запроса (Рис.6). Добавлены следующие типы: Календари, ВидыРасчетов, Бухгалтерские счета, ПланыСчетов (системное перечисление), ВидыСубконто.
4) Добавлены служебные типы параметры запроса СписокСсылок9, СписокСсылок13 и ИерархияСсылок9. Значения этих параметров представляют списки объектов определенного типа и используется для укладывания во временные таблицы ссылок на объекты (включая с иерархическим включением). Временная таблица доступна в тексте запроса под именем '#'. Для редактирования списков объектов (Рис.7) используется обработка под именем ПодборUChoice (улучшенная обработка УОПО). При отсутствии обработки ПодборUChoice в конфигурации или в каталоге 1CQA эти служебные типы параметров исключаются из меню выбора типов параметра запроса.
5) Добавлена возможность открывать 1CQA в режиме подбора (имитации подбора) для возврата в другие формы произвольных выборок данных.
Имитация подбора используется в том случае, когда 1CQA - внешняя обработка. Тогда функция ОткрытьПодбор(,,) становится бесполезна. Приходится просто открывать внешнюю обработку Консоль1CQA с передачей через параметр формы контекста той формы, которая вызывает подбор.
Имитация выбора в подборе осуществляется вызовом в контексте формы владельце процедуры ОбработкаПодбора(,,,) с помощью метода ВыполнитьПроцедуру(Контекст, ИмяПроцедуры, СписокАргументов) объекта «Сервис» ВК FormEx.dll.
6) Другие улучшения (их множество, смотрите подробности в описании в самой обработке). Вот некоторые из них:
- При клике по пустой таблице параметров запроса выводится диалог с информацией о работе с параметрами запроса (Рис.5);
- Выбор типа объекта производится в удобном красивом диалоге в виде дерева (Рис.6);
- При клике по таблице результатов запроса, если значение в ячейке ссылочного типа, выводится меню действий с объектом (Рис.11). Меню позволяет:
открыть объект для просмотра-редактирования;
открыть объект в списке (журнале);
пометить его на удаление;
снять пометку;
удалить непосредственно;
открыть объект для редактирования в обработке 'Редактор Реквизитов' (автор Цылёв Владислав vet7777@mail.ru);
- Для документов доступны дополнительные действия:
провести;
отменить проведение;
изменить дату-время (для этого действия требуется обработка ИзменениеВремениДокумента);
- Кроме этого для документа можно вывести отчет о движениях или сформировать структуру подчинености. Соответствующие отчеты интегрированы в консоль (чтобы не зависеть от используемой конфигурации):
Отчет о движениях - в полном вариате (по регистрам, проводкам, записям ЖР и истории реквизитов).
При формировании структуры подчиненности для выборки подчиненых документов используются прямые запросы к базе.
7) Различные варианты очистки запроса (Рис.8);
8) Печать таблицы параметров запроса и таблицы его результатов (Рис.9).
9) Выбор значения параметра 'Collate' / 'Collating' в строке соединения (только базы DBF) (Рис.13).
10) Добавлена обработка спец.комментариев в тексте запроса (для установки спец.опций выполнения запроса).
поддерживается обработка следующих спец.комментариев:
'--!ExecuteTransaction' - выполнять все батчи запроса в единой транзакции (при ошибке хоть в одном батче транзакция откатывается);
'--!ExecuteRollback' - выполнять все батчи в транзакции с ее откатом независимо от результата выполнения (для просмотра "результатов" запроса без фактического изменения данных);
подробности смотрите в макете "СпецКомметарииЗапроса" обработки (можно вывести в табличный документ, Рис.5 и Рис.9).
11) Добавлен вывод описания обработки в табличный документ ( Рис.5 и Рис.9).
Применение:
Для баз SQL доступны особые режимы выполнения запроса (Рис.12): проверка синтаксиса и вывод плана выполнения запроса. План выполнения кроме таблицы результатов выводится еще в отдельном текстовом документе.
Для баз DBF использование ограничено в основном разделенным режимом. В монопольном режиме в базах DBF выполнять прямые запросы не удается без специальных ухищрений (подмены библиотеки DBEng32.dll в каталоге BIN) или использования особых провайдеров доступа к данным.
При попытке использования в монопольном режиме обработка пытается выполнить тестовый запрос: "select COUNT(*) from 1SUSERS". Если запрос выполняется без ошибок - никаких сообщений не выводится. Иначе (если тестовый запрос выдает ошибку) программа выдает пользователю предупреждение об этом печальном факте, но работать в консоли не запрещает. Если после этого запрос вдруг выполнился без ошибок, обработка запоминает эту радость и больше не тревожит пользователя об этом ... до первой следующей ошибки запроса, в тексте которой есть строка "Cannot open file" .
Основные направления для использования:
1) Для разработчиков: проверка запросов, изучение вопроса о том где, как и какие данные хранятся в базе данных.
2) Администрирование данных: исправление ошибок в ИБ в дополнение к процедуре тестирования-исправления. В больших рабочих базах тестирование-исправление выполнить нереально. У меня оно длилось, например, больше двух суток. Поэтому тестирование запускается на копии базы в пакетном режиме с записью лога. Затем по информации из лога в 1CQA запросом SELECT вытаскиваем некорректные записи из базы. После анализа этих записей принимается решение:
- исправляем запросом UPDATE ,
- удаляем запросом DELETE,
- помечаем на удаление, чтобы потом удалить с контролем ссылочной целостности (пометить можно тоже в 1CQA запросом UPDATE).
3) Реорганизация данных при обновлениях: установка новых реквизитов, ресурсов и измерений в таблицах объектов метаданных, например регистров. В архиве Samples.rar из файлов поставки в файле Sample_TransforRegister_SQL.qry находится пример реально использованного скрипта для довольно сложной установки новых измерений и реквизитов регистра. Фактически скрипт заменяет перепроведение по регистру (выборочно, без пересчета итогов). Итоги также можно пересчитать прямыми запросами с помощью обработок (только базы SQL):
ПересчетИтоговРегистров.ert или 1CУстановкаТА.ert.
Благодарности:
Кроме авторов обработки хотелось бы также поблагодарить всех разработчиков 1CPP и FormEx. Без их самоотверженного труда 1С-ка была тормозна, скучна, безлика и беспросветна!