06.09.2006, 19:42 | #1 |
Moderator
|
Пользовательский генератор строк-перечислений для критерия запроса в Axapta
Пользователям Axapta в нашей компании иногда приходится создавать различные журналы для произвольных подмножеств элементов некоторых справочников. Например, необходимо сторнировать амортизацию для некоторого списка карточек ОС, причем коды карточек (инвентарные номера) идут не подряд и поэтому задание критерия выбора таких карточек посредством указания диапазона вида "ПерваяКарточка..ПоследняяКарточка" не представляется возможным. Можно использовать только вариант задания критерия в виде строки, в которой коды карточек перечислены через запятую. Для 5-10 карточек это сделать несложно, но как быть, если карточек 100 или 200?
Как задача решается сейчас? Пользователь присылает мне список нужных карточек в виде столбца в файле Excel. Я окружаю эти данные некоторым количеством "шаманских" формул и получаю большую длинную строку, состоящую из кодов этих карточек, разделенных запятыми. Затем делю эту большую строку на подстроки такого размера, чтобы они помещались в поле "Критерий" формы задания параметров запроса, после чего создаю в этой форме необходимое количество новых строк (в полях "Таблица" и "Поле" задаю соответственно "Основные средства" и "Инв. номер ОС") и далее при помощи серии из нескольких "копипастов" (Copy/Paste) вручную "перебрасываю" данные из Excel в ячейки колонки "Критерий". После всех этих манипуляций я формирую нужный журнал и "возвращаю" его заинтересованному пользователю для проверки, редактирования и разноски. В целом, задача и для меня достаточно рутинна, но все же не так утомительна, как для пользователя, который не владеет этой технологией. И вот сегодня мне в очередной раз "всё это надоело" и я решил наконец облачить своё несложное "ноу-хау" в форму инструкции, пригодную для использования широкой пользовательской общественностью. Итак, рассмотрим построение генератора строк "своими руками" в русской версии Excel . Для этого нам потребуется чистый рабочий лист. Если он уже приготовлен, то выполните на нём следующие шаги: 1.В ячейку A1 введите строку: Элементы списка 2.В ячейку B1 введите строку: Строки критериев 3.Ячейка С1 должна оставаться пустой 4.В ячейку D1 введите максимально допустимое кол-во символов в строке критерия. В моей Аксапте это значение равно 250. Если вы не уверены в этом значении для вашей системы, то можете спросить у IT-специалистов, эксплуатирующих вашу Axapta, о "размере EDT Range". Помимо ввода значения, для дальнейшего удобства установите для ячейки D1 выравнивание по центру. 5.В ячейку E1 введите строку: <= максимально допустимое кол-во символов в строке критерия 6.В ячейку B2 введите (скопируйте отсюда) формулу: =ЕСЛИ( ИЛИ( ЕПУСТО(C1), (ДЛСТР(A2)+1+C1)>$D$1 ), A2, B1 & "," & A2) (ВАЖНО: если у вас в качестве разделителя списка в Windows используется точка с запятой, а не запятая, как у меня, то замените в этой формуле первые три запятые на точки с запятой. Самую последнюю запятую во фрагменте формулы & "," & трогать не надо!) 7.В ячейку C2 введите формулу: =ДЛСТР(B2) 8.В ячейку D2 введите формулу: =C3<C2 9.Встаньте на ячейку A2 и выполните команду меню: Окно \ Закрепить области 10.Выделите диапазон A1 : D2 и выполните команду меню: Данные \ Фильтр \ Автофильтр Ваш шаблон готов. Для его пробы следует скопировать некоторый столбец данных в колонку A, начиная с ячейки A2. После выполнения этой операции скопируйте формулы, находящиеся в ячейках диапазона B2 : D2, в ячейки, расположенные под этим диапазоном до строки, определяемой последней непустой ячейкой в колонке A. Самый быстрый из известных мне способов такого развертывания формул вниз заключается в следующем: выделите мышкой диапазон B2 : D2, после чего наведите мышку на правый нижний угол ячейки D2, так чтобы курсор принял форму крестика, и выполните двойной щелчок. Выполнив всё вышеперечисленное, отфильтруйте колонку D по значению "ИСТИНА". На экране останутся только необходимые вам строки. Далее последовательно копируете ячейки из колонки B в ячейки колонки "Критерий" формы задания параметров запроса в Axapta. Всё. Сохраните ваш Excel'ный генератор для будущего использования. В дальнейшем вы просто будете стирать старые значения в колонке A и помещать в нее новые наборы данных, не забывая добавлять или удалять формулы в колонках В,С,D в соответствии с количеством значений в колонке A. P.S. ----------- Для английской версии Excel формулы для ячеек B2 и C2 будут выглядеть соответственно как =IF( OR( ISBLANK(C1), (LEN(A2)+1+C1)>$D$1 ), A2, B1 & "," & A2) и =LEN(B2) А колонку D в случае английской версии надо будет фильтровать по значению TRUE. Ну и, конечно же, зарегистрированные пользователи Форума могут не делать описанную выше "самостоятельную работу", а сразу воспользоваться прилагаемым файлом CriteriaGenerator.xls СОВЕТ: Если вы себя чувствуете не очень уверенно при поштучном копировании ячеек из колонки "B" Excel в ячейки колонки "Критерий" Axapta (некоторый "страх" может возникать из-за того, что в ячейке Excel содержится формула, а в "Критерий" попадает вычисленный результат этой формулы, который к тому же не виден полностью), то можно сначала выделить и скопировать все нужные ячейки из колонки "B" Excel в Блокнот (Notepad) и далее уже из Блокнота поштучно копировать эти полностью видимые строки в ячейки-критерии Axapta. Последний раз редактировалось Gustav; 15.09.2006 в 09:17. |
|
|
За это сообщение автора поблагодарили: mau (1), kvg6 (1). |
|
|