|
Мастер SQL-запросов
Вопрос:
Необходимо обеспечить возможность добавлять произвольный поясняющий текст и
обеспечить отображение объемных по содержанию описаний параметров (за счет
увеличения высоты каждой строки с параметром) в диалоговом окне запроса
параметров "Параметры запроса" и "Параметры отчета" для запросных форм и
отчетов.
Ответ:
Запрос параметров для запросных форм и отчетов является служебной функцией.
Именно поэтому расширение соответствующего функционала не планируется. Для
придания форме запроса параметров более функционального вида предлагается
применять следующую технологию:
- для конкретного отчета или запросной формы создается вспомогательная
таблица, а также табличная и экранная форма;
- формирование отчета или открытие запросной формы должно выполняться с
помощью бизнес-процедуры;
- бизнес-процедура создает объект класса "табличная форма" и выполняет
команду ShowSF для определенной записи этой табличной формы. Запись подлежит
выбору в рамках бизнес-процедуры. Например, для разных операторов могут
использоваться разные записи. При необходимости запись может быть создана
бизнес-процедурой;
- оператор вводит или изменяет параметры отчета через интерфейс экранной
формы и нажимает кнопку ОК. Для отказа от печати оператор должен нажать
кнопку Отмена. Для того, чтобы из бизнес-процедуры можно было понять, какая
кнопка была нажата, в таблице должно быть поле со значением по умолчанию
время и установленным флажком заполнять при любом изменении.
Кроме того,
экранная форма должна открываться для строки, находящейся в состоянии
редактирования. В этом случае если время изменилось, значит была нажата кнопка
ОК. Если время не изменилось, значит была нажата кнопка Отмена;
- если оператор нажал кнопку ОК, бизнес процедура далее формирует отчет
или открывает запросную форму с использованием параметров, введенных через
экранную форму.
Именно с учетом этих рекомендаций в версии 12.86.01 предусмотрена возможность
подключать бизнес-процедуру в перечень отчетов, формируемых из табличной формы.
|
Вопрос:
Хочу в запросах использовать ПАРАМЕТР КОНФИГУРАЦИИ ОТБОР_РМ() для
ограничения доступа по отделам.
Пробывал включать в Мастере Запросов через Макропараметры, появлялось
сообщение "...неверен реляционный оператор".
И не смог разобраться как использовать ПАРАМЕТР в Бизнес-процедуре.
Как и где можно использовать данный ПАРМЕТР?
Ответ:
Функция ОТБОР_РМ (или FIZ_OTDS) возвращает SQL-предложение для
отбора
записей по номеру подразделения. Функция имеет параметр - имя поля, в
котором хранится номер подразделения. Например, если в качестве параметра
передать строку "CH_70_S.OTD", то результат будет примерно следующим:
(CH_70_S.OTD IS NULL OR
CH_70_S.OTD IN ('
','0013','2','6013','1','5','3','4','6003','6004','6005','6006','6009','6007
','6008','6010') OR CH_70_S.OTD IN ('6011','6001'))
Если оператор имеет полный доступ, функция возвращает пустую строку.
Функцию можно использовать в бизнес-процедурах для формирования текста
SQL-запроса. Пример бизнес-процедуры:
s = FIZ_OTDS("CH_70_S.OTD")
if not empty(s) then
s = " and "+s
end if
q = SQL "SELECT * FROM CH_70_S WHERE CH_70_S.GM_RAS='201005'"+s
...
Также функцию можно использовать при настройке связи со справочником с
помощью запросной формы - для заполнения макропараметров.
Непосредственно в мастере запросов функция не может быть использована, так
как при описании запроса значение макропараметра может быть только
константой и не может быть выражением. Но если при описании запроса имеются
макропараметры, то при использовании этого запроса из бизнес-процедуры с
помощью функций SQL или QForm одному из макропараметров может быть присвоено
значение, полученное с помощью функции FIZ_OTDS. Пример такой процедуры:
mac = ListBox
s = FIZ_OTDS("CH_70_S.OTD")
if not empty(s) then
mac.Add " and "+s
else
mac.Add ""
end if
a = QForm "CH_70_S_MAC",mac,"201005"
a.ShowModal
Здесь предполагается, что запросная форма CH_70_S_MAC имеет один параметр
и один макропараметр. Например, она может содержать следующий текст запроса:
SELECT * FROM CH_70_S
WHERE CH_70_S.GM_RAS=:mon
%s
|
Вопрос:
Можно ли, находясь в табличной форме Журнал взаиморасчетов и установив курсор на документ
отгрузки, получить ID этого документа для передачи значения в качестве параметра в функцию СУМ_ДАННЫЕ?
Ответ:
Из журнала взаиморасчетов Вы проводите какой-либо документ. Предположим, что для функции СУМ_ДАННЫЕ
используется запрос вида:
SELECT <поля> FROM <таблица> WHERE DOK_ID = :ID
В качестве значения параметра :ID нужно использовать ID проводимого документа.
Тогда в Мастере запросов в качестве значения этого параметра нужно указать DOC@ID и не обращать внимания на
сообщения о том, что такое значение не является целым числом. Функция СУМ_ДАННЫЕ интерпретирует значения
параметров, указанные в мастере запросов, как формулы ЯФПК и вычисляет по этим формулам настоящие значения.
В данном случае формула очень проста - получить значения элемента DOC@ID того документа, который Вы проводите.
В качестве примера рекомендую рассмотреть типовую операцию СВОД и соответственно запрос
Амортизация свод.CA_PROVSVOD_AM, появившуюся в версии 11.83-1. Там как раз фигурируют тип документа и ID документа
|
Вопрос:
Как настроить сортировку платежной ведомости "по фамилии"?
Ответ:
За порядок вывода на печать записей в платежной ведомости отвечает указание order by в запросе PIKAZ_M_VED
(Печать платежной ведомости из реестра), который можно найти в Мастере запросов (запросы по зарплате).
Текст запроса:
select TAB_N, AGENT as FAMALIO,N_DOG_M,SUM_D as SUM_R
from PRIKAZ_M
where TIP_D= :tip And ID_D=:ids
order by FAMALIO
Для изменения порядка вывода записей достаточно заменить имя поля, выбрав другое из списка
выбираемых полей из таблицы. Например, так:
order by TAB_N
в этом случае сортировка записей в платежной ведомости будет установлена по табельным номерам.
|
Вопрос:
Можно ли в бизнес-процедуре сформировать запросы, которые будут выбирать даннык из Компаса и передавать в другую базу данных MS SQL?
Ответ:
Существуют определенные правила написания кросс-базовых и кросс-серверных запросов, которые можно применять в т.ч. и в
бизнес-процедурах в операторе RunSQL. Бизнес-процедура может выполнить любой запрос, в том числе и переносящий данные
в другую БД. Например:
INSERT INTO OtherDB.dbo.OTHER_TABLE (поля)
SELECT поля FROM MOVIE
|
Вопрос:
При попытке повторно скомпилировать хранимую
процедуру (кнопка Создать процедуру) я получаю General SQL Error. Что делать?
Ответ:
При создании новых хранимых процедур
обратите внимание на то, чтобы имя процедуры в
первом предложении CREATE PROCEDURE <имя> совпадало
с именем в поле ввода, которое так и называется
"Имя хранимой процедуры". Несоблюдение этого условия приводит к General SQL Error. |
Вернуться к главному перечню вопросов
|
|
|