31.08.2005, 07:10 | #1 |
Участник
|
Сравнение с большим списком
Задача. Есть список табельных номеров сотрудников штук 50-60.
Нужно в аксапте сделать им дополнительные права, в справочнике сотрудников корректировки некоторые - обработать вобщем. Делаю это программно в джобе - цикл по empltable. Нужно сравнить emplid со списком данных табельных. Как это сделать красиво? Не писать же в if 50 раз условие? Сделал контейнер container cont = ["00296",и тд...,"01645"]; и хотел в if сравнить через confind, но при компиляции ошибка - "Переполнение во внутреннем стеке компилятора." Как быстро и красиво выйти из ситуации? |
|
31.08.2005, 08:18 | #2 |
Участник
|
В каком виде список табельных номеров?
Если хранятся в таблице - тогда ИМХО нужно просто сделать select emplTable exists join <ваша таблица табельных номеров> where <ваша таблица табельных номеров>.emplid == emplTable.emplid; вуаля. С уважением. |
|
31.08.2005, 09:11 | #3 |
Дмитрий Ерин
|
Лучше всего воспользуйтесь вариантом Dozer-а.
А в случае с контейнером можно попробывать извратный способ: перелить его в Map, предварительно видоизменив, примерно так: PHP код:
__________________
|
|
31.08.2005, 09:57 | #4 |
MCTS
|
Re: Сравнение с большим списком
Цитата:
Изначально опубликовано Perc
Сделал контейнер container cont = ["00296",и тд...,"01645"]; и хотел в if сравнить через confind, но при компиляции ошибка - "Переполнение во внутреннем стеке компилятора." Как быстро и красиво выйти из ситуации? Попробуйте объявить не один контейнер, а несколько (например, в каждом не более десяти значений). После в начале кода объедените контейнеры в один. Или объявите несколько констант со списком значений (не очень длинным), а затем при объявлении контейнера, укажите в нём эти константы.
__________________
Удачи. |
|
31.08.2005, 10:23 | #5 |
Модератор
|
Я бы не рекомендовал пользоваться контейнерами для этой задачи. Тем более - с константами. Хм. Ну, сделайте таблицу - пусть будет гибкое решение!
С Уважением, Георгий |
|
31.08.2005, 10:47 | #6 |
Дмитрий Ерин
|
Re: Re: Сравнение с большим списком
Цитата:
Изначально опубликовано SimPai
Эта ошибка, вероятно, из-за длинного списка значений в контейнере. Perc, мой пост про Map можете смело игнорировать - виноват, невнимательно читал вопрос И прислушайтесь к Dozer и George Nordic.
__________________
|
|
31.08.2005, 10:55 | #7 |
MCTS
|
Цитата:
Изначально опубликовано George Nordic
Я бы не рекомендовал пользоваться контейнерами для этой задачи. Кстати, Perc лучше сканировать не EmplTable, а этот контейнер (или таблицу, если он решит использовать именно таблицу) Цитата:
Ну, сделайте таблицу - пусть будет гибкое решение!
__________________
Удачи. |
|
31.08.2005, 11:03 | #8 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
Я бы не рекомендовал пользоваться контейнерами для этой задачи. Тем более - с константами. Хм. Ну, сделайте таблицу - пусть будет гибкое решение! С Уважением, Георгий В итоге пришлось по списку нагенерировать условие типа empltable.emplid == "00296" || empltable.emplid == "00593" || empltable.emplid == "01401" ||... на треть экрана. Отработало. Но некрасиво это. Список то тьфу.. 55 штук по 5 символов и загнулась. Позор аксапте. Согласен с SimPai, что лучше список сканировать, если он есть. Учту на будущее его предложение.. |
|
31.08.2005, 11:05 | #9 |
Модератор
|
Г-н SimPai! Вы для кого пишите систему - для программистов? А прибежит тетенька и скажет "Ой! Я ошиблась в номере таком-то и таком-то! И запишите еще такой-то и такой-то номер, это, кажется тот-то и тот-то, но у него есть однофамилец, работает грузщиком, так вот это не он!"
Блин! Да сделайте таблицу, нарисуйте форму - делов-то! На пол-часа. И дайте юзеру упономеченному или сами администрите - легче же, чем в коде ковыряться и высматривать нужный табельный номер из 50ти!!! Вам что, таблицу лишнюю жалко? Пожелейте тех, кто придет потом и вынужден будет разбираться в подобных "чудесах" с контейнерами. |
|
31.08.2005, 11:25 | #10 |
Участник
|
George, это может быть однократная задача и с эти кодом никто не будет разбираться никогда. Сам делал примерно такое. Причем делал так написал локальную функцию в коде processCode(str code) а потом регэкспом заменил в списке коды на ее вызовы
|
|
31.08.2005, 11:27 | #11 |
MCTS
|
Цитата:
Изначально опубликовано George Nordic
А прибежит тетенька и скажет "Ой! Я ошиблась в номере таком-то и таком-то! И запишите еще такой-то и такой-то номер, это, кажется тот-то и тот-то, но у него есть однофамилец, работает грузщиком, так вот это не он!" Цитата:
Блин! Да сделайте таблицу, нарисуйте форму - делов-то!
Цитата:
И дайте юзеру упономеченному или сами администрите
Цитата:
легче же, чем в коде ковыряться и высматривать нужный табельный номер из 50ти!!!
Цитата:
Пожелейте тех, кто придет потом и вынужден будет разбираться в подобных "чудесах" с контейнерами. [/B]
__________________
Удачи. |
|
31.08.2005, 11:34 | #12 |
Модератор
|
Цитата:
Изначально опубликовано SimPai
Чего там администрить? Джоб одноразовый? Еще неизвестно, что из неё вырастет... Альтернативная раздача прав - как минимум!! Цитата:
Изначально опубликовано SimPai
Хорошо. Договорились. Проведу акцию гуманизма. Прибью код сразу после выполнения. С Уважением, Георгий |
|
31.08.2005, 11:42 | #13 |
MCTS
|
Цитата:
Изначально опубликовано George Nordic
Вот! А будет лишняя "фенечка" для много разового использования! Еще неизвестно, что из неё вырастет... Альтернативная раздача прав - как минимум!!
__________________
Удачи. |
|
31.08.2005, 12:19 | #15 |
Lean Six Sigma
|
Предлагаю в таких задачах использовать Set вместо контейнера.
Хотя в целом по моему мнению Nordic трижды прав. |
|
31.08.2005, 13:15 | #16 |
MCTS
|
Цитата:
Изначально опубликовано Ned
Предлагаю в таких задачах использовать Set вместо контейнера.
__________________
Удачи. |
|
31.08.2005, 13:30 | #17 |
Lean Six Sigma
|
Так и не надо его инициализировать вручную.
Сделать загрузку из текстового файла или визуальный интерфейс. |
|
31.08.2005, 14:08 | #18 |
MCTS
|
Цитата:
Изначально опубликовано Ned
Так и не надо его инициализировать вручную. Сделать загрузку из текстового файла или визуальный интерфейс.
__________________
Удачи. |
|
31.08.2005, 14:29 | #19 |
Lean Six Sigma
|
Цитата:
Задача. Есть список табельных номеров сотрудников штук 50-60.
Цитата:
Не-не-не! В "ручной" инициализации весь цимус - просто и быстро. И не надо ничего делать. Ни таблиц, ни файлов, ни интерфейсов.
|
|
31.08.2005, 14:49 | #20 |
Участник
|
Цитата:
Изначально опубликовано Ned
Так и не надо его инициализировать вручную. Сделать загрузку из текстового файла или визуальный интерфейс. Может когда то изменю мнение, но пока что случаи когда гемороиться не стоит четко видны. В Аксапте вот косячок.. Может ей где настройку какую ткнуть, чтобы буфер не переполнялся проще |
|
Теги |
container, set, контейнер, перебор записей |
|
Похожие темы | ||||
Тема | Ответов | |||
Сравнение при импорте XPO | 26 | |||
Баг? Сравнение строк длиной более 32767 символов | 6 | |||
Сравнение объектов в 4.0 | 8 | |||
Сравнение двух полей в Query | 3 | |||
Сравнение DialogField с null | 6 |
|