04.05.2007, 17:55 | #1 |
Moderator
|
Пользовательский генератор строк-перечислений...- 2: Доп.вкладка для SysQueryForm
Добрый день, уважаемые коллеги,
Хотелось бы поделиться очередной поделочкой. История вопроса Ранее на Форуме проходила моя тема Пользовательский генератор строк-перечислений для критерия запроса в Axapta. Приведу здесь цитату из нее, чтобы напомнить, о чем речь. Цитата:
Пользователям Axapta в нашей компании иногда приходится создавать различные журналы для произвольных подмножеств элементов некоторых справочников. Например, необходимо сторнировать амортизацию для некоторого списка карточек ОС, причем коды карточек (инвентарные номера) идут не подряд и поэтому задание критерия выбора таких карточек посредством указания диапазона вида "ПерваяКарточка..ПоследняяКарточка" не представляется возможным. Можно использовать только вариант задания критерия в виде строки, в которой коды карточек перечислены через запятую. Для 5-10 карточек это сделать несложно, но как быть, если карточек 100 или 200?
Как задача решается сейчас? Пользователь присылает мне список нужных карточек в виде столбца в файле Excel. Я окружаю эти данные некоторым количеством "шаманских" формул и получаю большую длинную строку, состоящую из кодов этих карточек, разделенных запятыми. Затем делю эту большую строку на подстроки такого размера, чтобы они помещались в поле "Критерий" формы задания параметров запроса, после чего создаю в этой форме необходимое количество новых строк (в полях "Таблица" и "Поле" задаю соответственно "Основные средства" и "Инв. номер ОС") и далее при помощи серии из нескольких "копипастов" (Copy/Paste) вручную "перебрасываю" данные из Excel в ячейки колонки "Критерий". После всех этих манипуляций я формирую нужный журнал и "возвращаю" его заинтересованному пользователю для проверки, редактирования и разноски. Что нового? У меня неплохая новость - теперь все эти манипуляции может проделать каждый практически в АВТОМАТИЧЕСКОМ режиме, затратив минимум усилий (буквально пару раз щелкнув мышкой). Для стандартной формы задания параметров запроса в Axapta предлагается новая вкладка "Генератор критериев" (см. иллюстрации в doc-файле в прилагаемом архиве). Что будет делать пользователь? Если на этой вкладке нажать на кнопку "Вывести инструкцию", то в окно Infolog в Аксапте будет выведена следующая информация (я пока не научился создавать нормальный хелп, поэтому прибегнул к такому неказистому способу): Цитата:
ИНСТРУКЦИЯ ПО РАБОТЕ С ВКЛАДКОЙ "ГЕНЕРАТОР КРИТЕРИЕВ"
Функциональность данной вкладки предназначена для "нарезания" исходного вертикального "Столбца значений" на горизонтальные строки-критерии для таблицы на вкладке "Условия". Цель - облегчить пользователю ввод критерия, представленного в виде длинного списка значений. 1. Перейдите на вкладку "Условия" и встаньте на строку с таблицей и полем, для которого Вы хотите создать строки критериев. Если подходящей строки в "Условиях" нет, то создайте новую строку, заполнив "Таблицу" и "Поле". 2. Вернитесь на вкладку "Генератор критериев". 3. Используя клавиши Ctrl+V (или Shift+Ins), вставьте в поле "Столбец значений" Ваш набор данных ("много строк - один столбец"), ранее скопированный в каком-либо источнике (например, столбец из MS Excel или из Блокнота). 4. При желании можно нажать кнопку "Предварительный просмотр" и увидеть в окне Infolog строки, предназначенные для вставки в "Условия". 5. Нажмите кнопку "Генерировать критерии". В результате в таблице на вкладке "Условия" будут созданы новые строки с теми же значениями полей "Таблица" и "Поле", что и у исходной строки. Новые строки будут добавлены последовательно ниже исходной строки. В поле "Критерий" очередной новой строки будет помещена очередная порция значений, разделенных запятыми. Об остальных кнопках. Кнопки "В начало столбца", "В конец столбца", "Выделить весь столбец" имеют эффект, когда в поле "Столбец значений" присутствует текст. Кнопки "В начало столбца" и "В конец столбца" помещают курсор в начало и конец столбца соответственно, имитируя действие стандартных клавиш Ctrl+Home и Ctrl+End, которые по умолчанию почему-то в этом текстовом поле не работают. Кнопка "Выделить весь столбец" в свою очередь иммитирует действие стандартной комбинации Ctrl+A (которая также по умолчанию в этом поле не работает). Выделить весь столбец полезно, например, для его последующей очистки клавишей Del или вставки новых данных взамен имеющихся. Совершенно несложно. После нажатия на кнопку "Генерировать критерии" из исходного столбца значений будут сформированы критериальные строки, в каждой из которых исходные значения из столбца будут перечислены последовательно через запятую. Максимальная длина одной такой критериальной строки зависит от размера EDT Range и стандартно равняется 250 символам. Формирование текущей критериальной строки продолжается до тех пор, пока при попытке добавления в нее очередного значения из столбца получающаяся длина не превысит максимальную. При этом последнее недобавленное значение из столбца помещается в новую критериальную строку, а только что законченная строка используется в качестве значения поля "Критерий" при формировании новой строки в таблице на закладке "Условия". Значения других полей - "Таблица" и "Поле" - для новой строки копируются из вышерасположенной строки, которая была текущей выбранной до вставки новой (поэтому и важно перед началом всего процесса "встать" на закладке "Условия" на строку с нужными значениями полей "Таблица" и "Поле"). Процесс продолжается до тех пор, пока не будут выбраны все исходные строки из столбца значений. Пустые строки (а также строки, состоящие из одних пробелов) из рассмотрения исключаются. При обработке очередной строки из столбца значений она вначале очищается от начальных и конечных пробелов, а затем добавляется к текущей критериальной строке. Самая последняя критериальная строка по понятным причинам может быть существенно короче предыдущих. Исходная строка в таблице "Условия" так и останется пустой (в поле "Критерий"). Своей "пустотой" она не оказывает никакого влияния на последующий процесс фильтрации данных. Кроме того, в ней можно, например, выбрать другое поле и построить критерии для него. Если же эта пустая строка раздражает, то ее можно просто вручную удалить из бланка. Предостережения Не стоит увлекаться очень длинными списками значений - это может привести к аварийному завершению вашей сессии Axapta. В процессе тестирования этой функциональности я генерировал критерии для 1000 ОС - последущее нажатие на ОК привело к краху моей Аксапты. В то же время 500 ОС нормально отфильтровались в форме "Основные средства". Поэтому здесь всё должно постигаться эмпирическим путем. Использование менее 500 элементов в списке не вызывало никаких проблем. Развертывание Прилагаемый архив содержит две формы в двух одноименных xpo-файлах: SysQueryForm и SysQueryForm_GeneratorTab. C проектами идут метки. SysQueryForm - это полная форма из моей рабочей системы с уже добавленной вкладкой "Генератор критериев". Если у вас имеются ваши собственные модификации этой формы на слое USR, то по вполне понятным причинам вы можете не захотеть воспользоваться моей полной формой, а держать процесс внедрения новой вкладки под более прозрачным контролем. В этом случае воспользуйтесь второй формой - SysQueryForm_GeneratorTab. В этой форме содержится только новая вкладка. Вся моя логика не выходит за пределы этой вкладки (поэтому "меньшая" форма в своем урезанном виде компилируется без ошибок). Для ее внедрения необходимо импортировать этот "меньший" проект, после чего, открыв и расположив рядом в репозитарии окна с вашей SysQueryForm и моей SysQueryForm_GeneratorTab, скопировать новую вкладку в вашу форму. Т.е. нужно выполнить операцию по перетаскиванию нового узла AOT: \Forms\SysQueryForm_GeneratorTab\Designs\Design\[Group:MainGrp]\[Group:Grp]\[Tab:QueryTab]\[TabPage:CriteriaGeneratorTab] в старый узел AOT: \Forms\SysQueryForm\Designs\Design\[Group:MainGrp]\[Group:Grp]\[Tab:QueryTab] Новая вкладка CriteriaGeneratorTab должна встать на последнюю позицию в QueryTab (после RangeTab, SortingTab и PrintOptionsTab). После этого можно удалить форму SysQueryForm_GeneratorTab из АОТ. Она является только "перевозчиком" и для самостоятельного использования не предназначена (хотя ее и можно запустить и даже без проблем нажать на кнопку "Вывести инструкцию"). |
|
|
За это сообщение автора поблагодарили: zemlyn (2), kashperuk (5). |
04.05.2007, 18:04 | #2 |
Участник
|
Не знаю, буду ли я пользоваться этой поделкой, но всегда нравилось читать Ваши описания
На одном дыхании прочитал Спасибо |
|