Колонки в табличном документе
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
-> Программирование в БЭСТ-4

#1: Колонки в табличном документе Author: Дениска PostPosted: 24 Jul 2007 17:52
    —
Колонки табличного документа хранятся в файле TDocsC.dbf в мемо поле aSums. Похоже на колонку отводится 16 символов. В случаи ручной правки похоже ставится как-то флаг. В случае большого числа колонок разбивается на несколько строк.
Вообще, может есть стандартная функция (ии) для этого случая?

#2:  Author: nordkLocation: Горбунов Константин PostPosted: 24 Jul 2007 19:29
    —
Давайте сначала попробуем понять : что нужно.
Пока не понятно - объясните подробнее.
И на всякий случай о каком БЭСте речь

#3:  Author: Дениска PostPosted: 25 Jul 2007 05:03
    —
nordk wrote:
Давайте сначала попробуем понять : что нужно.
Пока не понятно - объясните подробнее.
И на всякий случай о каком БЭСте речь


Нужно получить данные из определенной колонки (по номеру) определенного табличного документа. Сделать это надо и для Б4, и для Б5. Структура файла и там и там вроде одинаковая. Так, что давайте на примере Б4 для определенности. В настройке табличных документов есть функция _SC(). Вот она, то и нужна.

#4:  Author: nordkLocation: Горбунов Константин PostPosted: 25 Jul 2007 14:33
    —
Описание функции выложи

#5:  Author: Дениска PostPosted: 26 Jul 2007 12:24
    —
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)
...

#6:  Author: nordkLocation: Горбунов Константин PostPosted: 26 Jul 2007 14:12
    —
Во-первых функции надо объявлять в конце,
во-вторых лучше давать свои имена
в-третьих FiGet по всей видимости не видна из плагина

Code:
#translate FiGet(<_f>)       => _FIELD-><_f>

#7:  Author: Дениска PostPosted: 26 Jul 2007 15:19
    —
Пытаюсь сделать самый простой пример. Вызываю плагин из Табличных документов:
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]): "Переменная не существует"

#8:  Author: nordkLocation: Горбунов Константин PostPosted: 27 Jul 2007 10:51
    —
Честно говоря мне вообще непонятна возня вокруг этой функции.
Ведь по сути она ничего не делает - а только возвращает значение из массива aLines.
Вы посмотрите в отладчике - доступен ли Вам этот массив, если недоступен, то про функцию можно забыть и надо все делать самостоятельно, начиная с подробного изложения, а что все таки надо...

#9:  Author: Дениска PostPosted: 27 Jul 2007 11:11
    —
nordk wrote:
Честно говоря мне вообще непонятна возня вокруг этой функции.
Ведь по сути она ничего не делает - а только возвращает значение из массива aLines.
Вы посмотрите в отладчике - доступен ли Вам этот массив, если недоступен, то про функцию можно забыть и надо все делать самостоятельно, начиная с подробного изложения, а что все таки надо...


Массив aLines не доступен.

Мне нужно значение n-го столбца из табличного документа. Нужна функция аналогичная стандартной функции _SC() из табличных документов.

P.S. Из хелпа к табличным документам:
_SC(n)|1 сумма из n-ой колонки у того же
сотрудника. Здесь подразумевается n-ая по порядку
следования в табличном документе колонка, а не
колонка, с кодом n.

P.P.S. Текст функции _SC() очень компактный , но не понятный для меня

#10:  Author: nordkLocation: Горбунов Константин PostPosted: 27 Jul 2007 11:36
    —
Думаю это не так просто.
Содержимое лежэит в массиве aLines
Он Вам недоступен.
Значит Вам надо создавать самому этот массив, самому его заполнять.
Если это Вам нужно во время рассчета.
Если после рассчета по посчитанным суммам - то тогда из поля БД.
Еще раз повторяю - Вы не пишете цель конечную и помогать Вам трудно. Явно что изначально постановка задачи некорректна и надо озвучить всю задачу от начала до конца а не отдельный ее метод, который по всей видимости так как Вам нужно будет решаться очень непросто. Надо пересматривать путь решения вопроса в принципе, а для этого надо понимать конечную цель и все имеющиеся исходные данны

#11:  Author: nordkLocation: Горбунов Константин PostPosted: 27 Jul 2007 11:59
    —
Зашел в табличные документы, написал свой плагин вставил в программу и могу ответственно заявить массив aLines в отладчике виден - берите из него значения и никакие функции Вам не нужны

#12:  Author: Дениска PostPosted: 27 Jul 2007 12:02
    —
nordk wrote:
Думаю это не так просто.
Содержимое лежэит в массиве aLines
Он Вам недоступен.
Значит Вам надо создавать самому этот массив, самому его заполнять.

Чем его заполнять? Если aLines := TDocsC -> aSums, то функция возвращает символ (а не колонку) по порядку

nordk wrote:

Если это Вам нужно во время рассчета.
Если после рассчета по посчитанным суммам - то тогда из поля БД.

Плагин вызываю по Ctrl-F5. Получается массив aLines надо заполнять из БД.


nordk wrote:

Еще раз повторяю - Вы не пишете цель конечную и помогать Вам трудно. Явно что изначально постановка задачи некорректна и надо озвучить всю задачу от начала до конца а не отдельный ее метод, который по всей видимости так как Вам нужно будет решаться очень непросто. Надо пересматривать путь решения вопроса в принципе, а для этого надо понимать конечную цель и все имеющиеся исходные данные.


Я понял, что надо объяснить подробней, но не могу понять, что не понятно ...

В БД данные здесь TDocsC -> aSums и их надо обработать. В БЭСТ-е эти данные мы видем в табличных документах (ЗП - Обработка документов - Табличные документы. Выбираем нужный табличный документ. На демо базе, к примеру, "003 Бригадные наряды"). По Ctrl-F5 вызываем плагин, который должен вывести, к примеру 2 колонку по людя

#13:  Author: Дениска PostPosted: 27 Jul 2007 12:04
    —
nordk wrote:
Зашел в табличные документы, написал свой плагин вставил в программу и могу ответственно заявить массив aLines в отладчике виден - берите из него значения и никакие функции Вам не нужны


Пока писал предыдущий свой пост и вы написали. Может вы выложите свой плагин, который выводит, к примеру, значение второй колонки. И вопрос я думаю закроется

#14:  Author: nordkLocation: Горбунов Константин PostPosted: 27 Jul 2007 12:26
    —
Code:
FUNCTION MAIN()
RETURN aLines[2,1]

#15:  Author: Дениска PostPosted: 27 Jul 2007 12:37
    —
nordk wrote:
Code:
FUNCTION MAIN()
RETURN aLines[2,1]


Запускаю из табличного документа и получаю: "Переменная не существует."

А вы откуда запускаете и какое значение выдает aLines[2,1]?

P.S. Проверяю на Б4+12.01СП39



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group