03.09.2009, 11:15 | #1 |
Участник
|
Доброго времени суток! Может мне кто-нибудь подсказать, как работать с Matrix Box? С навижн я работаю всего вторую неделю, и никак не могу разобраться с этим компонентом. В интернете не видел примеров с работой MatrixBox. Подскажи, как она работает, или дать ссылочки на хороший пример, что бы можно было понять, как он работает.
|
|
03.09.2009, 12:48 | #2 |
Участник
|
В хелпе посмотри, там описаны некоторые моменты....
Contents General Description Navigating in a Matrix Box Creating a Matrix Box Programming Information |
|
13.07.2010, 12:55 | #3 |
Участник
|
В продолжении темы...
Есть таблица 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 |
Участник
|
В MatrixSourceTable указывается таблица, откуда должны браться столбцы. В вашем случае два столбца, так как в PwExecution две записи. Что должно быть столбцами в вашей матричной форме?
|
|
13.07.2010, 15:57 | #5 |
Участник
|
В матричной форме столбцами должно быть:
название (header) столбца - дата (PA_WorkDate из таблицы PwExecution) значение столбца - сумма (Сумма из таблицы PwExecution) Должно получиться так: ЛеваяЧаст| Правая Часть Сотрудник| 2010-08-02| E0000110 | 100 | E0001486 | 200 | |
|
13.07.2010, 16:21 | #6 |
Участник
|
Тогда в качестве MatrixSourceTable логично указать таблицу Date. А в качестве SourceExpr надо указать переменную, которую вы будете присваивать в OnAfterGetRecord матрицы, находя соответствующую запись в таблице PwExecution. Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
|
|
14.07.2010, 09:30 | #7 |
Участник
|
Компонент 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 |
Участник
|
Цитата:
Выделяете элемент управления MatrixBox, по F9 переходите в окно кода и триггеры этого элемента. Среди них будет и OnAfterGetRecord(). Пишете туда код по подсчету значения в вычисляемом поле (сумма у вас ведь выч поле), накладывая на Date Filter (наверняка используется в формуле) фильтр по конкретной дате Матрикса, по его текущему значению. Если вводить значения в ячейки матрикса не нужно я бы сделал функцию, которая бы возвращала значение суммы, посчитанное на день. Это позволит не париться с переменными и тем, в какие триггеры вписывать код. Просто в свойство поля матрикса SourceExpr сразу пишете значение вашей функции GetEmplAmount(). Но это только в случае, когда данные надо только отображать. |
|
19.07.2010, 08:40 | #9 |
Участник
|
Спасибо за разъяснения и подсказки, разобрался.
Компонент 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 |
Administrator
|
|
|
30.08.2010, 18:51 | #11 |
Участник
|
Цитата:
Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
У меня следующая проблемка: добавил дополнительное поле(Decimal) в таблицу, которая являеться MatrixSourceTable. нужно отсеять все записи, у которых значение этого поля являеться нулевым. Заране благодарен за дельные советы! |
|
31.08.2010, 10:17 | #12 |
Участник
|
Цитата:
Сообщение от ValeriyZ
Цитата:
Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
У меня следующая проблемка: добавил дополнительное поле(Decimal) в таблицу, которая являеться MatrixSourceTable. нужно отсеять все записи, у которых значение этого поля являеться нулевым. Заране благодарен за дельные советы! В кратце суть в том что нужно написать код еще в триггера OnFindRecord и OnNextRecord, в них перед выводом записи вызывается функция, которая и говорит триггеру нужно или нет выводить запись... |
|
31.08.2010, 10:54 | #13 |
Участник
|
Цитата:
Сообщение от prefreitor
Цитата:
Сообщение от ValeriyZ
Цитата:
Вероятно, вам также захочется отфильтровать даты, чтобы были видны только с ненулевыми суммами. Тут поможет маркировка записей.
У меня следующая проблемка: добавил дополнительное поле(Decimal) в таблицу, которая являеться MatrixSourceTable. нужно отсеять все записи, у которых значение этого поля являеться нулевым. Заране благодарен за дельные советы! В кратце суть в том что нужно написать код еще в триггера OnFindRecord и OnNextRecord, в них перед выводом записи вызывается функция, которая и говорит триггеру нужно или нет выводить запись... |
|