ЭДО
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
ЭДО
У кого ни будь есть разбор (может быть и формирования) файлов ЭДО в виде класса или более менее кода?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
ЭДО
Да пожалуйста. Адаптируем.
Основание стандартные XML классах наверное.
Основание стандартные XML классах наверное.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
ЭДО
Ловите те.
Формирование файла для отправки в ЭДО, в том числе маркированных товаров.
Формирование файла для отправки в ЭДО, в том числе маркированных товаров.
Код: Выделить всё
form_r routine
DATA
lor:idPol string(80)
lor:err byte
lor:flagMark byte
lor:kol real
lor:num long
lor:ProcNDS real
lor:cenaNoNDS real
lor:sumNoNDS real
lor:sumNDS real
lor:sumIt real
lor:sumNoNDSIt real
lor:sumNDSIt real
lor:koeff real
CODE
Loc:DateToday=today()
FsPrimary:Firma(DTovH:IDFirma)
if Fir:Director='' and len(clip(Fir:inn))=12
FsMessagePr('Для фирмы не задан руководитель!')
exit
.
FsPrimary:Klients(DTovH:IDOrg)
if Kli:Manager='' and len(clip(Kli:inn))=12
FsMessagePr('Для контрагента не задан руководитель!')
exit
.
lor:idPol=GetDopParamKlient(Kli:ID,'ЭДОид')
if lor:idPol=''
FsMessagePr('Не задан ид в ЭДО для покупателя!')
exit
.
if DTovH:IDOrgDop>0
clear(KliA:Record)
KliA:id=DTovH:IDOrgDop
get(klientsa,KLIA:keyID)
else
clear(KliA:record)
.
GetDogLastFirma(kli:id,Fir:id,DTovH:Date)
if Dog:Date=0
FsMessagePr('Не найден договор!')
exit
.
lor:sumIt=0
lor:sumNoNDSIt=0
lor:sumNDSIt=0
lor:err=0
clear(DTovT:record,-1)
DTovT:IDDoc=DTovH:ID
set(DTovT:keyNum,DTovT:keyNum)
loop
next(DocTovT)
if error() or DTovT:IDDoc<>DTovH:ID
break
.
FsPrimary:Tovar(DTovT:IDTovar)
if len(clip(tov:Shtrih))<>13
lor:err=1
break
.
FsPrimary:Nalogs(Tov:IDNalog)
lor:ProcNDS=GetNDSProc(DTovH:Date,Nal:NDSStavka)
lor:sumNDS=GetNDSStavka(DTovT:Sum,Nal:NDSStavka,DTovH:Date)
lor:sumNDSIt+=lor:sumNDS
lor:sumIt+=DTovT:Sum
lor:sumNoNDSIt+=DTovT:Sum-lor:sumNDS
.
if lor:err=1
if Tov:Shtrih=''
FsMessagePr('Не задан штрих-код у товара ' & Tov:name)
else
FsMessagePr('Неверно задан штрих-код у товара ' & Tov:name)
.
exit
.
Loc:FileNameXML='ON_NSCHFDOPPRMARK' & '_' & clip(lor:idPol) & '_' & clip(GetDopParamFirma(Fir:ID,'ЭДООПид')) & '_' & format(Loc:DateToday,@d12) & '_0204ae98-49f0-4ebd-a741-4aee779a052f.XML'
FinSoftASCIIFileName=clip(FsFilePathNoSlash(FsAccess:ActiveUserDir)) & '\' & Loc:FileNameXML
if exists(FinSoftASCIIFileName)
remove(FinSoftASCIIFileName)
.
FsASCIIFile{PROP:NAME}=FinSoftASCIIFileName
create(FsASCIIFile)
if error()
FsMessagePr('Не могу создать выходной файл!')
exit
.
open(FsASCIIFile)
if error()
FsMessagePr('Не могу открыть выходной файл!')
exit
.
FsAF:rec='<?xml version="1.0" encoding="windows-1251"?>'
add(FsASCIIFile)
FsAF:rec='<Файл ИдФайл="' & clip(FsStrReplace(Loc:FileNameXML,'.XML','')) & '" ВерсФорм="5.01" ВерсПрог="ФинСофт КупецЪ">'
add(FsASCIIFile)
FsAF:rec='<СвУчДокОбор ИдОтпр="' & clip(GetDopParamFirma(Fir:ID,'ЭДОид')) & '" ИдПол="' & clip(lor:idPol) & '">'
add(FsASCIIFile)
FsAF:rec=' <СвОЭДОтпр ИННЮЛ="' & clip(GetDopParamFirma(Fir:ID,'ЭДООПинн')) & '" ИдЭДО="' & clip(GetDopParamFirma(Fir:ID,'ЭДООПид')) & '" НаимОрг="' & clip(GetDopParamFirma(Fir:ID,'ЭДООПнаим')) & '" />'
add(FsASCIIFile)
FsAF:rec='</СвУчДокОбор>'
add(FsASCIIFile)
FsAF:rec='<Документ КНД="1115131" ВремИнфПр="' & format(clock(),@t04.) & '" ДатаИнфПр="' & format(Loc:DateToday,@d06.) & '" НаимЭконСубСост="' & clip(FsStrReplace(Fir:NameLong,'"','"')) & '" Функция="СЧФДОП" ПоФактХЖ="Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)" НаимДокОпр="Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)">'
add(FsASCIIFile)
FsAF:rec=' <СвСчФакт НомерСчФ="' & DTovH:Num & '" ДатаСчФ="' & format(DTovH:Date,@d06.) & '" КодОКВ="643">'
add(FsASCIIFile)
FsAF:rec=' <СвПрод>'
add(FsASCIIFile)
FsAF:rec=' <ИдСв>'
add(FsASCIIFile)
if len(clip(Fir:INN))=10
FsAF:rec=' <СвЮЛУч НаимОрг="' & clip(FsStrReplace(Fir:NameLong,'"','"')) & '" ИННЮЛ="' & clip(Fir:inn) & '" КПП="' & clip(Fir:kpp) & '" />'
add(FsASCIIFile)
else
FsAF:rec=' <СвИП ИННФЛ="' & clip(Fir:inn) & '">'
add(FsASCIIFile)
FsAF:rec=' <ФИО Фамилия="' & clip(FsGetFIOPart(Fir:Director,1)) & '" Имя="' & clip(FsGetFIOPart(Fir:Director,2)) & '" Отчество="' & clip(FsGetFIOPart(Fir:Director,3)) & '"/>'
add(FsASCIIFile)
FsAF:rec=' </СвИП>'
add(FsASCIIFile)
.
FsAF:rec=' </ИдСв>'
add(FsASCIIFile)
FsAF:rec=' <Адрес>'
add(FsASCIIFile)
FsAF:rec=' <АдрИнф КодСтр="643" АдрТекст="' & clip(FsStrReplace(Fir:AdresUr,'"','"')) & '"/>'
add(FsASCIIFile)
FsAF:rec=' </Адрес>'
add(FsASCIIFile)
FsAF:rec=' </СвПрод>'
add(FsASCIIFile)
if Kli:Adress<>KliA:AdressDost and KliA:AdressDost<>''
FsAF:rec=' <ГрузПолуч>'
add(FsASCIIFile)
FsAF:rec=' <ИдСв>'
add(FsASCIIFile)
if len(clip(Kli:INN))=10
FsAF:rec=' <СвЮЛУч НаимОрг="' & clip(FsStrReplace(Kli:NameFull,'"','"')) & '" ИННЮЛ="' & clip(Kli:inn) & '" КПП="' & clip(Kli:kpp) & '" />'
add(FsASCIIFile)
else
FsAF:rec=' <СвИП ИННФЛ="' & clip(Kli:inn) & '">'
add(FsASCIIFile)
FsAF:rec=' <ФИО Фамилия="' & clip(FsGetFIOPart(Kli:Manager,1)) & '" Имя="' & clip(FsGetFIOPart(Kli:Manager,2)) & '" Отчество="' & clip(FsGetFIOPart(Kli:Manager,3)) & '"/>'
add(FsASCIIFile)
FsAF:rec=' </СвИП>'
add(FsASCIIFile)
.
FsAF:rec=' </ИдСв>'
add(FsASCIIFile)
FsAF:rec=' <Адрес>'
add(FsASCIIFile)
FsAF:rec=' <АдрИнф КодСтр="643" АдрТекст="' & clip(FsStrReplace(KliA:AdressDost,'"','"')) & '"/>'
add(FsASCIIFile)
FsAF:rec=' </Адрес>'
add(FsASCIIFile)
FsAF:rec=' </ГрузПолуч>'
add(FsASCIIFile)
.
FsAF:rec=' <СвПокуп>'
add(FsASCIIFile)
FsAF:rec=' <ИдСв>'
add(FsASCIIFile)
if len(clip(Kli:INN))=10
FsAF:rec=' <СвЮЛУч НаимОрг="' & clip(FsStrReplace(Kli:NameFull,'"','"')) & '" ИННЮЛ="' & clip(Kli:inn) & '" КПП="' & clip(Kli:kpp) & '" />'
add(FsASCIIFile)
else
FsAF:rec=' <СвИП ИННФЛ="' & clip(Kli:inn) & '">'
add(FsASCIIFile)
FsAF:rec=' <ФИО Фамилия="' & clip(FsGetFIOPart(Kli:Manager,1)) & '" Имя="' & clip(FsGetFIOPart(Kli:Manager,2)) & '" Отчество="' & clip(FsGetFIOPart(Kli:Manager,3)) & '"/>'
add(FsASCIIFile)
FsAF:rec=' </СвИП>'
add(FsASCIIFile)
.
FsAF:rec=' </ИдСв>'
add(FsASCIIFile)
FsAF:rec=' <Адрес>'
add(FsASCIIFile)
FsAF:rec=' <АдрИнф КодСтр="643" АдрТекст="' & clip(FsStrReplace(Kli:Adress,'"','"')) & '"/>'
add(FsASCIIFile)
FsAF:rec=' </Адрес>'
add(FsASCIIFile)
FsAF:rec=' </СвПокуп>'
add(FsASCIIFile)
FsAF:rec=' </СвСчФакт>'
add(FsASCIIFile)
FsAF:rec=' <ТаблСчФакт>'
add(FsASCIIFile)
lor:num=0
clear(DTovT:record,-1)
DTovT:IDDoc=DTovH:ID
set(DTovT:keyNum,DTovT:keyNum)
loop
next(DocTovT)
if error() or DTovT:IDDoc<>DTovH:ID
break
.
FsPrimary:Tovar(DTovT:IDTovar)
FsPrimary:Ed(DTovT:IDEd)
lor:koeff=Ed:Koeff
FsPrimary:Ed(GetTovEdOne(DTovT:IDTovar))
FsPrimary:StdCodes(Ed:IDOKEI)
FsPrimary:Nalogs(Tov:IDNalog)
lor:flagMark=1
if Tov:isMark=0
FsPrimary:TovarGr(Tov:idGr)
FsPrimary:Directs(TovGr:IDDirects)
if Dirs:TovarRegl<>4 !4 - маркированные товары
lor:flagMark=0
.
.
lor:ProcNDS=GetNDSProc(DTovH:Date,Nal:NDSStavka)
lor:sumNDS=GetNDSStavka(DTovT:Sum,Nal:NDSStavka,DTovH:Date)
lor:sumNoNDS=DTovT:Sum-lor:sumNDS
lor:cenaNoNDS=DTovT:Cena-GetNDSStavka(DTovT:Cena,Nal:NDSStavka,DTovH:Date)
lor:kol=round(DTovT:Kol*lor:koeff,0.001)
lor:num+=1
FsAF:rec='<СведТов НомСтр="' & lor:num & '" НаимТов="' & clip(FsStrReplace(Tov:name,'"','"')) & '" ОКЕИ_Тов="' & StdCod:Kod & '" КолТов="' & clip(left(format(lor:kol,@n-_12.3))) & '" ЦенаТов="' & clip(left(format(lor:cenaNoNDS,@n-_12.2))) & '" СтТовБезНДС="' & clip(left(format(lor:sumNoNDS,@n-_12.2))) & '" НалСт="' & lor:ProcNDS & '%" СтТовУчНал="' & clip(left(format(DTovT:Sum,@n-_12.2))) & '">'
add(FsASCIIFile)
FsAF:rec=' <Акциз>'
add(FsASCIIFile)
FsAF:rec=' <БезАкциз>без акциза</БезАкциз>'
add(FsASCIIFile)
FsAF:rec=' </Акциз>'
add(FsASCIIFile)
FsAF:rec=' <СумНал>'
add(FsASCIIFile)
FsAF:rec=' <СумНал>' & clip(left(format(lor:sumNDS,@n-_12.2))) & '</СумНал>'
add(FsASCIIFile)
FsAF:rec=' </СумНал>'
add(FsASCIIFile)
FsAF:rec=' <ДопСведТов НаимЕдИзм="' & clip(ed:name) & '">'
add(FsASCIIFile)
if lor:flagMark=1
FsAF:rec=' <НомСредИдентТов>'
add(FsASCIIFile)
if Tov:isVes=0
FsAF:rec=' <НомУпак>020' & clip(Tov:Shtrih) & '37' & lor:kol & '</НомУпак>'
else
FsAF:rec=' <НомУпак>020' & clip(Tov:Shtrih) & '37' & choose(DTovT:Prim='' or left(DTovT:Prim)='0' or abs(int(DTovT:Prim))<>(0+DTovT:Prim),'1',int(DTovT:Prim)) & '</НомУпак>'
.
add(FsASCIIFile)
FsAF:rec=' </НомСредИдентТов>'
add(FsASCIIFile)
.
FsAF:rec=' </ДопСведТов>'
add(FsASCIIFile)
FsAF:rec=' <ИнфПолФХЖ2 Идентиф="штрихкод" Значен="' & clip(Tov:Shtrih) & '" />'
add(FsASCIIFile)
FsAF:rec='</СведТов>'
add(FsASCIIFile)
.
FsAF:rec=' <ВсегоОпл СтТовБезНДСВсего="' & clip(left(format(lor:sumNoNDSIt,@n-_12.2))) & '" СтТовУчНалВсего="' & clip(left(format(lor:sumIt,@n-_12.2))) & '">'
add(FsASCIIFile)
FsAF:rec=' <СумНалВсего>'
add(FsASCIIFile)
FsAF:rec=' <СумНал>' & clip(left(format(lor:sumNDSIt,@n-_12.2))) & '</СумНал>'
add(FsASCIIFile)
FsAF:rec=' </СумНалВсего>'
add(FsASCIIFile)
FsAF:rec=' </ВсегоОпл>'
add(FsASCIIFile)
FsAF:rec='</ТаблСчФакт>'
add(FsASCIIFile)
FsAF:rec='<СвПродПер>'
add(FsASCIIFile)
FsAF:rec=' <СвПер СодОпер="Товары переданы">'
add(FsASCIIFile)
FsAF:rec=' <ОснПер НаимОсн="Договор поставки" НомОсн="' & Dog:Num & '" ДатаОсн="' & format(Dog:Date,@d06.) & '" />'
add(FsASCIIFile)
FsAF:rec=' </СвПер>'
add(FsASCIIFile)
FsAF:rec='</СвПродПер>'
add(FsASCIIFile)
FsAF:rec='<Подписант ОснПолн="Должностные обязанности" ОблПолн="5" Статус="1">'
add(FsASCIIFile)
if len(clip(Fir:INN))=10
FsAF:rec=' <ЮЛ ИННЮЛ="' & clip(Fir:inn) & '" Должн="' & clip(GetDopParamFirma(Fir:ID,'ЭДОдолжн')) & '" НаимОрг="' & clip(FsStrReplace(Fir:NameLong,'"','"')) & '">'
else
FsAF:rec=' <ИП ИННФЛ="' & clip(Fir:inn) & '">'
.
add(FsASCIIFile)
FsAF:rec=' <ФИО Фамилия="' & clip(GetDopParamFirma(Fir:ID,'ЭДОфам')) & '" Имя="' & clip(GetDopParamFirma(Fir:ID,'ЭДОимя')) & '" Отчество="' & clip(GetDopParamFirma(Fir:ID,'ЭДОотч')) & '" />'
add(FsASCIIFile)
if len(clip(Fir:INN))=10
FsAF:rec=' </ЮЛ>'
else
FsAF:rec=' </ИП>'
.
add(FsASCIIFile)
FsAF:rec='</Подписант>'
add(FsASCIIFile)
FsAF:rec='</Документ>'
add(FsASCIIFile)
FsAF:rec='</Файл>'
add(FsASCIIFile)
close(FsASCIIFile)
if Loc:Path<>''
copy(FinSoftASCIIFileName,clip(FsFilePathNoSlash(Loc:Path)) & '\' & Loc:FileNameXML)
if exists(clip(FsFilePathNoSlash(Loc:Path)) & '\' & Loc:FileNameXML)
FsMessagePr('Сформирован файл ' & clip(FsFilePathNoSlash(Loc:Path)) & '\' & Loc:FileNameXML)
else
fsMessagePr('Сформирован файл ' & clip(FinSoftASCIIFileName))
.
else
fsMessagePr('Сформирован файл ' & clip(FinSoftASCIIFileName))
.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
ЭДО
Загрузка файла из ЭДО, в том числе маркировка.
Загружает в кьюшку следующей структуры, а дальше работается с ней.
Загружает в кьюшку следующей структуры, а дальше работается с ней.
Код: Выделить всё
Loc:Queue QUEUE,PRE()
Loc:Kol REAL
Loc:Cena REAL
Loc:Sum REAL
Loc:CenaMRC REAL
Loc:ProcNds REAL
Loc:FlagNdsDif BYTE
Loc:IDTovar LONG
Loc:TovShtrih STRING(20)
Loc:TovName STRING(150)
END
Код: Выделить всё
loadXML1_r routine !загрузить из формата эдо маркировка
DATA
lor:queue queue, pre()
lor:tovkol string(20), name('tovkol')
lor:tovsum string(20), name('tovsum')
lor:tovshtrih string(40), name('tovshtrih')
lor:tovshtrih2 string(40), name('tovshtrih2')
lor:procnds string(10), name('procnds')
lor:koef long, name('koef')
lor:tovname string(150), name('tovname')
.
lor:i long
lor:j long
lor:mrc string(10)
lor:nums string(10)
CODE
do testRows_r
if Loc:OkRows=1
exit
.
lor:nums='0123456789'
Loc:NameTmp=GetNameTmp(FsAccess:ActiveUserDir,'xml',0)
Loc:NameVbsTmp=GetNameTmp(FsAccess:ActiveUserDir,'vbs',0)
Loc:NameOutTmp=GetNameTmp(FsAccess:ActiveUserDir,'txt',0)
fsXmlPar.init(Loc:FileName,Loc:NameVbsTmp,Loc:NameOutTmp)
fsXmlPar.LoadQueueHand('lor:queue',lor:queue)
fsXmlPar.AddScriptInt('Set NodeList = Root.getElementsByTagName("СведТов")')
fsXmlPar.AddScriptInt('For Each Elem In NodeList')
fsXmlPar.AddScriptInt(' tovname = Elem.getAttribute("НаимТов")')
fsXmlPar.AddScriptInt(' tovkol = Elem.getAttribute("КолТов")')
fsXmlPar.AddScriptInt(' tovsum = Elem.getAttribute("СтТовУчНал")')
fsXmlPar.AddScriptInt(' procnds = Elem.getAttribute("НалСт")')
fsXmlPar.AddScriptInt(' SET per = Elem.getElementsByTagName("ДопСведТов/НомСредИдентТов/НомУпак")(0)')
fsXmlPar.AddScriptInt(' if not per is Nothing then')
fsXmlPar.AddScriptInt(' tovshtrih = per.text')
fsXmlPar.AddScriptInt(' else')
fsXmlPar.AddScriptInt(' tovshtrih = ""')
fsXmlPar.AddScriptInt(' end if')
fsXmlPar.AddScriptInt(' tovshtrih2 = ""')
fsXmlPar.AddScriptInt(' koef = ""')
fsXmlPar.AddScriptInt(' Set NodeList2 = Elem.getElementsByTagName("ИнфПолФХЖ2")')
fsXmlPar.AddScriptInt(' For Each Elem2 In NodeList2')
fsXmlPar.AddScriptInt(' ident = Elem2.getAttribute("Идентиф")')
fsXmlPar.AddScriptInt(' val = Elem2.getAttribute("Значен")')
fsXmlPar.AddScriptInt(' if ident = "штрихкод" then')
fsXmlPar.AddScriptInt(' tovshtrih2 = val')
fsXmlPar.AddScriptInt(' elseif ident = "вложенность" then')
fsXmlPar.AddScriptInt(' koef = val')
fsXmlPar.AddScriptInt(' end if')
fsXmlPar.AddScriptInt(' Next')
fsXmlPar.AddScriptInt(' outFile.WriteLine "tovname=" & tovname')
fsXmlPar.AddScriptInt(' outFile.WriteLine "tovshtrih=" & tovshtrih')
fsXmlPar.AddScriptInt(' outFile.WriteLine "tovshtrih2=" & tovshtrih2')
fsXmlPar.AddScriptInt(' outFile.WriteLine "tovkol=" & tovkol')
fsXmlPar.AddScriptInt(' outFile.WriteLine "tovsum=" & tovsum')
fsXmlPar.AddScriptInt(' outFile.WriteLine "procnds=" & procnds')
fsXmlPar.AddScriptInt(' outFile.WriteLine "koef=" & koef')
fsXmlPar.AddScriptInt(' outFile.WriteLine "@add"')
fsXmlPar.AddScriptInt('Next')
fsXmlPar.AddScriptInt('Set NodeList = Nothing')
fsXmlPar.AddScriptInt('Set NodeList2 = Nothing')
fsXmlPar.AddScriptInt('')
fsXmlPar.MakeScript(1)
if fsXmlPar.ErrorCode<>0
FsMessagePr('Ошибка! ' & clip(fsXmlPar.ErrorMessage))
loc:Error=1
.
fsXmlPar.kill
if loc:Error=1
exit
.
loop lor:i=1 to records(lor:queue)
get(lor:queue,lor:i)
clear(Loc:Queue)
Loc:Kol=lor:tovkol
Loc:Sum=lor:tovsum
if lor:koef>0
Loc:Kol=round(Loc:Kol*lor:koef,1)
.
Loc:TovName=lor:tovname
if lor:tovshtrih=''
lor:tovshtrih=lor:tovshtrih2
.
if lor:tovshtrih<>''
if sub(lor:tovshtrih,1,2)='01' or sub(lor:tovshtrih,1,2)='02'
Loc:TovShtrih=sub(lor:tovshtrih,4,13)
else
Loc:TovShtrih=sub(lor:tovshtrih,1,13)
.
Loc:IDTovar=TovarShtrihSearch(Loc:TovShtrih)
.
if Loc:IDTovar>0 and Fir:FlagNDS=1 !сверка ставок ндс
Loc:ProcNds=left(lor:procnds)
FsPrimary:Tovar(Loc:IDTovar)
FsPrimary:Nalogs(Tov:IDNalog)
Loc:ProcNdsTov=GetNDSProc(DTovH:Date,Nal:NDSStavka)
if Loc:ProcNdsTov<>Loc:ProcNds
Loc:IDTovar=0
Loc:FlagNdsDif=1
.
.
if Loc:IDTovar>0
FsPrimary:Tovar(Loc:IDTovar)
if Tov:FlagMRC=1
lor:mrc=''
if len(clip(Loc:TovName))>20
loop lor:j=len(clip(Loc:TovName)) to len(clip(Loc:TovName))-19 by -1
if instring(Loc:TovName[lor:j],lor:nums,1,1)=0
if len(clip(lor:mrc))>0 and Loc:TovName[lor:j]<>'.' and Loc:TovName[lor:j]<>','
break
.
cycle
.
lor:mrc=Loc:TovName[lor:j] & lor:mrc
.
.
Loc:CenaMRC=0+lor:mrc
if Loc:CenaMRC>1000
Loc:CenaMRC=round(Loc:CenaMRC/100,0.01)
.
.
.
add(Loc:Queue)
if Loc:IDTovar=0
Loc:FlagTovNo=1
.
.
free(lor:queue)
loc:ok=1
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
ЭДО
В XML нужно ВСЕ строковые значения тегов экранировать, и только замена двойных кавычек - недостаточно ...
Что-то вроде вот такого (не помню где спионерил):
Что-то вроде вот такого (не помню где спионерил):
Код: Выделить всё
EscapeXml PROCEDURE (xSource_) ! ,String
SIndex LONG,AUTO
DIndex LONG,AUTO
ReplacedBy CSTRING(7),AUTO
LenReplace BYTE,AUTO
Loc:xResult String((Size(xSource_) * 6) + 20)
Code
! Loc:xResult = Clip(xSource_) ! Старый вариант (меееееееееееееедленно)
! ReplaceText(Loc:xResult,'&', '&')
! ReplaceText(Loc:xResult,'>', '>')
! ReplaceText(Loc:xResult,'<',' <')
! ReplaceText(Loc:xResult,'''', ''')
! ReplaceText(Loc:xResult,'"', '"')
If (Clip(Left(xSource_)) = '') Or Numeric(Clip(Left(xSource_)))
Return Clip(Left(xSource_))
else
Loc:xResult = ''
DIndex = 1
Loop SIndex = 1 to Len(Clip(xSource_)) by 1
Case Val(xSource_[SIndex])
Of Val('&')
ReplacedBy = '&'
LenReplace = 5
Of Val('>')
ReplacedBy = '>'
LenReplace = 4
Of Val('<')
ReplacedBy = '<'
LenReplace = 4
Of Val('''')
ReplacedBy = '''
LenReplace = 6
Of Val('"')
ReplacedBy = '"'
LenReplace = 6
Of 1 To 9 OrOf 11 To 12 OrOf 14 To 31 ! Убрать спецсимволы, кроме 10,13
ReplacedBy = ' '
LenReplace = 1
else
ReplacedBy = xSource_[SIndex]
LenReplace = 1
end
Loc:xResult[(DIndex):(DIndex + LenReplace - 1)] = ReplacedBy
DIndex += LenReplace
If (DIndex + 10) > Size(Loc:xResult) then Break. ! Если нет запаса следующий шаг замены символа
end
Return Clip(Loc:xResult)
end
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
ЭДО
В описании формата xml для Честного знака видел недавно табличку с этими символами. Когда сыр пытались резать. Выгрузка в эдо делалась раньше, вопрос всплыл про кавычки, другое из этого списка редко используется, не попадалось. По хорошему, конечно, надо экранировать все.
C6/C11, ШВС, tps/btrieve.
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
ЭДО
Парсер на JS конечно не то что хотелось бы. Ну и генерация простыми строками.
Похоже с парсером придется самому разбираться.
А создаем файлик сейчас вот так:
Код: Выделить всё
IDstr CSTRING(255)
FileName CSTRING(255)
loc:Number STRING(255)
loc:Date LONG
XML CLASS(XMLGenerator)
END
CODE
LOOP k# = 1 TO RECORDS(DATA_Q)
GET(DATA_Q,k#)
IF LEN(CLIP(DATA_Q.PrnNumber))
loc:Number = DATA_Q.PrnNumber
ELSE
loc:Number = DATA_Q.Number
END
IF DATA_Q.PrnDate_GR.PrnDate_DATE
loc:Date = DATA_Q.PrnDate_GR.PrnDate_DATE
ELSE
loc:Date = DATA_Q.AccountDate_GR.AccountDate_DATE
END
IDstr = 'ON_NSCHFDOPPR_'& CLIP(DATA_Q.R_EDO_ID) & '_' & CLIP(DATA_Q.P_EDO_ID) & '_' & FORMAT(loc:Date,@D12) & '_' & CLIP(DATA_Q._UID)
FileName = xNOrmDir(CLIP(loc:XmlPath)) & IDstr & '.xml'
XML.Init(FileName)
XML.OpenDocument()
XML.SetEncoding('windows-1251')
! XML.SetUseCRLF(TRUE)
XML.SetUseCRLF(false)
IF EXISTS(FileName)
! шапка
XML.SetRootTag('Файл')
XML.AddRootTagAttributes('ИдФайл',IDstr)
XML.AddRootTagAttributes('ВерсПрог','Бытовая техника ЭНКА')
XML.AddRootTagAttributes('ВерсФорм','5.01')
! сведения об участниках ЭДО
XML.AddTag('СвУчДокОбор','')
XML.AddAttribute('ИдОтпр',CLIP(DATA_Q.P_EDO_ID),'СвУчДокОбор')
XML.AddAttribute('ИдПол',CLIP(DATA_Q.R_EDO_ID),'СвУчДокОбор')
! сведения об операторе
XML.AddTag('СвОЭДОтпр','',FALSE,'СвУчДокОбор')
XML.AddAttribute('ИдЭДО','2BM','СвОЭДОтпр')
XML.AddAttribute('ИННЮЛ','6663003127','СвОЭДОтпр')
XML.AddAttribute('НаимОрг','АО "ПФ СКБ Контур"','СвОЭДОтпр')
! шапка
XML.AddTag('Документ','')
XML.AddAttribute('КНД','1115131','Документ') ! код
XML.AddAttribute('Функция','СЧФДОП ','Документ') ! типа УПД
XML.AddAttribute('ДатаИнфПр',FORMAT(TODAY(),@d06.b),'Документ') ! дата формирования документа
XML.AddAttribute('ВремИнфПр',FORMAT(CLOCK(),@T04.b),'Документ') ! время формирования документа
XML.AddAttribute('НаимЭконСубСост',CLIP(DATA_Q.P_Name),'Документ') ! кто отправил ???
XML.AddAttribute('ПоФактХЖ','Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)','Документ')
XML.AddAttribute('НаимДокОпр','Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)','Документ')
XML.AddTag('СвСчФакт','',FALSE,'Документ')
XML.AddAttribute('НомерСчФ',CLIP(loc:Number),'СвСчФакт')
XML.AddAttribute('ДатаСчФ',FORMAT(loc:Date,@D06.b),'СвСчФакт')
XML.AddAttribute('КодОКВ','643','СвСчФакт') ! код валюты - 643 рубли
! сведения о продавце
XML.AddTag('СвПрод','',FALSE,'СвСчФакт')
XML.AddTag('ИдСв','',FALSE,'СвПрод')
IF NOT DATA_Q.P_FlagPE ! продавец организация
XML.AddTag('СвЮЛУч','',FALSE,'ИдСв')
XML.AddAttribute('НаимОрг',CLIP(DATA_Q.P_Name),'СвЮЛУч')
XML.AddAttribute('ИННЮЛ',CLIP(DATA_Q.P_INN),'СвЮЛУч')
IF LEN(CLIP(DATA_Q.P_KPP))
XML.AddAttribute('КПП',CLIP(DATA_Q.P_KPP),'СвЮЛУч')
END
ELSE ! продавец ИП
XML.AddTag('СвИП','',FALSE,'ИдСв')
XML.AddAttribute('ИННФЛ',CLIP(DATA_Q.P_INN),'СвИП')
IF LEN(CLIP(DATA_Q.P_PEInfo))
XML.AddAttribute('СвГосРегИП',CLIP(DATA_Q.P_PEInfo),'СвИП')
END
XML.AddTag('ФИО','',FALSE,'СвИП')
XML.AddAttribute('Фамилия',CLIP(DATA_Q.P_EDO_SecondName),'ФИО')
XML.AddAttribute('Имя',CLIP(DATA_Q.P_EDO_FirstName),'ФИО')
IF LEN(CLIP(DATA_Q.P_EDO_ThirdName))
XML.AddAttribute('Отчество',CLIP(DATA_Q.P_EDO_ThirdName),'ФИО')
END
END
! адрес продавца
XML.AddTag('Адрес','',FALSE,'СвПрод')
XML.AddTag('АдрРФ','',FALSE,'Адрес')
IF LEN(CLIP(DATA_Q.P_EDO_RegionCode))
XML.AddAttribute('КодРегион',CLIP(DATA_Q.P_EDO_RegionCode),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_Index))
XML.AddAttribute('Индекс',CLIP(DATA_Q.P_EDO_Index),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_Region))
XML.AddAttribute('Район',CLIP(DATA_Q.P_EDO_Region),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_City))
XML.AddAttribute('Город',CLIP(DATA_Q.P_EDO_City),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_Locality))
XML.AddAttribute('НаселПункт',CLIP(DATA_Q.P_EDO_Locality),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_Street))
XML.AddAttribute('Улица',CLIP(DATA_Q.P_EDO_Street),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_HouseNo))
XML.AddAttribute('Дом',CLIP(DATA_Q.P_EDO_HouseNo),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_HousePart))
XML.AddAttribute('Корпус',CLIP(DATA_Q.P_EDO_HousePart),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.P_EDO_FlatNo))
XML.AddAttribute('Кварт',CLIP(DATA_Q.P_EDO_FlatNo),'АдрРФ')
END
! сведения о грузоотправителе
IF DATA_Q.CP_ID
XML.AddTag('ГрузОт','',FALSE,'СвСчФакт')
IF DATA_Q.CP_ID = DATA_Q.P_ID
XML.AddTag('ОнЖе','он же',FALSE,'ГрузОт')
ELSE
XML.AddTag('ГрузОтпр','',FALSE,'ГрузОт')
XML.AddTag('ИдСв','',FALSE,'ГрузОтпр')
IF DATA_Q.CP_FlagPE ! грузоотправитель ИП
XML.AddTag('СвИП','',FALSE,'ИдСв')
XML.AddAttribute('ИННФЛ',CLIP(DATA_Q.CP_INN),'СвИП')
IF LEN(CLIP(DATA_Q.CP_PEInfo))
XML.AddAttribute('СвГосРегИП',CLIP(DATA_Q.CP_PEInfo),'СвИП')
END
XML.AddTag('ФИО','',FALSE,'СвИП')
XML.AddAttribute('Фамилия',CLIP(DATA_Q.CP_EDO_SecondName),'ФИО')
XML.AddAttribute('Имя',CLIP(DATA_Q.CP_EDO_FirstName),'ФИО')
IF LEN(CLIP(DATA_Q.CP_EDO_ThirdName))
XML.AddAttribute('Отчество',CLIP(DATA_Q.CP_EDO_ThirdName),'ФИО')
END
ELSE
XML.AddTag('СвЮЛУч','',FALSE,'ИдСв')
XML.AddTag('НаимОрг',CLIP(DATA_Q.CP_Name),FALSE,'СвЮЛУч')
END
! адрес грузоотправителя
XML.AddTag('Адрес','',FALSE,'ГрузОтпр')
XML.AddTag('АдрРФ','',FALSE,'Адрес')
IF LEN(CLIP(DATA_Q.CP_EDO_RegionCode))
XML.AddAttribute('КодРегион',CLIP(DATA_Q.CP_EDO_RegionCode),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_Index))
XML.AddAttribute('Индекс',CLIP(DATA_Q.CP_EDO_Index),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_Region))
XML.AddAttribute('Район',CLIP(DATA_Q.CP_EDO_Region),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_City))
XML.AddAttribute('Город',CLIP(DATA_Q.CP_EDO_City),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_Locality))
XML.AddAttribute('НаселПункт',CLIP(DATA_Q.CP_EDO_Locality),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_Street))
XML.AddAttribute('Улица',CLIP(DATA_Q.CP_EDO_Street),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_HouseNo))
XML.AddAttribute('Дом',CLIP(DATA_Q.CP_EDO_HouseNo),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_HousePart))
XML.AddAttribute('Корпус',CLIP(DATA_Q.CP_EDO_HousePart),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CP_EDO_FlatNo))
XML.AddAttribute('Кварт',CLIP(DATA_Q.CP_EDO_FlatNo),'АдрРФ')
END
END
ELSE
XML.AddTag('ГрузОт','',FALSE,'СвСчФакт')
XML.AddTag('ОнЖе','он же',FALSE,'ГрузОт')
END
! сведения о грузополучателе
IF DATA_Q.CR_ID
XML.AddTag('ГрузПолуч','',FALSE,'СвСчФакт')
XML.AddTag('ИдСв','',FALSE,'ГрузПолуч')
IF DATA_Q.CR_FlagPE ! грузоотправитель ИП
XML.AddTag('СвИП','',FALSE,'ИдСв')
XML.AddAttribute('ИННФЛ',CLIP(DATA_Q.CR_INN),'СвИП')
IF LEN(CLIP(DATA_Q.CR_PEInfo))
XML.AddAttribute('СвГосРегИП',CLIP(DATA_Q.CR_PEInfo),'СвИП')
END
XML.AddTag('ФИО','',FALSE,'СвИП')
XML.AddAttribute('Фамилия',CLIP(DATA_Q.CR_EDO_SecondName),'ФИО')
XML.AddAttribute('Имя',CLIP(DATA_Q.CR_EDO_FirstName),'ФИО')
IF LEN(CLIP(DATA_Q.CR_EDO_ThirdName))
XML.AddAttribute('Отчество',CLIP(DATA_Q.CR_EDO_ThirdName),'ФИО')
END
ELSE
XML.AddTag('СвЮЛУч','',FALSE,'ИдСв')
XML.AddTag('НаимОрг',CLIP(DATA_Q.CR_Name),FALSE,'СвЮЛУч')
END
! адрес грузополучателя
XML.AddTag('Адрес','',FALSE,'ГрузПолуч')
XML.AddTag('АдрРФ','',FALSE,'Адрес')
IF LEN(CLIP(DATA_Q.CR_EDO_RegionCode))
XML.AddAttribute('КодРегион',CLIP(DATA_Q.CR_EDO_RegionCode),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_Index))
XML.AddAttribute('Индекс',CLIP(DATA_Q.CR_EDO_Index),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_Region))
XML.AddAttribute('Район',CLIP(DATA_Q.CR_EDO_Region),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_City))
XML.AddAttribute('Город',CLIP(DATA_Q.CR_EDO_City),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_Locality))
XML.AddAttribute('НаселПункт',CLIP(DATA_Q.CR_EDO_Locality),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_Street))
XML.AddAttribute('Улица',CLIP(DATA_Q.CR_EDO_Street),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_HouseNo))
XML.AddAttribute('Дом',CLIP(DATA_Q.CR_EDO_HouseNo),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_HousePart))
XML.AddAttribute('Корпус',CLIP(DATA_Q.CR_EDO_HousePart),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.CR_EDO_FlatNo))
XML.AddAttribute('Кварт',CLIP(DATA_Q.CR_EDO_FlatNo),'АдрРФ')
END
END
! сведения о покупателе
XML.AddTag('СвПокуп','',FALSE,'СвСчФакт')
XML.AddTag('ИдСв','',FALSE,'СвПокуп')
IF NOT DATA_Q.R_FlagPE ! покупатель организация
XML.AddTag('СвЮЛУч','',FALSE,'ИдСв')
XML.AddAttribute('НаимОрг',CLIP(DATA_Q.R_Name),'СвЮЛУч')
XML.AddAttribute('ИННЮЛ',CLIP(DATA_Q.R_INN),'СвЮЛУч')
IF LEN(CLIP(DATA_Q.R_KPP))
XML.AddAttribute('КПП',CLIP(DATA_Q.R_KPP),'СвЮЛУч')
END
ELSE ! покупатель ИП
XML.AddTag('СвИП','',FALSE,'ИдСв')
XML.AddAttribute('ИННФЛ',CLIP(DATA_Q.R_INN),'СвИП')
IF LEN(CLIP(DATA_Q.R_PEInfo))
XML.AddAttribute('СвГосРегИП',CLIP(DATA_Q.R_PEInfo),'СвИП')
END
XML.AddTag('ФИО','',FALSE,'СвИП')
XML.AddAttribute('Фамилия',CLIP(DATA_Q.R_EDO_SecondName),'ФИО')
XML.AddAttribute('Имя',CLIP(DATA_Q.R_EDO_FirstName),'ФИО')
IF LEN(CLIP(DATA_Q.R_EDO_ThirdName))
XML.AddAttribute('Отчество',CLIP(DATA_Q.R_EDO_ThirdName),'ФИО')
END
END
! адрес покупателя
XML.AddTag('Адрес','',FALSE,'СвПокуп')
XML.AddTag('АдрРФ','',FALSE,'Адрес')
IF LEN(CLIP(DATA_Q.R_EDO_RegionCode))
XML.AddAttribute('КодРегион',CLIP(DATA_Q.R_EDO_RegionCode),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_Index))
XML.AddAttribute('Индекс',CLIP(DATA_Q.R_EDO_Index),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_Region))
XML.AddAttribute('Район',CLIP(DATA_Q.R_EDO_Region),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_City))
XML.AddAttribute('Город',CLIP(DATA_Q.R_EDO_City),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_Locality))
XML.AddAttribute('НаселПункт',CLIP(DATA_Q.R_EDO_Locality),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_Street))
XML.AddAttribute('Улица',CLIP(DATA_Q.R_EDO_Street),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_HouseNo))
XML.AddAttribute('Дом',CLIP(DATA_Q.R_EDO_HouseNo),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_HousePart))
XML.AddAttribute('Корпус',CLIP(DATA_Q.R_EDO_HousePart),'АдрРФ')
END
IF LEN(CLIP(DATA_Q.R_EDO_FlatNo))
XML.AddAttribute('Кварт',CLIP(DATA_Q.R_EDO_FlatNo),'АдрРФ')
END
XML.AddTag('ДопСвФХЖ1','',FALSE,'СвСчФакт')
XML.AddAttribute('НаимОКВ','Российский рубль','ДопСвФХЖ1')
! детали счет-фактуры
XML.AddTag('ТаблСчФакт','',FALSE,'Документ')
cnt_g# = 0
LOOP l# = 1 TO RECORDS(mSFContent)
GET(mSFContent,l#)
IF mSFContent.AccountID <> DATA_Q.AccountID THEN CYCLE END
cnt_g# += 1
XML.AddTag('СведТов','',FALSE,'ТаблСчФакт')
XML.AddAttribute('НомСтр',CLIP(mSFContent.NumPP),'СведТов')
XML.AddAttribute('НаимТов',CLIP(mSFContent.NameGoods),'СведТов')
XML.AddAttribute('ОКЕИ_Тов',mSFContent.MU_code,'СведТов')
XML.AddAttribute('КолТов',mSFContent.Quantity,'СведТов')
XML.AddAttribute('ЦенаТов',mSFContent.Price,'СведТов')
XML.AddAttribute('СтТовБезНДС',mSFContent.SumWithoutNDS,'СведТов')
XML.AddAttribute('СтТовУчНал',mSFContent.SumWithNDS,'СведТов')
CASE mSFContent.NDSRate
OF 0
XML.AddAttribute('НалСт','без НДС','СведТов')
ELSE
XML.AddAttribute('НалСт',CLIP(mSFContent.NDSRate) & '%','СведТов')
END
XML.AddTag('Акциз','',FALSE,'СведТов')
XML.AddTag('БезАкциз','без акциза',FALSE,'Акциз')
XML.AddTag('СумНал','',FALSE,'СведТов')
IF mSFContent.SumNDS
XML.AddTag('СумНал',CLIP(mSFContent.SumNDS),FALSE,'СумНал')
ELSE
XML.AddTag('БезНДС','без НДС',FALSE,'СумНал')
END
XML.AddTag('СвТД','',FALSE,'СведТов')
IF NOT (NOT LEN(CLIP(mSFContent.GTDNum)) OR mSFContent.GTDNum = '--' OR mSFContent.GTDNum = '-')
XML.AddAttribute('НомерТД',SUB(mSFContent.GTDNum,1,23),'СвТД')
END
IF mSFContent.Country_code <> 0
XML.AddAttribute('КодПроисх',FORMAT(mSFContent.Country_code,@N03),'СвТД')
END
XML.AddTag('ДопСведТов','',FALSE,'СведТов')
XML.AddAttribute('НаимЕдИзм',CLIP(mSFContent.MU),'ДопСведТов')
IF mSFContent.Country_code <> 0
XML.AddAttribute('КрНаимСтрПр',CLIP(mSFContent.Country),'ДопСведТов')
END
IF mSFContent.FlagTrack ! подлежит прослеживаемости
LOOP p# = 1 TO RECORDS(mRNPT)
GET(mRNPT,p#)
IF mRNPT.DetailID <> mSFContent.DetailID THEN CYCLE END
XML.AddTag('СведПрослеж','',FALSE,'ДопСведТов')
XML.AddAttribute('НомТовПрослеж',CLIP(mRNPT.RNPT),'СведПрослеж')
XML.AddAttribute('ЕдИзмПрослеж',CLIP(mSFContent.MU_code),'СведПрослеж')
XML.AddAttribute('НаимЕдИзмПрослеж',CLIP(mSFContent.MU),'СведПрослеж')
XML.AddAttribute('КолВЕдПрослеж',CLIP(mRNPT.Quantity),'СведПрослеж')
END
END
END
XML.AddTag('ВсегоОпл','',FALSE,'ТаблСчФакт')
XML.AddAttribute('СтТовБезНДСВсего',DATA_Q.SumWithoutNDS,'ВсегоОпл')
XML.AddAttribute('СтТовУчНалВсего',DATA_Q.SumWithNDS,'ВсегоОпл')
XML.AddTag('СумНалВсего','',FALSE,'ВсегоОпл')
IF DATA_Q.SumNDS
XML.AddTag('СумНал',DATA_Q.SumNDS,FALSE,'СумНалВсего')
ELSE
XML.AddTag('БезНДС','без НДС',FALSE,'СумНалВсего')
END
XML.AddTag('СвПродПер','',FALSE,'Документ')
XML.AddTag('СвПер','',FALSE,'СвПродПер')
XML.AddAttribute('СодОпер','-','СвПер')
XML.AddTag('ОснПер','',FALSE,'СвПер')
IF LEN(CLIP(DATA_Q.R_EDO_OsnPer))
XML.AddAttribute('НаимОсн',CLIP(DATA_Q.R_EDO_OsnPer),'ОснПер')
IF LEN(CLIP(DATA_Q.R_EDO_NomOsn))
XML.AddAttribute('НомОсн',CLIP(DATA_Q.R_EDO_NomOsn),'ОснПер')
END
IF LEN(CLIP(DATA_Q.R_EDO_DateOsn))
XML.AddAttribute('ДатаОсн',CLIP(DATA_Q.R_EDO_DateOsn),'ОснПер')
END
ELSE
XML.AddAttribute('НаимОсн','Без документа-основания','ОснПер')
END
XML.AddTag('Подписант','',FALSE,'Документ')
XML.AddAttribute('ОснПолн','Должностные обязанности','Подписант')
XML.AddAttribute('ОблПолн',1,'Подписант')
XML.AddAttribute('Статус',1,'Подписант')
IF NOT DATA_Q.P_FlagPE ! продавец организация
XML.AddTag('ЮЛ','',FALSE,'Подписант')
XML.AddAttribute('ИННЮЛ',CLIP(DATA_Q.P_INN),'ЮЛ')
IF CLIP(DATA_Q.P_EDO_Post)
XML.AddAttribute('Должн',CLIP(DATA_Q.P_EDO_Post),'ЮЛ')
END
XML.AddTag('ФИО','',FALSE,'ЮЛ')
XML.AddAttribute('Фамилия',CLIP(DATA_Q.P_EDO_SecondName),'ФИО')
XML.AddAttribute('Имя',CLIP(DATA_Q.P_EDO_FirstName),'ФИО')
IF LEN(CLIP(DATA_Q.P_EDO_ThirdName))
XML.AddAttribute('Отчество',CLIP(DATA_Q.P_EDO_ThirdName),'ФИО')
END
ELSE ! продавец ИП
XML.AddTag('ИП','',FALSE,'Подписант')
XML.AddAttribute('ИННФЛ',CLIP(DATA_Q.P_INN),'ИП')
XML.AddAttribute('СвГосРегИП',CLIP(DATA_Q.P_PEInfo),'ИП')
XML.AddTag('ФИО','',FALSE,'ИП')
XML.AddAttribute('Фамилия',CLIP(DATA_Q.P_EDO_SecondName),'ФИО')
XML.AddAttribute('Имя',CLIP(DATA_Q.P_EDO_FirstName),'ФИО')
IF LEN(CLIP(DATA_Q.P_EDO_ThirdName))
XML.AddAttribute('Отчество',CLIP(DATA_Q.P_EDO_ThirdName),'ФИО')
END
END
XML.SetSupportNameSpaces(True)
XML.CloseDocument()
END
END
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
ЭДО
Надо попробовать - будет ли читать штатный парсер русские теги (после конвертации документа в UTF-8 есстесно).
За теми кто отстал - не возвращаться. (С) Кодекс
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
ЭДО
Нет. Не хочет.Игорь Столяров писал(а): ↑09 Февраль 2023, 7:52 Надо попробовать - будет ли читать штатный парсер русские теги (после конвертации документа в UTF-8 есстесно).
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
ЭДО
Сейчас разбираю при приеме (только товар) через iQXML но код получается вырвиглазный.
Нужно переделывать как то и парсить полностью файл.
Вот думаю.
Нужно переделывать как то и парсить полностью файл.
Вот думаю.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
ЭДО
Как-то начинать новый проект на заведомо мёртвой библиотеке совсем не бест ...
Есть ведь CapeSoft xFiles4, EasyXML ...
Вот и я что-то такое помню ...
Были варианты поиска и подмены имён тегов перед парсом, но до реального проекта не доросло. Тогда.
За теми кто отстал - не возвращаться. (С) Кодекс
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
ЭДО
Проект старый но нужно сделать немного обмена через ЭДО для плавного переезда на 1с.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
ЭДО
Я как-то не заморачиваюсь с генерацией xml, делаю либо напрямую в файл, либо через специальный класс, когда надо в utf8. Не вижу смысла навешивать дополнительную обертку. От ошибок это не защитит, а кода получится заметно больше. Кроме того, проще копипастить строки из примеров.
Парсер именно через генерацию js. Обычно все гораздо проще, загрузка в очередь одним оператором, явно на js кода нет. Если логика загрузки более сложная, то можно прямо указать строки на js, как в этом примере. Такой подход несёт определённые накладные расходы, зато никаких сюрпризов и ограничений. Никаких ломаний головы, примеры кода на js легко гуглятся. Например, я не знаю, как на штатной кларионовское обертке работать с переменными именами тегов (xpath), а это необходимо в егаис.
Приведённые примеры из работающего проекта, логика, думаю, понятная. Если возникнут вопросы по нюансам, поясню.
Парсер именно через генерацию js. Обычно все гораздо проще, загрузка в очередь одним оператором, явно на js кода нет. Если логика загрузки более сложная, то можно прямо указать строки на js, как в этом примере. Такой подход несёт определённые накладные расходы, зато никаких сюрпризов и ограничений. Никаких ломаний головы, примеры кода на js легко гуглятся. Например, я не знаю, как на штатной кларионовское обертке работать с переменными именами тегов (xpath), а это необходимо в егаис.
Приведённые примеры из работающего проекта, логика, думаю, понятная. Если возникнут вопросы по нюансам, поясню.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
ЭДО
Аналогично. Но по другой причине - штатный класс очень сильно тормозит по скорости.
Если записать пару документов - то и нет проблем, но на массивах по несколько тысяч записей всё виснет.
За теми кто отстал - не возвращаться. (С) Кодекс