А почему все записи в main.dbf только новые которые появились недавно (у которых ID отсутствует). Можно поле ID сделать числовым и проиндексировать по нему , а значение делать отрицательным например. Тогда на все про все будет уходить не так иж много времени я думаю несколько секунд. Ну если не работали так и проводок не должно появиться за исключением того момента что все без исключения проводки делаются вручную. Теоретически чем больше таких плагинов сделать тем лучше, а потом будет срабатывать не каждое открытие документов, а в соответствии с квантом времени. Я же написал что недостатки есть но они могут быть приемлемы. Хотя Бэст5 наверное лучше - не видел.
Сергей Иваницкий пишет:
По поводу уникальных номеров, я бы сделал так:
на вход в документ(которые чаще всего вызываются накладные или заказы и тд и вход в реестр АРМ ГБ)я бы повесил плагин который бы проверял наличие (отсутствие)этих ключей за прошедший период скажем секунд 30 , при этом последнее значение даты + времени и количество записей в main.dbf проверки можно записать в memdat.dbf, ну и при запуске проверять эту запись , если время прошло - проверить последние записи и вписать свой ключ...
воткак-то так.
имеется ввиду проверка последних сведений в main.dbf не обязательно связанных сдокументом.
А я про книгу и пишу просто предлагаю делать присвоение ID не сразу а потом при работе ( вроде как в фоновом режиме)
только не чаще определенного кванта времени т.е при открытии/закрытии и т.д. какого нибудь документа проверять последние несколько записей книги и добавлять ID. Тут конечно есть кое какие издержки, но они могут быть приемлемы.
1. Инитлист вызывается на событие проверки документа и при этом занимает только часть экрана, так как он разделен на 3 части вот эта то часть и ограничивает высоту интлиста все зависит от того где находился в момент нажатия F10
Отсюда и нельзя ли развернуть инитлист на весь экран или хотябы гарантированно переключиться на нижнюючасть экрана.
2.
Мне надо записывать в таблицу много дополнительных полей которые заполнять не надо ведь в итоге я все это буду записывать в mdocm.dbf например номер документа, дату, тип и т.д. от оператора будет нужно только заполнить группу, номенклатуреый номер, количество и цену, а все остальное должно записаться автоматически.
вот изучаю инитлист там есть событие _bPost и bScrPost может их както? может подскажете крохотный пример.
По поводу уникальных номеров, я бы сделал так:
на вход в документ(которые чаще всего вызываются накладные или заказы и тд и вход в реестр АРМ ГБ)я бы повесил плагин который бы проверял наличие (отсутствие)этих ключей за прошедший период скажем секунд 30 , при этом последнее значение даты + времени и количество записей в main.dbf проверки можно записать в memdat.dbf, ну и при запуске проверять эту запись , если время прошло - проверить последние записи и вписать свой ключ...
воткак-то так.
Сергей Иваницкий пишет:
Следующий :
Мне в TMC2 надо вводить значения не через Qinput, а автоматически тоесть спрятать от оператора. Как это сделать через aWhen?
и
Цитата
Сергей Иваницкий пишет:
И еще, как всетаки инитлист на весь экран растянуть?
разобрался скобки блин, но легче не стало.
во первых сразу 2 не рисуются,
вовторых если шевельнуть курсором, то INIT2() мелькает пару секунд и БЭСТ вываливается в главное меню.
Выловил много ошибок - вроде заработало но криво отображаетя вернее область инитлиста почему-то усекается по размеру активной части экрана перед нажатием F10,
как сэтим бороться?
Здравствуйте, Мучаюсь с двумя инитлистами - не получается.
видно что-то не так, может подскажите.
вот что у меня получилось в соответствии с уроком 8
срабатывает на событие "Проверка документа"
Код
Function u2Init()
Local cInsDB1, cInsDB2, cInsIdx, aInsStru, I, N
Local aSet, aSetKey
Private aRef, aSortSeek1,cGr, _numrec:=1
aSet:=SAVESET()
aSetKey:=SaveSetKey()
// создаем временную таблицу
cInsDBF1 := TempFile(m->GlobalTmpPath,"DBF")
cInsDBF2 := TempFile(m->GlobalTmpPath,"DBF")
aInsStru := {{'GRUP','C',5,0},{'NNUM','C',13,0},{'PARTIA','C',5,0},{'NAME','C',35,0},{'ED','C',5,0},{'KOL','N',19,4},{'CENA','N',19,2},{"LINK","N",17,0},{"COLOR","N",1,0}}
DbCreate(cInsDBF1,aInsStru)
NetUseExc('TMC1',cInsDBF1)
DbCreate(cInsDBF2,aInsStru)
NetUseExc('TMC2',cInsDBF2)
TMC2->( ORDCREATE(cInsIdx,'TMC_LINK','LINK',{||Link}) )
N = GetKolMat()
For I = 1 To N
TMC1->(ADDREC())
TMC1->GRUP:= GetMat(I,79, 5)
TMC1->NNUM:= GetMat(I,84, 13)
TMC1->PARTIA:= GetMat(I,405, 5)
TMC1->NAME:= GetMat(I,1, 35)
TMC1->KOL:= GetMat(I,36, 14,.T.)
TMC1->CENA:= GetMat(I,64, 15,.T.)
TMC1->LINK:=IncStep("OPERSTRFAC") //NNOPER для сdzpb
Next
TMC1->( F_DBUNLOCK() )
TMC1->( DbCommit() )
TMC1->(DbGoTop())
// initlist's
//задание параметров первой прямоугольной области
DispBox(2,0,15,79,( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 )+' ' ) ,"W+/B")
//задание параметров второй прямоугольной области
DispBox(15,0,23,79,( Chr( 204 ) + Chr( 205 ) + Chr( 185 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 )+' ' ) ,"W+/B")
mLabel->(OrdSetFocus('mLabel'))
//Справочник
aSortSeek1:={;
{"- по номеру ","Шифр ", {'GRUP','NNUM'},'UPPER(aIn[1]+aIn[2])',,,,'Mlabel'},;
{"- по наименованию","Наименование ", {'Grup','Name'},'UPPER(aIn[1], aIn[2])',,,,'MLab_St'};
}
mLabel->( MAKEREFER("sl","Номенклатурный справочник",1,{"Гр.","Шифр ","Наименование ","Ед.","Квал.","Фас.","Доп."},;
{1,1,15}, "n/w,w+/n",{"NNUM"},{"aIn[2]"},'UPPER(aIn[1]+aIn[2])',;
{{||Field->GRUP},{||Field->NNUM},{||Left(Field->NAME,25)},{||Field->ED },{||Left(Field->Marka,6)},{||Left(Field->RAZMER,6)},{||Left(Field->Sort,10)}};
,aSortSeek1,;
,,,,,{||mlabel->(SetScope('UPPER(Grup+NNUM)',Upper(aIn[1],aIn[2])))},,;
,,,,,,,,'cFind$UPPER(Name)'))
aRef:={,'SL'}
// Init1(.T.)
Do While INIT1(.T.).And.INIT2(.T.)
EndDo
// записываем
RestSetKey(aSetKey)
RESTSET(aSet)
Return NIL
Function INIT1(lFlag)
Private nTop,nBot,cColHead,aBlockCols,cCurProc,bDel,aHeads
Private bPreGet
Private hnrowact
altd()
nTop:=3
nBot:=10
//Заголовки над полями
cColHead:={"Наименование Колич. Цена LINK "}
сCurProc:={||MOVE1(lFlag,@hnRowAct,m->_numrec,RecNo())}
//Заголовки колонок реестра
aBlockCols:={;
{{||Left(Field->Name,25)},0},;
{{||Str(Field->kol,12,4)},26},;
{{||Str(Field->Cena,12,2)},43},;
{{||Str(Field->LINK,17)},58};
}
//Запрещение удаления в таблице
bDel:={||.F.}
//Комментарии
SHADOWBOX(Chr(24)+Chr(25)+" - перемещение, TAb - переключение",23,3,23,75,"W/B")
// вызов функции
TMC1->(InitList(nTop,nBot,cColHead,aBlockCols,сCurProc,,,,,,,,,,,,,,,,,,,,,,,,hnrowact))
Return LastKey()!=27
//Второй инитлист
Function INIT2(lFlag)
Private mTop,mBot,mLeft,dColHead,bBlockCols,dCurProc,cDel,bHeadsmLeft
Private cPreGet
Private rnRowAct
altd()
mTop:=15
mBot:=22
mLeft:=1
//Заголовки над полями
dColHead:={"Наименование Колич. Цена LINK "}
dCurProc:={||MOVE1(lFlag,@rnRowAct,m->_numrec,RecNo())}
//Заголовки колонок реестра
bBlockCols:={;
{{||Left(Field->Name,25)},0},;
{{||Str(Field->kol,12,4)},26},;
{{||Str(Field->Cena,12,2)},43},;
{{||Str(Field->LINK,17)},58};
}
//Запрещение удаления в таблице
cDel:={||.F.}
//Описание полей ввода
bHeads:={;
{"Группа...............:","GRUP"},;
{"Номенклатурный номер.:","NNUM"}}
SHADOWBOX(" F4 - Ввод новой F8 - Удаление ",23,3,23,75,"W/B")
TMC1->(InitList(nTop,nBot,cColHead,aBlockCols,сCurProc,bHeads,aRef,,,,,,,,,,,,,,,,,,,,rnRowAct))
Return LastKey()!=27
Function MOVE1(_xlActiv,hnRowAct,xRec,xRec1)
Local m1end, m1Ar
altd()
m1End:=2
m1Ar:=(TMC1)->( QScroll() )
hnRowAct:=m1Ar[6]
If LastKey()=9
(TMC1)->( QOFF() )
SetLastKey(0)
m1End:=0
Else
If xRec ==NIL.Or.xRec<>xRec1
Init2(.F.)
m->_numrec:=xRec1
EndIf
If _xlActiv
m1End:=2
Else
QOff()
m1End:=0
EndIf
EndIf
Return m1end
Function MOVE2(_lActiv,rnRowAct)
Local m2End,m2Ar
m2Ar:=(TMC2)->( QScroll() )
rnRowAct:=m2Ar[6]
If LastKey()=9.Or.!_lActiv
(TMC2)->( QOFF() )
SetLastKey(0)
m2End:=0
Else
m2End:=2
EndIf
Return m2End
Выпадает на строке
Код
m1Ar:=(TMC1)->( QScroll() )
переменная не существует.
И еще рисует заголовок инитлиста не сверху а строки на 3 ниже
А про библиотеку функций, я имел ввиду пользовательские(мои), у меня уже более 10 плагинов и многие из них используют одни и теже функции, мне их приходится в исходники дописывать ну и при изменениях приходится их заново переписывать и т.д. Или библиотеки можно только на харборе сделать? я не пробовал.
Строгого соответствия нет, более того один и тотже товар(мы торгуем химикатами) зачастую имеет много наименований (синонимов)и часто в одной группе(нефасованый) он называется "аммоний двухромовокислый" а в другой(фасованый) "аммоний бихромат" а по факту это одно и тоже. Поэтому планирую просто выбирать из справочника mlabel а партию формировать автоматом иначе никак. Про свои поля я в курсе, пользуюсь уже просто хотел как проще.
itman пишет:
Добрый день!
...
Т.е. в этом случае можно делать не внутреннее перемещение, а списание на фасовку, скажем. и порождать автоматом накладную на приход другой позиции.
Списко привязки оформить как таблицу пользователя, это по сути спецификация.
И уже по ней в коде формировать новую накладную.
Как вариант, возможно затраты по кодингу здесь будут меньше и надежнее.
Не надо каждый раз делать привязку, если я правильно понял задачу.
Спасибо, я примерно так и думал только связанную накладную хочу формировать сразу после записи расхода с фасцеха. Для этого и надо 2 инитлиста, так как 1-ой позиции списания могут соответствовать несколько позиций в порожденной накладной(разная фасовка).
Для связи думаю использовать поле oper_fact из mdocm и поля CodeDoc1 и NameDoc1 из mdoc + временная таблица.