Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Sasha Гость
|
Добавлено: Вт Ноя 30, 2010 11:39 am Заголовок сообщения: Динамически привязать проводки из шаблона к ScrollGrid |
|
|
Помогите с проблемой.
Нужно, при открытии документа по шаблону, вычитать проводки из самого шаблона и задать соответствующее количество строк в ScrollGrid + привязать проводку своей строке.
Что-то у меня нет мыслей как правильно подойти к этому делу.
P.S. Вся суть в том, чтобы человек мог сделать новый шаблон (изменить количество проводок и задать некоторые значения), подключить форму и все что он наваял отобразилось автоматом на екране. |
|
Вернуться к началу |
|
|
Александр Омеленчук
Зарегистрирован: 05.02.2009 Сообщения: 39 Откуда: Донецк
|
Добавлено: Вт Ноя 30, 2010 4:59 pm Заголовок сообщения: ШОШО? |
|
|
ШОШО?
Вообще цель мероприятия можно уточнить..?
И нужен ли вообще шаблон... может документ без шаблона делать?
напр. Бух.справка |
|
Вернуться к началу |
|
|
Sasha Гость
|
Добавлено: Вт Ноя 30, 2010 5:23 pm Заголовок сообщения: |
|
|
именно бух справка
человек хочет иметь форму которая бы подошла под любой шаблон (почти под любой).
схема приблизительно такая:
создали шаблон с проводками (5шт) и забили некоторые даннные (счет, кореспондент, объект...). подключили к шаблону форму. нажали создать документ и вуаля в таблице почти все заполнено осталось проставить суммы.
внезапно захотелось создать другой шаблон (например не 5 а 10 проводок с другими значениями). создали, подключили эту же форму и вперед с песней.
где-то так. |
|
Вернуться к началу |
|
|
AllexL
Зарегистрирован: 10.03.2005 Сообщения: 434 Откуда: Donetsk
|
Добавлено: Вт Ноя 30, 2010 6:37 pm Заголовок сообщения: Re: Динамически привязать проводки из шаблона к ScrollGrid |
|
|
Sasha писал(а): | Помогите с проблемой.
Нужно, при открытии документа по шаблону, вычитать проводки из самого шаблона и задать соответствующее количество строк в ScrollGrid + привязать проводку своей строке.
Что-то у меня нет мыслей как правильно подойти к этому делу.
P.S. Вся суть в том, чтобы человек мог сделать новый шаблон (изменить количество проводок и задать некоторые значения), подключить форму и все что он наваял отобразилось автоматом на екране. |
По теме:
Код: |
set tempOp = Workarea.CreateOperation
tempOp.TemplateId = <tml_id>
tempOp.TemplateInvoker.FireAll
Op.transCount = tempOp.transCount
Dim numRows, i
numRows = 0
For i = 1 to op.transCount
Op.transList(i).Rows = tempOp.Translist(i).Rows
numRows = numRows + tempOp.Translist(i).Rows
Next
sgrdMegaGrid.Rows = numRows
|
А теперь внимание - вопрос: для чего сей огород?
Без четкой постановки задачи вы получите 73.5 разных ответа.
Из предыдущего поста видно, что заполнение через журнал операций не такая уж безумная идея |
|
Вернуться к началу |
|
|
kris
Зарегистрирован: 12.01.2006 Сообщения: 371
|
Добавлено: Ср Дек 01, 2010 9:33 am Заголовок сообщения: |
|
|
Насколько я понимаю, у человека в каждом наборе проводок по одной проводке (это довольно типично для бух справки). Если это так, то можно бинды в скроллгриде сделать "наоборот" и привязаться не к "Op.Trans(1,ScrollGrid.BindRow)", а к "Op.Trans(ScrollGrid.BindRow,1)".
Так поможет? |
|
Вернуться к началу |
|
|
Sasha Гость
|
Добавлено: Ср Дек 01, 2010 9:34 am Заголовок сообщения: |
|
|
с этой частью понятно. вычитали и задали количество проводок.
а как их привязать (и отобразить) в гриде? то есть задать datasource ? |
|
Вернуться к началу |
|
|
Sasha Гость
|
Добавлено: Ср Дек 01, 2010 9:40 am Заголовок сообщения: |
|
|
kris писал(а): | Насколько я понимаю, у человека в каждом наборе проводок по одной проводке (это довольно типично для бух справки). Если это так, то можно бинды в скроллгриде сделать "наоборот" и привязаться не к "Op.Trans(1,ScrollGrid.BindRow)", а к "Op.Trans(ScrollGrid.BindRow,1)".
Так поможет? |
когда мне поставили єту задачу, я думал: не вопрос, вычитаю количество проводок и динамически задам параметры грида. ан нет.
при такой схеме "Op.Trans(1,ScrollGrid.BindRow)" создается translist с строками а в шаблоне заданы проводки в виде translist-ов и оно пишет все в первую проводку (первый translist). во всяком случае я так понял. |
|
Вернуться к началу |
|
|
kris
Зарегистрирован: 12.01.2006 Сообщения: 371
|
Добавлено: Ср Дек 01, 2010 9:40 am Заголовок сообщения: |
|
|
Sasha писал(а): | с этой частью понятно. вычитали и задали количество проводок.
а как их привязать (и отобразить) в гриде? то есть задать datasource ? |
Если у вас несколько проводок в каждом наборе, то или через промежуточную операцию или никак. Или руками на OnCellClick, OnCellChanged. Конечно, возможно, но как-то очень через одно место. |
|
Вернуться к началу |
|
|
kris
Зарегистрирован: 12.01.2006 Сообщения: 371
|
Добавлено: Ср Дек 01, 2010 9:42 am Заголовок сообщения: |
|
|
Sasha писал(а): | когда мне поставили єту задачу, я думал: не вопрос, вычитаю количество проводок и динамически задам параметры грида. ан нет.
при такой схеме "Op.Trans(1,ScrollGrid.BindRow)" создается translist с строками а в шаблоне заданы проводки в виде translist-ов и оно пишет все в первую проводку (первый translist). во всяком случае я так понял. |
Читать внимательно мой пост если не подходит, то очень внимательно читать пост AllexL. Все ответы вам даны. |
|
Вернуться к началу |
|
|
Sasha Гость
|
Добавлено: Ср Дек 01, 2010 10:34 am Заголовок сообщения: |
|
|
Всем огромное спасибо.
Я немножко не в том русле размышлял. Теперь все ясно. Все получилось. |
|
Вернуться к началу |
|
|
AllexL
Зарегистрирован: 10.03.2005 Сообщения: 434 Откуда: Donetsk
|
Добавлено: Ср Дек 01, 2010 11:02 am Заголовок сообщения: |
|
|
kris писал(а): | Читать внимательно мой пост если не подходит, то очень внимательно читать пост AllexL. Все ответы вам даны. |
Добавлю еще немножко кода:
Данная функция возвращает по номеру строки таблицы sgrdMegaGrid соответствующую проводку операции
Код: |
Function getTransactionByRowNo(ByVal rowNo)
Dim i, trNo, row
row = sgrdMegaGrid.Rows
trNo = 0
While row>0
trNo = trNo+1
row = row - Op.translist(trNo).Rows
Wend
set getTransactionByRowNo = Op.Trans(trNo, Op.translist(trNo)-row)
End Function
|
Требование - sgrdMegaGrid.rows должен содержать общее количество проводок операции, тогда в DataSource можно писать выражение
Код: |
getTransactionByRowNo(sgrdMegaGrid.BindRow).AgentFromBind
getTransactionByRowNo(sgrdMegaGrid.BindRow).EntBind
getTransactionByRowNo(sgrdMegaGrid.BindRow).RowNo
getTransactionByRowNo(sgrdMegaGrid.BindRow).TransNo
etc....
|
|
|
Вернуться к началу |
|
|
kris
Зарегистрирован: 12.01.2006 Сообщения: 371
|
Добавлено: Ср Дек 01, 2010 1:15 pm Заголовок сообщения: |
|
|
AllexL писал(а): | kris писал(а): | Читать внимательно мой пост если не подходит, то очень внимательно читать пост AllexL. Все ответы вам даны. |
Добавлю еще немножко кода:
Данная функция возвращает по номеру строки таблицы sgrdMegaGrid соответствующую проводку операции
Код: |
Function getTransactionByRowNo(ByVal rowNo)
Dim i, trNo, row
row = sgrdMegaGrid.Rows
trNo = 0
While row>0
trNo = trNo+1
row = row - Op.translist(trNo).Rows
Wend
set getTransactionByRowNo = Op.Trans(trNo, Op.translist(trNo)-row)
End Function
|
Требование - sgrdMegaGrid.rows должен содержать общее количество проводок операции, тогда в DataSource можно писать выражение
Код: |
getTransactionByRowNo(sgrdMegaGrid.BindRow).AgentFromBind
getTransactionByRowNo(sgrdMegaGrid.BindRow).EntBind
getTransactionByRowNo(sgrdMegaGrid.BindRow).RowNo
getTransactionByRowNo(sgrdMegaGrid.BindRow).TransNo
etc....
|
|
Не пойдет. Грид-то (наверняка) не рид онли чтобы простыми функциями обойтись. Если уж идти по этому пути, то писать класс, в нем Property Get и Let... Но это уже совсем другая история и совсем уж паранойя. А делать ссылки через функции... Ей-богу проще во временную операцию все писать, а ее обрабатывать на онлоад и кэнсейв. |
|
Вернуться к началу |
|
|
|