Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
Posted: 27 Mar 2007 06:02 Post subject: Объединенная накладная-заказ
Привет, всем! Несколько заказов объединяем в один, выясняем тоннаж для рещения какая машина поедет. Создал несколько заказов в УП. Попробовал создать сп.функцию Ctrl-F5 для переноса в Excel. Работает только с одним документом, хотя отмечено несколько.
Прошу помочь. Вообще хотелось вычислять для начала тоннаж суммы заказов.
#include "excel.ch"
Function Main()
LOCAL oApp,oWorkBook,oRange
LOCAL nLine:=3, xlLandscape := 2
Private aStru, aSetKey, bRange, bName, a1
aSetKey:=SaveSetKey()
DBPUSH()
netuse("rbook1",LOADPATH()+"\real\rbook.dbf")
netuse("rbookm1",LOADPATH()+"\real\rbookm.dbf")
TRY
oApp := CreateObject( "Excel.Application" ) //попытка создать объект Excel
CATCH
Alert("Excel не доступен!")
RETURN .F.
END
altd()
oWorkBook:=oApp:WorkBooks:Add() //добавление рабочей книги
oAS:=oWorkBook:Worksheets():Add() //добавление таблицы
oAS:Name:="Specifikaciq" //присвоение имени таблице
aScope :=rbookm1 -> (SetScope("UPPER(dopcode)",rbook1->(UPPER(dopcode))))
rbookm1->(dbGoTop())
While (!rbookm1 -> (EOF()))
IF MLABEL->(DBSEEK(UPPER(rbookm1 -> Grup + rbookm1 -> NNum)))
oAS:Cells(nLine,"D"):Value:=HB_OEMTOANSI(MLABEL->NAME) //Запись в ячейки
oAS:Cells(nLine,"D"):NumberFormat:="@"//текстовой формат
oAS:Cells(nLine,"F"):Value:=HB_OEMTOANSI(MLABEL->ED)
oAS:Cells(nLine,"F"):NumberFormat:="###########0,00" //числовой формат
EndIf
oAS:Cells(nLine,"J"):Value:=rbookm1 -> CENAOUT
oAS:Cells(nLine,"J"):NumberFormat:="###########0,00" //числовой формат
nLine++
rbookm1 -> (DBSKIP())
При обработке реестра по отмеченным записям плагин запускается для каждой строки, поэтому надо предусмотреть действия для первой отмеченной записи, для последующих и для последней.
Code:
IF nnumber=1 // Для первой записи, инициализация, назначение переменных
...
endif
...
IF nnumber=nkolstrok // для последней записи
...
endif
По поводу выгрузки в Excel - не знаю, не проверял, но возможно, если объявить переменные oApp,oWorkBook,oRange - Public и раскидать этапы создания, наполнения, завершения объектов по условиям, то возможно и получится.
Либо через временную баз
Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
Posted: 27 Mar 2007 10:47 Post subject:
попробовал посчитать тоннаж. ВОПРОС что за база metka__ - это кол-во отмеченных записей в реестре. То правильно посчитает, а после компиляции -> 0кг и все. Что я написал не так? И галочки в реестре не снимаются!
Function main()
LOCAL KolSum:=0, nLine:=0, NumStr:=0
dbpush()
aSetKey:=SaveSetKey()
netuse("rbook1",LOADPATH()+"\real\rbook.dbf")
netuse("rbookm1",LOADPATH()+"\real\rbookm.dbf")
metka__->(dbgotop())
While (!rbookm1 -> (EOF()))
IF MLABEL->(DBSEEK(UPPER(rbookm1 -> Grup + rbookm1 -> NNum)))
if mlabel->ed="кг"
KolSum:=KolSum+rbookm1->kol
endif
EndIf
nLine++
rbookm1 -> (DBSKIP())
End
metka__->(DBSKIP())
end
DbPop()
RestSetKey(aSetkey)
Return SayAndWait("Тонаж по заявкам= "+STR(Round(KolSum,0))+"кг")
IF nnumber=1
*Сперва создаем и открываем монопольно новую таблицу для редактирования
do while file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf");
.or.file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
indnomer++
enddo
dbcreate(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",;
{{"dopcode","C",6,0},{"grup","C",5,0},{"nnum","C",13,0},{"kol","N",19,4}})
NETUSE("mag_ce",LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",,.F.)
//index on name tag dopcode to (Loadpath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
ENDIF
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(DopCode)))) //фильтр не ставиться?!
rbookm1->(dbGoTop())
While (!rbookm1 -> (EOF()))
IF MLABEL->(DBSEEK(UPPER(rbookm1 -> Grup + rbookm1 -> NNum)))
if mlabel->ed="кг"
KolSum:=KolSum+rbookm1->kol
endif
EndIf
arbookm1:=rbookm1->(Scatter())
mag_ce->(addrec())
mag_ce->(gather(arbookm1))
mag_ce->(f_dbunlock())
nLine++
rbookm1->(DBSKIP())
End
IF nnumber=nkolstrok
mag_ce->(dbclosearea())
DbPop()
RestSetKey(aSetkey)
Return SayAndWait("Тонаж по заявкам="+STR(Round(KolSum,0))+"кг")
ENDIf
IF nnumber=1
*Сперва создаем и открываем монопольно новую таблицу для редактирования
do while file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf");
.or.file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
indnomer++
enddo
dbcreate(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",;
{{"dopcode","C",6,0},{"grup","C",5,0},{"nnum","C",13,0},{"kol","N",19,4}})
NETUSE("mag_ce",LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",,.F.)
//index on name tag dopcode to (Loadpath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
ENDIF
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(DopCode)))) //фильтр не ставиться?!
rbookm1->(dbGoTop())
While (!rbookm1 -> (EOF()))
IF MLABEL->(DBSEEK(UPPER(rbookm1 -> Grup + rbookm1 -> NNum)))
if mlabel->ed="кг"
KolSum:=KolSum+rbookm1->kol
endif
EndIf
arbookm1:=rbookm1->(Scatter())
mag_ce->(addrec())
mag_ce->(gather(arbookm1))
mag_ce->(f_dbunlock())
nLine++
rbookm1->(DBSKIP())
End
IF nnumber=nkolstrok
mag_ce->(dbclosearea())
DbPop()
RestSetKey(aSetkey)
Return SayAndWait("Тонаж по заявкам="+STR(Round(KolSum,0))+"кг")
ENDIf все классно, но фильтр не ставится по setscope()?!
Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
Posted: 28 Mar 2007 09:21 Post subject:
результат такой -> все классно, но почему-то фильтр не ставиться по SetScope. Привожу код ->
Function main()
LOCAL KolSum:=0, nLine:=0, indnomer:=1
aRbookm1:={}
IF nnumber=1
*Сперва создаем и открываем монопольно новую таблицу для редактирования
do while file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf");
.or.file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
indnomer++
enddo
dbcreate(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",;
{{"dopcode","C",6,0},{"grup","C",5,0},{"nnum","C",13,0},{"kol","N",19,4}})
NETUSE("mag_ce",LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",,.F.)
//index on name tag dopcode to (Loadpath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
ENDIF
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(DopCode)))) //фильтр не ставиться?!
rbookm1->(dbGoTop())
While (!rbookm1 -> (EOF()))
IF MLABEL->(DBSEEK(UPPER(rbookm1 -> Grup + rbookm1 -> NNum)))
if mlabel->ed="кг"
KolSum:=KolSum+rbookm1->kol
endif
EndIf
arbookm1:=rbookm1->(Scatter())
mag_ce->(addrec())
mag_ce->(gather(arbookm1))
mag_ce->(f_dbunlock())
nLine++
rbookm1->(DBSKIP())
End
IF nnumber=nkolstrok
mag_ce->(dbclosearea())
DbPop()
RestSetKey(aSetkey)
Return SayAndWait("Тонаж по заявкам="+STR(Round(KolSum,0))+"кг")
ENDIf
Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
Posted: 28 Mar 2007 09:22 Post subject:
результат такой -> все классно, но почему-то фильтр не ставиться по SetScope. Привожу код ->
Function main()
LOCAL KolSum:=0, nLine:=0, indnomer:=1
aRbookm1:={}
IF nnumber=1
*Сперва создаем и открываем монопольно новую таблицу для редактирования
do while file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf");
.or.file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
indnomer++
enddo
dbcreate(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",;
{{"dopcode","C",6,0},{"grup","C",5,0},{"nnum","C",13,0},{"kol","N",19,4}})
NETUSE("mag_ce",LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",,.F.)
//index on name tag dopcode to (Loadpath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
ENDIF
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(DopCode)))) //фильтр не ставиться?!
rbookm1->(dbGoTop())
While (!rbookm1 -> (EOF()))
IF MLABEL->(DBSEEK(UPPER(rbookm1 -> Grup + rbookm1 -> NNum)))
if mlabel->ed="кг"
KolSum:=KolSum+rbookm1->kol
endif
EndIf
arbookm1:=rbookm1->(Scatter())
mag_ce->(addrec())
mag_ce->(gather(arbookm1))
mag_ce->(f_dbunlock())
nLine++
rbookm1->(DBSKIP())
End
IF nnumber=nkolstrok
mag_ce->(dbclosearea())
DbPop()
RestSetKey(aSetkey)
Return SayAndWait("Тонаж по заявкам="+STR(Round(KolSum,0))+"кг")
ENDIf
Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
Posted: 29 Mar 2007 12:46 Post subject:
#include "excel.ch"
#include 'inkey.ch'
Function main()
LOCAL KolSum:=0, nLine:=0, indnomer:=1, aScope, aScope2
aRbookm1:={}
dbpush()
aSetKey:=SaveSetKey()
netuse("rbook1",LOADPATH()+"\real\rbook.dbf")
netuse("rbookm1",LOADPATH()+"\real\rbookm.dbf")
IF nnumber=1
*Сперва создаем и открываем монопольно новую таблицу для редактирования
do while file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf");
.or.file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
indnomer++
enddo
dbcreate(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",;
{{"dopcode","C",6,0},{"grup","C",5,0},{"nnum","C",13,0},{"kol","N",19,4}})
NETUSE("mag_ce",LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",,.F.)
ENDIF
//фильтр на rbookm1 по rbook1 не ставиться? подскажите, пожалуйста что написать!
//...................................................
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(STATUS+DopCode)))) //фильтр не ставиться?!
rbookm1->(dbGoTop())
// .................................................
//фильтр на rbookm1 по rbook1 не ставиться? подскажите, пожалуйста что написать!
While (!rbookm1 -> (EOF()))
IF MLABEL->(DBSEEK(UPPER(rbookm1 -> Grup + rbookm1 -> NNum)))
if mlabel->ed="кг"
KolSum:=KolSum+rbookm1->kol
endif
EndIf
arbookm1:=rbookm1->(Scatter())
mag_ce->(addrec())
mag_ce->(gather(arbookm1))
mag_ce->(f_dbunlock())
nLine++
rbookm1->(DBSKIP())
End
IF nnumber=nkolstrok
mag_ce->(dbclosearea())
DbPop()
RestSetKey(aSetkey)
Return SayAndWait("Тонаж по заявкам="+STR(Round(KolSum,0))+"кг")
ENDIf
//фильтр на rbookm1 по rbook1 не ставиться? подскажите, пожалуйста что написать!
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 29 Mar 2007 12:57 Post subject:
Vic2007 wrote:
#include "excel.ch"
#include 'inkey.ch'
Function main()
LOCAL KolSum:=0, nLine:=0, indnomer:=1, aScope, aScope2
aRbookm1:={}
dbpush()
aSetKey:=SaveSetKey()
netuse("rbook1",LOADPATH()+"\real\rbook.dbf")
netuse("rbookm1",LOADPATH()+"\real\rbookm.dbf")
IF nnumber=1
*Сперва создаем и открываем монопольно новую таблицу для редактирования
do while file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf");
.or.file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
indnomer++
enddo
dbcreate(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",;
{{"dopcode","C",6,0},{"grup","C",5,0},{"nnum","C",13,0},{"kol","N",19,4}})
NETUSE("mag_ce",LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",,.F.)
ENDIF
//фильтр на rbookm1 по rbook1 не ставиться? подскажите, пожалуйста что написать!
//...................................................
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(STATUS+DopCode)))) //фильтр не ставиться?!
Вот в этом месте поставьте ALTD()
Откомпилируйте с отладчиком.
Запустите. С помощью F5 дойдете жо этой точки.
Нажмите F6
Найдите таблицу rbookm1
Посмотрите и напишите сюда индексный ключ,
который в данный момент будет у этой таблицы.
И еще просьб выделяйте код программы с помощью CODE
Чтобы Ваше сообщение читалось так:
Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
Posted: 29 Mar 2007 13:34 Post subject:
Получилос так ->
Code:
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(STATUS+DopCode)))) //фильтр не ставиться?!
altd()
// F6 -> смотрю rbookm1 filter key-> upper(dopcode+grup+nnum+parti а дальше не видно
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