private aStruTMP,cFileTMP,cNameTMP,aStru,cFile,cName,cTemplate
PRIVATE aSetKey
// путь к шаблону win-печати
cTemplate:='sclad\\TEMPLATE\\strixkod.frf'
// Сохраняем привязанные к клавишам функции
aSetKey:=SaveSetKey()
//Cохраняем текущее состояние (текущую рабочую область,
//установленный индекс и фильтр, текущий номер записи).
DBPUSH()
// массив для описания структуры DBF файла необходимого для создания источника данных BEST4+
bda.s_maker SHAPKA STROKI
aStru := {}
aAdd(aStru,{"VarName","C",20,0})
aAdd(aStru,{"VarC","C",20,0})
aAdd(aStru,{"FieldName","C",10,0})
// путь и имя DBF файла описания полей bda.s_maker SHAPKA STROKI
cFile := "File_op.dbf"
cName := GlobalTmpPath+cFile
// массив для описания структуры DBF файла, из кторого будет брать данные источник данных источник данных BEST4+
aStruTMP := {}
aAdd(aStruTMP,{"Vid","C",1,0})
aAdd(aStruTMP,{"Type","C",1,0})
aAdd(aStruTMP,{"Sclad","C",6,0})
aAdd(aStruTMP,{"Codedoc","C",3,0})
aAdd(aStruTMP,{"Numdoc","C",6,0})
aAdd(aStruTMP,{"Date","D",0,0})
aAdd(aStruTMP,{"Grup","C",5,0})
aAdd(aStruTMP,{"Nnum","C",13,0})
aAdd(aStruTMP,{"Partia","C",5,0})
aAdd(aStruTMP,{"PartName","C",20,0})
aAdd(aStruTMP,{"Name","C",60,0})
aAdd(aStruTMP,{"Kolout","N",19,4})
aAdd(aStruTMP,{"inside","N",5,0})
// путь и имя DBF файла
cFileTMP := "tmp.dbf"
cNameTMP := GlobalTmpPath+cFileTMP
// создаём C:\\TEMP\\File_op.dbf и C:\\TEMP\\tmp.dbf
DBCreate(cName,aStru)
DBCreate(cNameTMP,aStruTMP)
// открываем C:\\TEMP\\tmp.dbf для сетевого использования
NetUse("TMP",cNameTMP)
DBPUSH("MDOCM","MDOCM_W",,{MDOCM->SCLAD+MDOCM->VID+MDOCM->TYPE+MDOCM->CODEDOC+MDOCM->NUMDOC,MDOC->SCLAD+MDOC->VID+MDOC->TYPE+MDOC->CODEDOC+MDOC->NUMDOC})
// реляция с номенклатурным справочником
MDOCM->(f_SetRelation("MLABEL","UPPER(GRUP+NNUM)"))
// реляция со справочником партий
MDOCM->(f_SetRelation("SPR_PART","UPPER(GRUP+NNUM+PARTIA)"))
// заполняем C:\\TEMP\\tmp.dbf валенками и ботинками с необходимым количеством строк
MDOCM->( DBGOTOP() )
WHILE MDOCM->( !EOF() )
MAXKOL:=MDOCM->KOLOUT
FOR I=1 TO MAXKOL
TMP->(AddRec())
TMP->VID := MDOCM->VID
TMP->TYPE := MDOCM->TYPE
TMP->SCLAD := MDOCM->SCLAD
TMP->CODEDOC := MDOCM->CODEDOC
TMP->NUMDOC := MDOCM->NUMDOC
TMP->DATE := MDOCM->DATE
TMP->GRUP := MDOCM->GRUP
TMP->NNUM := MDOCM->NNUM
TMP->PARTIA := MDOCM->PARTIA
TMP->PARTNAME:= SPR_PART->NAME
TMP->NAME := MLABEL->NAME
TMP->KOLOUT := MDOCM->KOLOUT
TMP->INSIDE := I
TMP->(F_DBUNLOCK())
NEXT
MDOCM->(DBSKIP())
ENDDO
Dbpop()
TMP->(dbClosearea())
// заполняем C:\\TEMP\\File_op.dbf
NetUse("File_op",cName)
ADDREC()
File_op->VarName :="Заголовок"
File_op->VarC :="Движение ТМЦ"
DbUnlock()
ADDREC()
File_op->VarName :="Вид"
File_op->FieldName :="VID"
DbUnlock()
ADDREC()
File_op->VarName :="Тип"
File_op->FieldName :="TYPE"
DbUnlock()
ADDREC()
File_op->VarName :="Склад"
File_op->FieldName :="SCLAD"
DbUnlock()
ADDREC()
File_op->VarName :="Код документа"
File_op->FieldName :="CODEDOC"
DbUnlock()
ADDREC()
File_op->VarName :="Номер документа"
File_op->FieldName :="NUMDOC"
DbUnlock()
ADDREC()
File_op->VarName :="Дата документа"
File_op->FieldName :="DATE"
DbUnlock()
ADDREC()
File_op->VarName :="Группа"
File_op->FieldName :="GRUP"
DbUnlock()
ADDREC()
File_op->VarName :="Номер"
File_op->FieldName :="NNUM"
DbUnlock()
ADDREC()
File_op->VarName :="Партия"
File_op->FieldName :="PARTIA"
DbUnlock()
ADDREC()
File_op->VarName :="Наименование партии"
File_op->FieldName :="PARTNAME"
DbUnlock()
ADDREC()
File_op->VarName :="НаименованиеТМЦ"
File_op->FieldName :="NAME"
DbUnlock()
ADDREC()
File_op->VarName :="Количество"
File_op->FieldName :="KOLOUT"
DbUnlock()
ADDREC()
File_op->VarName :="Номер внутри партии"
File_op->FieldName :="INSIDE"
DbUnlock()
File_op->(dbClosearea())
// Вызов функции win-печати
// cTemplate - имя и путь к шаблону отчета
// cName - имя файла описания шапки и строк отчета
// В качестве файла строк используется файл TMP.dbf
// путь и название которого в переменной сNameTMP
// последний параметр .T. - вызов дизайнера отчета
WinReport(cTemplate,cName,cNameTMP,.T.)
// Восстанавливаем предыдущее состояние (текущую рабочую область,
// установленный индекс и фильтр, текущий номер записи).
DbPop()
// Восстанавливаем привязанные к клавишам функции
RestSetKey(aSetkey) |