AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.09.2006, 19:42   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Пользовательский генератор строк-перечислений для критерия запроса в 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.
Миниатюры
Нажмите на изображение для увеличения
Название: ForCritGen.jpg
Просмотров: 731
Размер:	63.0 Кб
ID:	2070  
Вложения
Тип файла: xls CriteriaGenerator.xls (92.0 Кб, 219 просмотров)

Последний раз редактировалось Gustav; 15.09.2006 в 09:17.
За это сообщение автора поблагодарили: mau (1), kvg6 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пользовательский генератор строк-перечислений...- 2: Доп.вкладка для SysQueryForm Gustav DAX: База знаний и проекты 1 04.05.2007 18:04
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 12.04.2007 16:10
Ускорение выполнения запроса Oracle + MS Axapta Горбунов Дмитрий DAX: Программирование 17 15.11.2005 18:13
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:25.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.