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

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

  Все выпуски  

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


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

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

Выпуск N10

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

Создав, пользуясь материалами прошлого выпуска, виды справочников мы можем легко получать любые самые сложные выборки и, что приятно, значительно быстрее, чем это сделает запрос 1С. Если Вас вполне устраивает скорость выполнения запросов 1С и Вы не считаете это серьезным доводом для использования прямых SQL запросов, то предлагаем Вам следующую задачу: Есть справочник Номенклатура. Есть справочник Комплекты с полями Комплект тип Номенклатура и Комплектующие тип Номенклатура. Не будем вдаваться в дебаты об организации данных, а попробуем написать запрос, с тем, чтобы получить комплектацию выбранных комплектов. С виду все элементарно:
стрЗапрос = 
"Обрабатывать НеПомеченныеНаУдаление;
|Комплект = Справочник.Комплекты.Комплект;
|Комплектующие = Справочник.Комплекты.Комплектующие;
|Группировка Комплект;
|Группировка Комплектующие;
|Условие(Комплект в сзВыбКомплекты);";
Сразу предупреждаем, что в DBF версии все скорее всего будет работать, а вот в SQL... Попробуйте и увидите. Возможно, кто-то знает, как это сделать в 1С (поделитесь опытом), а нам помогает прямой SQL запрос:
SELECT Справочник_Комплекты.Комплект, Справочник_Комплекты.Комплектующие
FROM Справочник_Комплекты, #ВременнаяТаблицаС_ID_ВыбранныхКомплектов
WHERE Справочник_Комплекты.Комплект = #ВременнаяТаблицаС_ID_ВыбранныхКомплектов.ID
ORDER BY Справочник_Комплекты.Комплект
Таблицу #ВременнаяТаблицаС_ID_ВыбранныхКомплектов необходимо сначала создать и заполнить значениями ID выбранных комплектов.
Это было лирическое отступление, чтобы у Вас не завял интерес к нашей рассылке. :о) А также, чтобы Вы не подумали, что тема сегодняшней рассылки не имеет практического применения. У нас еще будет возможность показать Вам, что добавление при помощи SQL элемента справочника не праздное развлечение ума, но инструмент расширения возможностей 1С. Для этого модифицируем процедуру, созданную в прошлой статье, а именно добавим создание еще одной хранимой процедуры со следующим телом:
стрМетаВидСпр = глПолучитьМетаIDОбъекта(метаСпр);
стрЗапрос =
"CREATE PROCEDURE " + стрВидСправочника + "_Новый (@ID AS CHAR(9) OUTPUT)
|AS
|DECLARE
| @NextID_Dec AS INT,
| @NextID_Base AS CHAR(9),
| @NewID AS AS CHAR(9)
|SELECT @NextID_Base = MAX(ID) FROM SC" + стрМетаВидСпр + "
|-- BaseToDec процедура, преобразующая число 36-ричной системе счисления в 10-ричную
|-- способы преобразования числа из одной системы в другую достатчно широко описаны
|-- и поэтому в нашем цикле статей не рассматриваются
|EXEC BaseToDec @NextID_Base, @NextID_Dec OutPut
|-- получить новый ID
|SELECT @NextID_Dec = @NextID_Dec + 1
|-- процедура обратная BaseToDec
|EXEC IntToBase @NextID_Dec, @NewID OutPut
|-- регистрируем новый ID для нашего справочника в 1C
|EXEC _1sp__1SUIDCTL_SetMaxID " + стрМетаВидСпр + ", @NewID OUTPUT
|-- КолонкиСправочника образуются аналогично стрКолонкиВида, но без указания алиаса
|INSERT INTO SC" + стрМетаВидСпр + " (" + КолонкиСправочника + ")
|-- стрЗначенияПоУмолчанию формируются в зависимости от типа реквизита, например
|-- если тип число, то это будет ноль, если объект метаданных, то пустой ID и т.д.
|-- значения по умолчанию необходимы, так как в 1С таблица все поля имеют признак NOT NULL
|VALUES (" + стрЗначенияПоУмолчанию + ")";

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



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

В избранное