View previous topic :: View next topic |
Author |
Message |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 24 Jul 2007 17:52 Post subject: Колонки в табличном документе |
|
|
Колонки табличного документа хранятся в файле TDocsC.dbf в мемо поле aSums. Похоже на колонку отводится 16 символов. В случаи ручной правки похоже ставится как-то флаг. В случае большого числа колонок разбивается на несколько строк.
Вообще, может есть стандартная функция (ии) для этого случая? |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 24 Jul 2007 19:29 Post subject: |
|
|
Давайте сначала попробуем понять : что нужно.
Пока не понятно - объясните подробнее.
И на всякий случай о каком БЭСте речь |
|
Back to top |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 25 Jul 2007 05:03 Post subject: |
|
|
nordk wrote: | Давайте сначала попробуем понять : что нужно.
Пока не понятно - объясните подробнее.
И на всякий случай о каком БЭСте речь |
Нужно получить данные из определенной колонки (по номеру) определенного табличного документа. Сделать это надо и для Б4, и для Б5. Структура файла и там и там вроде одинаковая. Так, что давайте на примере Б4 для определенности. В настройке табличных документов есть функция _SC(). Вот она, то и нужна. |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 25 Jul 2007 14:33 Post subject: |
|
|
Описание функции выложи |
|
Back to top |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 26 Jul 2007 12:24 Post subject: |
|
|
nordk wrote: | Описание функции выложил |
При запуске БЭСТ ругается:" Unknow or unregister function: FiGet"
Я правильно пробую?
Code: |
#define Y_Type(_x, _t) ValType(_x) == _t
Function _SC(nCo)
....
Return (aLines[nCo, 1])
Function Main()
Local aSC
....
aSC := F_TDocsC -> (_SC(1)
...
|
|
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 26 Jul 2007 14:12 Post subject: |
|
|
Во-первых функции надо объявлять в конце,
во-вторых лучше давать свои имена
в-третьих FiGet по всей видимости не видна из плагина
Code: | #translate FiGet(<_f>) => _FIELD-><_f> |
|
|
Back to top |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 26 Jul 2007 15:19 Post subject: |
|
|
Пытаюсь сделать самый простой пример. Вызываю плагин из Табличных документов:
Code: |
#translate FiGet(<_f>) => _FIELD-><_f>
#define Y_Type(_x, _t) ValType(_x) == _t
Function Main()
Local aStru, aSetKey
Local aSC
aSetKey:=SaveSetKey()
DBPUSH()
altd()
aSC := TDocsC -> (MY_SC(1))
DbPop()
RestSetKey(aSetkey)
Return
Function MY_SC(nCo)
MemVar aLines
If Y_Type(MemVarBlock("NFLAG"), "B")
Return(If(nCo > 0 .And. nCo < Val(FiGet(NCOL)),;
1,;
(;
SayError({"Выражение в формуле: MY_SC(" + LTrim(Str(nCo)) +;
") - должно ссылаться на номер",;
"колонки, которая расcчитыва" +;
"ется раньше текущей колонки!"}, 15),;
NIL;
)))
EndIf
Return (aLines[nCo, 1])
|
БЭСТ ругается на строчку Return (aLines[nCo, 1]): "Переменная не существует" |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 27 Jul 2007 10:51 Post subject: |
|
|
Честно говоря мне вообще непонятна возня вокруг этой функции.
Ведь по сути она ничего не делает - а только возвращает значение из массива aLines.
Вы посмотрите в отладчике - доступен ли Вам этот массив, если недоступен, то про функцию можно забыть и надо все делать самостоятельно, начиная с подробного изложения, а что все таки надо... |
|
Back to top |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 27 Jul 2007 11:11 Post subject: |
|
|
nordk wrote: | Честно говоря мне вообще непонятна возня вокруг этой функции.
Ведь по сути она ничего не делает - а только возвращает значение из массива aLines.
Вы посмотрите в отладчике - доступен ли Вам этот массив, если недоступен, то про функцию можно забыть и надо все делать самостоятельно, начиная с подробного изложения, а что все таки надо... |
Массив aLines не доступен.
Мне нужно значение n-го столбца из табличного документа. Нужна функция аналогичная стандартной функции _SC() из табличных документов.
P.S. Из хелпа к табличным документам:
_SC(n)|1 сумма из n-ой колонки у того же
сотрудника. Здесь подразумевается n-ая по порядку
следования в табличном документе колонка, а не
колонка, с кодом n.
P.P.S. Текст функции _SC() очень компактный , но не понятный для меня |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 27 Jul 2007 11:36 Post subject: |
|
|
Думаю это не так просто.
Содержимое лежэит в массиве aLines
Он Вам недоступен.
Значит Вам надо создавать самому этот массив, самому его заполнять.
Если это Вам нужно во время рассчета.
Если после рассчета по посчитанным суммам - то тогда из поля БД.
Еще раз повторяю - Вы не пишете цель конечную и помогать Вам трудно. Явно что изначально постановка задачи некорректна и надо озвучить всю задачу от начала до конца а не отдельный ее метод, который по всей видимости так как Вам нужно будет решаться очень непросто. Надо пересматривать путь решения вопроса в принципе, а для этого надо понимать конечную цель и все имеющиеся исходные данны |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 27 Jul 2007 11:59 Post subject: |
|
|
Зашел в табличные документы, написал свой плагин вставил в программу и могу ответственно заявить массив aLines в отладчике виден - берите из него значения и никакие функции Вам не нужны |
|
Back to top |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 27 Jul 2007 12:02 Post subject: |
|
|
nordk wrote: | Думаю это не так просто.
Содержимое лежэит в массиве aLines
Он Вам недоступен.
Значит Вам надо создавать самому этот массив, самому его заполнять.
|
Чем его заполнять? Если aLines := TDocsC -> aSums, то функция возвращает символ (а не колонку) по порядку
nordk wrote: |
Если это Вам нужно во время рассчета.
Если после рассчета по посчитанным суммам - то тогда из поля БД.
|
Плагин вызываю по Ctrl-F5. Получается массив aLines надо заполнять из БД.
nordk wrote: |
Еще раз повторяю - Вы не пишете цель конечную и помогать Вам трудно. Явно что изначально постановка задачи некорректна и надо озвучить всю задачу от начала до конца а не отдельный ее метод, который по всей видимости так как Вам нужно будет решаться очень непросто. Надо пересматривать путь решения вопроса в принципе, а для этого надо понимать конечную цель и все имеющиеся исходные данные. |
Я понял, что надо объяснить подробней, но не могу понять, что не понятно ...
В БД данные здесь TDocsC -> aSums и их надо обработать. В БЭСТ-е эти данные мы видем в табличных документах (ЗП - Обработка документов - Табличные документы. Выбираем нужный табличный документ. На демо базе, к примеру, "003 Бригадные наряды"). По Ctrl-F5 вызываем плагин, который должен вывести, к примеру 2 колонку по людя |
|
Back to top |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 27 Jul 2007 12:04 Post subject: |
|
|
nordk wrote: | Зашел в табличные документы, написал свой плагин вставил в программу и могу ответственно заявить массив aLines в отладчике виден - берите из него значения и никакие функции Вам не нужны |
Пока писал предыдущий свой пост и вы написали. Может вы выложите свой плагин, который выводит, к примеру, значение второй колонки. И вопрос я думаю закроется |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 27 Jul 2007 12:26 Post subject: |
|
|
Code: | FUNCTION MAIN()
RETURN aLines[2,1] |
|
|
Back to top |
|
|
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 27 Jul 2007 12:37 Post subject: |
|
|
nordk wrote: | Code: | FUNCTION MAIN()
RETURN aLines[2,1] |
|
Запускаю из табличного документа и получаю: "Переменная не существует."
А вы откуда запускаете и какое значение выдает aLines[2,1]?
P.S. Проверяю на Б4+12.01СП39 |
|
Back to top |
|
|
|