View previous topic :: View next topic |
Author |
Message |
Vic2007
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())
end
oApp:visible:=.T. //отобразить Excel
DbPop()
RestSetKey(aSetkey)
Return 1 |
|
Back to top |
|
 |
itman

Joined: 05 Apr 2002 Posts: 1247 Location: Ильин Е.Ю. Occupation: Cio Interests: Кинель
|
Posted: 27 Mar 2007 07:07 Post subject: |
|
|
При обработке реестра по отмеченным записям плагин запускается для каждой строки, поэтому надо предусмотреть действия для первой отмеченной записи, для последующих и для последней.
Code: | IF nnumber=1 // Для первой записи, инициализация, назначение переменных
...
endif
...
IF nnumber=nkolstrok // для последней записи
...
endif
|
По поводу выгрузки в Excel - не знаю, не проверял, но возможно, если объявить переменные oApp,oWorkBook,oRange - Public и раскидать этапы создания, наполнения, завершения объектов по условиям, то возможно и получится.
Либо через временную баз |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 27 Mar 2007 09:46 Post subject: |
|
|
Я делал примерно как itman писал:
Code: |
IF nnumber=1
//Создаем dbf файл нужной структуры
endif
//Записываем в dbf файл строки заказов
IF nnumber=nkolstrok
// Результат из dbf файла пишем в Excel
endif
|
|
|
Back to top |
|
 |
Vic2007
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(!metka__->(EOF()))
rbook1->(dbGoTo(Val(metka__->Crec)))
// 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
nLine++
rbookm1 -> (DBSKIP())
End
metka__->(DBSKIP())
end
DbPop()
RestSetKey(aSetkey)
Return SayAndWait("Тонаж по заявкам= "+STR(Round(KolSum,0))+"кг") |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 27 Mar 2007 11:19 Post subject: |
|
|
Попробуйте обойтись без metka__
Достаточно параметров:
nnumber - число помеченных строк (в данном случаи заказов) в реестре
nkolstrok - номер обрабатываемой строки |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 27 Mar 2007 11:33 Post subject: |
|
|
Примерно так:
Code: |
IF nnumber=1
//Создаем временный dbf файл нужной структуры
endif
aScope :=mdocm -> (SetScope("UPPER(Sclad+Vid+Type+CodeDoc+Numdoc)",MDoc->(UPPER(Sclad+Vid+type+CodeDoc+NumDoc))))
mDocM->(dbGoTop())
While (!mdocm -> (EOF()))
//Записываем во временный dbf файл строки заказов
mdocm -> (DBSKIP())
end
IF nnumber=nkolstrok
// Результат из временного dbf файла пишем в Excel
endif
|
|
|
Back to top |
|
 |
Vic2007
Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
|
Posted: 28 Mar 2007 09:17 Post subject: Фильтр не ставится?! |
|
|
#include "excel.ch"
#include 'inkey.ch'
Function main()
LOCAL KolSum:=0, nLine:=0, indnomer:=1
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.)
//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 |
|
Back to top |
|
 |
Vic2007
Joined: 27 Mar 2007 Posts: 9 Location: Виктор Владимирович Нестеров Occupation: программист Interests: Новосибирск
|
Posted: 28 Mar 2007 09:20 Post subject: |
|
|
Function main()
LOCAL KolSum:=0, nLine:=0, indnomer:=1
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.)
//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()?! |
|
Back to top |
|
 |
Vic2007
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:={}
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.)
//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 |
|
Back to top |
|
 |
Vic2007
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:={}
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.)
//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 |
|
Back to top |
|
 |
maestro_
Joined: 29 Jan 2003 Posts: 95
|
Posted: 28 Mar 2007 10:37 Post subject: |
|
|
посмотрите какой у Вас текущий индекс по rbookm1 - может не тот тег? |
|
Back to top |
|
 |
Vic2007
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 не ставиться? подскажите, пожалуйста что написать! |
|
Back to top |
|
 |
nordk
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
Чтобы Ваше сообщение читалось так:
Code: | aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(STATUS+DopCode)))) |
фильтр на rbookm1 по rbook1 не ставиться? подскажите, пожалуйста что написать! |
|
Back to top |
|
 |
Vic2007
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 а дальше не видно |
|
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 29 Mar 2007 14:30 Post subject: |
|
|
Ну вот и ответ на ваш вопрос
У вас индекс
Вы говорите что наложите скоп на
а значение для скопа
Code: | UPPER(STATUS+DOPCODE) |
разумеется скоп будет пустой
надо писать вторым параметром скопа
Code: | rbook1->(upper(dopcode)) |
Вообще-то это можно было сразу увидеть в тексте - не углядел .gif) |
|
Back to top |
|
 |
|
|
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
|