Маркер и Изменение подцепки
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 17 сен 2009, 11:39
- Контактная информация:
Маркер и Изменение подцепки
Возник вопрос, как лучше в ARD изменить подцепку(выборку) если используется маркер.
Как я понял мне необходимо будет заполнить временную таблицу значениями из маркера, и использовать баундс?
Как я понял мне необходимо будет заполнить временную таблицу значениями из маркера, и использовать баундс?
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 17 сен 2009, 11:39
- Контактная информация:
вот пробую делать так:
Клиент после запуска отчета зависает. Грит тока - формирую отчет. и не откликается
Код: Выделить всё
.{ margin while i < cnt
.begin
if getmarker(DepartmentMarker, i, D) then
getfirst persons where ((D /== persons.department and 'С' == persons.isemployee));
i := i + 1;
str := persons.fio;
end.
persons = ^
.}
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 17 сен 2009, 11:39
- Контактная информация:
Вот такой код получился
Код: Выделить всё
.form 'ODKrepSP'
.nameinlist 'Отчет СП'
.ard
.var
Cnt, i: longint;
D : comp;
DepartmentMarker: longint;
str : string;
.endvar
.create view vBD
SELECT
persons.fio,
persons.tabnmb,
catalogs.name
FROM
persons,
catalogs
WHERE
((
'С' == persons.ISEMPLOYEE and
catalogs.nrec /== persons.department
))
ORDER BY catalogs.nrec;
.begin
DepartmentMarker := InitMarker('CatalogsMarker', 8, 200, 100); //CatalogsMarker
Cnt := GetMarkerCount(DepartmentMarker);
if Cnt > 0 then
{
// Resetbounds(tnCatalogs);
for (i := 0; i < Cnt; i := i + 1)
{
if getmarker(DepartmentMarker, i, D) then
getfirst catalogs where ((D == catalogs.nrec));
}
// Setbounds(tnCatalogs);
}
i := 0;
end.
.fields
str
.endfields
.{ margin while i < cnt
.begin
if getmarker(DepartmentMarker, i, D) then
getfirst persons where ((D /== persons.department and 'С' == persons.isemployee));
i := i + 1;
str := persons.fio;
end.
persons = ^
.}
.endform
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
1. ORDER BY catalogs.nrec уберите
2. margin - тоже нафиг
3. result.log заполнился?
4.до while
вместо while
2. margin - тоже нафиг
3. result.log заполнился?
4.
Код: Выделить всё
.create view vBD
SELECT
persons.fio,
persons.tabnmb,
catalogs.name
FROM
persons,
catalogs
WHERE
((
'С' == persons.ISEMPLOYEE and
persons.department == catalogs.nrec
))
bounds byfiltr == persons.ISEMPLOYEE and
D== persons.department
;
Код: Выделить всё
if cnt>0
vBD.pushbounds(vBD.tbbyfiltr)
Код: Выделить всё
.{?internal;cnt>0;
.fiedls
vBD.persons.fio
.endfields
.{ while i < cnt
.begin
if getmarker(DepartmentMarker, i, D) then {}
i:=i+1;
end.
.{table 'vBD'
.begin
logstrtofile('c:\!!!.txt',persons.fio+' '+string(i))
end.
persons = ^
.} //.{table 'vBD'
.}
.}//.{?internal;cnt>0;
.{?internal;cnt=0;
.fiedls
vBD.persons.fio
.endfields
.{table 'vBD'
persons = ^
.} //.{table 'vBD'
.}
Последний раз редактировалось edward_K 12 ноя 2009, 19:21, всего редактировалось 3 раза.
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 17 сен 2009, 11:39
- Контактная информация:
У меня почему то тут "спотыкается" компилятор:
Грит: ожидалась, Константа, Функция, поле .....
На строчке
Код: Выделить всё
.{while i < cnt
.begin
if getmarker(DepartmentMarker, i, D) then
end.
.{table 'vBD'
persons = ^
.} //.{table 'vBD'
.}
На строчке
Код: Выделить всё
end.
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 17 сен 2009, 11:39
- Контактная информация:
Наверное что то не так.... Завис снова при выполнении.
не могли бы "разжевать" вот этот кусочек кода:
не могли бы "разжевать" вот этот кусочек кода:
Код: Выделить всё
.{?internal; cnt > 0;
.fiedls
vBD.persons.fio
.endfields
.{while i < cnt
.begin
if getmarker(DepartmentMarker, i, D) {}
end.
.{table 'vBD'
persons = ^
.} //.{table 'vBD'
.}
.}//.{?internal;cnt>0;
.{?internal;cnt=0;
.fiedls
vBD.persons.fio
.endfields
.{table 'vBD'
persons = ^
.} //.{table 'vBD'
.}
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 17 сен 2009, 11:39
- Контактная информация:
Вообщем выводит отчет, в нем строки:
и так до конца отчета. отчет большой.
Если не трудно, объясните как происходит механизм изменения подцепки в приведенном вами выше примере???
То есть как я понимаю, использование баундса, позволяет изменять условие WHERE. Это вроде понятно. а вот дальше по приведенному вашему коду, я пока ничего понять не могу. То есть я вижу только перебор значений маркера....
Код: Выделить всё
persons =
persons =
persons =
persons =
Если не трудно, объясните как происходит механизм изменения подцепки в приведенном вами выше примере???
То есть как я понимаю, использование баундса, позволяет изменять условие WHERE. Это вроде понятно. а вот дальше по приведенному вашему коду, я пока ничего понять не могу. То есть я вижу только перебор значений маркера....
niteo
Вам изначально что нужно-то? Если список всех сотрудников из выбранных подразделений - это проще сделать безо всяких баундсов, как-то так:Будет список сотрудников по алфавиту. Если надо с группировкой по подразделениям - это чуть посложнее, но тоже без баундсов.
Вам изначально что нужно-то? Если список всех сотрудников из выбранных подразделений - это проще сделать безо всяких баундсов, как-то так:
Код: Выделить всё
...
.create view vBD
as select Persons.FIO, Persons.Department
from Persons
where (('С'==Persons.IsEmployee))
order by Persons.FIO;
...
.{table 'vBD'
.{?Internal;SearchMarker(DepartmentMarker,vBD.Persons.Department,i)
.fields
vBD.Persons.FIO
.endfields
ФИО = ^
.} // Internal
.} // table 'vBD'
...
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 17 сен 2009, 11:39
- Контактная информация:
Красивая конструкция
Я даже и не подумал что так просто можно решить сию проблему.
А вот так с сортировкой по подразделениям:
Но все равно хотелось бы разобраться в примере который предложил edward_K Может сможете мне объяснить что там к чему?
Код: Выделить всё
{?Internal;SearchMarker(DepartmentMarker,vBD.Persons.Department,i)
А вот так с сортировкой по подразделениям:
Код: Выделить всё
.create view vBD
SELECT
persons.fio, persons.department
FROM
persons, catalogs
WHERE
((
'С'==Persons.IsEmployee and
persons.department == catalogs.nrec
))
ORDER BY Persons.Department;

Но все равно хотелось бы разобраться в примере который предложил edward_K Может сможете мне объяснить что там к чему?
