Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Подцепить значение поля в шаблоне печатной формы из таблицы

 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
Lexuss



Joined: 19 Jul 2005
Posts: 18
Location: Ли Иван
Occupation: вынужденный админ БЭСТа
Interests: Люберцы

PostPosted: 01 Dec 2005 18:09    Post subject: Подцепить значение поля в шаблоне печатной формы из таблицы Reply with quote

Доброго здоровья!
Возникла следующая задача.
1. Есть самопальная таблица udo.dbf в dbase\sclad:
data D 8
udo C 4
В таблице создан индекс data_tag: dtos(data),
условие: !deleted().
В эту таблицу в начале каждого рабочего дня предполагается заносить
номер удостоверения. Т.е. на каждый день уникальный номер.

2. В "Товары. Готовая продукция" создан шаблон печатной формы "Удостоверение качества".
Нужно сделать так, чтобы при вызове fileeval, программа находила в таблице udo.dbf
номер удостоверения по дате выписки этого удостоверения (дата есть в шапке).
Механизм видится примерно таким: оператор утром вызвал спецфункцию, вбил сегодняшнюю
дату и номер. Затем втечение дня при выписке удостоверения, номер автоматом цепляется
из этой таблицы.
Если кому не в лом, подскажите как сделать. Может кто делал подобное.
За пример кода буду признателен. Спасибо.
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 01 Dec 2005 19:07    Post subject: Reply with quote

Перед вызовом FileEval в качестве параметра необходимо передавать дату документа которая в шапке как Вы пишете.
Тогда в массиве aPars[] она будет находится и дальше вам в свое таблице останется сделать что-то типа DBSEEK(aPars[1]) и возвращать
udo->номер
И делайте через HFileEval плз
Back to top
View user's profile Send private message Send e-mail
Lexuss



Joined: 19 Jul 2005
Posts: 18
Location: Ли Иван
Occupation: вынужденный админ БЭСТа
Interests: Люберцы

PostPosted: 02 Dec 2005 15:37    Post subject: Reply with quote

Спасибо за совет.
Однако придется начать с простого...
Допустим, хочу из шаблона передать в hfileeval эту самую дату.
В шаблоне пишу: hfileeval ('udo.hrb',{DDat})
Параметр DDat взял из окна "Параметры формулы".

В udo.hrb хочу отобразить то, что передал:
function main()
sayandwait('Дата = ' aPars[1])
return nil
После запуска отчета пишет: ошибка выполнения udo.hrb. Неверный аргумент. В следующем окне:
ERROR BASE/1122 Неверный аргумент: TRANSFORM arguments: ([1]=Type: U [2] = type C Val: 9999)

Подскажите, как правильно отобразить передаваемый параме
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 02 Dec 2005 18:10    Post subject: Reply with quote

Lexuss wrote:
sayandwait('Дата = ' aPars[1])

Подскажите, как правильно отобразить передаваемый параметр?


SayAndWait(DTOS(aPars[1])) или SayAndWait (DTOC(aPars[1]))
Короче параметр функции SayAndWait должен быть символьным
Back to top
View user's profile Send private message Send e-mail
Lexuss



Joined: 19 Jul 2005
Posts: 18
Location: Ли Иван
Occupation: вынужденный админ БЭСТа
Interests: Люберцы

PostPosted: 05 Dec 2005 16:39    Post subject: Reply with quote

Спасибо, все работает.
Операторы довольны как слоны.
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 05 Dec 2005 17:30    Post subject: Reply with quote

Всегда пожалуйста когда могу помочь
Back to top
View user's profile Send private message Send e-mail
Lexuss



Joined: 19 Jul 2005
Posts: 18
Location: Ли Иван
Occupation: вынужденный админ БЭСТа
Interests: Люберцы

PostPosted: 06 Dec 2005 17:21    Post subject: Reply with quote

Теперь немного другая проблема. Но решил постить тут же. Благодаря "урокам харбора" (resperct to nordk) создана таблица udo.dbf и операторы бьют туда дату и номера. Очень хотелось бы сделать такие улучшения: при вводе новой записи по F4 дата должна стоять сегодняшняя, номер на 1 больше чем последний номер в таблице.
Пробовал прикрутить параметры aWhen или aVAlid, не получается.
Подскажите в каком направлении рыть...
Текущее состояние кода:
Code:

FUNCTION MAIN()
Local aSet, aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc,_aHeads,;
 bDel,nUniMode, aWhen, cDate, aValid
aSet:=SaveSet()
aSetKey:=SaveSetKey()
//    включаем отладчик
altd()
//    подключаем таблицу (.F. - не монопольно)
NETUSE ("UDO", LoadPath()+"\sclad\udo.dbf",,.F.)
dbpush()
go bottom
//     Рисуем рамку для отображения таблицы
DISPBOX (2,0,23,79,(chr(201)+chr(205)+chr(187)+chr(186)+chr(188)+chr(205)+chr(200)+chr(186)+' '),"W+/B")
nTop:=3
nBot:=22
//     Заголовки столбцов (ширина не более 78, но и не менее)
cColHead:={"    Дата Номер удостоверения качества  Номер ветсвидетельства               "}
//      Параметр - сопроцедура для QBrowse - обновить все записи
cCurproc:={||"2"}
//     форматируем размеры и координаты вывода столбцов
aBlockCols:={{{||field->tekdata},0},{{||field->nomer},33},;
             {{||field->nomervet},52}}
//     переменная для ввода записи (отображается как окно)
_aHeads:={{"Дата.........................:","TEKDATA"},;
          {"Номер удостоверения качества.:","NOMER"},;
          {"Номер ветсвидетельства.......:","NOMERVET"}}
//     переменная для разрешения/запрета удаления
bDel = {||.F.}
//     определяем уникальность по индексу (=2)
nUniMode:=2
cDate:=date()
//aWhen:={,,,,,{||aIn[1]=cDate,.t.}}
aValid:={,,,,,{||aIn[1]=cDate,.t.}}
udo->(Initlist(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,,,aWhen,aValid,nUniMode,bDel,,,,))
udo->(DBCLOSEAREA())
dbpop()
RestSetKey(aSetKey)
RestSet(aSet)
//sayandwait ("Hello")
RETURN NIL
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 06 Dec 2005 17:32    Post subject: Reply with quote

Ну тут в первую очередь
aValid:={,,,,,{||aIn[1]=cDate,.t.}}
надо как минимум
aValid:={,,,,,{||aIn[1]:=cDate,.t.}}
А вообще для инициализации aIn[] лучше применять


26.bPreGet – блок кода, выполняемый пеpед каждым выполнением READ до пpоpисовки GetList (при необходимости заранее проинициализировать aIn, а также для навески SetKey'ев и формирования связанных таблиц до непосредственного редактирования). В блок кода передается флаг выхода по сслыке, если его сбросить в .T., то будет произведен выход из qInput, без выполннения bPostGet. В блок кода вторым параметром передается текущий aHeads
Back to top
View user's profile Send private message Send e-mail
Lexuss



Joined: 19 Jul 2005
Posts: 18
Location: Ли Иван
Occupation: вынужденный админ БЭСТа
Interests: Люберцы

PostPosted: 07 Dec 2005 11:04    Post subject: Reply with quote

Да-да, читал в хэлпе.

Quote:
В блок кода вторым параметром передается текущий aHeads

А первым параметром что передается? И сколько их вообще?
Quote:
если его сбросить в .T.

В каком месте бросать?
Короче говоря, какой синтаксис у этого bPreGet? Растолкуйте плз или подскажите где читать...
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 07 Dec 2005 18:06    Post subject: Reply with quote

Давайте включать полет мысли
Нам нужно aIn[1]:=cDate - так ?
Тогда зачем забивать голову параметрами
bPreget:={|x,y|aIn[1]:=cDate}
Кол-во параметров обозначили и ладушки - цель то у нас другая, а
именно проинициализировать aIn[] - будут нужны параметры - тогда
над ними и подумаем - правильно ?
Back to top
View user's profile Send private message Send e-mail
Lexuss



Joined: 19 Jul 2005
Posts: 18
Location: Ли Иван
Occupation: вынужденный админ БЭСТа
Interests: Люберцы

PostPosted: 07 Dec 2005 19:10    Post subject: Reply with quote

Есть, работает.
Полет мысли - это хорошо. Но аэродром то должен быть какой то...
Что такое |x,y|?
А как мне в bPreGet вписать в aIn[2], что nomer = nomer+1.
Пробовал что типа: bPreGet:={|x,y|aIn[1]:=cDate, aIn[2]:= udo-> nomer +1}...
В общем это метод тыка какой то получается, так как насчет синтаксиса?
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 07 Dec 2005 21:07    Post subject: Reply with quote

Это не метод тыка - это стандартные правила блоков кода в клиппере.
Вы абсолютно правильно написали - через запятую, так и надо
В функции при вызове мы передаем ей параметры при вызове
myfunction(x,y) - просто объявляем что есть переменные куда положить
В блоке кода {|x,y|}
Вам сказали что должно быть два параметра - вот мы и определяем две переменные в которые значение этих параметров внутри
блока кода разместить программа пусть пытается.
А проблема ваша вероятно в том что вы уверены что стоите на строке с последним номером (курсором в базе udo) и прибавляете 1 - если это будет так то aIn[2] будет правильным, если нет - то значит надо
думать как курсор в udo поставить на правильную запись перед
инициализацией aIn[2]
Если что непонятно пишу - Вы уж извиняйте, спрашивайте плз
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru