以下FUNCTION 使用到LINUX 指定 file 與 iconv
function cl_fileconvertto(p_sfile, p_ofile, p_ocode)
define p_sfile string,
p_ofile string,
p_ocode string,
ss string
DEFINE fn CHAR(100)
DEFINE ex CHAR(40),
ch base.Channel
DEFINE li_result LIKE type_file.num5
let ss = "file -i ", p_sfile clipped
LET ch = base.Channel.create()
CALL ch.setDelimiter("=")
CALL ch.openPipe(ss,"r")
while ch.read([fn,ex])
display fn, " ", ex
end while
call ch.close()
if cl_null(ex) then
let li_result= false
return li_result
end if
let ss= "iconv -f ", ex clipped, " -t " , p_ocode clipped ," ", p_sfile clipped, " -o " , p_ofile
RUN ss
let ss = "file -i ", p_ofile clipped
CALL ch.setDelimiter("=")
CALL ch.openPipe(ss,"r")
while ch.read([fn,ex])
display fn, " ", ex
end while
call ch.close();
if ex = p_ocode then
let li_result = true
else
let li_result = false
end if
return li_result
end function
2017年4月20日 星期四
2017年2月13日 星期一
TIPTOP 客製化 中華民國電子發票 A0101 格式測試.
這範本主要是要介紹4gl 中如何使用java 的JAR . 來幫助我們快速產生電子發票交換資料.
,BDL,4gl,turnkey,A0101
需求 BDL 2.4 以上.(沒記錯應是 2.2以上就有支援JAVA了.
第一要先把環境設定好. CLASSPATH 要設.
以下就是產生 A0101 的程式範本.
###########################################################
#程式開始
###########################################################
IMPORT JAVA com.fourjs.fgl.lang.FglDecimal
IMPORT JAVA java.lang.Number
IMPORT JAVA java.lang.Long
#import java com.thoughtworks.xstream.annotations.XStreamAlias
#import JAVA com.thoughtworks.xstream.annotations.XStreamAsAttribute
import JAVA com.tradevan.gateway.client.einv.parse.ParserHelper
import JAVA com.tradevan.gateway.client.util.annotat.DataObjectAble
import JAVA com.tradevan.gateway.client.einv.transform.TransformHelper
import JAVA com.tradevan.gateway.client.einv.util.EINVVersion
#import JAVA com.tradevan.gateway.client.einv.parse.proc.LineParser
import JAVA com.tradevan.gateway.client.einv.parse.proc.Parser
#import JAVA com.tradevan.gateway.client.einv.parse.proc.XMLParser
#import JAVA com.tradevan.gateway.client.einv.util.EINVConfig
import JAVA com.tradevan.gateway.client.einv.util.EncodingType
#import JAVA com.tradevan.gateway.client.einv.util.InvoiceUtil
#import JAVA com.tradevan.gateway.client.log.GatewayLogger
import JAVA com.tradevan.gateway.client.log.GatewayLoggerHandler
import JAVA com.tradevan.gateway.einv.msg.EINVMessage
import JAVA com.tradevan.gateway.einv.msg.EINVPayload
#import JAVA com.tradevan.commons.io.FileUtil
import JAVA com.tradevan.gateway.client.einv.parse.ParserHelper
import JAVA com.tradevan.gateway.client.util.GatewayUtil
import JAVA com.tradevan.gateway.einv.msg.EINVPayload
import JAVA com.tradevan.gateway.einv.msg.v31.A0101
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.AmountType
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.DetailsType
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.MainType
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.ProductItem
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.BuyerRemarkEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.CurrencyCodeEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.CustomsClearanceMarkEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.DonateMarkEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.InvoiceTypeEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.RoleDescriptionType
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.TaxTypeEnum
import JAVA com.tradevan.gateway.client.einv.parse.ParserException
import JAVA java.io.Serializable
import JAVA java.io.BufferedReader
import JAVA java.io.File
import JAVA java.io.FileReader
import JAVA java.io.PrintStream
import JAVA java.io.BufferedReader
import JAVA java.io.File
import JAVA java.io.FileReader
import JAVA java.io.PrintStream
import JAVA java.lang.reflect.Method
import JAVA java.util.ArrayList
import JAVA java.util.Date
import JAVA java.util.List
import JAVA java.math.BigDecimal
DATABASE ds
Main
DEFINE j_a0101 com.tradevan.gateway.einv.msg.v31.A0101;
DEFINE j_main MainType;
DEFINE j_seller RoleDescriptionType;
DEFINE j_buyer RoleDescriptionType;
DEFINE j_detail DetailsType;
DEFINE j_item ProductItem;
DEFINE j_dec java.math.BigDecimal;
DEFINE j_amount AmountType;
DEFINE j_parser ParserHelper;
DEFINE outXML string;
DEFINE b01,b02, b03 Long;
Define d Date
let d = today
call A0101.create() RETURNING j_a0101;
call MainType.create() RETURNING j_main;
call j_main.setInvoiceNumber("0123456789");
call j_main.setInvoiceDate( '20170201' );
call j_main.setInvoiceTime('08:30:22' );
call RoleDescriptionType.create() RETURNING j_seller;
call RoleDescriptionType.create() RETURNING j_buyer;
call j_seller.setIdentifier("0123456789");
call j_seller.setName("012345678901234567890123456789012345678901234567890123456789");
call j_seller.setAddress("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
call j_seller.setPersonInCharge("012345678901");
call j_seller.setTelephoneNumber("012345678901234");
call j_seller.setFacsimileNumber("012345678901234");
call j_seller.setEmailAddress("123@123.123.123");
call j_seller.setCustomerNumber("01234566789789456123");
call j_seller.setRoleRemark("20 20 20 20 202 0212");
call j_main.setSeller(j_seller);
call j_buyer.setIdentifier("0123456789");
call j_buyer.setName("012345678901234567890123456789012345678901234567890123456789");
call j_buyer.setAddress("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
call j_buyer.setPersonInCharge("012345678901");
call j_buyer.setTelephoneNumber("012345678901234");
call j_buyer.setFacsimileNumber("012345678901234");
call j_buyer.setEmailAddress("123@123.123.123");
call j_buyer.setCustomerNumber("01234566789789456123");
call j_buyer.setRoleRemark("20 20 20 20 202 0212");
call j_main.setBuyer(j_buyer);
call j_main.setCheckNumber("1023456789");
call j_main.setBuyerRemark(BuyerRemarkEnum.DeductableExpense);
call j_main.setMainRemark("mainremark");
call j_main.setCustomsClearanceMark(CustomsClearanceMarkEnum.NotViaCustoms);
call j_main.setTaxCenter("taxcenter");
call j_main.setPermitDate('20170214');
call j_main.setPermitWord("permitword");
call j_main.setPermitNumber("permitnumber");
call j_main.setCategory("ca");
call j_main.setRelateNumber("relatenumber");
call j_main.setInvoiceType(InvoiceTypeEnum.ComputerType);
call j_main.setGroupMark("1");
call j_main.setDonateMark(DonateMarkEnum.Donated);
call j_main.setAttachment("attachment");
call j_a0101.setMain(j_main);
call DetailsType.create() returning j_detail;
call ProductItem.create() returning j_item;
call j_item.setDescription("description2");
call j_item.setQuantity( "2.0" );
call j_item.setUnit("unit");
call j_item.setUnitPrice("6.5");
call j_item.setAmount("5.2");
call j_item.setSequenceNumber("223");
call j_item.setRemark("remark");
call j_item.setRelateNumber("relatenumber");
call j_detail.addProductItem(j_item);
call ProductItem.create() returning j_item;
call j_item.setDescription("description3");
call j_item.setQuantity( "3.0" );
call j_item.setUnit("unit");
call j_item.setUnitPrice("6.5");
call j_item.setAmount("5.3");
call j_item.setSequenceNumber("333");
call j_item.setRemark("remark");
call j_item.setRelateNumber("relatenumber");
call j_detail.addProductItem(j_item);
call j_a0101.setDetails(j_detail);
call AmountType.create() returning j_amount;
call j_amount.setTaxType(TaxTypeEnum.HybridTaxType);
call j_amount.setTaxRate("789.215")
call j_amount.setOriginalCurrencyAmount("123456.852");
call j_amount.setExchangeRate("0123456789.22");
call j_amount.setCurrency(CurrencyCodeEnum.AED);
call j_a0101.setAmount(j_amount);
call ParserHelper.create() returning j_parser ;
call j_parser.marshalToXML(j_a0101) returning outXML ;
#我只顥示在console .沒存成檔這個可以自己作
DISPLAY outXML
end Main
#################################################
#使用後產出的XML
#################################################
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:GEINV:eInvoiceMessage:A0101:3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:GEINV:eInvoiceMessage:A0101: 3.1 A0101.xsd">
<Main>
<InvoiceNumber>0123456789</InvoiceNumber>
<InvoiceDate>20170201</InvoiceDate>
<InvoiceTime>08:30:22</InvoiceTime>
<Seller>
<Identifier>0123456789</Identifier>
<Name>012345678901234567890123456789012345678901234567890123456789</Name>
<Address>0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789</Address>
<PersonInCharge>012345678901</PersonInCharge>
<TelephoneNumber>012345678901234</TelephoneNumber>
<FacsimileNumber>012345678901234</FacsimileNumber>
<EmailAddress>123@123.123.123</EmailAddress>
<CustomerNumber>01234566789789456123</CustomerNumber>
<RoleRemark>20 20 20 20 202 0212</RoleRemark>
</Seller>
<Buyer>
<Identifier>0123456789</Identifier>
<Name>012345678901234567890123456789012345678901234567890123456789</Name>
<Address>0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789</Address>
<PersonInCharge>012345678901</PersonInCharge>
<TelephoneNumber>012345678901234</TelephoneNumber>
<FacsimileNumber>012345678901234</FacsimileNumber>
<EmailAddress>123@123.123.123</EmailAddress>
<CustomerNumber>01234566789789456123</CustomerNumber>
<RoleRemark>20 20 20 20 202 0212</RoleRemark>
</Buyer>
<CheckNumber>1023456789</CheckNumber>
<BuyerRemark>1</BuyerRemark>
<MainRemark>mainremark</MainRemark>
<CustomsClearanceMark>1</CustomsClearanceMark>
<TaxCenter>taxcenter</TaxCenter>
<PermitDate>20170214</PermitDate>
<PermitWord>permitword</PermitWord>
<PermitNumber>permitnumber</PermitNumber>
<Category>ca</Category>
<RelateNumber>relatenumber</RelateNumber>
<InvoiceType>05</InvoiceType>
<GroupMark>1</GroupMark>
<DonateMark>1</DonateMark>
<Attachment>attachment</Attachment>
</Main>
<Details>
<ProductItem>
<Description>description2</Description>
<Quantity>2.0</Quantity>
<Unit>unit</Unit>
<UnitPrice>6.5</UnitPrice>
<Amount>5.2</Amount>
<SequenceNumber>223</SequenceNumber>
<Remark>remark</Remark>
<RelateNumber>relatenumber</RelateNumber>
</ProductItem>
<ProductItem>
<Description>description3</Description>
<Quantity>3.0</Quantity>
<Unit>unit</Unit>
<UnitPrice>6.5</UnitPrice>
<Amount>5.3</Amount>
<SequenceNumber>333</SequenceNumber>
<Remark>remark</Remark>
<RelateNumber>relatenumber</RelateNumber>
</ProductItem>
</Details>
<Amount>
<TaxType>9</TaxType>
<TaxRate>789.215</TaxRate>
<TaxAmount>123321</TaxAmount>
<TotalAmount>99999</TotalAmount>
<DiscountAmount>3019203</DiscountAmount>
<OriginalCurrencyAmount>123456.852</OriginalCurrencyAmount>
<ExchangeRate>123456789.22</ExchangeRate>
<Currency>AED</Currency>
</Amount>
</Invoice>
,BDL,4gl,turnkey,A0101
需求 BDL 2.4 以上.(沒記錯應是 2.2以上就有支援JAVA了.
第一要先把環境設定好. CLASSPATH 要設.
以下就是產生 A0101 的程式範本.
###########################################################
#程式開始
###########################################################
IMPORT JAVA com.fourjs.fgl.lang.FglDecimal
IMPORT JAVA java.lang.Number
IMPORT JAVA java.lang.Long
#import java com.thoughtworks.xstream.annotations.XStreamAlias
#import JAVA com.thoughtworks.xstream.annotations.XStreamAsAttribute
import JAVA com.tradevan.gateway.client.einv.parse.ParserHelper
import JAVA com.tradevan.gateway.client.util.annotat.DataObjectAble
import JAVA com.tradevan.gateway.client.einv.transform.TransformHelper
import JAVA com.tradevan.gateway.client.einv.util.EINVVersion
#import JAVA com.tradevan.gateway.client.einv.parse.proc.LineParser
import JAVA com.tradevan.gateway.client.einv.parse.proc.Parser
#import JAVA com.tradevan.gateway.client.einv.parse.proc.XMLParser
#import JAVA com.tradevan.gateway.client.einv.util.EINVConfig
import JAVA com.tradevan.gateway.client.einv.util.EncodingType
#import JAVA com.tradevan.gateway.client.einv.util.InvoiceUtil
#import JAVA com.tradevan.gateway.client.log.GatewayLogger
import JAVA com.tradevan.gateway.client.log.GatewayLoggerHandler
import JAVA com.tradevan.gateway.einv.msg.EINVMessage
import JAVA com.tradevan.gateway.einv.msg.EINVPayload
#import JAVA com.tradevan.commons.io.FileUtil
import JAVA com.tradevan.gateway.client.einv.parse.ParserHelper
import JAVA com.tradevan.gateway.client.util.GatewayUtil
import JAVA com.tradevan.gateway.einv.msg.EINVPayload
import JAVA com.tradevan.gateway.einv.msg.v31.A0101
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.AmountType
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.DetailsType
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.MainType
import JAVA com.tradevan.gateway.einv.msg.v31.A0101Body.ProductItem
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.BuyerRemarkEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.CurrencyCodeEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.CustomsClearanceMarkEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.DonateMarkEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.InvoiceTypeEnum
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.RoleDescriptionType
import JAVA com.tradevan.gateway.einv.msg.v31.UtilBody.TaxTypeEnum
import JAVA com.tradevan.gateway.client.einv.parse.ParserException
import JAVA java.io.Serializable
import JAVA java.io.BufferedReader
import JAVA java.io.File
import JAVA java.io.FileReader
import JAVA java.io.PrintStream
import JAVA java.io.BufferedReader
import JAVA java.io.File
import JAVA java.io.FileReader
import JAVA java.io.PrintStream
import JAVA java.lang.reflect.Method
import JAVA java.util.ArrayList
import JAVA java.util.Date
import JAVA java.util.List
import JAVA java.math.BigDecimal
DATABASE ds
Main
DEFINE j_a0101 com.tradevan.gateway.einv.msg.v31.A0101;
DEFINE j_main MainType;
DEFINE j_seller RoleDescriptionType;
DEFINE j_buyer RoleDescriptionType;
DEFINE j_detail DetailsType;
DEFINE j_item ProductItem;
DEFINE j_dec java.math.BigDecimal;
DEFINE j_amount AmountType;
DEFINE j_parser ParserHelper;
DEFINE outXML string;
DEFINE b01,b02, b03 Long;
Define d Date
let d = today
call A0101.create() RETURNING j_a0101;
call MainType.create() RETURNING j_main;
call j_main.setInvoiceNumber("0123456789");
call j_main.setInvoiceDate( '20170201' );
call j_main.setInvoiceTime('08:30:22' );
call RoleDescriptionType.create() RETURNING j_seller;
call RoleDescriptionType.create() RETURNING j_buyer;
call j_seller.setIdentifier("0123456789");
call j_seller.setName("012345678901234567890123456789012345678901234567890123456789");
call j_seller.setAddress("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
call j_seller.setPersonInCharge("012345678901");
call j_seller.setTelephoneNumber("012345678901234");
call j_seller.setFacsimileNumber("012345678901234");
call j_seller.setEmailAddress("123@123.123.123");
call j_seller.setCustomerNumber("01234566789789456123");
call j_seller.setRoleRemark("20 20 20 20 202 0212");
call j_main.setSeller(j_seller);
call j_buyer.setIdentifier("0123456789");
call j_buyer.setName("012345678901234567890123456789012345678901234567890123456789");
call j_buyer.setAddress("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
call j_buyer.setPersonInCharge("012345678901");
call j_buyer.setTelephoneNumber("012345678901234");
call j_buyer.setFacsimileNumber("012345678901234");
call j_buyer.setEmailAddress("123@123.123.123");
call j_buyer.setCustomerNumber("01234566789789456123");
call j_buyer.setRoleRemark("20 20 20 20 202 0212");
call j_main.setBuyer(j_buyer);
call j_main.setCheckNumber("1023456789");
call j_main.setBuyerRemark(BuyerRemarkEnum.DeductableExpense);
call j_main.setMainRemark("mainremark");
call j_main.setCustomsClearanceMark(CustomsClearanceMarkEnum.NotViaCustoms);
call j_main.setTaxCenter("taxcenter");
call j_main.setPermitDate('20170214');
call j_main.setPermitWord("permitword");
call j_main.setPermitNumber("permitnumber");
call j_main.setCategory("ca");
call j_main.setRelateNumber("relatenumber");
call j_main.setInvoiceType(InvoiceTypeEnum.ComputerType);
call j_main.setGroupMark("1");
call j_main.setDonateMark(DonateMarkEnum.Donated);
call j_main.setAttachment("attachment");
call j_a0101.setMain(j_main);
call DetailsType.create() returning j_detail;
call ProductItem.create() returning j_item;
call j_item.setDescription("description2");
call j_item.setQuantity( "2.0" );
call j_item.setUnit("unit");
call j_item.setUnitPrice("6.5");
call j_item.setAmount("5.2");
call j_item.setSequenceNumber("223");
call j_item.setRemark("remark");
call j_item.setRelateNumber("relatenumber");
call j_detail.addProductItem(j_item);
call ProductItem.create() returning j_item;
call j_item.setDescription("description3");
call j_item.setQuantity( "3.0" );
call j_item.setUnit("unit");
call j_item.setUnitPrice("6.5");
call j_item.setAmount("5.3");
call j_item.setSequenceNumber("333");
call j_item.setRemark("remark");
call j_item.setRelateNumber("relatenumber");
call j_detail.addProductItem(j_item);
call j_a0101.setDetails(j_detail);
call AmountType.create() returning j_amount;
call j_amount.setTaxType(TaxTypeEnum.HybridTaxType);
call j_amount.setTaxRate("789.215")
call j_amount.setOriginalCurrencyAmount("123456.852");
call j_amount.setExchangeRate("0123456789.22");
call j_amount.setCurrency(CurrencyCodeEnum.AED);
call j_a0101.setAmount(j_amount);
call ParserHelper.create() returning j_parser ;
call j_parser.marshalToXML(j_a0101) returning outXML ;
#我只顥示在console .沒存成檔這個可以自己作
DISPLAY outXML
end Main
#################################################
#使用後產出的XML
#################################################
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:GEINV:eInvoiceMessage:A0101:3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:GEINV:eInvoiceMessage:A0101: 3.1 A0101.xsd">
<Main>
<InvoiceNumber>0123456789</InvoiceNumber>
<InvoiceDate>20170201</InvoiceDate>
<InvoiceTime>08:30:22</InvoiceTime>
<Seller>
<Identifier>0123456789</Identifier>
<Name>012345678901234567890123456789012345678901234567890123456789</Name>
<Address>0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789</Address>
<PersonInCharge>012345678901</PersonInCharge>
<TelephoneNumber>012345678901234</TelephoneNumber>
<FacsimileNumber>012345678901234</FacsimileNumber>
<EmailAddress>123@123.123.123</EmailAddress>
<CustomerNumber>01234566789789456123</CustomerNumber>
<RoleRemark>20 20 20 20 202 0212</RoleRemark>
</Seller>
<Buyer>
<Identifier>0123456789</Identifier>
<Name>012345678901234567890123456789012345678901234567890123456789</Name>
<Address>0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789</Address>
<PersonInCharge>012345678901</PersonInCharge>
<TelephoneNumber>012345678901234</TelephoneNumber>
<FacsimileNumber>012345678901234</FacsimileNumber>
<EmailAddress>123@123.123.123</EmailAddress>
<CustomerNumber>01234566789789456123</CustomerNumber>
<RoleRemark>20 20 20 20 202 0212</RoleRemark>
</Buyer>
<CheckNumber>1023456789</CheckNumber>
<BuyerRemark>1</BuyerRemark>
<MainRemark>mainremark</MainRemark>
<CustomsClearanceMark>1</CustomsClearanceMark>
<TaxCenter>taxcenter</TaxCenter>
<PermitDate>20170214</PermitDate>
<PermitWord>permitword</PermitWord>
<PermitNumber>permitnumber</PermitNumber>
<Category>ca</Category>
<RelateNumber>relatenumber</RelateNumber>
<InvoiceType>05</InvoiceType>
<GroupMark>1</GroupMark>
<DonateMark>1</DonateMark>
<Attachment>attachment</Attachment>
</Main>
<Details>
<ProductItem>
<Description>description2</Description>
<Quantity>2.0</Quantity>
<Unit>unit</Unit>
<UnitPrice>6.5</UnitPrice>
<Amount>5.2</Amount>
<SequenceNumber>223</SequenceNumber>
<Remark>remark</Remark>
<RelateNumber>relatenumber</RelateNumber>
</ProductItem>
<ProductItem>
<Description>description3</Description>
<Quantity>3.0</Quantity>
<Unit>unit</Unit>
<UnitPrice>6.5</UnitPrice>
<Amount>5.3</Amount>
<SequenceNumber>333</SequenceNumber>
<Remark>remark</Remark>
<RelateNumber>relatenumber</RelateNumber>
</ProductItem>
</Details>
<Amount>
<TaxType>9</TaxType>
<TaxRate>789.215</TaxRate>
<TaxAmount>123321</TaxAmount>
<TotalAmount>99999</TotalAmount>
<DiscountAmount>3019203</DiscountAmount>
<OriginalCurrencyAmount>123456.852</OriginalCurrencyAmount>
<ExchangeRate>123456789.22</ExchangeRate>
<Currency>AED</Currency>
</Amount>
</Invoice>
訂閱:
文章 (Atom)