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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.09.2006, 09:07   #1  
usach is offline
usach
Участник
 
55 / 10 (1) +
Регистрация: 31.08.2005
Thumbs up
Мне нужно в Списочной форме для каждого сотрудника рассчитывать несколько значений целочисленных. не знаю как реализовать
Была бы карточная форма завел бы несколько переменных для этих целей и на AfteGetRecords повесл рассчет. а как быть со списком не знаю....
по идеии завести массивы для каждого значения, но как завести динамический массив не знаю
а создават поля в табличке для хранения то же не хотелось бы
Слышал что для этих целей используют таблицу Integer, но что-то не могу понять каким образом
Старый 07.09.2006, 09:22   #2  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Все намного проще, заводите в табличной форме новую переменную, вставляете новое поле в TableBox, в свойствах поля в SourceExpr указываете вашу переменную, далее на триггере "OnAfterGetRecord" на форме сохраняете в эту переменную рассчитанное значение для текущей записи и все
Старый 07.09.2006, 09:29   #3  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
еще можно использовать для этих целей временные таблицы - получается как бы динамический массив...
Старый 07.09.2006, 09:38   #4  
usach is offline
usach
Участник
 
55 / 10 (1) +
Регистрация: 31.08.2005
Цитата:
Сообщение от Bird Посмотреть сообщение
Все намного проще, заводите в табличной форме новую переменную, вставляете новое поле в TableBox, в свойствах поля в SourceExpr указываете вашу переменную, далее на триггере "OnAfterGetRecord" на форме сохраняете в эту переменную рассчитанное значение для текущей записи и все
мммм...... и что мы увидем на форме? собственное значение для каждой записи? у меня что-то не получается.....

Цитата:
Сообщение от Greggy Посмотреть сообщение
еще можно использовать для этих целей временные таблицы - получается как бы динамический массив...
вот я подумал временную табличку Integer и сделать
и в строку с порядковым номером сотвествующим номеру сотрудника записывать рассчитаное значение
не подскажешь только, как во временной таблице сделать столько же записей как и в оригинале
Старый 07.09.2006, 09:46   #5  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Цитата:
Сообщение от usach Посмотреть сообщение
мммм...... и что мы увидем на форме? собственное значение для каждой записи? у меня что-то не получается.....
Да, именно собственное значение для каждой записи. В твоем случае врядли чтоит прибегать к более сложным решениям. А что именно не получается? в TableBox добавил новое поле? Переменную записал туда? Код пришли из OnAfterGetRec

Цитата:
Сообщение от usach Посмотреть сообщение
вот я подумал временную табличку Integer и сделать
и в строку с порядковым номером сотвествующим номеру сотрудника записывать рассчитаное значение
не подскажешь только, как во временной таблице сделать столько же записей как и в оригинале
Этот вариант практически полностью аналогичен первому, с той разницей, что значения можно рассчитать заранее. Для этого тебе нужно при открытии формы заполнить временную таблицу нужными тебе значениями, а при получении записи формы устанавливать указатель временной таблицы на нужную запись. Только для этой цели лучше используй не таблицу Integer, а другую, где будет минимум 2 поля, чтобы можно было однозначно связать запись исходной таблицы с записью временной. В этом случае избежишь проблем с фильтрами и сортировками
Старый 07.09.2006, 09:52   #6  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
хм.. а если будет 2 или более одинаковых значения? как тогда быть - я создаю обычно табличку с полями под массив который мне нужен за пределами диапазона клиента а потом использую ее как временную для динамических массивов
Старый 07.09.2006, 10:09   #7  
usach is offline
usach
Участник
 
55 / 10 (1) +
Регистрация: 31.08.2005
Цитата:
Сообщение от Bird Посмотреть сообщение
Да, именно собственное значение для каждой записи. В твоем случае врядли чтоит прибегать к более сложным решениям. А что именно не получается? в TableBox добавил новое поле? Переменную записал туда? Код пришли из OnAfterGetRec
естно все это сделал
не получатеся увидеть для каждой записи собственнйо значение.
при открытии формы для всех записей - значение рассчитаное для первой, при пролистывании посторочно списка, все пересчитывается как надо, но это ж неудобно.

код:
Код:
Form - OnAfterGetCurrRecord()

CLEAR (ПеременнаяА);
DLL.CurValueNorthIncrease(ПеременнаяА);

Цитата:
Сообщение от Bird Посмотреть сообщение
Этот вариант практически полностью аналогичен первому, с той разницей, что значения можно рассчитать заранее. Для этого тебе нужно при открытии формы заполнить временную таблицу нужными тебе значениями, а при получении записи формы устанавливать указатель временной таблицы на нужную запись. Только для этой цели лучше используй не таблицу Integer, а другую, где будет минимум 2 поля, чтобы можно было однозначно связать запись исходной таблицы с записью временной. В этом случае избежишь проблем с фильтрами и сортировками
а какую с двумя полями посоветуешь?
Старый 07.09.2006, 10:24   #8  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
1) Не OnAfterGetCurrRecord, а OnAfterGetRecord
2)
Цитата:
если будет 2 или более одинаковых значения?
Возьмите табличку, у которой первичный ключ - интовое поле.
Что-нибудь типа какого-нибудь ledger entry (или просто entry).
В первичный ключ (Entry No.) суйте порядковый номер записи (1, 2, 3, 4...), в любое поле, подходящее по типу - нужные Вам рассчитанные значения.
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 07.09.2006, 10:26   #9  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
Цитата:
Сообщение от Дуд Посмотреть сообщение
1) Не OnAfterGetCurrRecord, а OnAfterGetRecord
2)
Цитата:
если будет 2 или более одинаковых значения?
Возьмите табличку, у которой первичный ключ - интовое поле.
Что-нибудь типа какого-нибудь ledger entry (или просто entry).
В первичный ключ (Entry No.) суйте порядковый номер записи (1, 2, 3, 4...), в любое поле, подходящее по типу - нужные Вам рассчитанные значения.
всмысле я это и имел ввиду что не получится с помощью таблицы Integer - надо как минимум что бы одно поле было под уникальный ключ
Старый 07.09.2006, 10:30   #10  
usach is offline
usach
Участник
 
55 / 10 (1) +
Регистрация: 31.08.2005
Цитата:
Сообщение от Дуд Посмотреть сообщение
1) Не OnAfterGetCurrRecord, а OnAfterGetRecord
черт, надо ж было так лохануться
Старый 07.09.2006, 10:36   #11  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Цитата:
Сообщение от Дуд Посмотреть сообщение
Возьмите табличку, у которой первичный ключ - интовое поле.
Что-нибудь типа какого-нибудь ledger entry (или просто entry).
В первичный ключ (Entry No.) суйте порядковый номер записи (1, 2, 3, 4...), в любое поле, подходящее по типу - нужные Вам рассчитанные значения.
а я бы не стал по номерам их запоминать, лучше значение первичного ключа исходной таблицы хранить. Если это таблица Сотрудники, у нее скорее всего первичный ключ - Code(10), вот его и сохранять.
Плохо хранить номер записи, потому что пользователь может поставить фильтр в списке или ключ сменить, тогда ваша нумерация будет ошибочна или придется заново строить временную таблицу.
Старый 07.09.2006, 12:12   #12  
rov_imported is offline
rov_imported
Участник
 
176 / 10 (1) +
Регистрация: 20.01.2005
Не надо мудрить с таблицами!
Используйте 1-й вариант - переменная на AfterGetRec.
Механизм такой-же как и для карточной формы.
Старый 07.09.2006, 12:18   #13  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Цитата:
Сообщение от rov Посмотреть сообщение
Не надо мудрить с таблицами!
Используйте 1-й вариант - переменная на AfterGetRec.
Механизм такой-же как и для карточной формы.
Надо - не надо уже другой вопрос )))
Хочется - пусть попробует и таким и таким способом, они оба имеют право быть, есть свои плюсы и у того и у другого.

Кстати, usach, проблема-то решена? Каким способом?
Старый 07.09.2006, 12:34   #14  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Ладно. До кучи еще один способ. Напишите функцию получения нужного (нужных) значений для сотрудника (можно в таблице, можно на форме. В таблице неплохо - потому как работает для текущей записи). В качестве аргумента - Код Сотрудника (если в таблице, можно без аргумента, тк работать будет для текущего значения нужного поля реки). Добавьте на форму в ТейблБокс поле, в свойство SourceExpr которого впишите НоваяФункция(). И все будет -)
Старый 07.09.2006, 13:49   #15  
usach is offline
usach
Участник
 
55 / 10 (1) +
Регистрация: 31.08.2005
Цитата:
Сообщение от Bird Посмотреть сообщение
Цитата:
Сообщение от rov Посмотреть сообщение
Не надо мудрить с таблицами!
Используйте 1-й вариант - переменная на AfterGetRec.
Механизм такой-же как и для карточной формы.
Надо - не надо уже другой вопрос )))
Хочется - пусть попробует и таким и таким способом, они оба имеют право быть, есть свои плюсы и у того и у другого.

Кстати, usach, проблема-то решена? Каким способом?
Я сдела 1ым способом
еще вот такой вопросик. хочется сделать CheckBox, для каждой записи, как признак формирования приказа для этого сотрудника. как тут быть?
Старый 07.09.2006, 14:18   #16  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Тут без временной таблицы уже никак не обойтись, схема здесь уже обсуждалась
Старый 07.09.2006, 14:49   #17  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Цитата:
Сообщение от Bird Посмотреть сообщение
Тут без временной таблицы уже никак не обойтись, схема здесь уже обсуждалась
Пять баллов
Старый 07.09.2006, 14:54   #18  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
)))
Создаешь временную таблицу, подбери любую, главное чтобы она подходила по твоему первичному ключу (в твоем случае, чтобы у нее в первичный ключ входило поле типа Code нужной длинны) и чтобы в ней было поле типа bool. Дальше, при открытии формы проходишь по всему списку сотрудников и переносишь их коды во временную таблицу. Выводишь в tablebox поле, с переменной временная_таблица.булево_поле
Далее по нажатию кнопки (или по закрытию формы) ставишь фильтр во временной таблице по булеву признаку, и на каждую запись находишь нужного сотрудника и делаешь с ним что хочешь
Старый 07.09.2006, 15:57   #19  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Цитата:
Сообщение от usach Посмотреть сообщение
хочется сделать CheckBox, для каждой записи, как признак формирования приказа для этого сотрудника. как тут быть?
Либо выводишь этот приснак в таблицу сотрудников. Либо, если признак какой-то вычисляемы, переменную boolean рассчитываешь так же, как и в предыдущих постах (OnAfterGetRecord).
Старый 08.09.2006, 11:04   #20  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от usach Посмотреть сообщение
еще вот такой вопросик. хочется сделать CheckBox, для каждой записи, как признак формирования приказа для этого сотрудника. как тут быть?
Функцию написать, которая будет возвращать ДА если приказы есть, и НЕТ если их нет. И имя ее вписать в св-во SoruceExpr чекбокса, выведенного в список сотрудников. Зачем здесь временные таблицы?
 


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

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

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