Повторяющиеся записи в browse
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Повторяющиеся записи в browse
С6.3 ABC 9056
Вывожу в колонку таблицы название документа , в другую наименование исследований, которые он описывает.
Название документа повторяется столько раз, сколько в нем исследований. По условию вывожу название док. в переменную, или приваеваю ей пробел. Но при выводе таблицы с верху вниз все нормально, но при некоторых операциях (например добавление записи) вывод идет с низу в верх, и получается каша.
Как заставить browse делать перевывод всегда в одном направлении?
С уважением,
Виктор
Вывожу в колонку таблицы название документа , в другую наименование исследований, которые он описывает.
Название документа повторяется столько раз, сколько в нем исследований. По условию вывожу название док. в переменную, или приваеваю ей пробел. Но при выводе таблицы с верху вниз все нормально, но при некоторых операциях (например добавление записи) вывод идет с низу в верх, и получается каша.
Как заставить browse делать перевывод всегда в одном направлении?
С уважением,
Виктор
- Andrew Listiev
- Активист
- Сообщения: 166
- Зарегистрирован: 07 Июль 2005, 11:16
- Откуда: Латвия, Рига
Re: Повторяющиеся записи в browse
Приветствую Виктор!
Я более чем уверен, что если вы опишите проблему более конкретно, то вы получите ответ намного быстрее
Я более чем уверен, что если вы опишите проблему более конкретно, то вы получите ответ намного быстрее

- Олег
- Ветеран движения
- Сообщения: 122
- Зарегистрирован: 16 Июль 2005, 2:35
- Откуда: Москва
- Контактная информация:
Re: Повторяющиеся записи в browse
Если я правильно Вас понял, то Вы хотите, что-бы в первой колонке, при совпадении названий документов, это название отображалось только в первой строке повторяющихся строк, а в последующих - пустая ячейка?
И, опять-же, если я правильно понял, в бровзе Вы используете постраничный просмотр?
Если все так, то есть два варианта решения:
- простой - в точке вставки типа "до формирования записи QUEUE" (точное название в ABC не скажу, т.к. работаю на ШВС, но подобная точка вставки должна быть и в ABC) - точка вставки в рутинке (или ABC-методе), в которой формируется запись для очередной строки бровза, КАЖДЫЙ раз пробегаем по всем записям очереди Queue:Browse:xxx, где xxx - ид-номер нужного бровзе-контрола (можно посмотреть из декларации этой очереди в "полосатом" редакторе). При этом сохраняем название документа из текущей записи и если в следующей записи - такое-же название, то очищаем поле очереди, отвественное за первую колонку. Как я уже сказал - это простой вариант, т.к. не требует разной реакции на разные варианты заполнения страницы (сдвиг вверх/вниз, переход на новую страницу).
- немного посложнее - требует разной логики для разных вариантов заполнения страницы. При полном обновлении страницы практически совпадает с первым (простым) вариантом. При движении курсора вниз требует перерисовки только верхней строки страницы (в этом случае сравниваем только первую запись очереди и следующую). При движении курсора вверх требует перерисовки верхней строки и, возможно, следующей (если во второй строке было выведено название документа, которое совпадает с документом в новой первой строке).
Как видишь, все эти варианты требуют наличия в очереди бровза еще одного "скрытого" поля, в котором всегда будет храниться название документа - именно по этим полям и надо делать сравнение. Проще всего - обьявить локальную переменную и сделать ее "горячей" для данного бровза - после этого это поле автоматически будет обьявлено в очереди бровза. Или, как вариант, вставить это поле в бровз последней колонкой и задать этой колонке нулевой размер, что-бы скрыть ее.
Удачи!
И, опять-же, если я правильно понял, в бровзе Вы используете постраничный просмотр?
Если все так, то есть два варианта решения:
- простой - в точке вставки типа "до формирования записи QUEUE" (точное название в ABC не скажу, т.к. работаю на ШВС, но подобная точка вставки должна быть и в ABC) - точка вставки в рутинке (или ABC-методе), в которой формируется запись для очередной строки бровза, КАЖДЫЙ раз пробегаем по всем записям очереди Queue:Browse:xxx, где xxx - ид-номер нужного бровзе-контрола (можно посмотреть из декларации этой очереди в "полосатом" редакторе). При этом сохраняем название документа из текущей записи и если в следующей записи - такое-же название, то очищаем поле очереди, отвественное за первую колонку. Как я уже сказал - это простой вариант, т.к. не требует разной реакции на разные варианты заполнения страницы (сдвиг вверх/вниз, переход на новую страницу).
- немного посложнее - требует разной логики для разных вариантов заполнения страницы. При полном обновлении страницы практически совпадает с первым (простым) вариантом. При движении курсора вниз требует перерисовки только верхней строки страницы (в этом случае сравниваем только первую запись очереди и следующую). При движении курсора вверх требует перерисовки верхней строки и, возможно, следующей (если во второй строке было выведено название документа, которое совпадает с документом в новой первой строке).
Как видишь, все эти варианты требуют наличия в очереди бровза еще одного "скрытого" поля, в котором всегда будет храниться название документа - именно по этим полям и надо делать сравнение. Проще всего - обьявить локальную переменную и сделать ее "горячей" для данного бровза - после этого это поле автоматически будет обьявлено в очереди бровза. Или, как вариант, вставить это поле в бровз последней колонкой и задать этой колонке нулевой размер, что-бы скрыть ее.
Удачи!
Re: Повторяющиеся записи в browse
В данном случае сложности с частичной прокруткой записей относящихся к документу наверное перекроют те затраты которые наверное правильнее сделать перепроектировав отображение информации.
Я бы сделал 2 списка - в одном документы, в другом список исследований относящихся к данному документу - и нагляднее и очевиднее интерфейс
Я бы сделал 2 списка - в одном документы, в другом список исследований относящихся к данному документу - и нагляднее и очевиднее интерфейс
- Олег
- Ветеран движения
- Сообщения: 122
- Зарегистрирован: 16 Июль 2005, 2:35
- Откуда: Москва
- Контактная информация:
Re: Повторяющиеся записи в browse
Сложности особой здесь нет! Просто в описании данный алгоритм выглядит громоздко и сложно, а реализуется достаточно быстро!
Да и по скорости тормозов особых не будет - даже если взять крайний случай, когда прийдется пройтись по всем записям очереди страницы, то по скорости этот цикл (до 40 строк на страницу) займет столько-же, сколько уходит на выборку и формирование одной записи (чтение из основного файла и выборка названия документа из справочника).
Что-же касается Вашего предложения с двумя списками, то по эргономике оно сильно проигрывает одному списку. К тому-же, насколько я понял, не стоит задача показать исследования, относящиеся к заданным документам, а как раз наоборот - нужно показать общий список исследований и в качестве справочной информации показать название документа. Т.е., обычно это делается без особых изысков - в колонке "Документ" показывается название документа. Но коллеге захотелось убрать часть лишней информации!
Хотя, в зависимости от реальной задачи, я вероятно реализовал-бы этот отчет в виде дерева - первая колонка "Документ" реализует первый уровень дерева, а во второй колонке - исследования, связанные с данным документом. При полном развертываении такого дерева получаем нужный список всех исследований, при этом лишняя инфа из первой колонки убирается автоматически самим "движком" дерева-списка!
Да и по скорости тормозов особых не будет - даже если взять крайний случай, когда прийдется пройтись по всем записям очереди страницы, то по скорости этот цикл (до 40 строк на страницу) займет столько-же, сколько уходит на выборку и формирование одной записи (чтение из основного файла и выборка названия документа из справочника).
Что-же касается Вашего предложения с двумя списками, то по эргономике оно сильно проигрывает одному списку. К тому-же, насколько я понял, не стоит задача показать исследования, относящиеся к заданным документам, а как раз наоборот - нужно показать общий список исследований и в качестве справочной информации показать название документа. Т.е., обычно это делается без особых изысков - в колонке "Документ" показывается название документа. Но коллеге захотелось убрать часть лишней информации!
Хотя, в зависимости от реальной задачи, я вероятно реализовал-бы этот отчет в виде дерева - первая колонка "Документ" реализует первый уровень дерева, а во второй колонке - исследования, связанные с данным документом. При полном развертываении такого дерева получаем нужный список всех исследований, при этом лишняя инфа из первой колонки убирается автоматически самим "движком" дерева-списка!
Re: Повторяющиеся записи в browse
Я извиняюсь, свалился комр А то получается задал вопрос и исчез.
Я так и делаю, при формировании очереди я запоминаю название документа и вывожу его один раз до изменения условия. Когда идет первый раз вывод таблицы все отлично, но при добавлении записи, изменении и т. д. перевывод идет в обратном направлении и получается ерунда. Перевывод файл или страница ничего не меняет.
С уважением,
Виктор
Я так и делаю, при формировании очереди я запоминаю название документа и вывожу его один раз до изменения условия. Когда идет первый раз вывод таблицы все отлично, но при добавлении записи, изменении и т. д. перевывод идет в обратном направлении и получается ерунда. Перевывод файл или страница ничего не меняет.
С уважением,
Виктор
Re: Повторяющиеся записи в browse
Делать 2 списка это большой головняк. Я делал такие проги, но в данном случае овчина выделки не стоит.
С уважением,
Виктор
С уважением,
Виктор
- Олег
- Ветеран движения
- Сообщения: 122
- Зарегистрирован: 16 Июль 2005, 2:35
- Откуда: Москва
- Контактная информация:
Re: Повторяющиеся записи в browse
Хмм... Если я правильно помню алгоритм формирования очереди бровза в ШВС, то формирование этого списка в обратном направлении производится только в случае "прыжка" в конец списка клавишами Ctrl+PgDn или End - во всех остальных случаях формирование идет или в нормальном порядке или просто удаляется первая запись очереди и добавляется новая в конец (прокрутка списка вниз).Lenkov писал(а):но при добавлении записи, изменении и т. д. перевывод идет в обратном направлении и получается ерунда.
Не думаю, что в ABC этот алгоритм как-то сильно изменили!
В ЛЮБОМ СЛУЧАЕ, что-бы не "заморачиваться" на этом, можно использовать вариант с полным переформированием всех записей очереди при каждом добавлении новой записи.
В ШВС, к примеру, есть признак направления чтения записей из файла - вперед или в обратном направлении. Т.е., если вперед, то текущая запись будет добавлена в конец очереди. В противном случае - в начало очереди. Таким образом, если текущая запись будет добавлена в начало очереди, то в ней всегда отображаем название документа и пробегаемся по остальным записям очереди, что-бы скорректировать вывод названия документа. Если новая запись будет добавлена в конец очереди, то пробегаем с начала очереди и корректируем отображение названия документа, а в новой записи название документа выводим в соответствии с данными из последней записи очереди.