Отправляет email-рассылки с помощью сервиса Sendsay

Все об 1С SQL версии

  Все выпуски  

Все об 1С SQL версии


Информационный Канал Subscribe.Ru

Все об 1С SQL версии

Выпуск N9

Подключение к базе данных 1С и выполнение SQL запросов на примере работы со справочниками. Часть 4.

Здравствуйте!
После всего, что Вы прочитали в предыдущих выпусках:
  1. Вам будет легко понять следующий простенький пример запроса:
    SELECT DESC, SP1457 FROM SC1451 WHERE SP1457 <= 10000
  2. Скорость выполнения подобных запросов к SQL оценена по достоинству и Вы активно используете их в своей работе...
Боимся, что эти два утверждения далеки от истины. Действительно, чтобы написать даже такой бесхитростный запрос требуется много силы воли. А что говорить о более сложных? Поиск же в них ошибок - поистине титанический труд.
Предлагаем Вам простое, но очень эффективное решение. Написать служебную обработку, которая, используя метаданные, создает для всех справочников виды (view).
Обработка должна выглядеть приблизительно так (Вы можете написать свой код, или использовать нижеприведенный, в последнем случае авторы не несут ответственности за причиненные прямые или косвенные убытки):
Процедура СформироватьВидКОбъекту(стрИмяОбъекта, стрЗапросНаСоздание)
 стрЗапросНаУдаление =
 "IF EXISTS(SELECT ID FROM sysobjects WHERE ID = OBJECT_ID('" + стрИмяОбъекта + "'))
 | DROP VIEW " + стрИмяОбъекта;
 глВыполнитьЗапрос(, стрЗапросНаУдаление);
 
 глВыполнитьЗапрос(, стрЗапросНаСоздание);
КонецПроцедуры

Процедура СформироватьВидКСправочнику(стрВидСправочника = "")
 Если стрВидСправочника = "" Тогда
  Для инд = 1 По Метаданные.Справочник() Цикл
   СформироватьВидКСправочнику(Метаданные.Справочник(инд).Идентификатор);
  КонецЦикла;
 КонецЕсли;
 метаСпр = Метаданные.Справочник(стрВидСправочника);
 стрКолонкиВида = "ID, IsMark, VerStamp";

 Если метаСпр.КоличествоУровней > 1 Тогда
  стрКолонкиВида = стрКолонкиВида + ", ParentID, IsFolder";
 КонецЕсли;
 
 Если метаСпр.Владелец.Выбран() = 1 Тогда
  стрКолонкиВида = стрКолонкиВида + ", ParentExt";
 КонецЕсли;
 
 Если метаСпр.ДлинаКода > 0 Тогда
  стрКолонкиВида = стрКолонкиВида + ", Code";
 КонецЕсли;
 
 Если метаСпр.ДлинаНаименования > 0 Тогда
  стрКолонкиВида = стрКолонкиВида + ", Descr";
 КонецЕсли;

 Для инд = 1 По метаСпр.Реквизит() Цикл
  метаРеквизит = метаСпр.Реквизит(инд);
  //если реквизит периодический, то он хранится в таблице _1SCONST
  //(см. пред. статьи)
  Если метаРеквизит.Периодический = 1 Тогда
   Продолжить;
  КонецЕсли;
  Реквизит = "SP" + глПолучитьМетаIDОбъекта(метаРеквизит);
  стрКолонкиВида = стрКолонкиВида + ", " + Реквизит + " AS " + метаРеквизит.Идентификатор;
 КонецЦикла;
 
 стрЗапрос = 
 "CREATE VIEW " + стрВидСправочника + " 
 |AS
 |SELECT " + стрКолонкиВида + "
 |FROM SC" + глПолучитьМетаIDОбъекта(метаСпр);
 
 СформироватьВидКОбъекту(стрВидСправочника, стрЗапрос);
КонецПроцедуры
Эту обработку придется выполнять всякий раз, когда вы изменили структуру справочников. Но взгляните на тот же запрос, что был приведен в начале статьи, и Вы поймете, что это небольшая плата за большое удовольствие.
SELECT DESC, МаксимальныйКредит FROM Справочник_Контрагенты WHERE МаксимальныйКредит <= 10000
Всего хорошего.

Автор рассылки: Web-Team
http://www.web-team.narod.ru



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное