package msg
|
|
|
|
import (
|
|
"fmt"
|
|
"leit.com/leit_seat_aps/common"
|
|
"leit.com/leit_seat_aps/db"
|
|
"leit.com/leit_seat_aps/service"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type SNF_Separator struct {
|
|
RecordType SNF_FieldContent // **
|
|
TradePartnerId SNF_FieldContent
|
|
DocType SNF_FieldContent
|
|
SenderApp SNF_FieldContent
|
|
ReceiverApp SNF_FieldContent
|
|
GroupSenderId SNF_FieldContent
|
|
GroupReceiverId SNF_FieldContent
|
|
InterchangeNr SNF_FieldContent
|
|
GroupControlNr SNF_FieldContent
|
|
DocControlNr SNF_FieldContent
|
|
}
|
|
|
|
type SNF_01Header struct {
|
|
RecordType SNF_FieldContent // 01
|
|
TradePartnerBillTo SNF_FieldContent
|
|
TradePartnerConsignee SNF_FieldContent
|
|
ContractNr SNF_FieldContent
|
|
TradePartnerShipTo SNF_FieldContent
|
|
SchedStartDate SNF_FieldContent
|
|
SchedEndDate SNF_FieldContent
|
|
ReleaseDate SNF_FieldContent
|
|
Issue SNF_FieldContent
|
|
SchedQty SNF_FieldContent
|
|
Filler2 SNF_FieldContent
|
|
PurchaseOrderNr SNF_FieldContent
|
|
Filler3 SNF_FieldContent
|
|
PurposeCode SNF_FieldContent
|
|
ReferenceNr SNF_FieldContent
|
|
ReleaseId SNF_FieldContent
|
|
SchedTypeQualifier SNF_FieldContent
|
|
TradePartnerShipFrom SNF_FieldContent
|
|
TradePartnerSupplier SNF_FieldContent
|
|
Filler4 SNF_FieldContent
|
|
DocCode SNF_FieldContent
|
|
PurchaseOrderDate SNF_FieldContent
|
|
}
|
|
|
|
type SNF_11HeaderComment struct {
|
|
RecordType SNF_FieldContent // 11
|
|
CommentType SNF_FieldContent
|
|
Comment SNF_FieldContent
|
|
}
|
|
|
|
type SNF_13Seq struct {
|
|
RecordType SNF_FieldContent // 13
|
|
TypeCode SNF_FieldContent
|
|
ActionRequest SNF_FieldContent
|
|
VehicleIdNr SNF_FieldContent
|
|
CustomerSeqNo SNF_FieldContent
|
|
DockCode SNF_FieldContent
|
|
Filler0 SNF_FieldContent
|
|
SjjDeliveryTime SNF_FieldContent
|
|
Filler1 SNF_FieldContent
|
|
Filler2 SNF_FieldContent
|
|
Filler3 SNF_FieldContent
|
|
BbaOrderNr SNF_FieldContent
|
|
BbaPartFamily SNF_FieldContent
|
|
BbaSupplyGroup SNF_FieldContent
|
|
Filler4 SNF_FieldContent
|
|
BbaSwetTime SNF_FieldContent
|
|
}
|
|
|
|
type SNF_30Item struct {
|
|
RecordType SNF_FieldContent // 30
|
|
TpDestination SNF_FieldContent
|
|
CustReferenceNr SNF_FieldContent
|
|
TpShipTo SNF_FieldContent
|
|
DockNr SNF_FieldContent
|
|
InternalContract SNF_FieldContent
|
|
EngChangeLevel SNF_FieldContent
|
|
LineFeed SNF_FieldContent
|
|
ModelYear SNF_FieldContent
|
|
Filler2 SNF_FieldContent
|
|
ContractNr SNF_FieldContent
|
|
Position SNF_FieldContent
|
|
ZZ SNF_FieldContent
|
|
LinePR SNF_FieldContent
|
|
CustPartNr SNF_FieldContent
|
|
PurchaseOrderNr SNF_FieldContent
|
|
Filler3 SNF_FieldContent
|
|
Filler4 SNF_FieldContent
|
|
PartReleaseStatus SNF_FieldContent
|
|
Uom SNF_FieldContent
|
|
ReleaseNr SNF_FieldContent
|
|
ReserveLineFeed SNF_FieldContent
|
|
UnitPrice SNF_FieldContent
|
|
ShipFrom SNF_FieldContent
|
|
OrderQty SNF_FieldContent
|
|
PackQty SNF_FieldContent
|
|
ReturnableContainer SNF_FieldContent
|
|
SupplierId SNF_FieldContent
|
|
VendorPartNo SNF_FieldContent
|
|
PartDescription SNF_FieldContent
|
|
}
|
|
|
|
type SNF_50Forecast struct {
|
|
RecordType SNF_FieldContent // 50
|
|
SchedStartDate SNF_FieldContent
|
|
SchedEndDate SNF_FieldContent
|
|
FcstBucketCode SNF_FieldContent
|
|
FcstSchedQualifier SNF_FieldContent
|
|
Filler2 SNF_FieldContent
|
|
SchedQty SNF_FieldContent
|
|
DatetimeQualifier SNF_FieldContent
|
|
SchedTime SNF_FieldContent
|
|
Filler4 SNF_FieldContent
|
|
ScheduleDate SNF_FieldContent
|
|
ReferenceNr SNF_FieldContent
|
|
Carrier SNF_FieldContent
|
|
TransportCode SNF_FieldContent
|
|
RouteCode SNF_FieldContent
|
|
DeliveryDate SNF_FieldContent
|
|
DeliveryTime SNF_FieldContent
|
|
TimeZone SNF_FieldContent
|
|
ShipOrderStatusCode SNF_FieldContent
|
|
}
|
|
|
|
type SNF_FieldContent struct {
|
|
Content string
|
|
StartPos int
|
|
EndPos int
|
|
Width int
|
|
}
|
|
|
|
// 将变量转换成字符返回
|
|
func (sf *SNF_FieldContent) ToString() string {
|
|
length := len(strings.TrimSpace(sf.Content))
|
|
if sf.Width >= length {
|
|
return strings.TrimSpace(sf.Content) + strings.Repeat(" ", sf.Width-length)
|
|
} else {
|
|
return sf.Content[:sf.Width]
|
|
}
|
|
}
|
|
|
|
func (ss *SNF_Separator) ToString() string {
|
|
/**fmt.Println(len(ss.RecordType.ToString()),">",ss.RecordType.ToString(),"<")
|
|
fmt.Println(len(ss.TradePartnerId.ToString()),">",ss.TradePartnerId.ToString(),"<")
|
|
fmt.Println(len(ss.DocType.ToString()),">",ss.DocType.ToString(),"<")
|
|
fmt.Println(len(ss.SenderApp.ToString()),">",ss.SenderApp.ToString(),"<")
|
|
fmt.Println(len(ss.ReceiverApp.ToString()),">",ss.ReceiverApp.ToString(),"<")
|
|
fmt.Println(len(ss.GroupSenderId.ToString()),">",ss.GroupSenderId.ToString(),"<")
|
|
fmt.Println(len(ss.GroupReceiverId.ToString()),">",ss.GroupReceiverId.ToString(),"<")
|
|
fmt.Println(len(ss.InterchangeNr.ToString()),">",ss.InterchangeNr.ToString(),"<")**/
|
|
return ss.RecordType.ToString() +
|
|
ss.TradePartnerId.ToString() +
|
|
ss.DocType.ToString() +
|
|
ss.SenderApp.ToString() +
|
|
ss.ReceiverApp.ToString() +
|
|
ss.GroupSenderId.ToString() +
|
|
ss.GroupReceiverId.ToString() +
|
|
ss.InterchangeNr.ToString() +
|
|
ss.GroupControlNr.ToString() +
|
|
ss.DocControlNr.ToString()
|
|
}
|
|
|
|
func (ss *SNF_Separator) Init() {
|
|
ss.RecordType.Content = "**"
|
|
ss.RecordType.StartPos = 1
|
|
ss.RecordType.EndPos = 2
|
|
ss.RecordType.Width = 2
|
|
|
|
ss.TradePartnerId.Content = ""
|
|
ss.TradePartnerId.StartPos = 3
|
|
ss.TradePartnerId.EndPos = 22
|
|
ss.TradePartnerId.Width = 20
|
|
|
|
ss.DocType.Content = ""
|
|
ss.DocType.StartPos = 23
|
|
ss.DocType.EndPos = 32
|
|
ss.DocType.Width = 10
|
|
|
|
ss.SenderApp.Content = ""
|
|
ss.SenderApp.StartPos = 33
|
|
ss.SenderApp.EndPos = 52
|
|
ss.SenderApp.Width = 20
|
|
|
|
ss.ReceiverApp.Content = ""
|
|
ss.ReceiverApp.StartPos = 53
|
|
ss.ReceiverApp.EndPos = 72
|
|
ss.ReceiverApp.Width = 20
|
|
|
|
ss.GroupSenderId.Content = ""
|
|
ss.GroupSenderId.StartPos = 73
|
|
ss.GroupSenderId.EndPos = 92
|
|
ss.GroupSenderId.Width = 20
|
|
|
|
ss.GroupReceiverId.Content = ""
|
|
ss.GroupReceiverId.StartPos = 93
|
|
ss.GroupReceiverId.EndPos = 112
|
|
ss.GroupReceiverId.Width = 20
|
|
|
|
ss.InterchangeNr.Content = ""
|
|
ss.InterchangeNr.StartPos = 113
|
|
ss.InterchangeNr.EndPos = 122
|
|
ss.InterchangeNr.Width = 10
|
|
|
|
ss.GroupControlNr.Content = ""
|
|
ss.GroupControlNr.StartPos = 123
|
|
ss.GroupControlNr.EndPos = 132
|
|
ss.GroupControlNr.Width = 10
|
|
|
|
ss.DocControlNr.Content = ""
|
|
ss.DocControlNr.StartPos = 133
|
|
ss.DocControlNr.EndPos = 142
|
|
ss.DocControlNr.Width = 10
|
|
}
|
|
|
|
func (ss *SNF_Separator) Print(edi_sn string) (rowdata string, err error) {
|
|
var (
|
|
stdeftab db.Stdeftab
|
|
stdeftablst []db.Stdeftab
|
|
i int
|
|
)
|
|
// 初始化
|
|
ss.Init()
|
|
|
|
stdeftab = db.Stdeftab{}
|
|
if stdeftablst, err = stdeftab.GetStandardList("SNF_SEP"); err != nil {
|
|
return
|
|
}
|
|
|
|
// 获取内置数据
|
|
for i = 0; i < len(stdeftablst); i++ {
|
|
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
|
|
switch stdeftablst[i].Statid {
|
|
case "TradePID":
|
|
ss.TradePartnerId.Content = stdeftablst[i].Bez
|
|
case "SendAppId":
|
|
ss.SenderApp.Content = stdeftablst[i].Bez
|
|
case "RecAppId":
|
|
ss.ReceiverApp.Content = stdeftablst[i].Bez
|
|
case "GrpCtrlNr":
|
|
ss.GroupControlNr.Content = stdeftablst[i].Bez
|
|
case "IntChgCtrlNr":
|
|
ss.InterchangeNr.Content = edi_sn
|
|
case "DocCtrlNr":
|
|
ss.DocControlNr.Content = stdeftablst[i].Bez
|
|
case "GrpSendId":
|
|
ss.GroupSenderId.Content = stdeftablst[i].Bez
|
|
case "GrpRecId":
|
|
ss.GroupReceiverId.Content = stdeftablst[i].Bez
|
|
case "DocType":
|
|
ss.DocType.Content = stdeftablst[i].Bez
|
|
}
|
|
}
|
|
|
|
rowdata = ss.ToString()
|
|
return
|
|
}
|
|
|
|
func (sh *SNF_01Header) ToString() string {
|
|
return sh.RecordType.ToString() +
|
|
sh.TradePartnerBillTo.ToString() +
|
|
sh.TradePartnerConsignee.ToString() +
|
|
sh.ContractNr.ToString() +
|
|
sh.TradePartnerShipTo.ToString() +
|
|
sh.SchedStartDate.ToString() +
|
|
sh.SchedEndDate.ToString() +
|
|
sh.ReleaseDate.ToString() +
|
|
sh.Issue.ToString() +
|
|
sh.SchedQty.ToString() +
|
|
sh.Filler2.ToString() +
|
|
sh.PurchaseOrderNr.ToString() +
|
|
sh.Filler3.ToString() +
|
|
sh.PurposeCode.ToString() +
|
|
sh.ReferenceNr.ToString() +
|
|
sh.ReleaseId.ToString() +
|
|
sh.SchedTypeQualifier.ToString() +
|
|
sh.TradePartnerShipFrom.ToString() +
|
|
sh.TradePartnerSupplier.ToString() +
|
|
sh.Filler4.ToString() +
|
|
sh.DocCode.ToString() +
|
|
sh.PurchaseOrderDate.ToString()
|
|
}
|
|
|
|
func (sh *SNF_01Header) Init() {
|
|
sh.RecordType.Content = "01"
|
|
sh.RecordType.StartPos = 1
|
|
sh.RecordType.EndPos = 2
|
|
sh.RecordType.Width = 2
|
|
|
|
sh.TradePartnerBillTo.Content = ""
|
|
sh.TradePartnerBillTo.StartPos = 3
|
|
sh.TradePartnerBillTo.EndPos = 22
|
|
sh.TradePartnerBillTo.Width = 20
|
|
|
|
sh.TradePartnerConsignee.Content = ""
|
|
sh.TradePartnerConsignee.StartPos = 23
|
|
sh.TradePartnerConsignee.EndPos = 42
|
|
sh.TradePartnerConsignee.Width = 20
|
|
|
|
sh.ContractNr.Content = ""
|
|
sh.ContractNr.StartPos = 43
|
|
sh.ContractNr.EndPos = 72
|
|
sh.ContractNr.Width = 30
|
|
|
|
sh.TradePartnerShipTo.Content = ""
|
|
sh.TradePartnerShipTo.StartPos = 73
|
|
sh.TradePartnerShipTo.EndPos = 92
|
|
sh.TradePartnerShipTo.Width = 20
|
|
|
|
sh.SchedStartDate.Content = ""
|
|
sh.SchedStartDate.StartPos = 93
|
|
sh.SchedStartDate.EndPos = 102
|
|
sh.SchedStartDate.Width = 10
|
|
|
|
sh.SchedEndDate.Content = ""
|
|
sh.SchedEndDate.StartPos = 103
|
|
sh.SchedEndDate.EndPos = 112
|
|
sh.SchedEndDate.Width = 10
|
|
|
|
sh.ReleaseDate.Content = ""
|
|
sh.ReleaseDate.StartPos = 113
|
|
sh.ReleaseDate.EndPos = 122
|
|
sh.ReleaseDate.Width = 10
|
|
|
|
sh.Issue.Content = ""
|
|
sh.Issue.StartPos = 123
|
|
sh.Issue.EndPos = 142
|
|
sh.Issue.Width = 20
|
|
|
|
sh.SchedQty.Content = ""
|
|
sh.SchedQty.StartPos = 143
|
|
sh.SchedQty.EndPos = 143
|
|
sh.SchedQty.Width = 1
|
|
|
|
sh.Filler2.Content = ""
|
|
sh.Filler2.StartPos = 144
|
|
sh.Filler2.EndPos = 151
|
|
sh.Filler2.Width = 8
|
|
|
|
sh.PurchaseOrderNr.Content = ""
|
|
sh.PurchaseOrderNr.StartPos = 152
|
|
sh.PurchaseOrderNr.EndPos = 173
|
|
sh.PurchaseOrderNr.Width = 22
|
|
|
|
sh.Filler3.Content = ""
|
|
sh.Filler3.StartPos = 174
|
|
sh.Filler3.EndPos = 182
|
|
sh.Filler3.Width = 9
|
|
|
|
sh.PurposeCode.Content = ""
|
|
sh.PurposeCode.StartPos = 183
|
|
sh.PurposeCode.EndPos = 192
|
|
sh.PurposeCode.Width = 10
|
|
|
|
sh.ReferenceNr.Content = ""
|
|
sh.ReferenceNr.StartPos = 193
|
|
sh.ReferenceNr.EndPos = 222
|
|
sh.ReferenceNr.Width = 30
|
|
|
|
sh.ReleaseId.Content = ""
|
|
sh.ReleaseId.StartPos = 223
|
|
sh.ReleaseId.EndPos = 252
|
|
sh.ReleaseId.Width = 30
|
|
|
|
sh.SchedTypeQualifier.Content = ""
|
|
sh.SchedTypeQualifier.StartPos = 253
|
|
sh.SchedTypeQualifier.EndPos = 262
|
|
sh.SchedTypeQualifier.Width = 10
|
|
|
|
sh.TradePartnerShipFrom.Content = ""
|
|
sh.TradePartnerShipFrom.StartPos = 263
|
|
sh.TradePartnerShipFrom.EndPos = 282
|
|
sh.TradePartnerShipFrom.Width = 20
|
|
|
|
sh.TradePartnerSupplier.Content = ""
|
|
sh.TradePartnerSupplier.StartPos = 283
|
|
sh.TradePartnerSupplier.EndPos = 302
|
|
sh.TradePartnerSupplier.Width = 20
|
|
|
|
sh.Filler4.Content = ""
|
|
sh.Filler4.StartPos = 303
|
|
sh.Filler4.EndPos = 312
|
|
sh.Filler4.Width = 10
|
|
|
|
sh.DocCode.Content = ""
|
|
sh.DocCode.StartPos = 313
|
|
sh.DocCode.EndPos = 342
|
|
sh.DocCode.Width = 30
|
|
|
|
sh.PurchaseOrderDate.Content = ""
|
|
sh.PurchaseOrderDate.StartPos = 343
|
|
sh.PurchaseOrderDate.EndPos = 352
|
|
sh.PurchaseOrderDate.Width = 10
|
|
}
|
|
|
|
func (sh *SNF_01Header) Print(edi_sn string) (rowdata string, err error) {
|
|
var (
|
|
stdeftab db.Stdeftab
|
|
stdeftablst []db.Stdeftab
|
|
i int
|
|
)
|
|
// 初始化
|
|
sh.Init()
|
|
|
|
stdeftab = db.Stdeftab{}
|
|
if stdeftablst, err = stdeftab.GetStandardList("SNF_HEAD"); err != nil {
|
|
return
|
|
}
|
|
|
|
// 获取内置数据
|
|
for i = 0; i < len(stdeftablst); i++ {
|
|
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
|
|
switch stdeftablst[i].Statid {
|
|
case "DockCode":
|
|
sh.DocCode.Content = stdeftablst[i].Bez
|
|
case "Filler2":
|
|
sh.Filler2.Content = stdeftablst[i].Bez
|
|
case "Filler3":
|
|
sh.Filler3.Content = stdeftablst[i].Bez
|
|
case "PurposeCode":
|
|
sh.PurposeCode.Content = stdeftablst[i].Bez
|
|
case "SchedTypeQualifier":
|
|
sh.SchedTypeQualifier.Content = stdeftablst[i].Bez
|
|
case "RefNr":
|
|
if stdeftablst[i].Bez == "EDI_SN" {
|
|
sh.ReferenceNr.Content = edi_sn
|
|
}
|
|
case "ReleaseDate":
|
|
if stdeftablst[i].Bez == "DATE()" {
|
|
sh.ReleaseDate.Content = common.Date(time.Now().Unix(), "YYYYMMDD")
|
|
} else {
|
|
sh.ReleaseDate.Content = stdeftablst[i].Bez
|
|
}
|
|
case "ReleaseId":
|
|
if stdeftablst[i].Bez == "EDI_SN" {
|
|
sh.ReleaseId.Content = edi_sn
|
|
}
|
|
case "SchedEndDate":
|
|
if stdeftablst[i].Bez == "DATE()" {
|
|
sh.SchedEndDate.Content = common.Date(time.Now().Unix(), "YYYYMMDD")
|
|
} else {
|
|
sh.SchedEndDate.Content = stdeftablst[i].Bez
|
|
}
|
|
case "SchedStartDate":
|
|
if stdeftablst[i].Bez == "DATE()" {
|
|
sh.SchedStartDate.Content = common.Date(time.Now().Unix(), "YYYYMMDD")
|
|
} else {
|
|
sh.SchedStartDate.Content = stdeftablst[i].Bez
|
|
}
|
|
case "TPMaterial":
|
|
sh.Issue.Content = stdeftablst[i].Bez
|
|
case "TPShipFrom":
|
|
sh.TradePartnerShipFrom.Content = stdeftablst[i].Bez
|
|
case "TPSupplier":
|
|
sh.TradePartnerSupplier.Content = stdeftablst[i].Bez
|
|
case "TradShipTo":
|
|
sh.TradePartnerShipTo.Content = stdeftablst[i].Bez
|
|
}
|
|
}
|
|
|
|
rowdata = sh.ToString()
|
|
return
|
|
}
|
|
|
|
func (sh *SNF_11HeaderComment) ToString() string {
|
|
return sh.RecordType.ToString() +
|
|
sh.CommentType.ToString() +
|
|
sh.Comment.ToString()
|
|
}
|
|
|
|
func (sh *SNF_11HeaderComment) Init() {
|
|
sh.RecordType.Content = "11"
|
|
sh.RecordType.StartPos = 1
|
|
sh.RecordType.EndPos = 2
|
|
sh.RecordType.Width = 2
|
|
|
|
sh.CommentType.Content = ""
|
|
sh.CommentType.StartPos = 3
|
|
sh.CommentType.EndPos = 5
|
|
sh.CommentType.Width = 3
|
|
|
|
sh.Comment.Content = ""
|
|
sh.Comment.StartPos = 6
|
|
sh.Comment.EndPos = 85
|
|
sh.Comment.Width = 80
|
|
}
|
|
|
|
func (sh *SNF_11HeaderComment) Print() (rowdata string, err error) {
|
|
var (
|
|
stdeftab db.Stdeftab
|
|
stdeftablst []db.Stdeftab
|
|
i int
|
|
)
|
|
// 初始化
|
|
sh.Init()
|
|
|
|
// 获取内置数据
|
|
stdeftab = db.Stdeftab{}
|
|
if stdeftablst, err = stdeftab.GetStandardList("SNF_HEAD"); err != nil {
|
|
return
|
|
}
|
|
|
|
// 获取内置数据
|
|
for i = 0; i < len(stdeftablst); i++ {
|
|
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
|
|
switch stdeftablst[i].Statid {
|
|
case "CommentType":
|
|
sh.CommentType.Content = stdeftablst[i].Bez
|
|
case "Comment":
|
|
sh.Comment.Content = stdeftablst[i].Bez
|
|
}
|
|
}
|
|
|
|
rowdata = sh.ToString()
|
|
return
|
|
}
|
|
|
|
func (ss *SNF_13Seq) ToString() string {
|
|
return ss.RecordType.ToString() +
|
|
ss.TypeCode.ToString() +
|
|
ss.ActionRequest.ToString() +
|
|
ss.VehicleIdNr.ToString() +
|
|
ss.CustomerSeqNo.ToString() +
|
|
ss.DockCode.ToString() +
|
|
ss.Filler0.ToString() +
|
|
ss.SjjDeliveryTime.ToString() +
|
|
ss.Filler1.ToString() +
|
|
ss.Filler2.ToString() +
|
|
ss.Filler3.ToString() +
|
|
ss.BbaOrderNr.ToString() +
|
|
ss.BbaPartFamily.ToString() +
|
|
ss.BbaSupplyGroup.ToString() +
|
|
ss.Filler4.ToString() +
|
|
ss.BbaSwetTime.ToString()
|
|
}
|
|
|
|
func (ss *SNF_13Seq) Init() {
|
|
ss.RecordType.Content = "13"
|
|
ss.RecordType.StartPos = 1
|
|
ss.RecordType.EndPos = 2
|
|
ss.RecordType.Width = 2
|
|
|
|
ss.TypeCode.Content = ""
|
|
ss.TypeCode.StartPos = 3
|
|
ss.TypeCode.EndPos = 4
|
|
ss.TypeCode.Width = 2
|
|
|
|
ss.ActionRequest.Content = ""
|
|
ss.ActionRequest.StartPos = 5
|
|
ss.ActionRequest.EndPos = 21
|
|
ss.ActionRequest.Width = 17
|
|
|
|
ss.VehicleIdNr.Content = ""
|
|
ss.VehicleIdNr.StartPos = 22
|
|
ss.VehicleIdNr.EndPos = 56
|
|
ss.VehicleIdNr.Width = 35
|
|
|
|
ss.CustomerSeqNo.Content = ""
|
|
ss.CustomerSeqNo.StartPos = 57
|
|
ss.CustomerSeqNo.EndPos = 91
|
|
ss.CustomerSeqNo.Width = 35
|
|
|
|
ss.DockCode.Content = ""
|
|
ss.DockCode.StartPos = 92
|
|
ss.DockCode.EndPos = 126
|
|
ss.DockCode.Width = 35
|
|
|
|
ss.Filler0.Content = ""
|
|
ss.Filler0.StartPos = 127
|
|
ss.Filler0.EndPos = 161
|
|
ss.Filler0.Width = 35
|
|
|
|
ss.SjjDeliveryTime.Content = ""
|
|
ss.SjjDeliveryTime.StartPos = 162
|
|
ss.SjjDeliveryTime.EndPos = 180
|
|
ss.SjjDeliveryTime.Width = 19
|
|
|
|
ss.Filler1.Content = ""
|
|
ss.Filler1.StartPos = 181
|
|
ss.Filler1.EndPos = 182
|
|
ss.Filler1.Width = 2
|
|
|
|
ss.Filler2.Content = ""
|
|
ss.Filler2.StartPos = 183
|
|
ss.Filler2.EndPos = 191
|
|
ss.Filler2.Width = 9
|
|
|
|
ss.Filler3.Content = ""
|
|
ss.Filler3.StartPos = 192
|
|
ss.Filler3.EndPos = 193
|
|
ss.Filler3.Width = 2
|
|
|
|
ss.BbaOrderNr.Content = ""
|
|
ss.BbaOrderNr.StartPos = 194
|
|
ss.BbaOrderNr.EndPos = 218
|
|
ss.BbaOrderNr.Width = 25
|
|
|
|
ss.BbaPartFamily.Content = ""
|
|
ss.BbaPartFamily.StartPos = 219
|
|
ss.BbaPartFamily.EndPos = 253
|
|
ss.BbaPartFamily.Width = 35
|
|
|
|
ss.BbaSupplyGroup.Content = ""
|
|
ss.BbaSupplyGroup.StartPos = 254
|
|
ss.BbaSupplyGroup.EndPos = 274
|
|
ss.BbaSupplyGroup.Width = 21
|
|
|
|
ss.Filler4.Content = ""
|
|
ss.Filler4.StartPos = 275
|
|
ss.Filler4.EndPos = 295
|
|
ss.Filler4.Width = 21
|
|
|
|
ss.BbaSwetTime.Content = ""
|
|
ss.BbaSwetTime.StartPos = 296
|
|
ss.BbaSwetTime.EndPos = 316
|
|
ss.BbaSwetTime.Width = 21
|
|
}
|
|
|
|
func (si *SNF_30Item) ToString() string {
|
|
return si.RecordType.ToString() +
|
|
si.TpDestination.ToString() +
|
|
si.CustReferenceNr.ToString() +
|
|
si.TpShipTo.ToString() +
|
|
si.DockNr.ToString() +
|
|
si.InternalContract.ToString() +
|
|
si.EngChangeLevel.ToString() +
|
|
si.LineFeed.ToString() +
|
|
si.ModelYear.ToString() +
|
|
si.Filler2.ToString() +
|
|
si.ContractNr.ToString() +
|
|
si.Position.ToString() +
|
|
si.ZZ.ToString() +
|
|
si.LinePR.ToString() +
|
|
si.CustPartNr.ToString() +
|
|
si.PurchaseOrderNr.ToString() +
|
|
si.Filler3.ToString() +
|
|
si.Filler4.ToString() +
|
|
si.PartReleaseStatus.ToString() +
|
|
si.Uom.ToString() +
|
|
si.ReleaseNr.ToString() +
|
|
si.ReserveLineFeed.ToString() +
|
|
si.UnitPrice.ToString() +
|
|
si.ShipFrom.ToString() +
|
|
si.OrderQty.ToString() +
|
|
si.PackQty.ToString() +
|
|
si.ReturnableContainer.ToString() +
|
|
si.SupplierId.ToString() +
|
|
si.VendorPartNo.ToString() +
|
|
si.PartDescription.ToString()
|
|
}
|
|
|
|
func (si *SNF_30Item) Init() {
|
|
si.RecordType.Content = "30"
|
|
si.RecordType.StartPos = 1
|
|
si.RecordType.EndPos = 2
|
|
si.RecordType.Width = 2
|
|
|
|
si.TpDestination.Content = ""
|
|
si.TpDestination.StartPos = 3
|
|
si.TpDestination.EndPos = 22
|
|
si.TpDestination.Width = 20
|
|
|
|
si.CustReferenceNr.Content = ""
|
|
si.CustReferenceNr.StartPos = 23
|
|
si.CustReferenceNr.EndPos = 42
|
|
si.CustReferenceNr.Width = 20
|
|
|
|
si.TpShipTo.Content = ""
|
|
si.TpShipTo.StartPos = 43
|
|
si.TpShipTo.EndPos = 62
|
|
si.TpShipTo.Width = 20
|
|
|
|
si.DockNr.Content = ""
|
|
si.DockNr.StartPos = 63
|
|
si.DockNr.EndPos = 92
|
|
si.DockNr.Width = 30
|
|
|
|
si.InternalContract.Content = ""
|
|
si.InternalContract.StartPos = 93
|
|
si.InternalContract.EndPos = 122
|
|
si.InternalContract.Width = 30
|
|
|
|
si.EngChangeLevel.Content = ""
|
|
si.EngChangeLevel.StartPos = 123
|
|
si.EngChangeLevel.EndPos = 152
|
|
si.EngChangeLevel.Width = 30
|
|
|
|
si.LineFeed.Content = ""
|
|
si.LineFeed.StartPos = 153
|
|
si.LineFeed.EndPos = 182
|
|
si.LineFeed.Width = 30
|
|
|
|
si.ModelYear.Content = ""
|
|
si.ModelYear.StartPos = 183
|
|
si.ModelYear.EndPos = 186
|
|
si.ModelYear.Width = 4
|
|
|
|
si.Filler2.Content = ""
|
|
si.Filler2.StartPos = 187
|
|
si.Filler2.EndPos = 192
|
|
si.Filler2.Width = 6
|
|
|
|
si.ContractNr.Content = ""
|
|
si.ContractNr.StartPos = 193
|
|
si.ContractNr.EndPos = 202
|
|
si.ContractNr.Width = 10
|
|
|
|
si.Position.Content = ""
|
|
si.Position.StartPos = 203
|
|
si.Position.EndPos = 212
|
|
si.Position.Width = 10
|
|
|
|
si.ZZ.Content = ""
|
|
si.ZZ.StartPos = 213
|
|
si.ZZ.EndPos = 222
|
|
si.ZZ.Width = 10
|
|
|
|
si.LinePR.Content = ""
|
|
si.LinePR.StartPos = 223
|
|
si.LinePR.EndPos = 252
|
|
si.LinePR.Width = 30
|
|
|
|
si.CustPartNr.Content = ""
|
|
si.CustPartNr.StartPos = 253
|
|
si.CustPartNr.EndPos = 282
|
|
si.CustPartNr.Width = 30
|
|
|
|
si.PurchaseOrderNr.Content = ""
|
|
si.PurchaseOrderNr.StartPos = 283
|
|
si.PurchaseOrderNr.EndPos = 304
|
|
si.PurchaseOrderNr.Width = 22
|
|
|
|
si.Filler3.Content = ""
|
|
si.Filler3.StartPos = 305
|
|
si.Filler3.EndPos = 312
|
|
si.Filler3.Width = 8
|
|
|
|
si.Filler4.Content = ""
|
|
si.Filler4.StartPos = 313
|
|
si.Filler4.EndPos = 332
|
|
si.Filler4.Width = 20
|
|
|
|
si.PartReleaseStatus.Content = ""
|
|
si.PartReleaseStatus.StartPos = 333
|
|
si.PartReleaseStatus.EndPos = 342
|
|
si.PartReleaseStatus.Width = 10
|
|
|
|
si.Uom.Content = ""
|
|
si.Uom.StartPos = 343
|
|
si.Uom.EndPos = 352
|
|
si.Uom.Width = 10
|
|
|
|
si.ReleaseNr.Content = ""
|
|
si.ReleaseNr.StartPos = 353
|
|
si.ReleaseNr.EndPos = 382
|
|
si.ReleaseNr.Width = 30
|
|
|
|
si.ReserveLineFeed.Content = ""
|
|
si.ReserveLineFeed.StartPos = 383
|
|
si.ReserveLineFeed.EndPos = 412
|
|
si.ReserveLineFeed.Width = 30
|
|
|
|
si.UnitPrice.Content = ""
|
|
si.UnitPrice.StartPos = 413
|
|
si.UnitPrice.EndPos = 422
|
|
si.UnitPrice.Width = 10
|
|
|
|
si.ShipFrom.Content = ""
|
|
si.ShipFrom.StartPos = 423
|
|
si.ShipFrom.EndPos = 442
|
|
si.ShipFrom.Width = 20
|
|
|
|
si.OrderQty.Content = ""
|
|
si.OrderQty.StartPos = 443
|
|
si.OrderQty.EndPos = 452
|
|
si.OrderQty.Width = 10
|
|
|
|
si.PackQty.Content = ""
|
|
si.PackQty.StartPos = 453
|
|
si.PackQty.EndPos = 462
|
|
si.PackQty.Width = 10
|
|
|
|
si.ReturnableContainer.Content = ""
|
|
si.ReturnableContainer.StartPos = 463
|
|
si.ReturnableContainer.EndPos = 482
|
|
si.ReturnableContainer.Width = 20
|
|
|
|
si.SupplierId.Content = ""
|
|
si.SupplierId.StartPos = 483
|
|
si.SupplierId.EndPos = 502
|
|
si.SupplierId.Width = 20
|
|
|
|
si.VendorPartNo.Content = ""
|
|
si.VendorPartNo.StartPos = 503
|
|
si.VendorPartNo.EndPos = 532
|
|
si.VendorPartNo.Width = 30
|
|
|
|
si.PartDescription.Content = ""
|
|
si.PartDescription.StartPos = 533
|
|
si.PartDescription.EndPos = 562
|
|
si.PartDescription.Width = 30
|
|
|
|
}
|
|
|
|
func (sf *SNF_50Forecast) ToString() string {
|
|
return sf.RecordType.ToString() +
|
|
sf.SchedStartDate.ToString() +
|
|
sf.SchedEndDate.ToString() +
|
|
sf.FcstBucketCode.ToString() +
|
|
sf.FcstSchedQualifier.ToString() +
|
|
sf.Filler2.ToString() +
|
|
sf.SchedQty.ToString() +
|
|
sf.DatetimeQualifier.ToString() +
|
|
sf.SchedTime.ToString() +
|
|
sf.Filler4.ToString() +
|
|
sf.ScheduleDate.ToString() +
|
|
sf.ReferenceNr.ToString() +
|
|
sf.Carrier.ToString() +
|
|
sf.TransportCode.ToString() +
|
|
sf.RouteCode.ToString() +
|
|
sf.DeliveryDate.ToString() +
|
|
sf.DeliveryTime.ToString() +
|
|
sf.TimeZone.ToString() +
|
|
sf.ShipOrderStatusCode.ToString()
|
|
}
|
|
|
|
func (sf *SNF_50Forecast) Init() {
|
|
sf.RecordType.Content = "50"
|
|
sf.RecordType.StartPos = 1
|
|
sf.RecordType.EndPos = 2
|
|
sf.RecordType.Width = 2
|
|
|
|
sf.SchedStartDate.Content = ""
|
|
sf.SchedStartDate.StartPos = 3
|
|
sf.SchedStartDate.EndPos = 12
|
|
sf.SchedStartDate.Width = 10
|
|
|
|
sf.SchedEndDate.Content = ""
|
|
sf.SchedEndDate.StartPos = 13
|
|
sf.SchedEndDate.EndPos = 22
|
|
sf.SchedEndDate.Width = 10
|
|
|
|
sf.FcstBucketCode.Content = ""
|
|
sf.FcstBucketCode.StartPos = 23
|
|
sf.FcstBucketCode.EndPos = 32
|
|
sf.FcstBucketCode.Width = 10
|
|
|
|
sf.FcstSchedQualifier.Content = ""
|
|
sf.FcstSchedQualifier.StartPos = 33
|
|
sf.FcstSchedQualifier.EndPos = 36
|
|
sf.FcstSchedQualifier.Width = 4
|
|
|
|
sf.Filler2.Content = ""
|
|
sf.Filler2.StartPos = 37
|
|
sf.Filler2.EndPos = 42
|
|
sf.Filler2.Width = 6
|
|
|
|
sf.SchedQty.Content = ""
|
|
sf.SchedQty.StartPos = 43
|
|
sf.SchedQty.EndPos = 52
|
|
sf.SchedQty.Width = 10
|
|
|
|
sf.DatetimeQualifier.Content = ""
|
|
sf.DatetimeQualifier.StartPos = 53
|
|
sf.DatetimeQualifier.EndPos = 52
|
|
sf.DatetimeQualifier.Width = 10
|
|
|
|
sf.SchedTime.Content = ""
|
|
sf.SchedTime.StartPos = 63
|
|
sf.SchedTime.EndPos = 66
|
|
sf.SchedTime.Width = 4
|
|
|
|
sf.Filler4.Content = ""
|
|
sf.Filler4.StartPos = 67
|
|
sf.Filler4.EndPos = 72
|
|
sf.Filler4.Width = 6
|
|
|
|
sf.ScheduleDate.Content = ""
|
|
sf.ScheduleDate.StartPos = 73
|
|
sf.ScheduleDate.EndPos = 82
|
|
sf.ScheduleDate.Width = 10
|
|
|
|
sf.ReferenceNr.Content = ""
|
|
sf.ReferenceNr.StartPos = 83
|
|
sf.ReferenceNr.EndPos = 112
|
|
sf.ReferenceNr.Width = 30
|
|
|
|
sf.Carrier.Content = ""
|
|
sf.Carrier.StartPos = 113
|
|
sf.Carrier.EndPos = 122
|
|
sf.Carrier.Width = 10
|
|
|
|
sf.TransportCode.Content = ""
|
|
sf.TransportCode.StartPos = 123
|
|
sf.TransportCode.EndPos = 132
|
|
sf.TransportCode.Width = 10
|
|
|
|
sf.RouteCode.Content = ""
|
|
sf.RouteCode.StartPos = 133
|
|
sf.RouteCode.EndPos = 152
|
|
sf.RouteCode.Width = 20
|
|
|
|
sf.DeliveryDate.Content = ""
|
|
sf.DeliveryDate.StartPos = 153
|
|
sf.DeliveryDate.EndPos = 162
|
|
sf.DeliveryDate.Width = 10
|
|
|
|
sf.DeliveryTime.Content = ""
|
|
sf.DeliveryTime.StartPos = 163
|
|
sf.DeliveryTime.EndPos = 168
|
|
sf.DeliveryTime.Width = 6
|
|
|
|
sf.TimeZone.Content = ""
|
|
sf.TimeZone.StartPos = 169
|
|
sf.TimeZone.EndPos = 172
|
|
sf.TimeZone.Width = 4
|
|
|
|
sf.ShipOrderStatusCode.Content = ""
|
|
sf.ShipOrderStatusCode.StartPos = 173
|
|
sf.ShipOrderStatusCode.EndPos = 174
|
|
sf.ShipOrderStatusCode.Width = 2
|
|
|
|
}
|
|
|
|
func Grammer_GetEDIFileName() (filename string, edisn string, err error) {
|
|
var (
|
|
stdeftab db.Stdeftab
|
|
stdeftablst []db.Stdeftab
|
|
data string
|
|
i int
|
|
)
|
|
|
|
stdeftab = db.Stdeftab{}
|
|
if stdeftablst, err = stdeftab.GetStandardList("SNF_FILENAME"); err != nil {
|
|
return
|
|
}
|
|
|
|
// 获取内置数据
|
|
filename = ""
|
|
for i = 0; i < len(stdeftablst); i++ {
|
|
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
|
|
switch stdeftablst[i].Bez {
|
|
case "TIME()":
|
|
data = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
|
|
case "EDI_SN":
|
|
if edisn, err = service.SN_GetNextSnr(stdeftablst[i].Bez); err != nil {
|
|
return
|
|
}
|
|
data = edisn
|
|
default:
|
|
data = stdeftablst[i].Bez
|
|
}
|
|
|
|
if i == 0 {
|
|
filename = data
|
|
} else {
|
|
filename = filename + "." + data
|
|
}
|
|
}
|
|
|
|
filename = filename + ".edi"
|
|
return
|
|
}
|
|
|
|
// 生成Grammer 排序订单的EDI文件
|
|
func Grammer_GenerateSEQOrderEDIFile(filefolder string) (err error) {
|
|
var (
|
|
filename string
|
|
edisn string
|
|
rowdata string
|
|
ss SNF_Separator
|
|
sh SNF_01Header
|
|
shc SNF_11HeaderComment
|
|
sseq SNF_13Seq
|
|
sitem SNF_30Item
|
|
sqty SNF_50Forecast
|
|
cotab db.Pln_custorder
|
|
wotab db.Pln_workorder
|
|
wotablst []db.Pln_workorder
|
|
parttab db.Me_part
|
|
stdeftab db.Stdeftab
|
|
stdeftablst []db.Stdeftab
|
|
i, j, pos int
|
|
po string
|
|
iatcod int
|
|
)
|
|
|
|
// 查询获取所有Grammar的未完成的生产订单数据
|
|
wotab = db.Pln_workorder{}
|
|
if wotablst, err = wotab.GetExternalTier2SEQOrders(); err != nil {
|
|
return
|
|
}
|
|
|
|
if filename, edisn, err = Grammer_GetEDIFileName(); err != nil {
|
|
return
|
|
} else {
|
|
fmt.Println(filename)
|
|
}
|
|
filename = filefolder + filename
|
|
|
|
f, err := os.Create(filename)
|
|
defer f.Close()
|
|
|
|
if err != nil {
|
|
return
|
|
} else {
|
|
// 头部数据
|
|
ss = SNF_Separator{}
|
|
if rowdata, err = ss.Print(edisn); err != nil {
|
|
return
|
|
}
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
// Header信息
|
|
sh = SNF_01Header{}
|
|
if rowdata, err = sh.Print(edisn); err != nil {
|
|
return
|
|
}
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
// Comment信息
|
|
shc = SNF_11HeaderComment{}
|
|
if rowdata, err = shc.Print(); err != nil {
|
|
return
|
|
}
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
// 获取30和50的常量信息
|
|
stdeftab = db.Stdeftab{}
|
|
if stdeftablst, err = stdeftab.GetStandardList("SNF_ITEM"); err != nil {
|
|
return
|
|
}
|
|
for i = 0; i < len(stdeftablst); i++ {
|
|
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
|
|
switch stdeftablst[i].Statid {
|
|
case "PurchaseOrderNr":
|
|
po = stdeftablst[i].Bez
|
|
case "MFSBASAtcode":
|
|
iatcod, _ = strconv.Atoi(stdeftablst[i].Bez)
|
|
}
|
|
}
|
|
|
|
// 遍历生产订单写入文件
|
|
for i = 0; i < len(wotablst); i++ {
|
|
// 获取客户订单信息
|
|
cotab = db.Pln_custorder{Finr: db.G_FINR, Custordernr: wotablst[i].Custordernr}
|
|
if cotab, err = cotab.SelectOne(); err != nil {
|
|
return
|
|
}
|
|
// 创建13行
|
|
sseq = SNF_13Seq{}
|
|
sseq.Init()
|
|
if wotablst[i].Status < common.WO_STATUS_CLOSED {
|
|
sseq.ActionRequest.Content = "30"
|
|
if len(wotablst[i].Swet) >= 12 {
|
|
sseq.SjjDeliveryTime.Content = wotablst[i].Swet[:12]
|
|
sseq.BbaSwetTime.Content = wotablst[i].Swet
|
|
} else {
|
|
sseq.SjjDeliveryTime.Content = cotab.Swet[:12]
|
|
sseq.BbaSwetTime.Content = cotab.Swet
|
|
}
|
|
} else {
|
|
// 订单取消
|
|
if wotablst[i].Status == common.WO_STATUS_CANCELED {
|
|
sseq.ActionRequest.Content = "20"
|
|
sseq.SjjDeliveryTime.Content = "999901010000"
|
|
sseq.BbaSwetTime.Content = "99990101000000"
|
|
}
|
|
}
|
|
sseq.VehicleIdNr.Content = cotab.Vin
|
|
sseq.CustomerSeqNo.Content = strconv.Itoa(common.ValueToInt(wotablst[i].Oemseq,0))
|
|
|
|
sseq.BbaOrderNr.Content = strings.TrimSpace(cotab.Oemordernr) + "-" + wotablst[i].Partfamilyid + "-" + cotab.Swet[:4]
|
|
sseq.BbaPartFamily.Content = wotablst[i].Partfamilyid
|
|
sseq.BbaSupplyGroup.Content = wotablst[i].Supplygroupid
|
|
|
|
rowdata = sseq.ToString()
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
for j = 0; j < len(wotablst[i].Partlst); j++ {
|
|
// 获取零件主数据
|
|
parttab = db.Me_part{Finr: db.G_FINR, Partid: wotablst[i].Partlst[j].Partid, Projnr: wotablst[i].Projnr}
|
|
if parttab, err = parttab.SelectOne(); err != nil {
|
|
return
|
|
}
|
|
// 创建30行和50行
|
|
sitem = SNF_30Item{}
|
|
sitem.Init()
|
|
pos = strings.Index(wotablst[i].Partlst[j].Partid, "-")
|
|
if pos >= 0 {
|
|
sitem.EngChangeLevel.Content = wotablst[i].Partlst[j].Partid[pos+1:]
|
|
}
|
|
sitem.DockNr.Content = wotablst[i].GetAttributeValue(iatcod)
|
|
sitem.CustPartNr.Content = "S" + wotablst[i].Partlst[j].Partid
|
|
sitem.PurchaseOrderNr.Content = po
|
|
sitem.PartDescription.Content = parttab.Descr1
|
|
rowdata = sitem.ToString()
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
sqty = SNF_50Forecast{}
|
|
sqty.Init()
|
|
sqty.SchedQty.Content = strconv.Itoa(wotablst[i].Partlst[j].Partqty)
|
|
rowdata = sqty.ToString()
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 生成Grammer 排序订单的EDI文件
|
|
func Grammer_GenerateNOSEQOrderEDIFile(filefolder string) (err error) {
|
|
var (
|
|
filename string
|
|
edisn string
|
|
rowdata string
|
|
ss SNF_Separator
|
|
sh SNF_01Header
|
|
shc SNF_11HeaderComment
|
|
sseq SNF_13Seq
|
|
sitem SNF_30Item
|
|
sqty SNF_50Forecast
|
|
cotab db.Pln_custorder
|
|
wotab db.Pln_workorder
|
|
wotablst []db.Pln_workorder
|
|
parttab db.Me_part
|
|
stdeftab db.Stdeftab
|
|
stdeftablst []db.Stdeftab
|
|
i, j, pos int
|
|
po string
|
|
iatcod int
|
|
)
|
|
|
|
// 查询获取所有Grammar的未完成的生产订单数据
|
|
wotab = db.Pln_workorder{}
|
|
if wotablst, err = wotab.GetExternalTier2NOSEQOrders(); err != nil {
|
|
return
|
|
}
|
|
if len(wotablst) <= 0 {
|
|
return
|
|
}
|
|
|
|
if filename, edisn, err = Grammer_GetEDIFileName(); err != nil {
|
|
return
|
|
} else {
|
|
fmt.Println(filename)
|
|
}
|
|
filename = filefolder + filename
|
|
|
|
f, err := os.Create(filename)
|
|
defer f.Close()
|
|
|
|
if err != nil {
|
|
return
|
|
} else {
|
|
// 头部数据
|
|
ss = SNF_Separator{}
|
|
if rowdata, err = ss.Print(edisn); err != nil {
|
|
return
|
|
}
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
// Header信息
|
|
sh = SNF_01Header{}
|
|
if rowdata, err = sh.Print(edisn); err != nil {
|
|
return
|
|
}
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
// Comment信息
|
|
shc = SNF_11HeaderComment{}
|
|
if rowdata, err = shc.Print(); err != nil {
|
|
return
|
|
}
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
// 获取30和50的常量信息
|
|
stdeftab = db.Stdeftab{}
|
|
if stdeftablst, err = stdeftab.GetStandardList("SNF_ITEM"); err != nil {
|
|
return
|
|
}
|
|
for i = 0; i < len(stdeftablst); i++ {
|
|
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
|
|
switch stdeftablst[i].Statid {
|
|
case "PurchaseOrderNr":
|
|
po = stdeftablst[i].Bez
|
|
case "MFSBASAtcode":
|
|
iatcod, _ = strconv.Atoi(stdeftablst[i].Bez)
|
|
}
|
|
}
|
|
|
|
// 遍历生产订单写入文件
|
|
for i = 0; i < len(wotablst); i++ {
|
|
// 获取客户订单信息
|
|
cotab = db.Pln_custorder{Finr: db.G_FINR, Custordernr: wotablst[i].Custordernr}
|
|
if cotab, err = cotab.SelectOne(); err != nil {
|
|
return
|
|
}
|
|
// 创建13行
|
|
sseq = SNF_13Seq{}
|
|
sseq.Init()
|
|
switch wotablst[i].Ordertype {
|
|
case common.WO_TYPE_REORDER:
|
|
sseq.ActionRequest.Content = "90"
|
|
sseq.BbaOrderNr.Content = strings.TrimSpace(cotab.Oemordernr) + "-" + wotablst[i].Partfamilyid + "-" + cotab.Swet[:4] + "-RO"
|
|
case common.WO_TYPE_INTERNAL:
|
|
sseq.ActionRequest.Content = "80"
|
|
sseq.BbaOrderNr.Content = wotablst[i].Workordernr
|
|
}
|
|
sseq.VehicleIdNr.Content = cotab.Vin
|
|
sseq.CustomerSeqNo.Content = strconv.Itoa(common.ValueToInt(wotablst[i].Oemseq,0))
|
|
sseq.SjjDeliveryTime.Content = wotablst[i].Swet[:12]
|
|
sseq.BbaPartFamily.Content = wotablst[i].Partfamilyid
|
|
sseq.BbaSupplyGroup.Content = wotablst[i].Supplygroupid
|
|
sseq.BbaSwetTime.Content = wotablst[i].Swet
|
|
rowdata = sseq.ToString()
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
for j = 0; j < len(wotablst[i].Partlst); j++ {
|
|
// 获取零件主数据
|
|
parttab = db.Me_part{Finr: db.G_FINR, Partid: wotablst[i].Partlst[j].Partid, Projnr: wotablst[i].Projnr}
|
|
if parttab, err = parttab.SelectOne(); err != nil {
|
|
return
|
|
}
|
|
// 创建30行和50行
|
|
sitem = SNF_30Item{}
|
|
sitem.Init()
|
|
pos = strings.Index(wotablst[i].Partlst[j].Partid, "-")
|
|
if pos >= 0 {
|
|
sitem.EngChangeLevel.Content = wotablst[i].Partlst[j].Partid[pos+1:]
|
|
}
|
|
sitem.DockNr.Content = wotablst[i].GetAttributeValue(iatcod)
|
|
sitem.CustPartNr.Content = "S" + wotablst[i].Partlst[j].Partid
|
|
sitem.PurchaseOrderNr.Content = po
|
|
sitem.PartDescription.Content = parttab.Descr1
|
|
rowdata = sitem.ToString()
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
|
|
sqty = SNF_50Forecast{}
|
|
sqty.Init()
|
|
sqty.SchedQty.Content = strconv.Itoa(wotablst[i].Partlst[j].Partqty)
|
|
rowdata = sqty.ToString()
|
|
if _, err = f.WriteString(rowdata + "\n"); err != nil {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|