28.04.2023, 12:13 | #1 |
Участник
|
Не переходит к следующей записи датасорса
Прогоняю по нажатию кнопки на форме цикл по отмеченным записям. пока не вызываю класс внутри перебираются все записи, но если вызываю класс по печати отчёта, то отрабатывает только одна. Куда копать?
Выдаётся эксель отчёт и цикл заканчивается на одной записи.. |
|
28.04.2023, 12:14 | #2 |
Участник
|
Извините, но ничего не понятно.
"не переходит к следующей" - в классе? Покажите код, где в классе перебираете. Покажите, как в класс курсор передаете. |
|
28.04.2023, 12:43 | #3 |
Участник
|
Код кнопки на форме стандартный по обходу датасорса for (record = table_ds.getFirst(true)?..table_ds.getNext()) { вызываем класс печати отчёта Printclass = new.. printclass.run();} несмотря на отмеченные несколько записей точка останова в цикл после формирования экселя не попадает. Если вместо формирования отчёта пишу info(), то попадает столько раз, сколько записей отмечено
|
|
28.04.2023, 13:06 | #4 |
Участник
|
по-прежнему не очень понятно
|
|
28.04.2023, 13:24 | #5 |
Участник
|
Скорее всего класс Printclassс где-то внутри себя портит переданный ему курсор. Попробуйте передавать в класс печати копию курсора. Для этого объявите ещё одну переменную табличного типа и проинициализируйте её через метод data
|
|
|
За это сообщение автора поблагодарили: Pandasama (3), Aleksey2020 (1). |
28.04.2023, 17:36 | #6 |
Участник
|
А ответы по теме Передать выборку по таблице из класса в класс не помогли,
Или тут что-то другое? В любом случае, код, которые есть в методе getFormRecord класса FormLetterне помню чтобы когда-то подводил. Правда там нужно сразу передавать переменную датасорса, но ей сполне можно получить из курсора (конечно с проверкой что передан курсор именно по датасорсу). |
|
28.04.2023, 18:33 | #7 |
Участник
|
Если я правильно понял, то у него есть класс-отчета, который формирует отчет по одной записи таблицы. И ему надо выбрать несколько записей на форме и по каждой из них сформировать по отдельному отчету
Т.е. не стоит задача передать в класс-отчета список. В отчет всегда передается одна запись. И, вероятно, что-то там с этой записью происходит из-за чего "следующую" запись в цикле уже просто не находит. Т.е. тут совет от S.Kuskov подходит. Или передавать в класс не напрямую запись из DataSource или уже в классе при получении запись сделать ее "перевыбор" (через Find()), чтобы разорвать связь с DataSource В идеале, передавать в класс-отчета не саму запись, а ее идентификатор (RecId или номер документа). Тогда такой проблемы вообще не возникнет.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
29.04.2023, 14:16 | #8 |
Участник
|
Ну, если так, то да - без просмотра кода выборки и кода работы с курсором в классе отчета понять сложно.
Ну и, без информации о том, что за формирование Excel (SSRS с сохранением, использование OpenXML, использование чего-то типа стандартных классов формирования Excel или вообще прямая работа с COM или NET) подсказать что-то невозможно. PS: хотя, возможно, что для автора русский язык не является родным и ему проще задать вопрос хотя бы на английском? |
|
22.05.2023, 12:02 | #9 |
Участник
|
Благодарю, действительно ломался датасорс формы в классе печати. Не ожидал, что передавая запись в другой класс как record за ней тащатся все отмеченные строки датасорса. Ещё и возвращаются испорченные. Спасибо.
|
|
|
|