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

Объединенная накладная-заказ
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 27 Mar 2007 06:02    Post subject: Объединенная накладная-заказ Reply with quote

Привет, всем! Несколько заказов объединяем в один, выясняем тоннаж для рещения какая машина поедет. Создал несколько заказов в УП. Попробовал создать сп.функцию 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
View user's profile Send private message
itman



Joined: 05 Apr 2002
Posts: 1247
Location: Ильин Е.Ю.
Occupation: Cio
Interests: Кинель

PostPosted: 27 Mar 2007 07:07    Post subject: Reply with quote

При обработке реестра по отмеченным записям плагин запускается для каждой строки, поэтому надо предусмотреть действия для первой отмеченной записи, для последующих и для последней.
Code:
IF nnumber=1 // Для первой записи, инициализация, назначение переменных
...
endif
...
IF nnumber=nkolstrok // для последней записи
...
endif

По поводу выгрузки в Excel - не знаю, не проверял, но возможно, если объявить переменные oApp,oWorkBook,oRange - Public и раскидать этапы создания, наполнения, завершения объектов по условиям, то возможно и получится.
Либо через временную баз
Back to top
View user's profile Send private message Send e-mail
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 27 Mar 2007 09:46    Post subject: Reply with quote

Я делал примерно как itman писал:

Code:

IF nnumber=1
 //Создаем dbf файл нужной структуры
endif

//Записываем в dbf файл строки заказов

IF nnumber=nkolstrok
// Результат из dbf файла пишем в Excel
endif
Back to top
View user's profile Send private message
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 27 Mar 2007 10:47    Post subject: Reply with quote

попробовал посчитать тоннаж. ВОПРОС что за база 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
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 27 Mar 2007 11:19    Post subject: Reply with quote

Попробуйте обойтись без metka__

Достаточно параметров:

nnumber - число помеченных строк (в данном случаи заказов) в реестре

nkolstrok - номер обрабатываемой строки
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 27 Mar 2007 11:33    Post subject: Reply with quote

Примерно так:
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
View user's profile Send private message
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 28 Mar 2007 09:17    Post subject: Фильтр не ставится?! Reply with quote

#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
View user's profile Send private message
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 28 Mar 2007 09:20    Post subject: Reply with quote

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
View user's profile Send private message
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 28 Mar 2007 09:21    Post subject: Reply with quote

результат такой -> все классно, но почему-то фильтр не ставиться по 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
View user's profile Send private message
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 28 Mar 2007 09:22    Post subject: Reply with quote

результат такой -> все классно, но почему-то фильтр не ставиться по 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
View user's profile Send private message
maestro_



Joined: 29 Jan 2003
Posts: 95



PostPosted: 28 Mar 2007 10:37    Post subject: Reply with quote

посмотрите какой у Вас текущий индекс по rbookm1 - может не тот тег?
Back to top
View user's profile Send private message
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 29 Mar 2007 12:46    Post subject: Reply with quote

#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
View user's profile Send private message
nordk



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

PostPosted: 29 Mar 2007 12:57    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
Vic2007



Joined: 27 Mar 2007
Posts: 9
Location: Виктор Владимирович Нестеров
Occupation: программист
Interests: Новосибирск

PostPosted: 29 Mar 2007 13:34    Post subject: Reply with quote

Получилос так ->
Code:
aScope :=rbookm1->(SetScope("UPPER(DopCode)",rbook1->(UPPER(STATUS+DopCode)))) //фильтр не ставиться?!
altd()
// F6 -> смотрю rbookm1 filter key-> upper(dopcode+grup+nnum+parti  а дальше не видно
Back to top
View user's profile Send private message
nordk



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

PostPosted: 29 Mar 2007 14:30    Post subject: Reply with quote

Ну вот и ответ на ваш вопрос
У вас индекс
Code:
UPPER(DOPCODE)

Вы говорите что наложите скоп на
Code:
UPPER(DOPCODE)

а значение для скопа
Code:
UPPER(STATUS+DOPCODE)

разумеется скоп будет пустой
надо писать вторым параметром скопа
Code:
rbook1->(upper(dopcode))

Вообще-то это можно было сразу увидеть в тексте - не углядел
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
Goto page 1, 2  Next
Page 1 of 2

 
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