|
![]() |
#1 |
newborn in DAX
|
Цитата:
Сообщение от pitersky
![]() Ужасное решение. Просто ужасное. НЕ делайте так никогда.
Надо было создать табличку с полями EmplId/BenefitType/BenefitDescription. В BenefitType записать все возможные типы льгот (создать соответствующий Enum или использовать таблицу льгот, если она есть), в BenefitDescription - то, что относится по типу к EmplId. А дальше на EmplTable создаёте закладку, на которой отображаете льготы для конкретного человека. Если надо всё-таки в одну строку выводить (именно выводить, а не хранить!!!) - нарисуйте соответствующую формочку. Но я не вижу в этом особого смысла. поэтому кажется forupdate несколько не в тему в начале есть delete_from MyTbl; и в конце каждой итерации MyTbl.insert(); Попробую заменить if(BenefitTbl != NULL) на if (BenefitTbl.RecId != 0) Хотя с дебагером заходит в if , но значение почему-то не меняет |
|
![]() |
#2 |
северный Будда
|
Мне кажется, что это не тот случай, когда надо под HR прогибаться (извините за слэнг). Полученная таблица крайне ненаглядна и неудобна в работе. Могу предположить, что утром это копипастят в Excel и дальше работают автофильтрами, отбирая нужное. Если это так, то может проще нарисовать им нужную выгрузку, а не плодить лишние таблицы?
С точки здения быстродействия update хуже, потому что обновляемую запись надо сначала найти. В то же время delete_from работает очень быстро. Если не жалко RecId, то лучше пересоздавать
__________________
С уважением, Вячеслав |
|
![]() |
#3 |
newborn in DAX
|
|
|
![]() |
#4 |
северный Будда
|
А что тут сложного? Делаете цикл по EmplTable (это строка выгрузки), внутри него делаете вывод в Excel данных по каждому типу льгот (делая запросы к таблице льгот по типу и EmplId)
__________________
С уважением, Вячеслав |
|
![]() |
#5 |
Участник
|
Точно также как вы делали вставку в таблицу, только вместо инициализации полей таблицы найденными значениями, отправляйте эти значения в excel
![]() ![]() Есть ещё конечно вариант с OLAP и RS, но это не обязательно ![]() Программное добавление столбцов в отчёт И на будущее, если необходимо сделать в таблице 27 столбцов одного типа, отличающихся только индексом, то используйте расширенный тип данных основанный на масиве полей (стандартный пример - тип Dimension) Последний раз редактировалось S.Kuskov; 25.05.2011 в 17:18. |
|
![]() |
#6 |
newborn in DAX
|
Не уверена что excel устроит. Я спрошу у HR. Там ещё должна быть ещё фильтрация по типу льгот, которую они хотят делать по уровню доступа(не знаю как по русски) кто что может видеть. т.е. поставщики машин - только машины и всё что с ними связано, сотовая связь - отдельно, но и т.п. а кто-то может всё.
На самом деле однотипных полей не 27 , штук 15. И для каждого 2 характеристики. То есть создавать типа 3х мерный массив на 15 полей? пока не очень понятно, попробую разобраться |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от timaluhs
![]() Не уверена что excel устроит. Я спрошу у HR. Там ещё должна быть ещё фильтрация по типу льгот, которую они хотят делать по уровню доступа(не знаю как по русски) кто что может видеть. т.е. поставщики машин - только машины и всё что с ними связано, сотовая связь - отдельно, но и т.п. а кто-то может всё.
Пусть отчёт в Excel формируют сами пользователи под своими правами. Тогда в Excel попадут только те данные, к которым у них есть доступ. Скрытие поля Для хранения характеристик можно сделать ещё два масива по 15 элементов, под каждую характеристику свой масив. Последний раз редактировалось S.Kuskov; 26.05.2011 в 09:27. |
|
![]() |
#8 |
newborn in DAX
|
а что делать с enum?
![]() С дебагером захожу внутрь цикла - вижу как значение меняется с No на Yes. захожу в БД - 0, хотя есть поля-enum которые принимают правильное значение поменяла с if(MyTbl != NULL) на if(MyTbl.RecID != 0) та же петрушка ![]() |
|
![]() |
#9 |
newborn in DAX
|
Цитата:
подозреваю что HR не заботит проблема с RecID а искать то что надо обновить кажется ещё непригляднее ![]() |
|