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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.09.2009, 11:15   #1  
JIEXA_imported is offline
JIEXA_imported
Участник
 
9 / 10 (1) +
Регистрация: 26.08.2009
Доброго времени суток! Может мне кто-нибудь подсказать, как работать с Matrix Box? С навижн я работаю всего вторую неделю, и никак не могу разобраться с этим компонентом. В интернете не видел примеров с работой MatrixBox. Подскажи, как она работает, или дать ссылочки на хороший пример, что бы можно было понять, как он работает.
Старый 03.09.2009, 12:48   #2  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
В хелпе посмотри, там описаны некоторые моменты....
Contents
General Description
Navigating in a Matrix Box
Creating a Matrix Box
Programming Information
Старый 13.07.2010, 12:55   #3  
Programmer2 is offline
Programmer2
Участник
 
7 / 10 (1) +
Регистрация: 25.06.2010
В продолжении темы...
Есть таблица PwExecution, в которой есть записи:
Сотрудник | PA_WorkDate | Сумма
E0000110 | 2010-08-02 | 100
E0001486 | 2010-08-02 | 200

Использую на форме компонент MatrixBox.
Свойство MatrixSourceTable у элемента MatrixBox = PwExecution
В левой части MatrixBox указан столбец "Сотрудник" из таблицы PwExecution.
В matrixheader SourceExpr = CurrForm.Matrix.MatrixRec.PA_WorkDate
Для строк (в правой части) SourceExpr указан столбец "Сумма" из таблицы PwExecution.

В результате получаю:
Сотрудник| 2010-08-02 | 2010-08-02
E0000110| 100 | 100
E0001486| 200 | 200

А должно получиться так:
Сотрудник| 2010-08-02|
E0000110 | 100 |
E0001486 | 200 |

Если использовать в правой части другую таблицу (Empl), то все равно получаю результат с двумя датами.

Видать что-то делаю не так, а что именно не могу понять или нужно еще какой-то код написать?
Подскажите что именно нужно сделать?
Старый 13.07.2010, 15:26   #4  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
В MatrixSourceTable указывается таблица, откуда должны браться столбцы. В вашем случае два столбца, так как в PwExecution две записи. Что должно быть столбцами в вашей матричной форме?
Старый 13.07.2010, 15:57   #5  
Programmer2 is offline
Programmer2
Участник
 
7 / 10 (1) +
Регистрация: 25.06.2010
В матричной форме столбцами должно быть:
название (header) столбца - дата (PA_WorkDate из таблицы PwExecution)
значение столбца - сумма (Сумма из таблицы PwExecution)

Должно получиться так:
ЛеваяЧаст| Правая Часть
Сотрудник| 2010-08-02|
E0000110 | 100 |
E0001486 | 200 |
Старый 13.07.2010, 16:21   #6  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Тогда в качестве MatrixSourceTable логично указать таблицу Date. А в качестве SourceExpr надо указать переменную, которую вы будете присваивать в OnAfterGetRecord матрицы, находя соответствующую запись в таблице PwExecution. Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
Старый 14.07.2010, 09:30   #7  
Programmer2 is offline
Programmer2
Участник
 
7 / 10 (1) +
Регистрация: 25.06.2010
Компонент MatrixBox имеет название Matrix.
Свойство MatrixSourceTable у элемента MatrixBox = таблица Date
А что это за таблица Date? Там уже есть данные или нужно будет делать вставку в эту таблицу?

В левой части MatrixBox указан столбец "Сотрудник" из таблицы PwExecution.
В matrixheader SourceExpr = dtMatrixDate (переменная типа Date)
Для строк (в правой части) SourceExpr указан столбец "Сумма" из таблицы PwExecution.

"в качестве SourceExpr надо указать переменную, которую вы будете присваивать в OnAfterGetRecord матрицы, находя соответствующую запись в таблице PwExecution"
Не могу сообразить как это сделать мне в Matrix - OnAfterGetRecord() ??
Старый 14.07.2010, 10:45   #8  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Programmer2 Посмотреть сообщение
Компонент MatrixBox имеет название Matrix.
Свойство MatrixSourceTable у элемента MatrixBox = таблица Date
А что это за таблица Date? Там уже есть данные или нужно будет делать вставку в эту таблицу?
Это виртуальная таблица навижен. Вставлять туда записи не нужно. Они там уже "есть". Объявите в окне глобальных переменных, посмотрите структуру, поиграйтесь...

Цитата:
Сообщение от Programmer2 Посмотреть сообщение
Не могу сообразить как это сделать мне в Matrix - OnAfterGetRecord() ??
Выделяете элемент управления MatrixBox, по F9 переходите в окно кода и триггеры этого элемента. Среди них будет и OnAfterGetRecord(). Пишете туда код по подсчету значения в вычисляемом поле (сумма у вас ведь выч поле), накладывая на Date Filter (наверняка используется в формуле) фильтр по конкретной дате Матрикса, по его текущему значению. Если вводить значения в ячейки матрикса не нужно я бы сделал функцию, которая бы возвращала значение суммы, посчитанное на день. Это позволит не париться с переменными и тем, в какие триггеры вписывать код. Просто в свойство поля матрикса SourceExpr сразу пишете значение вашей функции GetEmplAmount(). Но это только в случае, когда данные надо только отображать.
Старый 19.07.2010, 08:40   #9  
Programmer2 is offline
Programmer2
Участник
 
7 / 10 (1) +
Регистрация: 25.06.2010
Спасибо за разъяснения и подсказки, разобрался.

Компонент MatrixBox имеет название Matrix.
Свойство MatrixSourceTable у элемента MatrixBox = таблица Date

В правой части в столбце в свойстве SourceExpr = CurrForm.Matrix.MatrixRec."Period Start".
На "Form - OnOpenForm()" или до открытия формы в функции ставим фильтр
CurrForm.Matrix.MatrixRec.SETRANGE("Period Type",2); (0 -день, 2 - месяц)
CurrForm.Matrix.MatrixRec.SETFILTER(CurrForm.Matrix.MatrixRec."Period Start",'>=%1 & <=%2',dtStart_MatrixDate,dtEnd_MatrixDate);
Т.о. в столбце появляются нужные даты.

В правой части (где будут отображаться строки) SourceExpr = decMatrixSum.
decMatrixSum - глобальная переменная типа Decimal.
В триггере "Matrix - OnAfterGetRecord()" пишем небольшой код
recPwExecution - запись таблицы PwExecution
recPwExecution.RESET;
recPwExecution.SETRANGE(recPwExecution.HR_Employee,HR_Employee);
recPwExecution.SETFILTER(recPwExecution.PA_WorkDate,'>=%1 & <=%2',CurrForm.Matrix.MatrixRec."Period Start"
,CurrForm.Matrix.MatrixRec."Period End");
IF recPwExecution.FINDFIRST THEN decMatrixSum := recPwExecution.PA_ActualOutput
ELSE decMatrixSum :=0;

В рез-те получаем то, что нужно:
Сотрудник| 2010-08-02|
E0000110 | 100 |
E0001486 | 200 |
Старый 19.07.2010, 12:59   #10  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Цитата:
Сообщение от Programmer2 Посмотреть сообщение
Спасибо за разъяснения и подсказки, разобрался...
именно для этих целей на форуме сделана т.н. "репутация"
маленький плюсик больше большого спасибо
Старый 30.08.2010, 18:51   #11  
ValeriyZ is offline
ValeriyZ
Участник
 
21 / 10 (1) +
Регистрация: 02.09.2010
Адрес: Киев
Цитата:
Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
А можно с этого места поподробнее.
У меня следующая проблемка: добавил дополнительное поле(Decimal) в таблицу, которая являеться MatrixSourceTable. нужно отсеять все записи, у которых значение этого поля являеться нулевым.
Заране благодарен за дельные советы!
Старый 31.08.2010, 10:17   #12  
prefreitor is offline
prefreitor
Участник
 
214 / 11 (1) +
Регистрация: 03.10.2006
Цитата:
Сообщение от ValeriyZ Посмотреть сообщение
Цитата:
Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
А можно с этого места поподробнее.
У меня следующая проблемка: добавил дополнительное поле(Decimal) в таблицу, которая являеться MatrixSourceTable. нужно отсеять все записи, у которых значение этого поля являеться нулевым.
Заране благодарен за дельные советы!
Очень подробный пример http://www.mibuso.com/dlinfo.asp?FileID=515
В кратце суть в том что нужно написать код еще в триггера OnFindRecord и OnNextRecord, в них перед выводом записи вызывается функция, которая и говорит триггеру нужно или нет выводить запись...
Старый 31.08.2010, 10:54   #13  
ValeriyZ is offline
ValeriyZ
Участник
 
21 / 10 (1) +
Регистрация: 02.09.2010
Адрес: Киев
Цитата:
Сообщение от prefreitor Посмотреть сообщение
Цитата:
Сообщение от ValeriyZ Посмотреть сообщение
Цитата:
Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
А можно с этого места поподробнее.
У меня следующая проблемка: добавил дополнительное поле(Decimal) в таблицу, которая являеться MatrixSourceTable. нужно отсеять все записи, у которых значение этого поля являеться нулевым.
Заране благодарен за дельные советы!
Очень подробный пример http://www.mibuso.com/dlinfo.asp?FileID=515
В кратце суть в том что нужно написать код еще в триггера OnFindRecord и OnNextRecord, в них перед выводом записи вызывается функция, которая и говорит триггеру нужно или нет выводить запись...
Thks a lot!
 


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

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

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