07.09.2006, 09:07 | #1 |
Участник
|
Мне нужно в Списочной форме для каждого сотрудника рассчитывать несколько значений целочисленных. не знаю как реализовать
Была бы карточная форма завел бы несколько переменных для этих целей и на AfteGetRecords повесл рассчет. а как быть со списком не знаю.... по идеии завести массивы для каждого значения, но как завести динамический массив не знаю а создават поля в табличке для хранения то же не хотелось бы Слышал что для этих целей используют таблицу Integer, но что-то не могу понять каким образом |
|
07.09.2006, 09:22 | #2 |
Участник
|
Все намного проще, заводите в табличной форме новую переменную, вставляете новое поле в TableBox, в свойствах поля в SourceExpr указываете вашу переменную, далее на триггере "OnAfterGetRecord" на форме сохраняете в эту переменную рассчитанное значение для текущей записи и все
|
|
07.09.2006, 09:29 | #3 |
Участник
|
еще можно использовать для этих целей временные таблицы - получается как бы динамический массив...
|
|
07.09.2006, 09:38 | #4 |
Участник
|
Цитата:
Цитата:
и в строку с порядковым номером сотвествующим номеру сотрудника записывать рассчитаное значение не подскажешь только, как во временной таблице сделать столько же записей как и в оригинале |
|
07.09.2006, 09:46 | #5 |
Участник
|
Цитата:
Этот вариант практически полностью аналогичен первому, с той разницей, что значения можно рассчитать заранее. Для этого тебе нужно при открытии формы заполнить временную таблицу нужными тебе значениями, а при получении записи формы устанавливать указатель временной таблицы на нужную запись. Только для этой цели лучше используй не таблицу Integer, а другую, где будет минимум 2 поля, чтобы можно было однозначно связать запись исходной таблицы с записью временной. В этом случае избежишь проблем с фильтрами и сортировками |
|
07.09.2006, 09:52 | #6 |
Участник
|
хм.. а если будет 2 или более одинаковых значения? как тогда быть - я создаю обычно табличку с полями под массив который мне нужен за пределами диапазона клиента а потом использую ее как временную для динамических массивов
|
|
07.09.2006, 10:09 | #7 |
Участник
|
Цитата:
не получатеся увидеть для каждой записи собственнйо значение. при открытии формы для всех записей - значение рассчитаное для первой, при пролистывании посторочно списка, все пересчитывается как надо, но это ж неудобно. код: Код: Form - OnAfterGetCurrRecord() CLEAR (ПеременнаяА); DLL.CurValueNorthIncrease(ПеременнаяА); Цитата:
Сообщение от Bird
Этот вариант практически полностью аналогичен первому, с той разницей, что значения можно рассчитать заранее. Для этого тебе нужно при открытии формы заполнить временную таблицу нужными тебе значениями, а при получении записи формы устанавливать указатель временной таблицы на нужную запись. Только для этой цели лучше используй не таблицу Integer, а другую, где будет минимум 2 поля, чтобы можно было однозначно связать запись исходной таблицы с записью временной. В этом случае избежишь проблем с фильтрами и сортировками
|
|
07.09.2006, 10:24 | #8 |
NavAx
|
1) Не OnAfterGetCurrRecord, а OnAfterGetRecord
2) Цитата:
если будет 2 или более одинаковых значения?
Что-нибудь типа какого-нибудь ledger entry (или просто entry). В первичный ключ (Entry No.) суйте порядковый номер записи (1, 2, 3, 4...), в любое поле, подходящее по типу - нужные Вам рассчитанные значения.
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
07.09.2006, 10:26 | #9 |
Участник
|
Цитата:
Сообщение от Дуд
1) Не OnAfterGetCurrRecord, а OnAfterGetRecord
2) Цитата:
если будет 2 или более одинаковых значения?
Что-нибудь типа какого-нибудь ledger entry (или просто entry). В первичный ключ (Entry No.) суйте порядковый номер записи (1, 2, 3, 4...), в любое поле, подходящее по типу - нужные Вам рассчитанные значения. |
|
07.09.2006, 10:30 | #10 |
Участник
|
|
|
07.09.2006, 10:36 | #11 |
Участник
|
Цитата:
Плохо хранить номер записи, потому что пользователь может поставить фильтр в списке или ключ сменить, тогда ваша нумерация будет ошибочна или придется заново строить временную таблицу. |
|
07.09.2006, 12:12 | #12 |
Участник
|
Не надо мудрить с таблицами!
Используйте 1-й вариант - переменная на AfterGetRec. Механизм такой-же как и для карточной формы. |
|
07.09.2006, 12:18 | #13 |
Участник
|
Цитата:
Хочется - пусть попробует и таким и таким способом, они оба имеют право быть, есть свои плюсы и у того и у другого. Кстати, usach, проблема-то решена? Каким способом? |
|
07.09.2006, 12:34 | #14 |
Участник
|
Ладно. До кучи еще один способ. Напишите функцию получения нужного (нужных) значений для сотрудника (можно в таблице, можно на форме. В таблице неплохо - потому как работает для текущей записи). В качестве аргумента - Код Сотрудника (если в таблице, можно без аргумента, тк работать будет для текущего значения нужного поля реки). Добавьте на форму в ТейблБокс поле, в свойство SourceExpr которого впишите НоваяФункция(). И все будет -)
|
|
07.09.2006, 13:49 | #15 |
Участник
|
Цитата:
еще вот такой вопросик. хочется сделать CheckBox, для каждой записи, как признак формирования приказа для этого сотрудника. как тут быть? |
|
07.09.2006, 14:18 | #16 |
Участник
|
Тут без временной таблицы уже никак не обойтись, схема здесь уже обсуждалась
|
|
07.09.2006, 14:49 | #17 |
Участник
|
|
|
07.09.2006, 14:54 | #18 |
Участник
|
)))
Создаешь временную таблицу, подбери любую, главное чтобы она подходила по твоему первичному ключу (в твоем случае, чтобы у нее в первичный ключ входило поле типа Code нужной длинны) и чтобы в ней было поле типа bool. Дальше, при открытии формы проходишь по всему списку сотрудников и переносишь их коды во временную таблицу. Выводишь в tablebox поле, с переменной временная_таблица.булево_поле Далее по нажатию кнопки (или по закрытию формы) ставишь фильтр во временной таблице по булеву признаку, и на каждую запись находишь нужного сотрудника и делаешь с ним что хочешь |
|
07.09.2006, 15:57 | #19 |
Участник
|
Либо выводишь этот приснак в таблицу сотрудников. Либо, если признак какой-то вычисляемы, переменную boolean рассчитываешь так же, как и в предыдущих постах (OnAfterGetRecord).
|
|
08.09.2006, 11:04 | #20 |
Участник
|
Функцию написать, которая будет возвращать ДА если приказы есть, и НЕТ если их нет. И имя ее вписать в св-во SoruceExpr чекбокса, выведенного в список сотрудников. Зачем здесь временные таблицы?
|
|