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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.08.2005, 07:10   #1  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Сравнение с большим списком
Задача. Есть список табельных номеров сотрудников штук 50-60.
Нужно в аксапте сделать им дополнительные права, в справочнике сотрудников корректировки некоторые - обработать вобщем.
Делаю это программно в джобе - цикл по empltable. Нужно сравнить emplid со списком данных табельных. Как это сделать красиво? Не писать же в if 50 раз условие?
Сделал контейнер
container cont = ["00296",и тд...,"01645"];
и хотел в if сравнить через confind, но при компиляции ошибка -
"Переполнение во внутреннем стеке компилятора."

Как быстро и красиво выйти из ситуации?
Старый 31.08.2005, 08:18   #2  
Dozer is offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Регистрация: 16.11.2004
Адрес: г. Калгари, Канада
В каком виде список табельных номеров?
Если хранятся в таблице - тогда ИМХО нужно просто сделать
select emplTable
exists join <ваша таблица табельных номеров>
where <ваша таблица табельных номеров>.emplid == emplTable.emplid;

вуаля.

С уважением.
Старый 31.08.2005, 09:11   #3  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Лучше всего воспользуйтесь вариантом Dozer-а.
А в случае с контейнером можно попробывать извратный способ: перелить его в Map, предварительно видоизменив, примерно так:
PHP код:
container cont =[11050"00296"1"00297",1,...,"01645",1]; 
// единицы не играют роли - нужны для соотв-вия формату Map-ы
// 50 - кол-во таб. номеров (то есть пар Key-Value в Map-е)
Map map Map::create(cont);
;
while 
select emplTable
{
 if (
map.exists(emplTable.emplID))
 {
 
// обработка emplTable
 
}

__________________
Старый 31.08.2005, 09:57   #4  
SimPai is offline
SimPai
MCTS
MCBMSS
 
105 / 10 (1) +
Регистрация: 22.05.2002
Адрес: Москва
Re: Сравнение с большим списком
Цитата:
Изначально опубликовано Perc
Сделал контейнер
container cont = ["00296",и тд...,"01645"];
и хотел в if сравнить через confind, но при компиляции ошибка -
"Переполнение во внутреннем стеке компилятора."

Как быстро и красиво выйти из ситуации?
Эта ошибка, вероятно, из-за длинного списка значений в контейнере.
Попробуйте объявить не один контейнер, а несколько (например, в каждом не более десяти значений). После в начале кода объедените контейнеры в один.
Или объявите несколько констант со списком значений (не очень длинным), а затем при объявлении контейнера, укажите в нём эти константы.
__________________
Удачи.
Старый 31.08.2005, 10:23   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Я бы не рекомендовал пользоваться контейнерами для этой задачи. Тем более - с константами. Хм. Ну, сделайте таблицу - пусть будет гибкое решение!

С Уважением,
Георгий
Старый 31.08.2005, 10:47   #6  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Re: Re: Сравнение с большим списком
Цитата:
Изначально опубликовано SimPai

Эта ошибка, вероятно, из-за длинного списка значений в контейнере.
А, ну конечно же! Ошибка-то при компиляции...
Perc, мой пост про Map можете смело игнорировать - виноват, невнимательно читал вопрос И прислушайтесь к Dozer и George Nordic.
__________________
Старый 31.08.2005, 10:55   #7  
SimPai is offline
SimPai
MCTS
MCBMSS
 
105 / 10 (1) +
Регистрация: 22.05.2002
Адрес: Москва
Цитата:
Изначально опубликовано George Nordic
Я бы не рекомендовал пользоваться контейнерами для этой задачи.
А почему бы и нет?! Не вижу причин не сделать именно так.
Кстати, Perc лучше сканировать не EmplTable, а этот контейнер (или таблицу, если он решит использовать именно таблицу)

Цитата:
Ну, сделайте таблицу - пусть будет гибкое решение!
Наверное, будет. Теоретически.
__________________
Удачи.
Старый 31.08.2005, 11:03   #8  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Изначально опубликовано George Nordic
Я бы не рекомендовал пользоваться контейнерами для этой задачи. Тем более - с константами. Хм. Ну, сделайте таблицу - пусть будет гибкое решение!

С Уважением,
Георгий
Гибкое решение Мне один раз джобик по списку запустить ... Потом по другому аналогичному списку. Хотелось как раз очень оперативно. Список то у меня уже был - табельные и фамилии подготовлены другим человеком по принципу который из акс вытянуть нельзя. думал щас сделаю как обычно в sql писал ctrc+c ctrl+v. И готово.
В итоге пришлось по списку нагенерировать условие типа
empltable.emplid == "00296" || empltable.emplid == "00593" || empltable.emplid == "01401" ||...
на треть экрана. Отработало. Но некрасиво это. Список то тьфу.. 55 штук по 5 символов и загнулась. Позор аксапте.
Согласен с SimPai, что лучше список сканировать, если он есть. Учту на будущее его предложение..
Старый 31.08.2005, 11:05   #9  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Г-н SimPai! Вы для кого пишите систему - для программистов? А прибежит тетенька и скажет "Ой! Я ошиблась в номере таком-то и таком-то! И запишите еще такой-то и такой-то номер, это, кажется тот-то и тот-то, но у него есть однофамилец, работает грузщиком, так вот это не он!"

Блин! Да сделайте таблицу, нарисуйте форму - делов-то! На пол-часа. И дайте юзеру упономеченному или сами администрите - легче же, чем в коде ковыряться и высматривать нужный табельный номер из 50ти!!!

Вам что, таблицу лишнюю жалко? Пожелейте тех, кто придет потом и вынужден будет разбираться в подобных "чудесах" с контейнерами.
Старый 31.08.2005, 11:25   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
George, это может быть однократная задача и с эти кодом никто не будет разбираться никогда. Сам делал примерно такое. Причем делал так написал локальную функцию в коде processCode(str code) а потом регэкспом заменил в списке коды на ее вызовы
Старый 31.08.2005, 11:27   #11  
SimPai is offline
SimPai
MCTS
MCBMSS
 
105 / 10 (1) +
Регистрация: 22.05.2002
Адрес: Москва
Цитата:
Изначально опубликовано George Nordic
А прибежит тетенька и скажет "Ой! Я ошиблась в номере таком-то и таком-то! И запишите еще такой-то и такой-то номер, это, кажется тот-то и тот-то, но у него есть однофамилец, работает грузщиком, так вот это не он!"
Бывает и так. Но как правильно заметил Perc весьма эффективно можно использовать ctrc+c ctrl+v.

Цитата:
Блин! Да сделайте таблицу, нарисуйте форму - делов-то!
Да я и не против. Кто хочет - пусть рисует таблицу, делает форму и т.д. А я прекрасно обойдусь и контейнером

Цитата:
И дайте юзеру упономеченному или сами администрите
Чего там администрить? Джоб одноразовый?

Цитата:
легче же, чем в коде ковыряться и высматривать нужный табельный номер из 50ти!!!
Не-а. Одинаково. Ctrl-F работает не только на таблицах!

Цитата:
Пожелейте тех, кто придет потом и вынужден будет разбираться в подобных "чудесах" с контейнерами. [/B]
Хорошо. Договорились. Проведу акцию гуманизма. Прибью код сразу после выполнения.
__________________
Удачи.
Старый 31.08.2005, 11:34   #12  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано SimPai
Чего там администрить? Джоб одноразовый?
Вот! А будет лишняя "фенечка" для много разового использования!
Еще неизвестно, что из неё вырастет... Альтернативная раздача прав - как минимум!!
Цитата:
Изначально опубликовано SimPai
Хорошо. Договорились. Проведу акцию гуманизма. Прибью код сразу после выполнения.
Договорились!

С Уважением,
Георгий
Старый 31.08.2005, 11:42   #13  
SimPai is offline
SimPai
MCTS
MCBMSS
 
105 / 10 (1) +
Регистрация: 22.05.2002
Адрес: Москва
Цитата:
Изначально опубликовано George Nordic

Вот! А будет лишняя "фенечка" для много разового использования!
Еще неизвестно, что из неё вырастет... Альтернативная раздача прав - как минимум!!
Эту мысль надо зафиксировать как прогрессивный метод для организации дополнительного объёма работ не требующих использования значительных ресурсов исполнителя!
__________________
Удачи.
Старый 31.08.2005, 12:19   #15  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
Предлагаю в таких задачах использовать Set вместо контейнера.
Хотя в целом по моему мнению Nordic трижды прав.
__________________
Viacheslav Nefedov, http://www.nefedov.net, http://restock.guru/
Старый 31.08.2005, 13:15   #16  
SimPai is offline
SimPai
MCTS
MCBMSS
 
105 / 10 (1) +
Регистрация: 22.05.2002
Адрес: Москва
Цитата:
Изначально опубликовано Ned
Предлагаю в таких задачах использовать Set вместо контейнера.
Не пойдёт. Set, как минимум, неудобно инициализировать произвольным списком.
__________________
Удачи.
Старый 31.08.2005, 13:30   #17  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
Так и не надо его инициализировать вручную.
Сделать загрузку из текстового файла или визуальный интерфейс.
__________________
Viacheslav Nefedov, http://www.nefedov.net, http://restock.guru/
Старый 31.08.2005, 14:08   #18  
SimPai is offline
SimPai
MCTS
MCBMSS
 
105 / 10 (1) +
Регистрация: 22.05.2002
Адрес: Москва
Цитата:
Изначально опубликовано Ned
Так и не надо его инициализировать вручную.
Сделать загрузку из текстового файла или визуальный интерфейс.
Не-не-не! В "ручной" инициализации весь цимус - просто и быстро. И не надо ничего делать. Ни таблиц, ни файлов, ни интерфейсов. Так сказать, раз и готово!
__________________
Удачи.
Старый 31.08.2005, 14:29   #19  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
Цитата:
Задача. Есть список табельных номеров сотрудников штук 50-60.
В каком виде есть? В виде файла? В виде бумажного списка?
Цитата:
Не-не-не! В "ручной" инициализации весь цимус - просто и быстро. И не надо ничего делать. Ни таблиц, ни файлов, ни интерфейсов.
Таким образом вы как раз усложняете и замедляете работу. Самый естественный способ - скопировать данные в файл или таблицу, а потом написать их обработку. Или же напрямую их прочитать из первоисточника.
__________________
Viacheslav Nefedov, http://www.nefedov.net, http://restock.guru/
Старый 31.08.2005, 14:49   #20  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Изначально опубликовано Ned
Так и не надо его инициализировать вручную.
Сделать загрузку из текстового файла или визуальный интерфейс.
случаи частые и сильно разнообразные, то сотрудники, то поставщики, то закупки.. - придумывать чтото универсальное (то куда пользователь будет(может быть я) готовить список) это постоянная работа над своей доработкой будет. То там пришлепнул, то тут подписал в итоге затрат на такую мелочевку выйдет больше. Ище и с пользователем бороться, типа - ты список написал здесь в электронном виде? А надо вон там! Идика перепиши туда!. Ах у тебя аксапта не установлена? Почему? Не нада? тебе пофигу список ты сделал... регламента нет?.....
Может когда то изменю мнение, но пока что случаи когда гемороиться не стоит четко видны.
В Аксапте вот косячок..
Может ей где настройку какую ткнуть, чтобы буфер не переполнялся проще
Теги
container, set, контейнер, перебор записей

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сравнение при импорте XPO akvi DAX: Программирование 26 23.01.2013 18:03
Баг? Сравнение строк длиной более 32767 символов vallys DAX: База знаний и проекты 6 16.07.2008 12:18
Сравнение объектов в 4.0 Dronas DAX: Программирование 8 19.09.2007 07:51
Сравнение двух полей в Query Lucky13 DAX: Программирование 3 17.08.2005 11:42
Сравнение DialogField с null listener DAX: Программирование 6 15.01.2004 10:22

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:18.