danfeii.prw 203 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662
  1. #INCLUDE "PROTHEUS.CH"
  2. #INCLUDE "TBICONN.CH"
  3. #INCLUDE "COLORS.CH"
  4. #INCLUDE "RPTDEF.CH"
  5. #INCLUDE "FWPrintSetup.ch"
  6. #DEFINE IMP_SPOOL 2
  7. #DEFINE VBOX 080
  8. #DEFINE VSPACE 008
  9. #DEFINE HSPACE 010
  10. #DEFINE SAYVSPACE 008
  11. #DEFINE SAYHSPACE 008
  12. #DEFINE HMARGEM 030
  13. #DEFINE VMARGEM 030
  14. #DEFINE MAXITEM 022 // M嫞imo de produtos para a primeira p墔ina
  15. #DEFINE MAXITEMP2 049 // M嫞imo de produtos para a pagina 2 em diante
  16. #DEFINE MAXITEMP2F 069 // M嫞imo de produtos para a p墔ina 2 em diante quando a p墔ina n緌 possui informa踥es complementares
  17. #DEFINE MAXITEMP3 025 // M嫞imo de produtos para a pagina 2 em diante (caso utilize a op誽o de impressao em verso) - Tratamento implementado para atender a legislacao que determina que a segunda pagina de ocupar 50%.
  18. #DEFINE MAXITEMC 035 // M嫞ima de caracteres por linha de produtos/servi蔞s
  19. #DEFINE MAXMENLIN 080 // M嫞imo de caracteres por linha de dados adicionais
  20. #DEFINE MAXMSG 013 // M嫞imo de dados adicionais por p墔ina
  21. #DEFINE MAXVALORC 009 // M嫞imo de caracteres por linha de valores num廨icos
  22. #DEFINE MAXCODPRD 050 // M嫞imo de caracteres do codigo de produtos/servicos conforme o tamanho do quadro "Cod. prod"
  23. /*/
  24. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  25. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  26. 控矬闡闡闡闡鐃闡闡闡闡闡薩闡闡闡薩闡闡闡闡闡闡闡闡闡闡闡薩闡闡鐃闡闡闡闡闡膨�
  27. 控袈rograma 袈rtNfeSef � Autor � Eduardo Riera � Data �16.11.2006陰�
  28. 控藥闡闡闡闡霰闡闡闡闡闡謐闡闡闡謐闡闡闡闡闡闡闡闡闡闡闡謐闡闡鐘闡闡闡闡闡敢�
  29. 控蛇escri�o 袒dmake de exemplo para impress緌 da DANFE no formato Retrato陰�
  30. 控� � 陰�
  31. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  32. 控袒etorno 術enhum 陰�
  33. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  34. 控袈arametros術enhum 陰�
  35. 控� � 陰�
  36. 控藥闡闡闡闡霰闡闡闡闡闡闡闡鐃闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  37. 控� DATA � Programador 蛉anutencao efetuada 陰�
  38. 控藥闡闡闡闡霰闡闡闡闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  39. 控� � � 陰�
  40. 控斂闡闡闡闡鐘闡闡闡闡闡闡闡鐘闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡棱�
  41. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  42. 葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔�
  43. /*/
  44. User Function PrtNfeSef(cIdEnt, cVal1 , cVal2 , oDanfe,;
  45. oSetup, cFilePrint , lIsLoja , nTipo )
  46. Local aArea := GetArea()
  47. Local lExistNfe := .F.
  48. Local lPergunte := .T.
  49. Local lRet := .T.
  50. local lVerPerg := .T.
  51. local lJob := .F.
  52. local cProg := iif(existBlock("DANFEProc"),"U_DANFEProc","DANFEProc")
  53. Default lIsLoja := .F. //indica se foi chamado de alguma rotina do SIGALOJA
  54. Default nTipo := 0
  55. Private nConsNeg := 0.4 // Constante para concertar o c嫮culo retornado pelo GetTextWidth para fontes em negrito.
  56. Private nConsTex := 0.5 // Constante para concertar o c嫮culo retornado pelo GetTextWidth.
  57. private oRetNF
  58. Private lPortalRep := isInCallStack("u_danfepdf")//Alterado Lucilene SMSTI - Envio Portal SMS. 25.11.23
  59. If nTipo <> 1
  60. lJob := (oDanfe:lInJob .or. oSetup == nil)
  61. oDanfe:SetResolution(78) //Tamanho estipulado para a Danfe
  62. oDanfe:SetPortrait()
  63. oDanfe:SetPaperSize(DMPAPER_A4)
  64. oDanfe:SetMargin(60,60,60,60)
  65. If !lPortalRep //Alterado Lucilene SMSTI - Portal SMS. 25.11.23
  66. oDanfe:lServer := if( lJob , .T., oSetup:GetProperty(PD_DESTINATION)==AMB_SERVER )
  67. Endif
  68. // ----------------------------------------------
  69. // Define saida de impress緌
  70. // ----------------------------------------------
  71. If !lPortalRep //Alterado Lucilene SMSTI - Portal SMS. 25.11.23
  72. If lJob .or. oSetup:GetProperty(PD_PRINTTYPE) == IMP_PDF
  73. oDanfe:nDevice := IMP_PDF
  74. // ----------------------------------------------
  75. // Define para salvar o PDF
  76. // ----------------------------------------------
  77. oDanfe:cPathPDF := if ( lJob , SuperGetMV('MV_RELT',,"\SPOOL\") , oSetup:aOptions[PD_VALUETYPE] )
  78. elseIf oSetup:GetProperty(PD_PRINTTYPE) == IMP_SPOOL
  79. oDanfe:nDevice := IMP_SPOOL
  80. // ----------------------------------------------
  81. // Salva impressora selecionada
  82. // ----------------------------------------------
  83. fwWriteProfString(GetPrinterSession(),"DEFAULT", oSetup:aOptions[PD_VALUETYPE], .T.)
  84. oDanfe:cPrinter := oSetup:aOptions[PD_VALUETYPE]
  85. Endif
  86. Endif
  87. If lIsLoja
  88. MV_PAR01 := SF2->F2_DOC
  89. MV_PAR02 := SF2->F2_DOC
  90. MV_PAR03 := SF2->F2_SERIE
  91. MV_PAR04 := 2 //[Operacao] NF de Saida
  92. MV_PAR05 := 1 //[Frente e Verso] Sim
  93. MV_PAR06 := 2 //[DANFE simplificado] Nao
  94. Else
  95. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  96. //� Agroindustria� �� ���� ���� �稭
  97. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  98. If FindFunction("OGXUtlOrig") //Encontra a fun誽o
  99. If OGXUtlOrig() // Retorna se tem integra誽o com Agro/origina誽o modulo 67
  100. If FindFunction("AGRXPERG")
  101. lVerPerg := AGRXPERG()
  102. EndIf
  103. EndIf
  104. Endif
  105. If lVerPerg .and. !lPortalRep //Alterado Lucilene SMSTI - Portal SMS. 25.11.23
  106. if !lJob
  107. lPergunte := Pergunte("NFSIGW",.T.)
  108. else
  109. lPergunte := .T.
  110. Pergunte("NFSIGW",.F.)
  111. endif
  112. EndIf
  113. EndIf
  114. If lPergunte
  115. if lJob .or. lPortalRep //Adicionado Lucilene SMSTI - Portal SMS - 25.11.23
  116. &cProg.(@oDanfe, , cIDEnt, Nil, Nil, @lExistNFe, lIsLoja )
  117. else
  118. RPTStatus( {|lEnd| &cProg.(@oDanfe, @lEnd, cIDEnt, Nil, Nil, @lExistNFe, lIsLoja )}, "Imprimindo DANFE..." )
  119. endif
  120. EndIf
  121. If lExistNFe
  122. oDanfe:Preview()//Visualiza antes de imprimir
  123. Else
  124. if !lIsLoja .and. !lJob
  125. Aviso("DANFE","Nenhuma NF-e a ser impressa nos parametros utilizados.",{"OK"},3)
  126. EndIf
  127. EndIf
  128. ElseIf nTipo == 1
  129. MV_PAR01 := SF2->F2_DOC
  130. MV_PAR02 := SF2->F2_DOC
  131. MV_PAR03 := SF2->F2_SERIE
  132. MV_PAR04 := 2 //[Operacao] NF de Saida
  133. MV_PAR05 := 1 //[Frente e Verso] Sim
  134. MV_PAR06 := 1 //[DANFE simplificado] Sim
  135. If lPergunte
  136. if lJob
  137. &cProg.(@oDanfe, , cIDEnt, Nil, Nil, @lExistNFe, lIsLoja, nTipo )
  138. else
  139. RPTStatus( {|lEnd| &cProg.(@oDanfe, @lEnd, cIDEnt, Nil, Nil, @lExistNFe, lIsLoja, nTipo)}, "Imprimindo DANFE..." )
  140. endif
  141. EndIf
  142. EndIf
  143. //Se SIGALOJA, o objeto oDANFE � destruido onde foi instanciado e retorna se houve impressao do DANFE
  144. If lIsLoja
  145. lRet := lExistNFe
  146. Else
  147. FreeObj(oDANFE)
  148. oDANFE := Nil
  149. EndIf
  150. RestArea(aArea)
  151. Return lRet
  152. /*/
  153. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  154. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  155. 控矬闡闡闡闡鐃闡闡闡闡闡薩闡闡闡薩闡闡闡闡闡闡闡闡闡闡闡薩闡闡鐃闡闡闡闡闡膨�
  156. 控袈rograma 蛇ANFEProc � Autor � Eduardo Riera � Data �16.11.2006陰�
  157. 控藥闡闡闡闡霰闡闡闡闡闡謐闡闡闡謐闡闡闡闡闡闡闡闡闡闡闡謐闡闡鐘闡闡闡闡闡敢�
  158. 控蛇escri�o 袒dmake de exemplo para impress緌 da DANFE no formato Retrato陰�
  159. 控� � 陰�
  160. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  161. 控袒etorno 術enhum 陰�
  162. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  163. 控袈arametros蛀xpO1: Objeto grafico de impressao (OPC) 陰�
  164. 控� � 陰�
  165. 控藥闡闡闡闡霰闡闡闡闡闡闡闡鐃闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  166. 控� DATA � Programador 蛉anutencao efetuada 陰�
  167. 控藥闡闡闡闡霰闡闡闡闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  168. 控� � � 陰�
  169. 控斂闡闡闡闡鐘闡闡闡闡闡闡闡鐘闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡棱�
  170. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  171. 葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔�
  172. /*/
  173. User Function DANFEProc( oDanfe , lEnd , cIdEnt , cVal1,;
  174. cVal2 , lExistNfe , lIsLoja , nTipo)
  175. Local aArea := GetArea()
  176. Local aAreaSF3 := {}
  177. Local aNotas := {}
  178. Local aXML := {}
  179. Local cNaoAut := ""
  180. Local cAliasSF3 := "SF3"
  181. Local cWhere := ""
  182. Local cAviso := ""
  183. Local cCodRetNFE := ""
  184. Local cCodRetSF3 := ""
  185. Local cMsgSF3 := ""
  186. Local cErro := ""
  187. Local cAutoriza := ""
  188. Local cModalidade:= ""
  189. Local cChaveSFT := ""
  190. Local cAliasSFT := "SFT"
  191. Local cCondicao := ""
  192. Local cIndex := ""
  193. Local cChave := ""
  194. Local lQuery := .F.
  195. Local nX := 0
  196. Local nI := 0
  197. Local oNfe
  198. Local nLenNotas
  199. Local lImpDir := GetNewPar("MV_IMPDIR",.F.)
  200. Local nLenarray := 0
  201. Local nCursor := 0
  202. Local lBreak := .F.
  203. Local aGrvSF3 := {}
  204. Local lImpSimp := .F.
  205. Local lUsaColab := UsaColaboracao("1")
  206. Local lMVGfe := GetNewPar( "MV_INTGFE", .F. ) // Se tem integra誽o com o GFE
  207. Local lSdoc := TamSx3("F3_SERIE")[1] == 14
  208. Local cSerie := ""
  209. Local cSerId := ""
  210. Local cFrom := ""
  211. Local cxFilial := ""
  212. Local cCampos := ""
  213. Local lFirst := .T.
  214. local lChave := .F.
  215. Local cChavSF3 := ""
  216. Local nTotalReg := 0
  217. Default lEnd := .F.
  218. Default lIsLoja := .F.
  219. Default nTipo := 0
  220. public nMaxItem := MAXITEM
  221. MV_PAR01 := AllTrim(MV_PAR01)
  222. lImpSimp := ( !Empty( MV_PAR06 ) .and. MV_PAR06 == 1 )
  223. If !lImpDir .or. MV_PAR04 == 0 /* Caso impress緌 de DANFE seja realizada via AutoDistMail */
  224. dbSelectArea("SF3")
  225. dbSetOrder(5)
  226. #IFDEF TOP
  227. If MV_PAR04==1
  228. If lSdoc
  229. cCampos += ", SF3.F3_SDOC"
  230. cSerie := Padr(MV_PAR03,TamSx3("F3_SDOC")[1])
  231. cWhere := "%SubString(SF3.F3_CFO,1,1) < '5' AND SF3.F3_FORMUL='S' AND SF3.F3_SDOC = '"+ cSerie + "' AND SF3.F3_ESPECIE IN ('SPED','NFCE') "
  232. Else
  233. cSerie := Padr(MV_PAR03,TamSx3("F3_SERIE")[1])
  234. cWhere := "%SubString(SF3.F3_CFO,1,1) < '5' AND SF3.F3_FORMUL='S' AND SF3.F3_SERIE = '"+ cSerie + "' AND SF3.F3_ESPECIE IN ('SPED','NFCE') "
  235. Endif
  236. ElseIf MV_PAR04==2
  237. If lSdoc
  238. cCampos += ", SF3.F3_SDOC"
  239. cSerie := Padr(MV_PAR03,TamSx3("F3_SDOC")[1])
  240. cWhere := "%SubString(SF3.F3_CFO,1,1) >= '5' AND SF3.F3_SDOC = '"+ cSerie + "' AND SF3.F3_ESPECIE IN ('SPED','NFCE') "
  241. Else
  242. cSerie := Padr(MV_PAR03,TamSx3("F3_SERIE")[1])
  243. cWhere := "%SubString(SF3.F3_CFO,1,1) >= '5' AND SF3.F3_SERIE = '"+ cSerie + "' AND SF3.F3_ESPECIE IN ('SPED','NFCE') "
  244. Endif
  245. Else
  246. If lSdoc
  247. cCampos += ", SF3.F3_SDOC"
  248. cSerie := Padr(MV_PAR03,TamSx3("F3_SDOC")[1])
  249. cWhere := "%SF3.F3_SDOC = '"+ cSerie + "' AND SF3.F3_ESPECIE IN ('SPED','NFCE') "
  250. Else
  251. cSerie := Padr(MV_PAR03,TamSx3("F3_SERIE")[1])
  252. cWhere := "%SF3.F3_SERIE = '"+ cSerie + "' AND SF3.F3_ESPECIE IN ('SPED','NFCE') "
  253. Endif
  254. EndIf
  255. If !Empty(MV_PAR07) .Or. !Empty(MV_PAR08)
  256. cWhere += " AND (SF3.F3_EMISSAO >= '"+ SubStr(DTOS(MV_PAR07),1,4) + SubStr(DTOS(MV_PAR07),5,2) + SubStr(DTOS(MV_PAR07),7,2) + "' AND SF3.F3_EMISSAO <= '"+ SubStr(DTOS(MV_PAR08),1,4) + SubStr(DTOS(MV_PAR08),5,2) + SubStr(DTOS(MV_PAR08),7,2) + "')"
  257. EndIF
  258. cWhere += "%"
  259. cAliasSF3 := GetNextAlias()
  260. lQuery := .T.
  261. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  262. //彪ampos que serao adicionados a query somente se existirem na base�
  263. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  264. If Empty(cCampos)
  265. cCampos := "%%"
  266. Else
  267. cCampos := "% " + cCampos + " %"
  268. Endif
  269. BeginSql Alias cAliasSF3
  270. COLUMN F3_ENTRADA AS DATE
  271. COLUMN F3_DTCANC AS DATE
  272. SELECT F3_FILIAL,F3_ENTRADA,F3_NFELETR,F3_CFO,F3_FORMUL,F3_NFISCAL,F3_SERIE,F3_CLIEFOR,F3_LOJA,F3_ESPECIE,F3_DTCANC
  273. %Exp:cCampos%
  274. FROM %Table:SF3% SF3
  275. WHERE
  276. SF3.F3_FILIAL = %xFilial:SF3% AND
  277. SF3.F3_SERIE = %Exp:MV_PAR03% AND
  278. SF3.F3_NFISCAL >= %Exp:MV_PAR01% AND
  279. SF3.F3_NFISCAL <= %Exp:MV_PAR02% AND
  280. %Exp:cWhere% AND
  281. SF3.F3_DTCANC = %Exp:Space(8)% AND
  282. SF3.%notdel%
  283. ORDER BY F3_NFISCAL
  284. EndSql
  285. #ELSE
  286. cIndex := CriaTrab(NIL, .F.)
  287. cChave := IndexKey(6)
  288. cCondicao := 'F3_FILIAL == "' + xFilial("SF3") + '" .And. '
  289. cCondicao += 'SF3->F3_SERIE =="'+ MV_PAR03+'" .And. '
  290. cCondicao += 'SF3->F3_NFISCAL >="'+ MV_PAR01+'" .And. '
  291. cCondicao += 'SF3->F3_NFISCAL <="'+ MV_PAR02+'" .And. '
  292. cCondicao += 'SF3->F3_ESPECIE IN ("SPED","NFCE") .And. '
  293. cCondicao += 'Empty(SF3->F3_DTCANC)'
  294. IndRegua(cAliasSF3, cIndex, cChave, , cCondicao)
  295. nIndex := RetIndex(cAliasSF3)
  296. DBSetIndex(cIndex + OrdBagExt())
  297. DBSetOrder(nIndex + 1)
  298. DBGoTop()
  299. #ENDIF
  300. If MV_PAR04==1
  301. cWhere := "SubStr(F3_CFO,1,1) < '5' .AND. F3_FORMUL=='S'"
  302. Elseif MV_PAR04==2
  303. cWhere := "SubStr(F3_CFO,1,1) >= '5'"
  304. Else
  305. cWhere := ".T."
  306. EndIf
  307. If lSdoc
  308. cSerId := (cAliasSF3)->F3_SDOC
  309. Else
  310. cSerId := (cAliasSF3)->F3_SERIE
  311. EndIf
  312. While !Eof() .And. xFilial("SF3") == (cAliasSF3)->F3_FILIAL .And.;
  313. cSerId == MV_PAR03 .And.;
  314. (cAliasSF3)->F3_NFISCAL >= MV_PAR01 .And.;
  315. (cAliasSF3)->F3_NFISCAL <= MV_PAR02
  316. dbSelectArea(cAliasSF3)
  317. If Empty((cAliasSF3)->F3_DTCANC) .And. &cWhere //.And. AModNot((cAliasSF3)->F3_ESPECIE)=="55"
  318. If (SubStr((cAliasSF3)->F3_CFO,1,1)>="5" .Or. (cAliasSF3)->F3_FORMUL=="S") .And. aScan(aNotas,{|x| x[4]+x[5]+x[6]+x[7]==(cAliasSF3)->F3_SERIE+(cAliasSF3)->F3_NFISCAL+(cAliasSF3)->F3_CLIEFOR+(cAliasSF3)->F3_LOJA})==0
  319. aadd(aNotas,{})
  320. aadd(Atail(aNotas),.F.)
  321. aadd(Atail(aNotas),IIF((cAliasSF3)->F3_CFO<"5","E","S"))
  322. aadd(Atail(aNotas),(cAliasSF3)->F3_ENTRADA)
  323. aadd(Atail(aNotas),(cAliasSF3)->F3_SERIE)
  324. aadd(Atail(aNotas),(cAliasSF3)->F3_NFISCAL)
  325. aadd(Atail(aNotas),(cAliasSF3)->F3_CLIEFOR)
  326. aadd(Atail(aNotas),(cAliasSF3)->F3_LOJA)
  327. EndIf
  328. EndIf
  329. dbSelectArea(cAliasSF3)
  330. dbSkip()
  331. If lSdoc
  332. cSerId := (cAliasSF3)->F3_SDOC
  333. Else
  334. cSerId := (cAliasSF3)->F3_SERIE
  335. EndIf
  336. If lEnd
  337. Exit
  338. EndIf
  339. If (cAliasSF3)->(Eof())
  340. aAreaSF3 := (cAliasSF3)->(GetArea())
  341. if lUsaColab
  342. //Tratamento do TOTVS Colabora誽o
  343. aXml := GetXMLColab(aNotas,@cModalidade,lUsaColab)
  344. else
  345. aXml := GetXML(cIdEnt,aNotas,@cModalidade, if( valtype(oDanfe) == "O", oDanfe:lInJob, nil ) )
  346. endif
  347. nLenNotas := Len(aNotas)
  348. For nX := 1 To nLenNotas
  349. If !Empty(aXML[nX][2])
  350. If !Empty(aXml[nX])
  351. cAutoriza := aXML[nX][1]
  352. cCodAutDPEC := aXML[nX][5]
  353. cCodRetNFE := aXML[nX][9]
  354. cCodRetSF3 := iif ( Empty (cCodAutDPEC),cCodRetNFE,cCodAutDPEC )
  355. cMsgSF3 := iif ( aXML[nX][10]<> Nil ,aXML[nX][10],"")
  356. Else
  357. cAutoriza := ""
  358. cCodAutDPEC := ""
  359. cCodRetNFE := ""
  360. cCodRetSF3 := ""
  361. cMsgSF3 := ""
  362. EndIf
  363. If (!Empty(cAutoriza) .Or. !Empty(cCodAutDPEC) .Or. Alltrim(aXML[nX][8]) $ "2,5") .And. !cCodRetNFE $ RetCodDene()
  364. If aNotas[nX][02]=="E"
  365. DBClearFilter()
  366. dbSelectArea("SF1")
  367. SF1->(dbSetOrder(1)) // F1_FILIAL+F1_DOC+F1_SERIE+F1_FORNECE+F1_LOJA+F1_TIPO
  368. If SF1->(DbSeek(xFilial("SF1")+aNotas[nX][05]+aNotas[nX][04]+aNotas[nX][06]+aNotas[nX][07])) .And. SF1->(FieldPos("F1_FIMP")) <> 0 .And. Alltrim(aXML[nX][8])$"1,3,4,6,7" .or. ( Alltrim(aXML[nX][8]) $ "2,5" .And. !Empty(cAutoriza) )
  369. If SF1->F1_FORMUL == "S"
  370. if RecLock("SF1")
  371. If !SF1->F1_FIMP$"D"
  372. SF1->F1_FIMP := "S"
  373. EndIf
  374. If SF1->(FieldPos("F1_CHVNFE")) > 0
  375. SF1->F1_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  376. EndIf
  377. If SF1->(FieldPos("F1_HAUTNFE")) > 0 .and. SF1->(FieldPos("F1_DAUTNFE")) > 0 //grava a data e hora de autoriza誽o da NFe
  378. SF1->F1_HAUTNFE := IIF(!Empty(aXML[nX][6]),SUBSTR(aXML[nX][6],1,5),"")
  379. SF1->F1_DAUTNFE := IIF(!Empty(aXML[nX][7]),aXML[nX][7],SToD(" / / "))
  380. EndIf
  381. SF1->(MsUnlock())
  382. endif
  383. // Atualiza誽o dos campos da Tabela GFE
  384. if FindFunction("GFECHVNFE") .and. lMVGfe // Integra誽o com o GFE
  385. if SF1->F1_TIPO $ "D|B" // Documento com tipo de devolu誽o ou "Utilizar Fornecedor"
  386. dbSelectArea("SA1")
  387. dbSetOrder(1)
  388. If SA1->(DbSeek(xFilial("SA1")+ SF1->F1_FORNECE + SF1->F1_LOJA))
  389. GFECHVNFE(xFilial("SF1"),SF1->F1_SERIE,SF1->F1_DOC,SF1->F1_TIPO,SA1->A1_CGC,SA1->A1_COD,SA1->A1_LOJA,SF1->F1_CHVNFE,SF1->F1_FIMP, "E")
  390. Endif
  391. else
  392. dbSelectArea("SA2")
  393. dbSetOrder(1)
  394. If SA2->(MsSeek(xFilial("SA2")+ SF1->F1_FORNECE + SF1->F1_LOJA,.T.))
  395. GFECHVNFE(xFilial("SF1"),SF1->F1_SERIE,SF1->F1_DOC,SF1->F1_TIPO,SA2->A2_CGC,SA2->A2_COD,SA2->A2_LOJA,SF1->F1_CHVNFE,SF1->F1_FIMP, "E")
  396. endif
  397. endif
  398. endif
  399. endif
  400. EndIf
  401. Else
  402. dbSelectArea("SF2")
  403. dbSetOrder(1)
  404. If MsSeek(xFilial("SF2")+aNotas[nX][05]+aNotas[nX][04]+aNotas[nX][06]+aNotas[nX][07]) .And. Alltrim(aXML[nX][8])$"1,3,4,6,7" .Or. ( Alltrim(aXML[nX][8]) $ "2,5" .And. !Empty(cAutoriza) )
  405. RecLock("SF2")
  406. If !SF2->F2_FIMP$"D"
  407. SF2->F2_FIMP := "S"
  408. EndIf
  409. If SF2->(FieldPos("F2_CHVNFE")) > 0
  410. SF2->F2_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  411. EndIf
  412. If SF2->(FieldPos("F2_HAUTNFE")) > 0 .and. SF2->(FieldPos("F2_DAUTNFE")) > 0 //grava a data e hota de autoriza誽o da NFe
  413. SF2->F2_HAUTNFE := IIF(!Empty(aXML[nX][6]),SUBSTR(aXML[nX][6],1,5),"")
  414. SF2->F2_DAUTNFE := IIF(!Empty(aXML[nX][7]),aXML[nX][7],SToD(" / / "))
  415. EndIf
  416. MsUnlock()
  417. // Grava quando a nota for Transferencia entre filiais
  418. IF SF2->(FieldPos("F2_FILDEST"))> 0 .And. SF2->(FieldPos("F2_FORDES"))> 0 .And.SF2->(FieldPos("F2_LOJADES"))> 0 .And.SF2->(FieldPos("F2_FORMDES"))> 0 .And. !EMPTY (SF2->F2_FORDES)
  419. SF1->(dbSetOrder(1))
  420. If SF1->(MsSeek(SF2->F2_FILDEST+SF2->F2_DOC+SF2->f2_SERIE+SF2->F2_FORDES+SF2->F2_LOJADES+SF2->F2_FORMDES))
  421. If EMPTY(SF1->F1_CHVNFE)
  422. RecLock("SF1",.F.)
  423. SF1->F1_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  424. MsUnlock()
  425. EndIf
  426. Endif
  427. EndiF
  428. ElseIf MsSeek(xFilial("SF2")+aNotas[nX][05]+aNotas[nX][04]+aNotas[nX][06]+aNotas[nX][07]) .And. Alltrim(aXML[nX][8])$"1,3,4,6" .Or. ( Alltrim(aXML[nX][8]) $ "2,5" .And. cModalidade == "7" ) // Contingencia FSDA
  429. RecLock("SF2")
  430. SF2->F2_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  431. MsUnlock()
  432. EndIf
  433. // Atualiza誽o dos campos da Tabela GFE
  434. if FindFunction("GFECHVNFE") .and. lMVGfe // Integra誽o com o GFE
  435. if SF2->F2_TIPO $ "D|B" // Documento com tipo de devolu誽o ou "Utilizar Fornecedor"
  436. dbSelectArea("SA2")
  437. dbSetOrder(1)
  438. If SA2->(MsSeek(xFilial("SA2")+ SF2->F2_CLIENTE + SF2->F2_LOJA,.T.))
  439. GFECHVNFE(xFilial("SF2"),SF2->F2_SERIE,SF2->F2_DOC,SF2->F2_TIPO,SA2->A2_CGC,SA2->A2_COD,SA2->A2_LOJA,SF2->F2_CHVNFE,SF2->F2_FIMP,"S")
  440. EndIf
  441. else
  442. dbSelectArea("SA1")
  443. dbSetOrder(1)
  444. If SA1->(MsSeek(xFilial("SA1")+ SF2->F2_CLIENTE + SF2->F2_LOJA,.T.))
  445. GFECHVNFE(xFilial("SF2"),SF2->F2_SERIE,SF2->F2_DOC,SF2->F2_TIPO,SA1->A1_CGC,SA1->A1_COD,SA1->A1_LOJA,SF2->F2_CHVNFE,SF2->F2_FIMP,"S")
  446. Endif
  447. endif
  448. endif
  449. If ExistFunc("STFMMd5NS") //Fun誽o do Controle de Lojas - Legisla誽o PAF-ECF
  450. STFMMd5NS()
  451. EndIf
  452. EndIf
  453. dbSelectArea("SFT")
  454. dbSetOrder(1)
  455. If SFT->(FieldPos("FT_CHVNFE"))>0
  456. cChaveSFT := (xFilial("SFT")+aNotas[nX][02]+aNotas[nX][04]+aNotas[nX][05]+aNotas[nX][06]+aNotas[nX][07])
  457. If MsSeek(cChaveSFT)
  458. Do While !(cAliasSFT)->(Eof ()) .And.;
  459. cChaveSFT==(cAliasSFT)->FT_FILIAL+(cAliasSFT)->FT_TIPOMOV+(cAliasSFT)->FT_SERIE+(cAliasSFT)->FT_NFISCAL+(cAliasSFT)->FT_CLIEFOR+(cAliasSFT)->FT_LOJA
  460. If (cAliasSFT)->FT_TIPOMOV $"S" .Or. ((cAliasSFT)->FT_TIPOMOV $"E" .And. (cAliasSFT)->FT_FORMUL=='S')
  461. RecLock("SFT")
  462. SFT->FT_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  463. MsUnLock()
  464. //Array criado para gravar o SF3 no final, pois a tabela SF3 pode estah em processamento quando se trata de DBF ou AS/400.
  465. If aScan(aGrvSF3,{|aX|aX[1]+aX[2]+aX[3]+aX[4]+aX[5]==(cAliasSFT)->(FT_SERIE+FT_NFISCAL+FT_CLIEFOR+FT_LOJA+FT_IDENTF3)})==0
  466. aAdd(aGrvSF3, {(cAliasSFT)->FT_SERIE,(cAliasSFT)->FT_NFISCAL,(cAliasSFT)->FT_CLIEFOR,(cAliasSFT)->FT_LOJA,(cAliasSFT)->FT_IDENTF3,(cAliasSFT)->FT_CHVNFE,cAutoriza,cCodRetSF3,cMsgSF3})
  467. EndIf
  468. EndIf
  469. DbSkip()
  470. EndDo
  471. EndIf
  472. EndIf
  473. // Grava quando a nota for Transferencia entre filiais
  474. IF SF1->(!EOF()) .And. SF2->(FieldPos("F2_FILDEST"))> 0 .And. SF2->(FieldPos("F2_FORDES"))> 0 .And.SF2->(FieldPos("F2_LOJADES"))> 0 .And.SF2->(FieldPos("F2_FORMDES"))> 0 .And. !EMPTY (SF2->F2_FORDES)
  475. SFT->(dbSetOrder(1))
  476. cChaveSFT := SF1->F1_FILIAL+"E"+SF1->F1_SERIE+SF1->F1_DOC+SF1->F1_FORNECE+SF1->F1_LOJA
  477. If SFT->(MsSeek(cChaveSFT))
  478. Do While cChaveSFT == SFT->FT_FILIAL+"E"+SFT->FT_SERIE+SFT->FT_NFISCAL+SFT->FT_CLIEFOR+SFT->FT_LOJA .And. !SFT->(Eof())
  479. RecLock("SFT")
  480. SFT->FT_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  481. MsUnLock()
  482. //Array criado para gravar o SF3 no final, pois a tabela SF3 pode estah em processamento quando se trata de DBF ou AS/400.
  483. If aScan(aGrvSF3,{|aX|aX[1]+aX[2]+aX[3]+aX[4]+aX[5]==(cAliasSFT)->(FT_SERIE+FT_NFISCAL+FT_CLIEFOR+FT_LOJA+FT_IDENTF3)})==0
  484. aAdd(aGrvSF3, {(cAliasSFT)->FT_SERIE,(cAliasSFT)->FT_NFISCAL,(cAliasSFT)->FT_CLIEFOR,(cAliasSFT)->FT_LOJA,(cAliasSFT)->FT_IDENTF3,(cAliasSFT)->FT_CHVNFE,cAutoriza,cCodRetSF3,cMsgSF3})
  485. EndIf
  486. SFT->(dbSkip())
  487. EndDo
  488. EndIf
  489. EndIf
  490. cAviso := ""
  491. cErro := ""
  492. //-----------------------------------------------------------------------
  493. // Validacao para quando for TOTVS Colaboracao, pois o retorno do
  494. // xml sera o que vem da Neogrid, e nao o que enviamos.
  495. // Para que nao fosse alterado totalmente a estrutura do Objeto,
  496. // atribui a variavel oRetNF o retorno, e abaixo identifico se possui
  497. // o objeto NFEPROC, caso tenha, deixarei na mesma estrutura do legado.
  498. // @autor: Douglas Parreja @since 30/10/2017
  499. //-----------------------------------------------------------------------
  500. oRetNF := XmlParser(aXML[nX][2],"_",@cAviso,@cErro)
  501. if ValAtrib("oRetNF:_NFEPROC") <> "U"
  502. oNfe := WSAdvValue( oRetNF,"_NFEPROC","string",NIL,NIL,NIL,NIL,NIL)
  503. else
  504. oNfe := oRetNF
  505. endif
  506. oNfeDPEC := XmlParser(aXML[nX][4],"_",@cAviso,@cErro)
  507. If Empty(cAviso) .And. Empty(cErro)
  508. ImpDet(@oDanfe,oNFe,cAutoriza,cModalidade,oNfeDPEC,cCodAutDPEC,aXml[nX][6],aXml[nX][7],aNotas[nX],lImpSimp,nTipo,aXml[nX][11])
  509. lExistNfe := .T.
  510. EndIf
  511. oNfe := nil
  512. oNfeDPEC := nil
  513. ElseIf lIsLoja
  514. /* Se o Codigo de Retorno da SEFAZ esta preenchido e for maior que 200, entao houve rejeicao por parte da SEFAZ */
  515. If !Empty(aXML[nX][9]) .AND. Val(aXML[nX][9]) > 200
  516. RecLock("SF2",.F.)
  517. Replace SF2->F2_FIMP with "N"
  518. SF2->( MsUnlock() )
  519. cNaoAut := "A impress緌 do DANFE referente ao Doc/S廨ie " + SF2->F2_DOC + "/" + SF2->F2_SERIE + " N鬃 FOI REALIZADA pelo motivo abaixo:"
  520. cNaoAut += CRLF + "[" + aXML[nX][9] + ' - ' + aXML[nX][10] + "]"
  521. cNaoAut += CRLF + "Se poss癉el, fa蓷 o ajuste e retransmita a NF-e."
  522. if (if(valtype(oDanfe) == "O", !oDanfe:lInJob, .T.))
  523. Aviso( "SPED", cNaoAut, {"Continuar"}, 3 )
  524. endif
  525. EndIf
  526. Else
  527. cNaoAut += SubStr(aNotas[nX][04],1,3)+aNotas[nX][05]+CRLF
  528. EndIf
  529. EndIf
  530. Next nX
  531. aNotas := {}
  532. RestArea(aAreaSF3)
  533. DelClassIntF()
  534. EndIf
  535. EndDo
  536. If !lQuery
  537. DBClearFilter()
  538. Ferase(cIndex+OrdBagExt())
  539. EndIf
  540. If !lIsLoja .AND. !Empty(cNaoAut) .and. if( valtype(oDanfe) == "O", !oDanfe:lInJob, .T. )
  541. Aviso("SPED","As seguintes notas n緌 foram autorizadas: "+CRLF+CRLF+cNaoAut,{"Ok"},3)
  542. EndIf
  543. ElseIf lImpDir
  544. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  545. //袍ratamento para quando o parametro MV_IMPDIR esteja �
  546. //蚵abilitado, neste caso n緌 ser� feita a impress緌 conforme �
  547. //袒egistros no SF3, e sim buscando XML diretamente do �
  548. //逕ebService, e caso exista ser� impresso. �
  549. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  550. nLenarray := Val(Alltrim(MV_PAR02)) - Val(Alltrim(MV_PAR01))
  551. nCursor := 1
  552. While !lBreak .And. nLenarray >= 0
  553. If lFirst
  554. If MV_PAR04==1
  555. cxFilial := xFilial("SF1")
  556. cFrom := "%"+RetSqlName("SF1")+" SF1 %"
  557. If lSdoc
  558. cCampos += "%SF1.F1_FILIAL FILIAL, SF1.F1_DOC DOC, SF1.F1_SERIE SERIE, SF1.F1_SDOC SDOC%"
  559. cSerie := Padr(MV_PAR03,TamSx3("F1_SDOC")[1])
  560. cWhere := "%SF1.D_E_L_E_T_= '' AND SF1.F1_FILIAL ='"+xFilial("SF1")+"' AND SF1.F1_DOC <='"+MV_PAR02+ "' AND SF1.F1_DOC >='" + MV_PAR01 + "' AND SF1.F1_SDOC ='"+ cSerie + "' AND SF1.F1_ESPECIE = 'SPED' AND SF1.F1_FORMUL = 'S' ORDER BY SF1.F1_DOC%"
  561. Else
  562. cCampos += "%SF1.F1_FILIAL FILIAL, SF1.F1_DOC DOC, SF1.F1_SERIE SERIE%"
  563. cSerie := Padr(MV_PAR03,TamSx3("F2_SERIE")[1])
  564. cWhere := "%SF1.D_E_L_E_T_= '' AND SF1.F1_FILIAL ='"+xFilial("SF1")+"' AND SF1.F1_DOC <='"+MV_PAR02+ "' AND SF1.F1_DOC >='" + MV_PAR01 + "' AND SF1.F1_SERIE ='"+ cSerie + "' AND SF1.F1_ESPECIE = 'SPED' AND SF1.F1_FORMUL = 'S' ORDER BY SF1.F1_DOC%"
  565. Endif
  566. ElseIf MV_PAR04==2
  567. cxFilial := xFilial("SF2")
  568. cFrom := "%"+RetSqlName("SF2")+" SF2 %"
  569. If lSdoc
  570. cCampos += "%SF2.F2_FILIAL FILIAL, SF2.F2_DOC DOC, SF2.F2_SERIE SERIE, SF2.F2_SDOC SDOC%"
  571. cSerie := Padr(MV_PAR03,TamSx3("F2_SDOC")[1])
  572. cWhere := "%SF2.D_E_L_E_T_= '' AND SF2.F2_FILIAL ='"+xFilial("SF2")+"' AND SF2.F2_DOC <='"+MV_PAR02+ "' AND SF2.F2_DOC >='" + MV_PAR01 + "' AND SF2.F2_SDOC ='"+ cSerie + "' AND SF2.F2_ESPECIE IN ('SPED','NFCE') ORDER BY SF2.F2_DOC%"
  573. Else
  574. cCampos += "%SF2.F2_FILIAL FILIAL, SF2.F2_DOC DOC, SF2.F2_SERIE SERIE%"
  575. cSerie := Padr(MV_PAR03,TamSx3("F2_SERIE")[1])
  576. cWhere := "%SF2.D_E_L_E_T_= '' AND SF2.F2_FILIAL ='"+xFilial("SF2")+"' AND SF2.F2_DOC <='"+MV_PAR02+ "' AND SF2.F2_DOC >='" + MV_PAR01 + "' AND SF2.F2_SERIE ='"+ cSerie + "' AND SF2.F2_ESPECIE IN ('SPED','NFCE') AND SF2.F2_EMISSAO >= '" + %exp:DtoS(MV_PAR07)% + "' AND SF2.F2_EMISSAO <= '" + %exp:DtoS(MV_PAR08)% + "' ORDER BY SF2.F2_DOC%"
  577. Endif
  578. EndIf
  579. EndIf
  580. cAliasSFX := GetNextAlias()
  581. lQuery := .T.
  582. lFirst := .F.
  583. BeginSql Alias cAliasSFX
  584. SELECT
  585. %Exp:cCampos%
  586. FROM
  587. %Exp:cFrom%
  588. WHERE
  589. %Exp:cWhere%
  590. EndSql
  591. nTotalReg := Contar(cAliasSFX, "!EOF()")
  592. (cAliasSFX)->(DBGoTop())
  593. If lSdoc
  594. cSerId := (cAliasSFX)->SDOC
  595. Else
  596. cSerId := (cAliasSFX)->SERIE
  597. EndIf
  598. If Empty(cSerId) .Or. lEnd
  599. lBreak :=.T.
  600. EndIf
  601. While !Eof() .And. !lBreak .And. ;
  602. cxFilial == (cAliasSFX)->FILIAL .And.;
  603. cSerId == MV_PAR03 .And.;
  604. (cAliasSFX)->DOC >= MV_PAR01 .And.;
  605. (cAliasSFX)->DOC <= MV_PAR02
  606. aNotas := {}
  607. For nx:=1 To 20
  608. aadd(aNotas,{})
  609. aAdd(Atail(aNotas),.F.)
  610. aadd(Atail(aNotas),IIF(MV_PAR04==1,"E","S"))
  611. aAdd(Atail(aNotas),"")
  612. aadd(Atail(aNotas),(cAliasSFX)->SERIE)
  613. aAdd(Atail(aNotas),(cAliasSFX)->DOC)
  614. aadd(Atail(aNotas),"")
  615. aadd(Atail(aNotas),"")
  616. If ( (cAliasSFX)->(Eof()) ) .OR. (nCursor >= nTotalReg)
  617. lBreak :=.T.
  618. nx:=20
  619. EndIF
  620. nCursor++
  621. ( cAliasSFX )->( DbSkip() )
  622. Next nX
  623. aXml:={}
  624. if lUsaColab
  625. //Tratamento do TOTVS Colabora誽o
  626. aXml := GetXMLColab(aNotas,@cModalidade,lUsaColab)
  627. else
  628. aXml := GetXML(cIdEnt,aNotas,@cModalidade, if( valtype(oDanfe) == "O", oDanfe:lInJob, nil ))
  629. endif
  630. nLenNotas := Len(aNotas)
  631. For nx :=1 To nLenNotas
  632. dbSelectArea("SFT")
  633. dbSetOrder(1)
  634. cChaveSFT := (xFilial("SFT")+aNotas[nX][02]+aNotas[nX][04]+aNotas[nX][05])
  635. MsSeek(cChaveSFT)
  636. If ( !Empty(aXML[nX][2]) .AND. (AllTrim((cAliasSFT)->FT_ESPECIE)$'SPED,NFCE') .Or. (lImpDir .And. !Empty(aXML[nX][2])) ) .And. Empty((cAliasSFT)->FT_DTCANC)
  637. If !Empty(aXml[nX])
  638. cAutoriza := aXML[nX][1]
  639. cCodAutDPEC := aXML[nX][5]
  640. cCodRetNFE := aXML[nX][9]
  641. cCodRetSF3 := iif ( Empty (cCodAutDPEC),cCodRetNFE,cCodAutDPEC )
  642. cMsgSF3 := iif ( aXML[nX][10]<> Nil ,aXML[nX][10],"")
  643. Else
  644. cAutoriza := ""
  645. cCodAutDPEC := ""
  646. cCodRetNFE := ""
  647. cCodRetSF3 := ""
  648. cMsgSF3 := ""
  649. EndIf
  650. cAviso := ""
  651. cErro := ""
  652. //-----------------------------------------------------------------------
  653. // Validacao para quando for TOTVS Colaboracao, pois o retorno do
  654. // xml sera o que vem da Neogrid, e nao o que enviamos.
  655. // Para que nao fosse alterado totalmente a estrutura do Objeto,
  656. // atribui a variavel oRetNF o retorno, e abaixo identifico se possui
  657. // o objeto NFEPROC, caso tenha, deixarei na mesma estrutura do legado.
  658. // @autor: Douglas Parreja @since 30/10/2017
  659. //-----------------------------------------------------------------------
  660. oRetNF := XmlParser(aXML[nX][2],"_",@cAviso,@cErro)
  661. if ValAtrib("oRetNF:_NFEPROC") <> "U"
  662. oNfe := WSAdvValue( oRetNF,"_NFEPROC","string",NIL,NIL,NIL,NIL,NIL)
  663. else
  664. oNfe := oRetNF
  665. endif
  666. oNfeDPEC := XmlParser(aXML[nX][4],"_",@cAviso,@cErro)
  667. //(se possui protocolo ou protocolo dpec ou a modalidade de transmissao for 2 ou 5) E codigo retorno nao esta na lista
  668. If ( !Empty(cAutoriza) .Or. !Empty(cCodAutDPEC) .Or. Alltrim(aXML[nX][8]) $ "2,5" ) .And. !cCodRetNFE $ RetCodDene()
  669. If aNotas[nX][02]=="E" .And. MV_PAR04==1 .And. (oNfe:_NFE:_INFNFE:_IDE:_TPNF:TEXT=="0")
  670. dbSelectArea("SF1")
  671. dbSetOrder(1)
  672. If MsSeek(xFilial("SF1")+aNotas[nX][05]+aNotas[nX][04]) .And. SF1->(FieldPos("F1_FIMP"))<>0 .And. Alltrim(aXML[nX][8])$"1,3,4,6" .or. ( Alltrim(aXML[nX][8]) $ "2,5" .And. !Empty(cAutoriza) )
  673. Do While !Eof() .And. SF1->F1_DOC==aNotas[nX][05] .And. SF1->F1_SERIE==aNotas[nX][04]
  674. If SF1->F1_FORMUL == "S"
  675. if RecLock("SF1")
  676. If !SF1->F1_FIMP$"D"
  677. SF1->F1_FIMP := "S"
  678. EndIf
  679. If SF1->(FieldPos("F1_CHVNFE"))>0
  680. SF1->F1_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  681. EndIf
  682. If SF1->(FieldPos("F1_HAUTNFE")) > 0 .and. SF1->(FieldPos("F1_DAUTNFE")) > 0 //grava a data e hora de autoriza誽o da NFe
  683. SF1->F1_HAUTNFE := IIF(!Empty(aXML[nX][6]),SUBSTR(aXML[nX][6],1,5),"")
  684. SF1->F1_DAUTNFE := IIF(!Empty(aXML[nX][7]),aXML[nX][7],SToD(" / / "))
  685. EndIf
  686. SF1->(MsUnlock())
  687. endif
  688. // Atualiza誽o dos campos da Tabela GFE
  689. if FindFunction("GFECHVNFE") .and. lMVGfe // Integra誽o com o GFE
  690. if SF1->F1_TIPO $ "D|B" // Documento com tipo de devolu誽o ou "Utilizar Fornecedor"
  691. dbSelectArea("SA1")
  692. dbSetOrder(1)
  693. If SA1->(DbSeek(xFilial("SA1")+ SF1->F1_FORNECE + SF1->F1_LOJA))
  694. GFECHVNFE(xFilial("SF1"),SF1->F1_SERIE,SF1->F1_DOC,SF1->F1_TIPO,SA1->A1_CGC,SA1->A1_COD,SA1->A1_LOJA,SF1->F1_CHVNFE,SF1->F1_FIMP, "E")
  695. Endif
  696. else
  697. dbSelectArea("SA2")
  698. dbSetOrder(1)
  699. If SA2->(MsSeek(xFilial("SA2")+ SF1->F1_FORNECE + SF1->F1_LOJA,.T.))
  700. GFECHVNFE(xFilial("SF1"),SF1->F1_SERIE,SF1->F1_DOC,SF1->F1_TIPO,SA2->A2_CGC,SA2->A2_COD,SA2->A2_LOJA,SF1->F1_CHVNFE,SF1->F1_FIMP, "E")
  701. endif
  702. endif
  703. endif
  704. EndIf
  705. SF1->(DbSkip())
  706. EndDo
  707. EndIf
  708. ElseIf aNotas[nX][02]=="S" .And. MV_PAR04==2 .And. (oNfe:_NFE:_INFNFE:_IDE:_TPNF:TEXT=="1")
  709. dbSelectArea("SF2")
  710. dbSetOrder(1)
  711. If MsSeek(xFilial("SF2")+PADR(aNotas[nX][05],TAMSX3("F2_DOC")[1])+aNotas[nX][04]) .And. Alltrim(aXML[nX][8])$"1,3,4,6,7" .Or. ( Alltrim(aXML[nX][8]) $ "2,5" .And. !Empty(cAutoriza) )
  712. RecLock("SF2")
  713. If !SF2->F2_FIMP$"D"
  714. SF2->F2_FIMP := "S"
  715. EndIf
  716. If SF2->(FieldPos("F2_CHVNFE"))>0
  717. SF2->F2_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  718. EndIf
  719. If SF2->(FieldPos("F2_HAUTNFE")) > 0 .and. SF2->(FieldPos("F2_DAUTNFE")) > 0 //grava a data e hota de autoriza誽o da NFe
  720. SF2->F2_HAUTNFE := IIF(!Empty(aXML[nX][6]),SUBSTR(aXML[nX][6],1,5),"")
  721. SF2->F2_DAUTNFE := IIF(!Empty(aXML[nX][7]),aXML[nX][7],SToD(" / / "))
  722. EndIf
  723. MsUnlock()
  724. // Grava quando a nota for Transferencia entre filiais
  725. IF SF2->(FieldPos("F2_FILDEST"))> 0 .And. SF2->(FieldPos("F2_FORDES"))> 0 .And.SF2->(FieldPos("F2_LOJADES"))> 0 .And.SF2->(FieldPos("F2_FORMDES"))> 0 .And. !EMPTY (SF2->F2_FORDES)
  726. SF1->(dbSetOrder(1))
  727. If SF1->(MsSeek(SF2->F2_FILDEST+SF2->F2_DOC+SF2->f2_SERIE+SF2->F2_FORDES+SF2->F2_LOJADES+SF2->F2_FORMDES))
  728. If EMPTY(SF1->F1_CHVNFE)
  729. RecLock("SF1",.F.)
  730. SF1->F1_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  731. MsUnlock()
  732. EndIf
  733. Endif
  734. EndiF
  735. EndIf
  736. // Atualiza誽o dos campos da Tabela GFE
  737. if FindFunction("GFECHVNFE") .and. lMVGfe // Integra誽o com o GFE
  738. if SF2->F2_TIPO $ "D|B" // Documento com tipo de devolu誽o ou "Utilizar Fornecedor"
  739. dbSelectArea("SA2")
  740. dbSetOrder(1)
  741. If SA2->(MsSeek(xFilial("SA2")+ SF2->F2_CLIENTE + SF2->F2_LOJA,.T.))
  742. GFECHVNFE(xFilial("SF2"),SF2->F2_SERIE,SF2->F2_DOC,SF2->F2_TIPO,SA2->A2_CGC,SA2->A2_COD,SA2->A2_LOJA,SF2->F2_CHVNFE,SF2->F2_FIMP, "S")
  743. EndIf
  744. else
  745. dbSelectArea("SA1")
  746. dbSetOrder(1)
  747. If SA1->(MsSeek(xFilial("SA1")+ SF2->F2_CLIENTE + SF2->F2_LOJA,.T.))
  748. GFECHVNFE(xFilial("SF2"),SF2->F2_SERIE,SF2->F2_DOC,SF2->F2_TIPO,SA1->A1_CGC,SA1->A1_COD,SA1->A1_LOJA,SF2->F2_CHVNFE,SF2->F2_FIMP, "S")
  749. Endif
  750. endif
  751. endif
  752. If ExistFunc("STFMMd5NS") //Fun誽o do Controle de Lojas - Legisla誽o PAF-ECF
  753. STFMMd5NS()
  754. EndIf
  755. EndIf
  756. dbSelectArea("SFT")
  757. dbSetOrder(1)
  758. If SFT->(FieldPos("FT_CHVNFE"))>0
  759. cChaveSFT := (xFilial("SFT")+aNotas[nX][02]+aNotas[nX][04]+padr(aNotas[nX][05],TamSx3("FT_NFISCAL")[1],""))
  760. If MsSeek(cChaveSFT)
  761. Do While !(cAliasSFT)->(Eof ()) .And.;
  762. cChaveSFT==(cAliasSFT)->FT_FILIAL+(cAliasSFT)->FT_TIPOMOV+(cAliasSFT)->FT_SERIE+(cAliasSFT)->FT_NFISCAL
  763. If (cAliasSFT)->FT_TIPOMOV $"S" .Or. ((cAliasSFT)->FT_TIPOMOV $"E" .And. (cAliasSFT)->FT_FORMUL=='S')
  764. RecLock("SFT")
  765. SFT->FT_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  766. MsUnLock()
  767. //Array criado para gravar o SF3 no final, pois a tabela SF3 pode estah em processamento quando se trata de DBF ou AS/400.
  768. If aScan(aGrvSF3,{|aX|aX[1]+aX[2]+aX[3]+aX[4]+aX[5]==(cAliasSFT)->(FT_SERIE+FT_NFISCAL+FT_CLIEFOR+FT_LOJA+FT_IDENTF3)})==0
  769. aAdd(aGrvSF3, {(cAliasSFT)->FT_SERIE,(cAliasSFT)->FT_NFISCAL,(cAliasSFT)->FT_CLIEFOR,(cAliasSFT)->FT_LOJA,(cAliasSFT)->FT_IDENTF3,(cAliasSFT)->FT_CHVNFE,cAutoriza,cCodRetSF3,cMsgSF3})
  770. EndIf
  771. EndIf
  772. DbSkip()
  773. EndDo
  774. Endif
  775. EndIf
  776. // Grava quando a nota for Transferencia entre filiais
  777. IF SF1->(!EOF()) .And. SF2->(FieldPos("F2_FILDEST"))> 0 .And. SF2->(FieldPos("F2_FORDES"))> 0 .And.SF2->(FieldPos("F2_LOJADES"))> 0 .And.SF2->(FieldPos("F2_FORMDES"))> 0 .And. !EMPTY (SF2->F2_FORDES)
  778. SFT->(dbSetOrder(1))
  779. cChaveSFT := SF1->F1_FILIAL+"E"+SF1->F1_SERIE+SF1->F1_DOC+SF1->F1_FORNECE+SF1->F1_LOJA
  780. If SFT->(MsSeek(cChaveSFT))
  781. Do While cChaveSFT == SFT->FT_FILIAL+"E"+SFT->FT_SERIE+SFT->FT_NFISCAL+SFT->FT_CLIEFOR+SFT->FT_LOJA .And. !SFT->(Eof())
  782. RecLock("SFT")
  783. SFT->FT_CHVNFE := SubStr(NfeIdSPED(aXML[nX][2],"Id"),4)
  784. MsUnLock()
  785. //Array criado para gravar o SF3 no final, pois a tabela SF3 pode estah em processamento quando se trata de DBF ou AS/400.
  786. If aScan(aGrvSF3,{|aX|aX[1]+aX[2]+aX[3]+aX[4]+aX[5]==(cAliasSFT)->(FT_SERIE+FT_NFISCAL+FT_CLIEFOR+FT_LOJA+FT_IDENTF3)})==0
  787. aAdd(aGrvSF3, {(cAliasSFT)->FT_SERIE,(cAliasSFT)->FT_NFISCAL,(cAliasSFT)->FT_CLIEFOR,(cAliasSFT)->FT_LOJA,(cAliasSFT)->FT_IDENTF3,(cAliasSFT)->FT_CHVNFE,cAutoriza,cCodRetSF3,cMsgSF3})
  788. EndIf
  789. SFT->(dbSkip())
  790. EndDo
  791. EndIf
  792. EndIf
  793. //-------------------------------
  794. If Empty(cAviso) .And. Empty(cErro) .And. MV_PAR04==1 .And. (oNfe:_NFE:_INFNFE:_IDE:_TPNF:TEXT=="0")
  795. ImpDet(@oDanfe,oNFe,cAutoriza,cModalidade,oNfeDPEC,cCodAutDPEC,aXml[nX][6],aXml[nX][7],aNotas[nX],lImpSimp,,aXml[nx][11])
  796. lExistNfe := .T.
  797. ElseIf Empty(cAviso) .And. Empty(cErro) .And. MV_PAR04==2 .And. (oNfe:_NFE:_INFNFE:_IDE:_TPNF:TEXT=="1")
  798. ImpDet(@oDanfe,oNFe,cAutoriza,cModalidade,oNfeDPEC,cCodAutDPEC,aXml[nX][6],aXml[nX][7],aNotas[nX],lImpSimp,,aXml[nx][11])
  799. lExistNfe := .T.
  800. EndIf
  801. ElseIf lIsLoja
  802. /* Se o Codigo de Retorno da SEFAZ esta preenchido e for maior que 200, entao houve rejeicao por parte da SEFAZ */
  803. If !Empty(aXML[nX][9]) .AND. Val(aXML[nX][9]) > 200
  804. RecLock("SF2",.F.)
  805. Replace SF2->F2_FIMP with "N"
  806. SF2->( MsUnlock() )
  807. cNaoAut := "A impress緌 do DANFE referente ao Doc/S廨ie " + SF2->F2_DOC + "/" + SF2->F2_SERIE + " N鬃 FOI REALIZADA pelo motivo abaixo:"
  808. cNaoAut += CRLF + "[" + aXML[nX][9] + ' - ' + aXML[nX][10] + "]"
  809. cNaoAut += CRLF + "Se poss癉el, fa蓷 o ajuste e retransmita a NF-e."
  810. if (if(valtype(oDanfe) == "O", !oDanfe:lInJob, .T.))
  811. Aviso( "SPED", cNaoAut, {"Continuar"}, 3 )
  812. endif
  813. EndIf
  814. Else
  815. cNaoAut += aNotas[nX][04]+aNotas[nX][05]+CRLF
  816. EndIf
  817. EndIf
  818. oNfe := nil
  819. oNfeDPEC := nil
  820. delClassIntF()
  821. Next nx
  822. EndDo
  823. EndDo
  824. If !lIsLoja .AND. !Empty(cNaoAut) .and. if( valtype(oDanfe) == "O", !oDanfe:lInJob, .T. )
  825. Aviso("SPED","As seguintes notas n緌 foram autorizadas: "+CRLF+CRLF+cNaoAut,{"Ok"},3)
  826. EndIf
  827. EndIf
  828. If Len(aGrvSF3)>0 .And. SF3->(FieldPos("F3_CHVNFE"))>0
  829. SF3->( dbSetOrder( 5 ) )
  830. For nI := 1 To Len(aGrvSF3)
  831. cChavSF3 := xFilial("SF3")+aGrvSF3[nI,1]+aGrvSF3[nI,2]+aGrvSF3[nI,3]+aGrvSF3[nI,4]+aGrvSF3[nI,5]
  832. If SF3->(MsSeek(xFilial("SF3")+aGrvSF3[nI,1]+aGrvSF3[nI,2]+aGrvSF3[nI,3]+aGrvSF3[nI,4]+aGrvSF3[nI,5]))
  833. Do While cChavSF3 == xFilial("SF3")+SF3->F3_SERIE+SF3->F3_NFISCAL+SF3->F3_CLIEFOR+SF3->F3_LOJA+SF3->F3_IDENTFT .And. !SF3->(Eof())
  834. lChave := iif( lUsacolab, .T., Empty(SF3->F3_CHVNFE) )
  835. If (Val(SF3->F3_CFO) >= 5000 .Or. SF3->F3_FORMUL=='S') .And. lChave
  836. RecLock("SF3",.F.)
  837. SF3->F3_CHVNFE := aGrvSF3[nI,6] // Chave da nota
  838. SF3->F3_PROTOC := aGrvSF3[nI,7] // Protocolo
  839. SF3->F3_CODRSEF:= aGrvSF3[nI,8] // Codigo de retorno Sefaz
  840. SF3->F3_DESCRET:= aGrvSF3[nI,9] // Mensagem de retorno Sefaz
  841. SF3->F3_CODRET := iif (SF3->(FieldPos("F3_CODRET"))>0,"M",)
  842. MsUnLock()
  843. EndIf
  844. SF3->(dbSkip())
  845. EndDo
  846. EndIf
  847. Next nI
  848. EndIf
  849. RestArea(aArea)
  850. Return .T.
  851. /*/
  852. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  853. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  854. 控矬闡闡闡闡鐃闡闡闡闡闡薩闡闡闡薩闡闡闡闡闡闡闡闡闡闡闡薩闡闡鐃闡闡闡闡闡膨�
  855. 控袈rogram � ImpDet � Autor � Eduardo Riera � Data �16.11.2006陰�
  856. 控藥闡闡闡闡霰闡闡闡闡闡謐闡闡闡謐闡闡闡闡闡闡闡闡闡闡闡謐闡闡鐘闡闡闡闡闡敢�
  857. 控蛇escri�o 彪ontrole de Fluxo do Relatorio. 陰�
  858. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  859. 控袒etorno 術enhum 陰�
  860. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  861. 控袈arametros蛀xpO1: Objeto grafico de impressao (OPC) 陰�
  862. 控� 蛀xpC2: String com o XML da NFe 陰�
  863. 控� 蛀xpC3: Codigo de Autorizacao do fiscal (OPC) 陰�
  864. 控藥闡闡闡闡霰闡闡闡闡闡闡闡鐃闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  865. 控� DATA � Programador 蛉anutencao efetuada 陰�
  866. 控藥闡闡闡闡霰闡闡闡闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  867. 控� � � 陰�
  868. 控斂闡闡闡闡鐘闡闡闡闡闡闡闡鐘闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡棱�
  869. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  870. 葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔�
  871. /*/
  872. Static Function ImpDet( oDanfe , oNfe , cCodAutSef , cModalidade ,;
  873. oNfeDPEC , cCodAutDPEC , cDtHrRecCab , dDtReceb ,;
  874. aNota , lImpSimp , nTipo , cMsgRet)
  875. local cProg := iif(existBlock("IMPDNFLJ"),"U_IMPDNFLJ","IMPDNFLJ")
  876. DEFAULT lImpSimp := .F.
  877. Default nTipo := 0
  878. Default cMsgRet := ""
  879. If nTipo <> 1
  880. PRIVATE oFont10N := TFontEx():New(oDanfe,"Times New Roman",08,08,.T.,.T.,.F.)// 1
  881. PRIVATE oFont07N := TFontEx():New(oDanfe,"Times New Roman",06,06,.T.,.T.,.F.)// 2
  882. PRIVATE oFont07 := TFontEx():New(oDanfe,"Times New Roman",06,06,.F.,.T.,.F.)// 3
  883. PRIVATE oFont08 := TFontEx():New(oDanfe,"Times New Roman",07,07,.F.,.T.,.F.)// 4
  884. PRIVATE oFont08N := TFontEx():New(oDanfe,"Times New Roman",06,06,.T.,.T.,.F.)// 5
  885. PRIVATE oFont09N := TFontEx():New(oDanfe,"Times New Roman",08,08,.T.,.T.,.F.)// 6
  886. PRIVATE oFont09 := TFontEx():New(oDanfe,"Times New Roman",08,08,.F.,.T.,.F.)// 7
  887. PRIVATE oFont10 := TFontEx():New(oDanfe,"Times New Roman",09,09,.F.,.T.,.F.)// 8
  888. PRIVATE oFont11 := TFontEx():New(oDanfe,"Times New Roman",10,10,.F.,.T.,.F.)// 9
  889. PRIVATE oFont12 := TFontEx():New(oDanfe,"Times New Roman",11,11,.F.,.T.,.F.)// 10
  890. PRIVATE oFont11N := TFontEx():New(oDanfe,"Times New Roman",10,10,.T.,.T.,.F.)// 11
  891. PRIVATE oFont18N := TFontEx():New(oDanfe,"Times New Roman",17,17,.T.,.T.,.F.)// 12
  892. PRIVATE OFONT12N := TFontEx():New(oDanfe,"Times New Roman",11,11,.T.,.T.,.F.)// 12
  893. PRIVATE lUsaColab := UsaColaboracao("1")
  894. if lImpSimp
  895. SimpDanfe(@oDanfe,oNfe,cCodAutSef,cModalidade,oNfeDPEC,cCodAutDPEC,cDtHrRecCab,dDtReceb,aNota)
  896. else
  897. PrtDanfe(@oDanfe,oNfe,cCodAutSef,cModalidade,oNfeDPEC,cCodAutDPEC,cDtHrRecCab,dDtReceb,aNota,cMsgRet)
  898. endif
  899. ElseIf nTipo == 1
  900. &cProg.(oNFE, cCodAutSef, dDtReceb, cDtHrRecCab)
  901. EndIf
  902. Return(.T.)
  903. /*
  904. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  905. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  906. 控矬闡闡闡闡鐃闡闡闡闡闡薩闡闡闡薩闡闡闡闡闡闡闡闡闡闡闡薩闡闡鐃闡闡闡闡闡膨�
  907. 控蚶un�o 袈rtDanfe � Autor 蛀duardo Riera � Data �16.11.2006陰�
  908. 控藥闡闡闡闡霰闡闡闡闡闡謐闡闡闡謐闡闡闡闡闡闡闡闡闡闡闡謐闡闡鐘闡闡闡闡闡敢�
  909. 控蛇escri�o 蛆mpressao do formulario DANFE grafico conforme laytout no 陰�
  910. 控� 貨ormato retrato 陰�
  911. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  912. 控袖intaxe � PrtDanfe() 陰�
  913. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  914. 控袒etorno � Nenhum 陰�
  915. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  916. 控袈arametros蛀xpO1: Objeto grafico de impressao 陰�
  917. 控� 蛀xpO2: Objeto da NFe 陰�
  918. 控� 蛀xpC3: Codigo de Autorizacao do fiscal (OPC) 陰�
  919. 控藥闡闡闡闡霰闡闡闡闡闡闡闡鐃闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  920. 控� DATA � Programador 蛉anutencao Efetuada 陰�
  921. 控藥闡闡闡闡霰闡闡闡闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  922. 控� � � 陰�
  923. 控斂闡闡闡闡鐘闡闡闡闡闡闡闡鐘闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡棱�
  924. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  925. 葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔�
  926. */
  927. Static Function PrtDanfe(oDanfe,oNFE,cCodAutSef,cModalidade,oNfeDPEC,cCodAutDPEC,cDtHrRecCab,dDtReceb,aNota,cMsgRet)
  928. Local aAuxCabec := {} // Array que conter� as strings de cabe蓷lho das colunas de produtos/servi蔞s.
  929. Local aTamCol := {} // Array que conter� o tamanho das colunas dos produtos/servi蔞s.
  930. Local aSitTrib := {}
  931. Local aSitSN := {}
  932. Local aTransp := {}
  933. Local aDest := {}
  934. Local aRetirada := {}
  935. Local aEntrega := {}
  936. Local aHrEnt := {}
  937. Local aFaturas := {}
  938. Local aItens := {}
  939. Local aISSQN := {}
  940. Local aSimpNac := {}
  941. Local aTotais := {}
  942. Local aAux := {}
  943. Local aUF := {}
  944. Local aMensagem := {}
  945. Local aEspVol := {}
  946. Local aResFisco := {}
  947. Local aEspecie := {}
  948. Local aIndImp := {}
  949. Local aIndAux := {}
  950. Local nAuxH := 0
  951. Local nAuxH2 := 0
  952. Local nSnBaseIcm := 0
  953. Local nSnValIcm := 0
  954. Local nDetImp := 0
  955. Local nS := 0
  956. Local nX := 0
  957. Local nY := 0
  958. Local nL := 0
  959. Local nFolha := 1
  960. Local nFolhas := 0
  961. Local nItem := 0
  962. Local nMensagem := 0
  963. Local nBaseICM := 0
  964. Local nValICM := 0
  965. Local nValIPI := 0
  966. Local nPICM := 0
  967. Local nPIPI := 0
  968. Local nFaturas := 0
  969. Local nVTotal := 0
  970. Local nQtd := 0
  971. Local nVUnit := 0
  972. Local nVolume := 0
  973. Local nLenVol
  974. Local nLenDet
  975. Local nLenSit
  976. Local nLenItens := 0
  977. Local nLenMensagens := 0
  978. Local nColuna := 0
  979. Local nRecSF3 := 0
  980. Local nE := 0
  981. Local nAjustImp := 0
  982. local nAjustaRet := 0
  983. Local nAjustaEnt := 0
  984. Local nAjustaFat := 0
  985. Local nAjustaVt := 0
  986. Local nAjustaPro := 0
  987. Local nZ := 0
  988. Local nMaxCod := 0
  989. Local nMaxDes := MAXITEMC
  990. Local nLinhavers := 0
  991. Local nMaxItemP2 := MAXITEM // Vari嫛el utilizada para tratamento de quantos itens devem ser impressos na p墔ina corrente
  992. Local cAux := ""
  993. Local cSitTrib := ""
  994. Local cUF := ""
  995. Local cMVCODREG := Alltrim( SuperGetMV("MV_CODREG", ," ") )
  996. Local cChaveCont := ""
  997. Local cLogo := FisxLogo("1")
  998. Local cGuarda := ""
  999. Local cEsp := ""
  1000. Local cLogoD := ""
  1001. local cLogoTotvs := "Powered_by_TOTVS.bmp"
  1002. local cStartPath := GetSrvProfString("Startpath","")
  1003. Local lPreview := .F.
  1004. Local lFlag := .T.
  1005. Local lConverte := GetNewPar("MV_CONVERT",.F.)
  1006. Local lImpAnfav := GetNewPar("MV_IMPANF",.F.)
  1007. Local lImpInfAd := GetNewPar("MV_IMPADIC",.F.)
  1008. Local lImpSimpN := GetNewPar("MV_IMPSIMP",.F.)
  1009. Local lVerso := .F.
  1010. Local lMv_Logod := If(GetNewPar("MV_LOGOD", "N" ) == "S", .T., .F. )
  1011. Local lMv_ItDesc := Iif( GetNewPar("MV_ITDESC","N")=="S", .T., .F. )
  1012. Local lNFori2 := .T.
  1013. Local lFimpar := .T.
  1014. Local lEntIpiDev := GetNewPar("MV_EIPIDEV",.F.) /*Apenas para nota de entrada de Devolu誽o de ipi. .T.-S廨a destacado no cabe蓷lho + inf.compl/.F.-Ser� destacado apenas em inf.compl*/
  1015. Local cDhCont := ""
  1016. Local cXJust := ""
  1017. Local cDescLogo := ""
  1018. Local cGrpCompany := ""
  1019. Local cCodEmpGrp := ""
  1020. Local cUnitGrp := ""
  1021. Local cFilGrp := ""
  1022. Local lPontilhado := .F.
  1023. Local aAuxCom := {}
  1024. Local cUnTrib := ""
  1025. Local nQtdTrib := 0
  1026. Local nVUnitTrib := 0
  1027. Local lUf_MG := ( SuperGetMv("MV_ESTADO") $ "MG" ) // Criado esta variavel para atender o RICMS de MG para totalizar por CFOP
  1028. Local nSequencia := 0
  1029. Local nSubTotal := 0
  1030. Local cCfop := ""
  1031. Local cCfopAnt := ""
  1032. Local aItensAux := {}
  1033. Local aArray := {}
  1034. Local cDadosProt := ""
  1035. Local aMsgRet := {}
  1036. local cMarca := ""
  1037. local cNumeracao := ""
  1038. local aMarca := {}
  1039. local aNumeracao := {}
  1040. Local lNFCE := Substr(oNFe:_NFe:_InfNfe:_ID:Text,24,2) == "65"
  1041. Default cDtHrRecCab := ""
  1042. Default dDtReceb := CToD("")
  1043. Private aInfNf := {}
  1044. Private oDPEC := oNfeDPEC
  1045. Private oNF := oNFe:_NFe
  1046. Private oEmitente := oNF:_InfNfe:_Emit
  1047. Private oIdent := oNF:_InfNfe:_IDE
  1048. Private oDestino := IIf(Type("oNF:_InfNfe:_Dest")=="U",Nil,oNF:_InfNfe:_Dest)
  1049. Private oTotal := oNF:_InfNfe:_Total
  1050. Private oTransp := oNF:_InfNfe:_Transp
  1051. Private oDet := oNF:_InfNfe:_Det
  1052. Private oFatura := IIf(Type("oNF:_InfNfe:_Cobr")=="U",Nil,oNF:_InfNfe:_Cobr)
  1053. Private oImposto
  1054. Private oEntrega := IIf(Type("oNF:_InfNfe:_Entrega") =="U",Nil,oNF:_InfNfe:_Entrega)
  1055. Private oRetirada := IIf(Type("oNF:_InfNfe:_Retirada")=="U",Nil,oNF:_InfNfe:_Retirada)
  1056. Private nPrivate := 0
  1057. Private nPrivate2 := 0
  1058. Private nXAux := 0
  1059. Private lArt488MG := .F.
  1060. Private lArt274SP := .F.
  1061. nFaturas := IIf(oFatura<>Nil,IIf(ValType(oNF:_InfNfe:_Cobr:_Dup)=="A",Len(oNF:_InfNfe:_Cobr:_Dup),1),0)
  1062. oDet := IIf(ValType(oDet)=="O",{oDet},oDet)
  1063. nAjustImp := 0
  1064. nAjustaRet := 0
  1065. nAjustaEnt := 0
  1066. nAjustaFat := 0
  1067. nAjustaVt := 0
  1068. nAjustaPro := 0
  1069. // Popula as variaveis
  1070. if( valType(oEntrega)=="O" ) .and. ( valType(oRetirada)=="O")
  1071. nAjustImp := 160
  1072. nAjustaRet := 75
  1073. nAjustaEnt := 150
  1074. nAjustaFat := 160
  1075. nAjustaVt := 160
  1076. nAjustaPro := 160
  1077. nMaxItem := 6
  1078. nMaxItemP2 := 6
  1079. ElseIF ( valType(oEntrega)=="O" ) .and. ( valType(oRetirada)=="U")
  1080. nAjustaRet := 37
  1081. nAjustaEnt := 75
  1082. nAjustImp := 80
  1083. nAjustaFat := 80
  1084. nAjustaVt := 80
  1085. nAjustaPro := 80
  1086. nMaxItem := 14
  1087. nMaxItemP2 := 14
  1088. ElseIF ( valType(oEntrega)=="U" ) .and. ( valType(oRetirada)=="O")
  1089. nAjustaRet := 75
  1090. nAjustaEnt := 150
  1091. nAjustImp := 80
  1092. nAjustaFat := 80
  1093. nAjustaVt := 80
  1094. nAjustaPro := 80
  1095. nMaxItem := 14
  1096. nMaxItemP2 := 14
  1097. EndIf
  1098. If ( valType(oRetirada)=="O" )
  1099. aRetirada := {IIF(Type("oRetirada:_xNome")=="U","",oRetirada:_xNome:Text),;
  1100. IIF(Type("oRetirada:_CNPJ")=="U","",oRetirada:_CNPJ:Text),;
  1101. IIF(Type("oRetirada:_CPF")=="U","",oRetirada:_CPF:Text),;
  1102. IIF(Type("oRetirada:_xLgr")=="U","",oRetirada:_xLgr:Text),;
  1103. IIF(Type("oRetirada:_nro")=="U","",oRetirada:_nro:Text),;
  1104. IIF(Type("oRetirada:_xCpl")=="U","",oRetirada:_xCpl:Text),;
  1105. IIF(Type("oRetirada:_xBairro")=="U","",oRetirada:_xBairro:Text),;
  1106. IIF(Type("oRetirada:_xMun")=="U","",oRetirada:_xMun:Text),;
  1107. IIF(Type("oRetirada:_UF")=="U","",oRetirada:_UF:Text),;
  1108. IIF(Type("oRetirada:_IE")=="U","",oRetirada:_IE:Text),;
  1109. IIF(Type("oRetirada:_CEP")=="U","",oRetirada:_CEP:Text),;
  1110. IIF(Type("oRetirada:_FONE")=="U","",oRetirada:_Fone:Text),;
  1111. ""}
  1112. endIf
  1113. If ( valType(oEntrega)=="O" )
  1114. aEntrega := {IIF(Type("oEntrega:_xNome")=="U","",oEntrega:_xNome:Text),;
  1115. IIF(Type("oEntrega:_CNPJ")=="U","",oEntrega:_CNPJ:Text),;
  1116. IIF(Type("oEntrega:_CPF")=="U","",oEntrega:_CPF:Text),;
  1117. IIF(Type("oEntrega:_xLgr")=="U","",oEntrega:_xLgr:Text),;
  1118. IIF(Type("oEntrega:_nro")=="U","",oEntrega:_nro:Text),;
  1119. IIF(Type("oEntrega:_xCpl")=="U","",oEntrega:_xCpl:Text),;
  1120. IIF(Type("oEntrega:_xBairro")=="U","",oEntrega:_xBairro:Text),;
  1121. IIF(Type("oEntrega:_xMun")=="U","",oEntrega:_xMun:Text),;
  1122. IIF(Type("oEntrega:_UF")=="U","",oEntrega:_UF:Text),;
  1123. IIF(Type("oEntrega:_IE")=="U","",oEntrega:_IE:Text),;
  1124. IIF(Type("oEntrega:_CEP")=="U","",oEntrega:_CEP:Text),;
  1125. IIF(Type("oEntrega:_FONE")=="U","",oEntrega:_Fone:Text),;
  1126. ""}
  1127. endIf
  1128. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1129. //彪arrega as variaveis de impressao �
  1130. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1131. aadd(aSitTrib,"00")
  1132. aadd(aSitTrib,"10")
  1133. aadd(aSitTrib,"20")
  1134. aadd(aSitTrib,"30")
  1135. aadd(aSitTrib,"40")
  1136. aadd(aSitTrib,"41")
  1137. aadd(aSitTrib,"50")
  1138. aadd(aSitTrib,"51")
  1139. aadd(aSitTrib,"60")
  1140. aadd(aSitTrib,"70")
  1141. aadd(aSitTrib,"90")
  1142. aadd(aSitTrib,"PART")
  1143. aadd(aSitSN,"101")
  1144. aadd(aSitSN,"102")
  1145. aadd(aSitSN,"201")
  1146. aadd(aSitSN,"202")
  1147. aadd(aSitSN,"500")
  1148. aadd(aSitSN,"900")
  1149. //Impressao DANFE A4 no PDV NFC-e
  1150. if lNFCE .AND. (oDestino == Nil .or. type("oDestino:_EnderDest") == "U")
  1151. oDestino := MontaNfcDest(oDestino)
  1152. endif
  1153. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1154. //被uadro Destinatario �
  1155. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1156. aDest := {MontaEnd(oDestino:_EnderDest),;
  1157. NoChar(oDestino:_EnderDest:_XBairro:Text,lConverte),;
  1158. IIF(Type("oDestino:_EnderDest:_Cep")=="U","",Transform(oDestino:_EnderDest:_Cep:Text,"@r 99999-999")),;
  1159. IIF(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",IIF(Type("oIdent:_DHSaiEnt")=="U","",oIdent:_DHSaiEnt:Text),IIF(Type("oIdent:_DSaiEnt")=="U","",oIdent:_DSaiEnt:Text)),;
  1160. oDestino:_EnderDest:_XMun:Text,;
  1161. IIF(Type("oDestino:_EnderDest:_fone")=="U","",oDestino:_EnderDest:_fone:Text),;
  1162. oDestino:_EnderDest:_UF:Text,;
  1163. IIF(Type("oDestino:_IE")=="U","",oDestino:_IE:Text),;
  1164. ""}
  1165. If oNF:_INFNFE:_VERSAO:TEXT >= "3.10"
  1166. aadd(aHrEnt,IIF(Type("oIdent:_dhSaiEnt")=="U","",SubStr(oIdent:_dhSaiEnt:TEXT,12,8)))
  1167. Else
  1168. If Type("oIdent:_DSaiEnt")<>"U" .And. Type("oIdent:_HSaiEnt:Text")<>"U"
  1169. aAdd(aHrEnt,oIdent:_HSaiEnt:Text)
  1170. Else
  1171. aAdd(aHrEnt,"")
  1172. EndIf
  1173. EndIf
  1174. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1175. //彪alculo do Imposto �
  1176. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1177. aTotais := {"","","","","","","","","","",""}
  1178. aTotais[01] := Transform(Val(oTotal:_ICMSTOT:_vBC:TEXT),"@e 9,999,999,999,999.99")
  1179. aTotais[02] := Transform(Val(oTotal:_ICMSTOT:_vICMS:TEXT),"@e 9,999,999,999,999.99")
  1180. aTotais[03] := Transform(Val(oTotal:_ICMSTOT:_vBCST:TEXT),"@e 9,999,999,999,999.99")
  1181. aTotais[04] := Transform(Val(oTotal:_ICMSTOT:_vST:TEXT),"@e 9,999,999,999,999.99")
  1182. aTotais[05] := Transform(Val(oTotal:_ICMSTOT:_vProd:TEXT),"@e 9,999,999,999,999.99")
  1183. aTotais[06] := Transform(Val(oTotal:_ICMSTOT:_vFrete:TEXT),"@e 9,999,999,999,999.99")
  1184. aTotais[07] := Transform(Val(oTotal:_ICMSTOT:_vSeg:TEXT),"@e 9,999,999,999,999.99")
  1185. aTotais[08] := Transform(Val(oTotal:_ICMSTOT:_vDesc:TEXT),"@e 9,999,999,999,999.99")
  1186. aTotais[09] := Transform(Val(oTotal:_ICMSTOT:_vOutro:TEXT),"@e 9,999,999,999,999.99")
  1187. If ( MV_PAR04 == 1 )
  1188. dbSelectArea("SF1")
  1189. dbSetOrder(1)
  1190. If MsSeek(xFilial("SF1")+aNota[5]+aNota[4]+aNota[6]+aNota[7]) .And. SF1->(FieldPos("F1_FIMP"))<>0
  1191. If SF1->F1_TIPO <> "D"
  1192. aTotais[10] := Transform(Val(oTotal:_ICMSTOT:_vIPI:TEXT),"@e 9,999,999,999,999.99")
  1193. ElseIf SF1->F1_TIPO == "D" .and. lEntIpiDev
  1194. aTotais[10] := Transform(Val(oTotal:_ICMSTOT:_vIPI:TEXT),"@e 9,999,999,999,999.99")
  1195. Else
  1196. aTotais[10] := "0,00"
  1197. EndIf
  1198. MsUnlock()
  1199. DbSkip()
  1200. EndIf
  1201. Else
  1202. aTotais[10] := Transform(Val(oTotal:_ICMSTOT:_vIPI:TEXT),"@e 9,999,999,999,999.99")
  1203. EndIf
  1204. aTotais[11] := Transform(Val(oTotal:_ICMSTOT:_vNF:TEXT),"@e 9,999,999,999,999.99")
  1205. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  1206. //蛆mpress緌 da Base de Calculo e ICMS nos campo Proprios do ICMS quando optante pelo Simples Nacional �
  1207. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  1208. If lImpSimpN
  1209. nDetImp := Len(oDet)
  1210. nS := nDetImp
  1211. aSimpNac := {"",""}
  1212. if Type("oDet["+Alltrim(Str(nS))+"]:_IMPOSTO:_ICMS:_ICMSSN101:_VCREDICMSSN:TEXT") <> "U"
  1213. SF3->(dbSetOrder(5))
  1214. if SF3->(MsSeek(xFilial("SF3")+aNota[4]+aNota[5]))
  1215. while SF3->(!eof()) .and. ( SF3->F3_SERIE + SF3->F3_NFISCAL == aNota[4] + aNota[5] )
  1216. nSnBaseIcm += (SF3->F3_BASEICM)
  1217. nSnValIcm += (SF3->F3_VALICM)
  1218. SF3->(dbSkip())
  1219. end
  1220. endif
  1221. elseif Type("oDet["+Alltrim(Str(nS))+"]:_IMPOSTO:_ICMS:_ICMSSN900:_VCREDICMSSN:TEXT") <> "U"
  1222. nS:= 0
  1223. For nS := 1 To nDetImp
  1224. If ValAtrib("oDet["+Alltrim(Str(nS))+"]:_IMPOSTO:_ICMS:_ICMSSN900:_VBC:TEXT") <> "U"
  1225. nSnBaseIcm += Val(oDet[nS]:_IMPOSTO:_ICMS:_ICMSSN900:_VBC:TEXT)
  1226. EndIf
  1227. If ValAtrib("oDet["+Alltrim(Str(nS))+"]:_IMPOSTO:_ICMS:_ICMSSN900:_VCREDICMSSN:TEXT") <> "U"
  1228. nSnValIcm += Val(oDet[nS]:_IMPOSTO:_ICMS:_ICMSSN900:_VCREDICMSSN:TEXT)
  1229. EndIf
  1230. Next nS
  1231. endif
  1232. aSimpNac[01] := Transform((nSnBaseIcm),"@e 9,999,999,999,999.99")
  1233. aSimpNac[02] := Transform((nSnValIcm),"@e 9,999,999,999,999.99")
  1234. EndIf
  1235. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1236. //被uadro Faturas �
  1237. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1238. If nFaturas > 0
  1239. For nX := 1 To 3
  1240. aAux := {}
  1241. For nY := 1 To Min(9, nFaturas)
  1242. Do Case
  1243. Case nX == 1
  1244. If nFaturas > 1
  1245. AAdd(aAux, AllTrim(oFatura:_Dup[nY]:_nDup:TEXT))
  1246. Else
  1247. AAdd(aAux, AllTrim(oFatura:_Dup:_nDup:TEXT))
  1248. EndIf
  1249. Case nX == 2
  1250. If nFaturas > 1
  1251. AAdd(aAux, AllTrim(ConvDate(oFatura:_Dup[nY]:_dVenc:TEXT)))
  1252. Else
  1253. AAdd(aAux, AllTrim(ConvDate(oFatura:_Dup:_dVenc:TEXT)))
  1254. EndIf
  1255. Case nX == 3
  1256. If nFaturas > 1
  1257. AAdd(aAux, AllTrim(TransForm(Val(oFatura:_Dup[nY]:_vDup:TEXT), "@E 9,999,999,999,999.99")))
  1258. Else
  1259. AAdd(aAux, AllTrim(TransForm(Val(oFatura:_Dup:_vDup:TEXT), "@E 9,999,999,999,999.99")))
  1260. EndIf
  1261. EndCase
  1262. Next nY
  1263. If nY <= 9
  1264. For nY := 1 To 9
  1265. AAdd(aAux, Space(20))
  1266. Next nY
  1267. EndIf
  1268. AAdd(aFaturas, aAux)
  1269. Next nX
  1270. EndIf
  1271. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1272. //被uadro transportadora �
  1273. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1274. aTransp := {"","0","","","","","","","","","","","","","",""}
  1275. If Type("oTransp:_ModFrete")<>"U"
  1276. aTransp[02] := IIF(Type("oTransp:_ModFrete:TEXT")<>"U",oTransp:_ModFrete:TEXT,"0")
  1277. EndIf
  1278. If Type("oTransp:_Transporta")<>"U"
  1279. aTransp[01] := IIf(Type("oTransp:_Transporta:_xNome:TEXT")<>"U",NoChar(oTransp:_Transporta:_xNome:TEXT,lConverte),"")
  1280. // aTransp[02] := IIF(Type("oTransp:_ModFrete:TEXT")<>"U",oTransp:_ModFrete:TEXT,"0")
  1281. aTransp[03] := IIf(Type("oTransp:_VeicTransp:_RNTC")=="U","",oTransp:_VeicTransp:_RNTC:TEXT)
  1282. aTransp[04] := IIf(Type("oTransp:_VeicTransp:_Placa:TEXT")<>"U",oTransp:_VeicTransp:_Placa:TEXT,"")
  1283. aTransp[05] := IIf(Type("oTransp:_VeicTransp:_UF:TEXT")<>"U",oTransp:_VeicTransp:_UF:TEXT,"")
  1284. If Type("oTransp:_Transporta:_CNPJ:TEXT")<>"U"
  1285. aTransp[06] := Transform(oTransp:_Transporta:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  1286. ElseIf Type("oTransp:_Transporta:_CPF:TEXT")<>"U"
  1287. aTransp[06] := Transform(oTransp:_Transporta:_CPF:TEXT,"@r 999.999.999-99")
  1288. EndIf
  1289. aTransp[07] := IIf(Type("oTransp:_Transporta:_xEnder:TEXT")<>"U",NoChar(oTransp:_Transporta:_xEnder:TEXT,lConverte),"")
  1290. aTransp[08] := IIf(Type("oTransp:_Transporta:_xMun:TEXT")<>"U",oTransp:_Transporta:_xMun:TEXT,"")
  1291. aTransp[09] := IIf(Type("oTransp:_Transporta:_UF:TEXT")<>"U",oTransp:_Transporta:_UF:TEXT,"")
  1292. aTransp[10] := IIf(Type("oTransp:_Transporta:_IE:TEXT")<>"U",oTransp:_Transporta:_IE:TEXT,"")
  1293. ElseIf Type("oTransp:_VEICTRANSP")<>"U"
  1294. aTransp[03] := IIf(Type("oTransp:_VeicTransp:_RNTC")=="U","",oTransp:_VeicTransp:_RNTC:TEXT)
  1295. aTransp[04] := IIf(Type("oTransp:_VeicTransp:_Placa:TEXT")<>"U",oTransp:_VeicTransp:_Placa:TEXT,"")
  1296. aTransp[05] := IIf(Type("oTransp:_VeicTransp:_UF:TEXT")<>"U",oTransp:_VeicTransp:_UF:TEXT,"")
  1297. EndIf
  1298. If Type("oTransp:_Vol")<>"U"
  1299. If ValType(oTransp:_Vol) == "A"
  1300. nX := nPrivate
  1301. nLenVol := Len(oTransp:_Vol)
  1302. cMarca := ""
  1303. aMarca := {}
  1304. cNumeracao := ""
  1305. aNumeracao := {}
  1306. For nX := 1 to nLenVol
  1307. nXAux := nX
  1308. nVolume += IIF(!ValAtrib("oTransp:_Vol[nXAux]:_QVOL:TEXT")=="U",Val(oTransp:_Vol[nXAux]:_QVOL:TEXT),0)
  1309. if !ValAtrib("oTransp:_Vol[nXAux]:_MARCA:TEXT") == "U" .and. !empty(oTransp:_Vol[nXAux]:_MARCA:TEXT)
  1310. if aScan( aMarca, { |X| X == oTransp:_Vol[nXAux]:_MARCA:TEXT}) == 0
  1311. aAdd( aMarca, oTransp:_Vol[nXAux]:_MARCA:TEXT )
  1312. endif
  1313. endif
  1314. if !ValAtrib("oTransp:_Vol[nXAux]:_nVOL:TEXT") == "U" .and. !empty(oTransp:_Vol[nXAux]:_nVOL:TEXT)
  1315. if aScan( aNumeracao, { |X| X == oTransp:_Vol[nXAux]:_nVOL:TEXT } ) == 0
  1316. aAdd( aNumeracao, oTransp:_Vol[nXAux]:_nVOL:TEXT )
  1317. endif
  1318. endif
  1319. Next nX
  1320. if len(aMarca) == 1
  1321. cMarca := aMarca[1]
  1322. elseif len(aMarca) > 1
  1323. cMarca := "Diversos"
  1324. endif
  1325. aSize(aMarca,0)
  1326. if len(aNumeracao) == 1
  1327. cNumeracao := aNumeracao[1]
  1328. elseif len(aNumeracao) > 1
  1329. cNumeracao := "Diversos"
  1330. endif
  1331. aSize(aNumeracao,0)
  1332. if Type("oTransp:_Vol:_Marca") == "U"
  1333. cMarca := NoChar(cMarca,lConverte)
  1334. else
  1335. cMarca := NoChar(oTransp:_Vol:_Marca:TEXT,lConverte)
  1336. endif
  1337. if !Type("oTransp:_Vol:_nVol:TEXT") == "U"
  1338. cNumeracao := oTransp:_Vol:_nVol:TEXT
  1339. endif
  1340. aTransp[11] := AllTrim(str(nVolume))
  1341. aTransp[12] := IIf(Type("oTransp:_Vol:_Esp")=="U","Diversos","")
  1342. aTransp[13] := cMarca
  1343. aTransp[14] := cNumeracao
  1344. If Type("oTransp:_Vol[1]:_PesoB") <>"U"
  1345. nPesoB := Val(oTransp:_Vol[1]:_PesoB:TEXT)
  1346. aTransp[15] := AllTrim(str(nPesoB))
  1347. EndIf
  1348. If Type("oTransp:_Vol[1]:_PesoL") <>"U"
  1349. nPesoL := Val(oTransp:_Vol[1]:_PesoL:TEXT)
  1350. aTransp[16] := AllTrim(str(nPesoL))
  1351. EndIf
  1352. Else
  1353. aTransp[11] := IIf(Type("oTransp:_Vol:_qVol:TEXT")<>"U",oTransp:_Vol:_qVol:TEXT,"")
  1354. aTransp[12] := IIf(Type("oTransp:_Vol:_Esp")=="U","",oTransp:_Vol:_Esp:TEXT)
  1355. aTransp[13] := IIf(Type("oTransp:_Vol:_Marca")=="U","",NoChar(oTransp:_Vol:_Marca:TEXT,lConverte))
  1356. aTransp[14] := IIf(Type("oTransp:_Vol:_nVol:TEXT")<>"U",oTransp:_Vol:_nVol:TEXT,"")
  1357. aTransp[15] := IIf(Type("oTransp:_Vol:_PesoB:TEXT")<>"U",oTransp:_Vol:_PesoB:TEXT,"")
  1358. aTransp[16] := IIf(Type("oTransp:_Vol:_PesoL:TEXT")<>"U",oTransp:_Vol:_PesoL:TEXT,"")
  1359. EndIf
  1360. aTransp[13] := SubStr( aTransp[13], 1, 20)
  1361. aTransp[14] := SubStr( aTransp[14], 1, 20)
  1362. aTransp[15] := strTRan(aTransp[15],".",",")
  1363. aTransp[16] := strTRan(aTransp[16],".",",")
  1364. EndIf
  1365. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1366. //覓olumes / Especie Nota de Saida �
  1367. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1368. If(MV_PAR04==2) .And. Empty(aTransp[12])
  1369. If (SF2->(FieldPos("F2_ESPECI1")) <>0 .And. !Empty( SF2->(FieldGet(FieldPos( "F2_ESPECI1" ))) )) .Or.;
  1370. (SF2->(FieldPos("F2_ESPECI2")) <>0 .And. !Empty( SF2->(FieldGet(FieldPos( "F2_ESPECI2" ))) )) .Or.;
  1371. (SF2->(FieldPos("F2_ESPECI3")) <>0 .And. !Empty( SF2->(FieldGet(FieldPos( "F2_ESPECI3" ))) )) .Or.;
  1372. (SF2->(FieldPos("F2_ESPECI4")) <>0 .And. !Empty( SF2->(FieldGet(FieldPos( "F2_ESPECI4" ))) ))
  1373. aEspecie := {}
  1374. aadd(aEspecie,SF2->F2_ESPECI1)
  1375. aadd(aEspecie,SF2->F2_ESPECI2)
  1376. aadd(aEspecie,SF2->F2_ESPECI3)
  1377. aadd(aEspecie,SF2->F2_ESPECI4)
  1378. cEsp := ""
  1379. nx := 0
  1380. For nE := 1 To Len(aEspecie)
  1381. If !Empty(aEspecie[nE])
  1382. nx ++
  1383. cEsp := aEspecie[nE]
  1384. EndIf
  1385. Next
  1386. cGuarda := ""
  1387. If nx > 1
  1388. cGuarda := "Diversos"
  1389. Else
  1390. cGuarda := cEsp
  1391. EndIf
  1392. If !Empty(cGuarda)
  1393. aadd(aEspVol,{cGuarda,Iif(SF2->F2_PLIQUI>0,str(SF2->F2_PLIQUI),""),Iif(SF2->F2_PBRUTO>0, str(SF2->F2_PBRUTO),"")})
  1394. Else
  1395. /*
  1396. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡1
  1397. //莧qui seguindo a mesma regra da cria誽o da TAG de Volumes no xml �
  1398. //� caso n緌 esteja preenchida nenhuma das especies de Volume n緌 se�
  1399. //� envia as informa踥es de volume. �
  1400. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡1
  1401. */
  1402. aadd(aEspVol,{cGuarda,"",""})
  1403. Endif
  1404. Else
  1405. aadd(aEspVol,{cGuarda,"",""})
  1406. EndIf
  1407. EndIf
  1408. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1409. //蛀specie Nota de Entrada �
  1410. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1411. If(MV_PAR04==1) .And. Empty(aTransp[12])
  1412. dbSelectArea("SF1")
  1413. dbSetOrder(1)
  1414. If MsSeek(xFilial("SF1")+aNota[5]+aNota[4]+aNota[6]+aNota[7])
  1415. If (SF1->(FieldPos("F1_ESPECI1")) <>0 .And. !Empty( SF1->(FieldGet(FieldPos( "F1_ESPECI1" ))) )) .Or.;
  1416. (SF1->(FieldPos("F1_ESPECI2")) <>0 .And. !Empty( SF1->(FieldGet(FieldPos( "F1_ESPECI2" ))) )) .Or.;
  1417. (SF1->(FieldPos("F1_ESPECI3")) <>0 .And. !Empty( SF1->(FieldGet(FieldPos( "F1_ESPECI3" ))) )) .Or.;
  1418. (SF1->(FieldPos("F1_ESPECI4")) <>0 .And. !Empty( SF1->(FieldGet(FieldPos( "F1_ESPECI4" ))) ))
  1419. aEspecie := {}
  1420. aadd(aEspecie,SF1->F1_ESPECI1)
  1421. aadd(aEspecie,SF1->F1_ESPECI2)
  1422. aadd(aEspecie,SF1->F1_ESPECI3)
  1423. aadd(aEspecie,SF1->F1_ESPECI4)
  1424. cEsp := ""
  1425. nx := 0
  1426. For nE := 1 To Len(aEspecie)
  1427. If !Empty(aEspecie[nE])
  1428. nx ++
  1429. cEsp := aEspecie[nE]
  1430. EndIf
  1431. Next
  1432. cGuarda := ""
  1433. If nx > 1
  1434. cGuarda := "Diversos"
  1435. Else
  1436. cGuarda := cEsp
  1437. EndIf
  1438. If !Empty(cGuarda)
  1439. aadd(aEspVol,{cGuarda,Iif(SF1->F1_PLIQUI>0,str(SF1->F1_PLIQUI),""),Iif(SF1->F1_PBRUTO>0, str(SF1->F1_PBRUTO),"")})
  1440. Else
  1441. /*
  1442. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡1
  1443. //莧qui seguindo a mesma regra da cria誽o da TAG de Volumes no xml �
  1444. //� caso n緌 esteja preenchida nenhuma das especies de Volume n緌 se�
  1445. //� envia as informa踥es de volume. �
  1446. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡1
  1447. */
  1448. aadd(aEspVol,{cGuarda,"",""})
  1449. Endif
  1450. Else
  1451. aadd(aEspVol,{cGuarda,"",""})
  1452. EndIf
  1453. MsUnlock()
  1454. DbSkip()
  1455. EndIf
  1456. EndIf
  1457. //矬-----闡闡闡闡闡醴
  1458. //袍ipo do frete �
  1459. //斂闡闡�-----闡闡闡�
  1460. dbSelectArea("SD2")
  1461. dbSetOrder(3)
  1462. MsSeek(xFilial("SD2")+SF2->F2_DOC+SF2->F2_SERIE+SF2->F2_CLIENTE+SF2->F2_LOJA)
  1463. dbSelectArea("SC5")
  1464. dbSetOrder(1)
  1465. MsSeek(xFilial("SC5")+SD2->D2_PEDIDO)
  1466. dbSelectArea("SF4")
  1467. dbSetOrder(1)
  1468. MsSeek(xFilial("SF4")+SD2->D2_TES)
  1469. dbSelectArea("SF3")
  1470. dbSetOrder(4)
  1471. MsSeek(xFilial("SF3")+SF2->F2_CLIENTE+SF2->F2_LOJA+SF2->F2_DOC+SF2->F2_SERIE)
  1472. lArt488MG := Iif(SF4->(FIELDPOS("F4_CRLEIT"))>0,Iif(SF4->F4_CRLEIT == "1",.T.,.F.),.F.)
  1473. lArt274SP := Iif(SF4->(FIELDPOS("F4_ART274"))>0,Iif(SF4->F4_ART274 $ "1S",.T.,.F.),.F.)
  1474. If Type("oTransp:_ModFrete") <> "U"
  1475. cModFrete := oTransp:_ModFrete:TEXT
  1476. Else
  1477. cModFrete := "1"
  1478. EndIf
  1479. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  1480. //被uadro Dados do Produto / Servi蔞 �
  1481. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  1482. nLenDet := Len(oDet)
  1483. If lMv_ItDesc
  1484. For nX := 1 To nLenDet
  1485. Aadd(aIndAux, {nX, SubStr(NoChar(oDet[nX]:_Prod:_xProd:TEXT,lConverte),1,MAXITEMC)})
  1486. Next
  1487. aIndAux := aSort(aIndAux,,, { |x, y| x[2] < y[2] })
  1488. For nX := 1 To nLenDet
  1489. Aadd(aIndImp, aIndAux[nX][1] )
  1490. Next
  1491. EndIf
  1492. For nZ := 1 To nLenDet
  1493. If lMv_ItDesc
  1494. nX := aIndImp[nZ]
  1495. Else
  1496. nX := nZ
  1497. EndIf
  1498. nPrivate := nX
  1499. If lArt488MG .And. lUf_MG
  1500. nVTotal := 0
  1501. nVUnit := 0
  1502. Else
  1503. nVTotal := Val(oDet[nX]:_Prod:_vProd:TEXT)//-Val(IIF(Type("oDet[nPrivate]:_Prod:_vDesc")=="U","",oDet[nX]:_Prod:_vDesc:TEXT))
  1504. nVUnit := Val(oDet[nX]:_Prod:_vUnCom:TEXT)
  1505. EndIf
  1506. nQtd := Val(oDet[nX]:_Prod:_qCom:TEXT)
  1507. nBaseICM := 0
  1508. nValICM := 0
  1509. nValIPI := 0
  1510. nPICM := 0
  1511. nPIPI := 0
  1512. oImposto := oDet[nX]
  1513. cSitTrib := ""
  1514. lPontilhado := .F.
  1515. If ValAtrib("oImposto:_Imposto")<>"U"
  1516. If ValAtrib("oImposto:_Imposto:_ICMS")<>"U"
  1517. nLenSit := Len(aSitTrib)
  1518. For nY := 1 To nLenSit
  1519. nPrivate2 := nY
  1520. If ValAtrib("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nPrivate2])<>"U" .Or. ValAtrib("oImposto:_Imposto:_ICMS:_ICMSST")<>"U"
  1521. If ValAtrib("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nPrivate2]+":_VBC:TEXT")<>"U"
  1522. nBaseICM := Val(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_VBC:TEXT"))
  1523. nValICM := Val(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_vICMS:TEXT"))
  1524. nPICM := Val(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_PICMS:TEXT"))
  1525. ElseIf ValAtrib("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nPrivate2]+":_MOTDESICMS") <> "U" .And. ValAtrib("oImposto:_PROD:_VDESC:TEXT") <> "U" //SINIEF 25/12, efeitos a partir de 20.12.12
  1526. If oNF:_INFNFE:_VERSAO:TEXT >= "3.10" .and. &("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_CST:TEXT") <> "40"
  1527. If AllTrim(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_motDesICMS:TEXT")) == "7" .And. &("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_CST:TEXT") == "30"
  1528. nValICM := 0
  1529. Else
  1530. nValICM := Val(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_vICMSDESON:TEXT"))
  1531. EndIf
  1532. Elseif &("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_CST:TEXT") <> "40"
  1533. If AllTrim(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_motDesICMS:TEXT")) == "7" .And. &("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_CST:TEXT") == "30"
  1534. nValICM := 0
  1535. Else
  1536. nValICM := Val(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_vICMS:TEXT"))
  1537. EndIf
  1538. EndIf
  1539. EndIf
  1540. If ValAtrib("oImposto:_Imposto:_ICMS:_ICMSST")<>"U" // Tratamento para 4.0
  1541. cSitTrib := &("oImposto:_Imposto:_ICMS:_ICMSST:_ORIG:TEXT")
  1542. cSitTrib += &("oImposto:_Imposto:_ICMS:_ICMSST:_CST:TEXT")
  1543. Else
  1544. cSitTrib := &("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_ORIG:TEXT")
  1545. cSitTrib += &("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_CST:TEXT")
  1546. EndIf
  1547. EndIf
  1548. Next nY
  1549. //Tratamento para o ICMS para optantes pelo Simples Nacional
  1550. If ValAtrib("oEmitente:_CRT") <> "U" .And. oEmitente:_CRT:TEXT == "1"
  1551. nLenSit := Len(aSitSN)
  1552. For nY := 1 To nLenSit
  1553. nPrivate2 := nY
  1554. If ValAtrib("oImposto:_Imposto:_ICMS:_ICMSSN"+aSitSN[nPrivate2])<>"U"
  1555. If ValAtrib("oImposto:_Imposto:_ICMS:_ICMSSN"+aSitSN[nPrivate2]+":_VBC:TEXT")<>"U"
  1556. nBaseICM := Val(&("oImposto:_Imposto:_ICMS:_ICMSSN"+aSitSN[nY]+":_VBC:TEXT"))
  1557. nValICM := Val(&("oImposto:_Imposto:_ICMS:_ICMSSN"+aSitSN[nY]+":_vICMS:TEXT"))
  1558. nPICM := Val(&("oImposto:_Imposto:_ICMS:_ICMSSN"+aSitSN[nY]+":_PICMS:TEXT"))
  1559. EndIf
  1560. cSitTrib := &("oImposto:_Imposto:_ICMS:_ICMSSN"+aSitSN[nY]+":_ORIG:TEXT")
  1561. cSitTrib += &("oImposto:_Imposto:_ICMS:_ICMSSN"+aSitSN[nY]+":_CSOSN:TEXT")
  1562. EndIf
  1563. Next nY
  1564. EndIf
  1565. EndIf
  1566. If ValAtrib("oImposto:_Imposto:_IPI")<>"U"
  1567. If ValAtrib("oImposto:_Imposto:_IPI:_IPITrib:_vIPI:TEXT")<>"U"
  1568. nValIPI := Val(oImposto:_Imposto:_IPI:_IPITrib:_vIPI:TEXT)
  1569. EndIf
  1570. If ValAtrib("oImposto:_Imposto:_IPI:_IPITrib:_pIPI:TEXT")<>"U"
  1571. nPIPI := Val(oImposto:_Imposto:_IPI:_IPITrib:_pIPI:TEXT)
  1572. EndIf
  1573. EndIf
  1574. EndIf
  1575. nMaxCod := MaxCod(oDet[nX]:_Prod:_cProd:TEXT, MAXCODPRD)
  1576. // Tratamento para quebrar os digitos dos valores
  1577. aAux := {}
  1578. AADD(aAux, AllTrim(TransForm(nQtd,TM(nQtd,TamSX3("D2_QUANT")[1],TamSX3("D2_QUANT")[2]))))
  1579. AADD(aAux, AllTrim(TransForm(nVUnit,TM(nVUnit,TamSX3("D2_PRCVEN")[1],TamSX3("D2_PRCVEN")[2]))))
  1580. AADD(aAux, AllTrim(TransForm(nVTotal,TM(nVTotal,TamSX3("D2_TOTAL")[1],TamSX3("D2_TOTAL")[2]))))
  1581. AADD(aAux, AllTrim(TransForm(nBaseICM,TM(nBaseICM,TamSX3("D2_BASEICM")[1],TamSX3("D2_BASEICM")[2]))))
  1582. AADD(aAux, AllTrim(TransForm(nValICM,TM(nValICM,TamSX3("D2_VALICM")[1],TamSX3("D2_VALICM")[2]))))
  1583. AADD(aAux, AllTrim(TransForm(nValIPI,TM(nValIPI,TamSX3("D2_VALIPI")[1],TamSX3("D2_BASEIPI")[2]))))
  1584. aadd(aItens,{;
  1585. SubStr(oDet[nX]:_Prod:_cProd:TEXT,1,nMaxCod),;
  1586. SubStr(NoChar(oDet[nX]:_Prod:_xProd:TEXT,lConverte),1,nMaxDes),;
  1587. IIF(ValAtrib("oDet[nPrivate]:_Prod:_NCM")=="U","",oDet[nX]:_Prod:_NCM:TEXT),;
  1588. cSitTrib,;
  1589. oDet[nX]:_Prod:_CFOP:TEXT,;
  1590. oDet[nX]:_Prod:_uCom:TEXT,;
  1591. SubStr(aAux[1], 1, PosQuebrVal(aAux[1])),;
  1592. SubStr(aAux[2], 1, PosQuebrVal(aAux[2])),;
  1593. SubStr(aAux[3], 1, PosQuebrVal(aAux[3])),;
  1594. SubStr(aAux[4], 1, PosQuebrVal(aAux[4])),;
  1595. SubStr(aAux[5], 1, PosQuebrVal(aAux[5])),;
  1596. SubStr(aAux[6], 1, PosQuebrVal(aAux[6])),;
  1597. AllTrim(TransForm(nPICM,"@r 99.99%")),;
  1598. AllTrim(TransForm(nPIPI,"@r 99.99%"));
  1599. })
  1600. // Tratamento somente para o estado de MG, para totalizar por CFOP conforme RICMS-MG
  1601. If lUf_MG
  1602. aadd(aItensAux,{;
  1603. SubStr(oDet[nX]:_Prod:_cProd:TEXT,1,nMaxCod),;
  1604. SubStr(NoChar(oDet[nX]:_Prod:_xProd:TEXT,lConverte),1,nMaxDes),;
  1605. IIF(ValAtrib("oDet[nPrivate]:_Prod:_NCM")=="U","",oDet[nX]:_Prod:_NCM:TEXT),;
  1606. cSitTrib,;
  1607. oDet[nX]:_Prod:_CFOP:TEXT,;
  1608. oDet[nX]:_Prod:_uCom:TEXT,;
  1609. SubStr(aAux[1], 1, PosQuebrVal(aAux[1])),;
  1610. SubStr(aAux[2], 1, PosQuebrVal(aAux[2])),;
  1611. SubStr(aAux[3], 1, PosQuebrVal(aAux[3])),;
  1612. SubStr(aAux[4], 1, PosQuebrVal(aAux[4])),;
  1613. SubStr(aAux[5], 1, PosQuebrVal(aAux[5])),;
  1614. SubStr(aAux[6], 1, PosQuebrVal(aAux[6])),;
  1615. AllTrim(TransForm(nPICM,"@r 99.99%")),;
  1616. AllTrim(TransForm(nPIPI,"@r 99.99%")),;
  1617. StrZero( ++nSequencia, 4 ),;
  1618. nVTotal;
  1619. })
  1620. Endif
  1621. /*------------------------------------------------------------
  1622. Tratativa para caso haja quebra de linha em algum quadro do item atual
  1623. a impressao finalize na linha seguinte, antes de iniciar a impressao dos pr闛. itens.
  1624. ------------------------------------------------------------*/
  1625. cAuxItem := AllTrim(SubStr(oDet[nX]:_Prod:_cProd:TEXT,nMaxCod+1))
  1626. cAux := AllTrim(SubStr(NoChar(oDet[nX]:_Prod:_xProd:TEXT,lConverte),(nMaxDes+1)))
  1627. aAux[1] := SubStr(aAux[1], PosQuebrVal(aAux[1]) + 1)
  1628. aAux[2] := SubStr(aAux[2], PosQuebrVal(aAux[2]) + 1)
  1629. aAux[3] := SubStr(aAux[3], PosQuebrVal(aAux[3]) + 1)
  1630. aAux[4] := SubStr(aAux[4], PosQuebrVal(aAux[4]) + 1)
  1631. aAux[5] := SubStr(aAux[5], PosQuebrVal(aAux[5]) + 1)
  1632. aAux[6] := SubStr(aAux[6], PosQuebrVal(aAux[6]) + 1)
  1633. While !Empty(cAux) .Or. !Empty(cAuxItem) .Or. !Empty(aAux[1]) .Or. !Empty(aAux[2]) .Or. !Empty(aAux[3]) .Or. !Empty(aAux[4]) .Or. !Empty(aAux[5]) .Or. !Empty(aAux[6])
  1634. nMaxCod := MaxCod(cAuxItem, MAXCODPRD)
  1635. aadd(aItens,{;
  1636. SubStr(cAuxItem,1,nMaxCod),;
  1637. SubStr(cAux,1,nMaxDes),;
  1638. "",;
  1639. "",;
  1640. "",;
  1641. "",;
  1642. SubStr(aAux[1], 1, PosQuebrVal(aAux[1])),;
  1643. SubStr(aAux[2], 1, PosQuebrVal(aAux[2])),;
  1644. SubStr(aAux[3], 1, PosQuebrVal(aAux[3])),;
  1645. SubStr(aAux[4], 1, PosQuebrVal(aAux[4])),;
  1646. SubStr(aAux[5], 1, PosQuebrVal(aAux[5])),;
  1647. SubStr(aAux[6], 1, PosQuebrVal(aAux[6])),;
  1648. "",;
  1649. "";
  1650. })
  1651. If lUf_MG
  1652. aadd(aItensAux,{;
  1653. SubStr(cAuxItem,1,nMaxCod),;
  1654. SubStr(cAux,1,nMaxDes),;
  1655. "",;
  1656. "",;
  1657. oDet[nX]:_Prod:_CFOP:TEXT,;
  1658. "",;
  1659. SubStr(aAux[1], 1, PosQuebrVal(aAux[1])),;
  1660. SubStr(aAux[2], 1, PosQuebrVal(aAux[2])),;
  1661. SubStr(aAux[3], 1, PosQuebrVal(aAux[3])),;
  1662. SubStr(aAux[4], 1, PosQuebrVal(aAux[4])),;
  1663. SubStr(aAux[5], 1, PosQuebrVal(aAux[5])),;
  1664. SubStr(aAux[6], 1, PosQuebrVal(aAux[6])),;
  1665. "",;
  1666. "",;
  1667. StrZero( ++nSequencia, 4 ),;
  1668. 0;
  1669. })
  1670. Endif
  1671. // Popula as informa踥es para as pr闛imas linhas adicionais
  1672. cAux := SubStr(cAux,(nMaxDes+1))
  1673. cAuxItem := SubStr(cAuxItem,nMaxCod+1)
  1674. aAux[1] := SubStr(aAux[1], PosQuebrVal(aAux[1]) + 1)
  1675. aAux[2] := SubStr(aAux[2], PosQuebrVal(aAux[2]) + 1)
  1676. aAux[3] := SubStr(aAux[3], PosQuebrVal(aAux[3]) + 1)
  1677. aAux[4] := SubStr(aAux[4], PosQuebrVal(aAux[4]) + 1)
  1678. aAux[5] := SubStr(aAux[5], PosQuebrVal(aAux[5]) + 1)
  1679. aAux[6] := SubStr(aAux[6], PosQuebrVal(aAux[6]) + 1)
  1680. lPontilhado := .T.
  1681. EndDo
  1682. // Tratamento quando houver diferen蓷 entre as unidades uCom e uTrib ( SEFAZ MT )
  1683. If ( oDet[nX]:_Prod:_uTrib:TEXT <> oDet[nX]:_Prod:_uCom:TEXT )
  1684. lPontilhado := IIf( nLenDet > 1, .T., lPontilhado )
  1685. cUnTrib := oDet[nX]:_Prod:_uTrib:TEXT
  1686. nQtdTrib := Val(oDet[nX]:_Prod:_qTrib:TEXT)
  1687. nVUnitTrib := Val(oDet[nX]:_Prod:_vUnTrib:TEXT)
  1688. aAuxCom := {}
  1689. AADD(aAuxCom, AllTrim(TransForm(nQtdTrib,TM(nQtdTrib,TamSX3("D2_QUANT")[1],TamSX3("D2_QUANT")[2]))))
  1690. AADD(aAuxCom, AllTrim(TransForm(nVUnitTrib,TM(nVUnitTrib,TamSX3("D2_PRCVEN")[1],TamSX3("D2_PRCVEN")[2]))))
  1691. If lUf_MG
  1692. aadd(aItensAux,{;
  1693. "",;
  1694. "",;
  1695. "",;
  1696. "",;
  1697. oDet[nX]:_Prod:_CFOP:TEXT,;
  1698. cUnTrib,;
  1699. SubStr(aAuxCom[1], 1, PosQuebrVal(aAuxCom[1])),;
  1700. SubStr(aAuxCom[2], 1, PosQuebrVal(aAuxCom[2])),;
  1701. "",;
  1702. "",;
  1703. "",;
  1704. "",;
  1705. "",;
  1706. "",;
  1707. StrZero( ++nSequencia, 4 ),;
  1708. 0;
  1709. })
  1710. else
  1711. aadd(aItens,{;
  1712. "",;
  1713. "",;
  1714. "",;
  1715. "",;
  1716. "",;
  1717. cUnTrib,;
  1718. SubStr(aAuxCom[1], 1, PosQuebrVal(aAuxCom[1])),;
  1719. SubStr(aAuxCom[2], 1, PosQuebrVal(aAuxCom[2])),;
  1720. "",;
  1721. "",;
  1722. "",;
  1723. "",;
  1724. "",;
  1725. "";
  1726. })
  1727. endif
  1728. aAuxCom[1] := SubStr(aAuxCom[1], PosQuebrVal(aAuxCom[1]) + 1) // Quantidade - D2_QUANT
  1729. aAuxCom[2] := SubStr(aAuxCom[2], PosQuebrVal(aAuxCom[2]) + 1) // Valor Unitario - D2_PRCVEN
  1730. /*------------------------------------------------------------
  1731. Quebra de linha para os quadros "Quant." e "V.unit嫫io"
  1732. da 2a. unidade de medida
  1733. ------------------------------------------------------------*/
  1734. While !Empty(aAuxCom[1]) .or. !Empty(aAuxCom[2])
  1735. If lUf_MG
  1736. aadd(aItensAux,{;
  1737. "",;
  1738. "",;
  1739. "",;
  1740. "",;
  1741. oDet[nX]:_Prod:_CFOP:TEXT,;
  1742. "",;
  1743. SubStr(aAuxCom[1], 1, PosQuebrVal(aAuxCom[1])),;
  1744. SubStr(aAuxCom[2], 1, PosQuebrVal(aAuxCom[2])),;
  1745. "",;
  1746. "",;
  1747. "",;
  1748. "",;
  1749. "",;
  1750. "",;
  1751. StrZero( ++nSequencia, 4 ),;
  1752. 0;
  1753. })
  1754. endif
  1755. aadd(aItens,{;
  1756. "",;
  1757. "",;
  1758. "",;
  1759. "",;
  1760. "",;
  1761. "",;
  1762. SubStr(aAuxCom[1], 1, PosQuebrVal(aAuxCom[1])),;
  1763. SubStr(aAuxCom[2], 1, PosQuebrVal(aAuxCom[2])),;
  1764. "",;
  1765. "",;
  1766. "",;
  1767. "",;
  1768. "",;
  1769. "";
  1770. })
  1771. aAuxCom[1] := SubStr(aAuxCom[1], PosQuebrVal(aAuxCom[1]) + 1) // Quantidade - D2_QUANT
  1772. aAuxCom[2] := SubStr(aAuxCom[2], PosQuebrVal(aAuxCom[2]) + 1) // Valor Unitario - D2_PRCVEN
  1773. EndDo
  1774. Endif
  1775. If (ValAtrib("oNf:_infnfe:_det[nPrivate]:_Infadprod:TEXT") <> "U" .Or. ValAtrib("oNf:_infnfe:_det:_Infadprod:TEXT") <> "U") .And. ( lImpAnfav .Or. lImpInfAd )
  1776. If at("<", AllTrim(SubStr(oDet[nX]:_Infadprod:TEXT,1))) <> 0
  1777. cAux := stripTags(AllTrim(SubStr(oDet[nX]:_Infadprod:TEXT,1)), .T.) + " "
  1778. cAux += stripTags(AllTrim(SubStr(oDet[nX]:_Infadprod:TEXT,1)), .F.)
  1779. else
  1780. cAux := stripTags(AllTrim(SubStr(oDet[nX]:_Infadprod:TEXT,1)), .T.)
  1781. endIf
  1782. While !Empty(cAux)
  1783. aadd(aItens,{;
  1784. "",;
  1785. SubStr(cAux,1,nMaxDes),;
  1786. "",;
  1787. "",;
  1788. "",;
  1789. "",;
  1790. "",;
  1791. "",;
  1792. "",;
  1793. "",;
  1794. "",;
  1795. "",;
  1796. "",;
  1797. "";
  1798. })
  1799. If lUf_MG
  1800. aadd(aItensAux,{;
  1801. "",;
  1802. SubStr(cAux,1,nMaxDes),;
  1803. "",;
  1804. "",;
  1805. oDet[nX]:_Prod:_CFOP:TEXT,;
  1806. "",;
  1807. "",;
  1808. "",;
  1809. "",;
  1810. "",;
  1811. "",;
  1812. "",;
  1813. "",;
  1814. "",;
  1815. StrZero( ++nSequencia, 4 ),;
  1816. 0;
  1817. })
  1818. Endif
  1819. cAux := SubStr(cAux,(nMaxDes + 1))
  1820. lPontilhado := .T.
  1821. EndDo
  1822. EndIf
  1823. If lPontilhado
  1824. aadd(aItens,{;
  1825. "-",;
  1826. "-",;
  1827. "-",;
  1828. "-",;
  1829. "-",;
  1830. "-",;
  1831. "-",;
  1832. "-",;
  1833. "-",;
  1834. "-",;
  1835. "-",;
  1836. "-",;
  1837. "-",;
  1838. "-";
  1839. })
  1840. If lUf_MG
  1841. aadd(aItensAux,{;
  1842. "-",;
  1843. "-",;
  1844. "-",;
  1845. "-",;
  1846. oDet[nX]:_Prod:_CFOP:TEXT,;
  1847. "-",;
  1848. "-",;
  1849. "-",;
  1850. "-",;
  1851. "-",;
  1852. "-",;
  1853. "-",;
  1854. "-",;
  1855. "-",;
  1856. StrZero( ++nSequencia, 4 ),;
  1857. 0;
  1858. })
  1859. Endif
  1860. EndIf
  1861. Next nZ
  1862. //----------------------------------------------------------------------------------
  1863. // Tratamento somente para o estado de MG, para totalizar por CFOP conforme RICMS-MG
  1864. //----------------------------------------------------------------------------------
  1865. If lUf_MG
  1866. If Len( aItensAux ) > 0
  1867. aItensAux := aSort( aItensAux,,, { |x,y| x[5]+x[15] < y[5]+y[15] } )
  1868. nSubTotal := 0
  1869. aItens := {}
  1870. cCfop := aItensAux[1,5]
  1871. cCfopAnt := aItensAux[1,5]
  1872. For nX := 1 To Len( aItensAux )
  1873. aArray := ARRAY(14)
  1874. aArray[01] := aItensAux[nX,01]
  1875. aArray[02] := aItensAux[nX,02]
  1876. aArray[03] := aItensAux[nX,03]
  1877. aArray[04] := aItensAux[nX,04]
  1878. If Empty( aItensAux[nX,03] ) .Or. aItensAux[nX,03] == "-"
  1879. aArray[05] := ""
  1880. Else
  1881. aArray[05] := aItensAux[nX,05]
  1882. Endif
  1883. aArray[06] := aItensAux[nX,06]
  1884. aArray[07] := aItensAux[nX,07]
  1885. aArray[08] := aItensAux[nX,08]
  1886. aArray[09] := aItensAux[nX,09]
  1887. aArray[10] := aItensAux[nX,10]
  1888. aArray[11] := aItensAux[nX,11]
  1889. aArray[12] := aItensAux[nX,12]
  1890. aArray[13] := aItensAux[nX,13]
  1891. aArray[14] := aItensAux[nX,14]
  1892. If aItensAux[nX,5] == cCfop
  1893. aadd( aItens, {;
  1894. aArray[01],;
  1895. aArray[02],;
  1896. aArray[03],;
  1897. aArray[04],;
  1898. aArray[05],;
  1899. aArray[06],;
  1900. aArray[07],;
  1901. aArray[08],;
  1902. aArray[09],;
  1903. aArray[10],;
  1904. aArray[11],;
  1905. aArray[12],;
  1906. aArray[13],;
  1907. aArray[14];
  1908. } )
  1909. nSubTotal += aItensAux[nX,16]
  1910. Else
  1911. aadd(aItens,{;
  1912. "-",;
  1913. "-",;
  1914. "-",;
  1915. "-",;
  1916. "-",;
  1917. "-",;
  1918. "-",;
  1919. "-",;
  1920. "-",;
  1921. "-",;
  1922. "-",;
  1923. "-",;
  1924. "-",;
  1925. "-";
  1926. })
  1927. aadd(aItens,{;
  1928. "",;
  1929. "SUB-TOTAL",;
  1930. "",;
  1931. "",;
  1932. "",;
  1933. "",;
  1934. "",;
  1935. "",;
  1936. AllTrim(TransForm(nSubTotal,TM(nSubTotal,TamSX3("D2_TOTAL")[1],TamSX3("D2_TOTAL")[2]))),;
  1937. "",;
  1938. "",;
  1939. "",;
  1940. "",;
  1941. "";
  1942. })
  1943. aadd(aItens,{;
  1944. "",;
  1945. "",;
  1946. "",;
  1947. "",;
  1948. "",;
  1949. "",;
  1950. "",;
  1951. "",;
  1952. "",;
  1953. "",;
  1954. "",;
  1955. "",;
  1956. "",;
  1957. "";
  1958. })
  1959. cCfop := aItensAux[nX,05]
  1960. nSubTotal := aItensAux[nX,16]
  1961. aadd( aItens, {;
  1962. aArray[01],;
  1963. aArray[02],;
  1964. aArray[03],;
  1965. aArray[04],;
  1966. aArray[05],;
  1967. aArray[06],;
  1968. aArray[07],;
  1969. aArray[08],;
  1970. aArray[09],;
  1971. aArray[10],;
  1972. aArray[11],;
  1973. aArray[12],;
  1974. aArray[13],;
  1975. aArray[14];
  1976. } )
  1977. Endif
  1978. Next nX
  1979. If cCfopAnt <> cCfop .And. nSubTotal > 0
  1980. aadd(aItens,{;
  1981. "-",;
  1982. "-",;
  1983. "-",;
  1984. "-",;
  1985. "-",;
  1986. "-",;
  1987. "-",;
  1988. "-",;
  1989. "-",;
  1990. "-",;
  1991. "-",;
  1992. "-",;
  1993. "-",;
  1994. "-";
  1995. })
  1996. aadd(aItens,{;
  1997. "",;
  1998. "SUB-TOTAL",;
  1999. "",;
  2000. "",;
  2001. "",;
  2002. "",;
  2003. "",;
  2004. "",;
  2005. AllTrim(TransForm(nSubTotal,TM(nSubTotal,TamSX3("D2_TOTAL")[1],TamSX3("D2_TOTAL")[2]))),;
  2006. "",;
  2007. "",;
  2008. "",;
  2009. "",;
  2010. "";
  2011. })
  2012. Endif
  2013. Endif
  2014. Endif
  2015. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2016. //被uadro ISSQN �
  2017. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2018. aISSQN := {"","","",""}
  2019. If Type("oEmitente:_IM:TEXT")<>"U"
  2020. aISSQN[1] := oEmitente:_IM:TEXT
  2021. EndIf
  2022. If Type("oTotal:_ISSQNtot")<>"U"
  2023. aISSQN[2] := Transform(Val(oTotal:_ISSQNtot:_vServ:TEXT),"@e 999,999,999.99")
  2024. aISSQN[3] := Transform(Val(oTotal:_ISSQNtot:_vBC:TEXT),"@e 999,999,999.99")
  2025. If Type("oTotal:_ISSQNtot:_vISS:TEXT") <> "U"
  2026. aISSQN[4] := Transform(Val(oTotal:_ISSQNtot:_vISS:TEXT),"@e 999,999,999.99")
  2027. EndIf
  2028. EndIf
  2029. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2030. //被uadro de informacoes complementares �
  2031. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2032. If Type("oIdent:_DHCONT:TEXT")<>"U"
  2033. cDhCont:= oIdent:_DHCONT:TEXT
  2034. EndIf
  2035. If Type("oIdent:_XJUST:TEXT")<>"U"
  2036. cXJust:=oIdent:_XJUST:TEXT
  2037. EndIf
  2038. aMensagem := {}
  2039. If Type("oIdent:_tpAmb:TEXT")<>"U" .And. oIdent:_tpAmb:TEXT=="2"
  2040. cAux := "DANFE emitida no ambiente de homologa誽o - SEM VALOR FISCAL"
  2041. While !Empty(cAux)
  2042. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2043. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2044. EndDo
  2045. EndIf
  2046. If Type("oNF:_InfNfe:_infAdic:_infAdFisco:TEXT")<>"U"
  2047. cAux := oNF:_InfNfe:_infAdic:_infAdFisco:TEXT
  2048. While !Empty(cAux)
  2049. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2050. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2051. EndDo
  2052. EndIf
  2053. If !Empty(cCodAutSef) .AND. oIdent:_tpEmis:TEXT<>"4"
  2054. cAux := "Protocolo: "+cCodAutSef
  2055. While !Empty(cAux)
  2056. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2057. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2058. EndDo
  2059. ElseIf !Empty(cCodAutSef) .AND. oIdent:_tpEmis:TEXT=="4" .AND. cModalidade $ "1"
  2060. cAux := "Protocolo: "+cCodAutSef
  2061. While !Empty(cAux)
  2062. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2063. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2064. EndDo
  2065. cAux := "DANFE emitida anteriormente em conting瘽cia DPEC"
  2066. While !Empty(cAux)
  2067. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2068. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2069. EndDo
  2070. EndIf
  2071. If !Empty(cCodAutDPEC) .And. oIdent:_tpEmis:TEXT=="4"
  2072. cAux := "N𤦤ero de Registro DPEC: "+cCodAutDPEC
  2073. While !Empty(cAux)
  2074. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2075. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2076. EndDo
  2077. EndIf
  2078. If (Type("oIdent:_tpEmis:TEXT")<>"U" .And. !oIdent:_tpEmis:TEXT$"1,4")
  2079. cAux := "DANFE emitida em conting瘽cia"
  2080. If !Empty(cXJust) .and. !Empty(cDhCont) .and. oIdent:_tpEmis:TEXT$"6,7"// SVC-AN e SVC-RS Deve ser impresso o xjust e dhcont
  2081. cAux += " Motivo da ado誽o da conting瘽cia: "+cXJust+ " Data e hora de in獳io de utiliza誽o: "+cDhCont
  2082. EndIf
  2083. While !Empty(cAux)
  2084. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2085. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2086. EndDo
  2087. ElseIf (!Empty(cModalidade) .And. !cModalidade $ "1,4,5") .And. Empty(cCodAutSef)
  2088. cAux := "DANFE emitida em conting瘽cia devido a problemas t嶰nicos - ser� necess嫫ia a substitui誽o."
  2089. While !Empty(cAux)
  2090. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2091. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2092. EndDo
  2093. ElseIf (!Empty(cModalidade) .And. cModalidade $ "5" .And. oIdent:_tpEmis:TEXT=="4")
  2094. cAux := "DANFE impresso em conting瘽cia"
  2095. While !Empty(cAux)
  2096. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2097. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2098. EndDo
  2099. cAux := "DPEC regularmento recebido pela Receita Federal do Brasil."
  2100. While !Empty(cAux)
  2101. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2102. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2103. EndDo
  2104. ElseIf (Type("oIdent:_tpEmis:TEXT")<>"U" .And. oIdent:_tpEmis:TEXT$"5")
  2105. cAux := "DANFE emitida em conting瘽cia FS-DA"
  2106. While !Empty(cAux)
  2107. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2108. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2109. EndDo
  2110. EndIf
  2111. If Type("oNF:_InfNfe:_infAdic:_infCpl:TEXT")<>"U"
  2112. If at("<", oNF:_InfNfe:_infAdic:_InfCpl:TEXT) <> 0
  2113. cAux := stripTags(oNF:_InfNfe:_infAdic:_InfCpl:TEXT, .T.) + " "
  2114. cAux += stripTags(oNF:_InfNfe:_infAdic:_InfCpl:TEXT, .F.)
  2115. else
  2116. cAux := stripTags(oNF:_InfNfe:_infAdic:_InfCpl:TEXT, .T.)
  2117. endIf
  2118. While !Empty(cAux)
  2119. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2120. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2121. EndDo
  2122. EndIf
  2123. /*
  2124. dbSelectArea("SF1")
  2125. dbSetOrder(1)
  2126. If MsSeek(xFilial("SF1")+aNota[5]+aNota[4]+aNota[6]+aNota[7]) .And. SF1->(FieldPos("F1_FIMP"))<>0
  2127. If SF1->F1_TIPO == "D"
  2128. If Type("oNF:_InfNfe:_Total:_icmsTot:_VIPI:TEXT")<>"U"
  2129. cAux := "Valor do Ipi : " + oNF:_InfNfe:_Total:_icmsTot:_VIPI:TEXT
  2130. While !Empty(cAux)
  2131. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2132. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2133. EndDo
  2134. EndIf
  2135. EndIf
  2136. MsUnlock()
  2137. DbSkip()
  2138. EndIf
  2139. */
  2140. If MV_PAR04 == 2
  2141. //impressao do valor do desconto calculdo conforme decreto 43.080/02 RICMS-MG
  2142. nRecSF3 := SF3->(Recno())
  2143. SF3->(dbSetOrder(4))
  2144. SF3->(MsSeek(xFilial("SF3")+SF2->F2_CLIENTE+SF2->F2_LOJA+SF2->F2_DOC+SF2->F2_SERIE))
  2145. While !SF3->(Eof()) .And. SF2->F2_CLIENTE+SF2->F2_LOJA+SF2->F2_DOC+SF2->F2_SERIE == SF3->F3_CLIEFOR+SF3->F3_LOJA+SF3->F3_NFISCAL+SF3->F3_SERIE
  2146. If SF3->(FieldPos("F3_DS43080"))<>0 .And. SF3->F3_DS43080 > 0
  2147. cAux := "Base de calc.reduzida conf.Art.43, Anexo IV, Parte 1, Item 3 do RICMS-MG. Valor da deducao ICMS R$ "
  2148. cAux += Alltrim(Transform(SF3->F3_DS43080,"@e 9,999,999,999,999.99")) + " ref.reducao de base de calculo"
  2149. While !Empty(cAux)
  2150. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2151. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2152. EndDo
  2153. EndIf
  2154. SF3->(dbSkip())
  2155. EndDo
  2156. SF3->(dbGoTo(nRecSF3))
  2157. ElseIf MV_PAR04 == 1
  2158. //impressao do valor do desconto calculdo conforme decreto 43.080/02 RICMS-MG
  2159. dbSelectArea("SF1")
  2160. dbSetOrder(1)
  2161. IF MsSeek(xFilial("SF1")+aNota[5]+aNota[4]+aNota[6]+aNota[7])
  2162. dbSelectArea("SF3")
  2163. dbSetOrder(4)
  2164. If MsSeek(xFilial("SF3")+SF1->F1_FORNECE+SF1->F1_LOJA+SF1->F1_DOC+SF1->F1_SERIE)
  2165. If SF3->(FieldPos("F3_DS43080"))<>0 .And. SF3->F3_DS43080 > 0
  2166. cAux := "Base de calc.reduzida conf.Art.43, Anexo IV, Parte 1, Item 3 do RICMS-MG. Valor da deducao ICMS R$ "
  2167. cAux += Alltrim(Transform(SF3->F3_DS43080,"@ze 9,999,999,999,999.99")) + " ref.reducao de base de calculo"
  2168. While !Empty(cAux)
  2169. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2170. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2171. EndDo
  2172. EndIf
  2173. EndIf
  2174. EndIf
  2175. EndIF
  2176. For Nx := 1 to Len(aMensagem)
  2177. NoChar(aMensagem[Nx],lConverte)
  2178. Next
  2179. If Type("oNF:_INFNFE:_IDE:_NFREF")<>"U"
  2180. If Type("oNF:_INFNFE:_IDE:_NFREF") == "A"
  2181. aInfNf := oNF:_INFNFE:_IDE:_NFREF
  2182. Else
  2183. aInfNf := {oNF:_INFNFE:_IDE:_NFREF}
  2184. EndIf
  2185. For nX := 1 to Len(aMensagem)
  2186. If "ORIGINAL"$ Upper(aMensagem[nX])
  2187. lNFori2 := .F.
  2188. EndIf
  2189. Next Nx
  2190. cAux1 := ""
  2191. cAux2 := ""
  2192. For Nx := 1 to Len(aInfNf)
  2193. If ValAtrib("aInfNf["+Str(nX)+"]:_REFNFE:TEXT")<>"U" .And. !AllTrim(aInfNf[nx]:_REFNFE:TEXT)$cAux1
  2194. If !"CHAVE"$Upper(cAux1)
  2195. If "65" $ substr (aInfNf[nx]:_REFNFE:TEXT,21,2)
  2196. cAux1 += "Chave de acesso da NFC-E referenciada: "
  2197. Else
  2198. cAux1 += "Chave de acesso da NF-E referenciada: "
  2199. Endif
  2200. EndIf
  2201. cAux1 += aInfNf[nx]:_REFNFE:TEXT+","
  2202. ElseIf ValAtrib("aInfNf["+Str(nX)+"]:_REFNF:_NNF:TEXT")<>"U" .And. !AllTrim(aInfNf[nx]:_REFNF:_NNF:TEXT)$cAux2 .And. lNFori2
  2203. If !"ORIGINAL"$Upper(cAux2)
  2204. cAux2 += " Numero da nota original: "
  2205. EndIf
  2206. cAux2 += aInfNf[nx]:_REFNF:_NNF:TEXT+","
  2207. EndIf
  2208. Next
  2209. cAux := ""
  2210. If !Empty(cAux1)
  2211. cAux1 := Left(cAux1,Len(cAux1)-1)
  2212. cAux += cAux1
  2213. EndIf
  2214. If !Empty(cAux2)
  2215. cAux2 := Left(cAux2,Len(cAux2)-1)
  2216. cAux += Iif(!Empty(cAux),CRLF,"")+cAux2
  2217. EndIf
  2218. While !Empty(cAux)
  2219. aadd(aMensagem,SubStr(cAux,1,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN) - 1, MAXMENLIN)))
  2220. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, EspacoAt(cAux, MAXMENLIN), MAXMENLIN) + 1)
  2221. EndDo
  2222. For Nx := 1 to Len(aMensagem)
  2223. NoChar(aMensagem[Nx],lConverte)
  2224. Next
  2225. EndIf
  2226. //被uadro "RESERVADO AO FISCO" �
  2227. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2228. aResFisco := {}
  2229. nBaseIcm := 0
  2230. If GetNewPar("MV_BCREFIS",.F.) .And. SuperGetMv("MV_ESTADO")$"PR"
  2231. If Val(&("oTotal:_ICMSTOT:_VBCST:TEXT")) <> 0
  2232. cAux := "Substitui誽o Tribut嫫ia: Art. 471, II e �1� do RICMS/PR: "
  2233. nLenDet := Len(oDet)
  2234. For nX := 1 To nLenDet
  2235. oImposto := oDet[nX]
  2236. If ValAtrib("oImposto:_Imposto")<>"U"
  2237. If ValAtrib("oImposto:_Imposto:_ICMS")<>"U"
  2238. nLenSit := Len(aSitTrib)
  2239. For nY := 1 To nLenSit
  2240. nPrivate2 := nY
  2241. If ValAtrib("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nPrivate2])<>"U"
  2242. If ValAtrib("oImposto:_IMPOSTO:_ICMS:_ICMS"+aSitTrib[nPrivate2]+":_VBCST:TEXT")<>"U"
  2243. nBaseIcm := Val(&("oImposto:_Imposto:_ICMS:_ICMS"+aSitTrib[nY]+":_VBCST:TEXT"))
  2244. cAux += oDet[nX]:_PROD:_CPROD:TEXT + ": BCICMS-ST R$" + AllTrim(TransForm(nBaseICM,TM(nBaseICM,TamSX3("D2_BASEICM")[1],TamSX3("D2_BASEICM")[2]))) + " / "
  2245. Endif
  2246. Endif
  2247. Next nY
  2248. Endif
  2249. Endif
  2250. Next nX
  2251. Endif
  2252. While !Empty(cAux)
  2253. aadd(aResFisco,SubStr(cAux,1,60))
  2254. cAux := SubStr(cAux,IIf(EspacoAt(cAux, MAXMENLIN) > 1, 59, MAXMENLIN) +2)
  2255. EndDo
  2256. Endif
  2257. If !Empty(cMsgRet)
  2258. aMsgRet := StrTokArr( cMsgRet, "|")
  2259. aEval( aMsgRet, {|x| aadd( aResFisco, alltrim(x) ) } )
  2260. endif
  2261. /*
  2262. Calculo do numero de folhas
  2263. */
  2264. nFolhas := 1
  2265. nLenItens := Len(aItens) - nMaxItem // Todos os produtos/servi蔞s excluindo a primeira p墔ina
  2266. nMsgCompl := Len(aMensagem) - MAXMSG // Todas as mensagens complementares excluindo a primeira p墔ina
  2267. lFlag := .T.
  2268. lVerso := MV_PAR05 == 1
  2269. While lFlag
  2270. // Caso existam produtos/servi蔞s e mensagens complementares a serem escritas
  2271. If nLenItens > 0 .And. nMsgCompl > 0
  2272. nFolhas++
  2273. If lVerso .And. (nFolhas % 2) == 0 // Frente e verso e p墔ina par
  2274. nLenItens -= MAXITEMP3
  2275. Else
  2276. nLenItens -= MAXITEMP2
  2277. nMsgCompl -= MAXMSG
  2278. EndIf
  2279. // Caso existam apenas mensagens complementares a serem escritas
  2280. ElseIf nLenItens <= 0 .And. nMsgCompl > 0
  2281. nFolhas++
  2282. nMsgCompl -= MAXITEMP2
  2283. // Caso existam apenas produtos/servi蔞s a serem escritos
  2284. ElseIf nLenItens > 0 .And. nMsgCompl <= 0
  2285. nFolhas++
  2286. If lVerso .And. (nFolhas % 2) == 0 // Frente e verso e p墔ina par
  2287. nLenItens -= MAXITEMP3
  2288. Else
  2289. nLenItens -= MAXITEMP2F
  2290. EndIf
  2291. Else
  2292. lFlag := .F.
  2293. EndIf
  2294. EndDo
  2295. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2296. //蛆nicializacao do objeto grafico �
  2297. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2298. If oDanfe == Nil
  2299. lPreview := .T.
  2300. oDanfe := FWMSPrinter():New("DANFE", IMP_SPOOL)
  2301. oDanfe:SetPortrait()
  2302. oDanfe:Setup()
  2303. EndIf
  2304. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2305. //蛆nicializacao da pagina do objeto grafico �
  2306. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2307. oDanfe:StartPage()
  2308. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2309. //蛇efinicao do Box - Recibo de entrega �
  2310. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2311. oDanfe:Box(000,000,010,501)
  2312. oDanfe:Say(006, 002, "RECEBEMOS DE "+NoChar(oEmitente:_xNome:Text,lConverte)+" OS PRODUTOS CONSTANTES DA NOTA FISCAL INDICADA AO LADO", oFont07:oFont)
  2313. oDanfe:Box(009,000,037,101)
  2314. oDanfe:Say(017, 002, "DATA DE RECEBIMENTO", oFont07N:oFont)
  2315. oDanfe:Box(009,100,037,500)
  2316. oDanfe:Say(017, 102, "IDENTIFICAデO E ASSINATURA DO RECEBEDOR", oFont07N:oFont)
  2317. oDanfe:Box(000,500,037,603)
  2318. oDanfe:Say(007, 542, iif(lNFCE,"NFC-e","NF-e"), oFont08N:oFont)
  2319. oDanfe:Say(017, 510, "N. "+StrZero(Val(oIdent:_NNf:Text),9), oFont08:oFont)
  2320. oDanfe:Say(027, 510, "S仂IE "+SubStr(oIdent:_Serie:Text,1,3), oFont08:oFont)
  2321. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2322. //被uadro 1 IDENTIFICACAO DO EMITENTE �
  2323. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2324. oDanfe:Box(042,000,137,250)
  2325. oDanfe:Say(052,096, "Identifica誽o do emitente",oFont12N:oFont)
  2326. nLinCalc := 065
  2327. cStrAux := AllTrim(NoChar(oEmitente:_xNome:Text,lConverte))
  2328. nForTo := Len(cStrAux)/24
  2329. nForTo := Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1,Round(nForTo,0))
  2330. For nX := 1 To nForTo
  2331. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*24)+1),24), oFont12N:oFont )
  2332. nLinCalc+=10
  2333. Next nX
  2334. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xLgr:Text,lConverte))+", "+AllTrim(oEmitente:_EnderEmit:_Nro:Text)
  2335. nForTo := Len(cStrAux)/40
  2336. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  2337. For nX := 1 To nForTo
  2338. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  2339. nLinCalc+=10
  2340. Next nX
  2341. If Type("oEmitente:_EnderEmit:_xCpl") <> "U"
  2342. cStrAux := "Complemento: "+AllTrim(NoChar(oEmitente:_EnderEmit:_xCpl:TEXT,lConverte))
  2343. nForTo := Len(cStrAux)/40
  2344. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  2345. For nX := 1 To nForTo
  2346. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  2347. nLinCalc+=10
  2348. Next nX
  2349. cStrAux := AllTrim(oEmitente:_EnderEmit:_xBairro:Text)
  2350. If Type("oEmitente:_EnderEmit:_Cep")<>"U"
  2351. cStrAux += " Cep:"+TransForm(oEmitente:_EnderEmit:_Cep:Text,"@r 99999-999")
  2352. EndIf
  2353. nForTo := Len(cStrAux)/40
  2354. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  2355. For nX := 1 To nForTo
  2356. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  2357. nLinCalc+=10
  2358. Next nX
  2359. oDanfe:Say(nLinCalc,096, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  2360. nLinCalc+=9
  2361. oDanfe:Say(nLinCalc,096, "Fone: "+IIf(Type("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  2362. Else
  2363. oDanfe:Say(nLinCalc,096, NoChar(oEmitente:_EnderEmit:_xBairro:Text,lConverte)+" Cep:"+TransForm(IIF(Type("oEmitente:_EnderEmit:_Cep")=="U","",oEmitente:_EnderEmit:_Cep:Text),"@r 99999-999"),oFont08N:oFont)
  2364. nLinCalc+=10
  2365. oDanfe:Say(nLinCalc,096, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  2366. nLinCalc+=9
  2367. oDanfe:Say(nLinCalc,096, "Fone: "+IIf(Type("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  2368. EndIf
  2369. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2370. //被uadro 2 �
  2371. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2372. oDanfe:Box(042,248,137,351)
  2373. oDanfe:Say(055,275, "DANFE",oFont18N:oFont)
  2374. oDanfe:Say(065,258, "DOCUMENTO AUXILIAR DA",oFont07:oFont)
  2375. if lNFCE
  2376. oDanfe:Say(075,258, "NOTA FISCAL DE CONSUMIDOR",oFont07:oFont)
  2377. else
  2378. oDanfe:Say(075,258, "NOTA FISCAL ELETR偡ICA",oFont07:oFont)
  2379. endif
  2380. oDanfe:Say(085,266, "0-ENTRADA",oFont08:oFont)
  2381. oDanfe:Say(095,266, "1-SA沝A" ,oFont08:oFont)
  2382. oDanfe:Box(078,315,095,325)
  2383. oDanfe:Say(089,318, oIdent:_TpNf:Text,oFont08N:oFont)
  2384. oDanfe:Say(110,255,"N. "+StrZero(Val(oIdent:_NNf:Text),9),oFont10N:oFont)
  2385. oDanfe:Say(120,255,"S仂IE "+SubStr(oIdent:_Serie:Text,1,3),oFont10N:oFont)
  2386. oDanfe:Say(130,255,"FOLHA "+StrZero(nFolha,2)+"/"+StrZero(nFolhas,2),oFont10N:oFont)
  2387. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2388. //袈reenchimento do Array de UF �
  2389. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2390. aadd(aUF,{"RO","11"})
  2391. aadd(aUF,{"AC","12"})
  2392. aadd(aUF,{"AM","13"})
  2393. aadd(aUF,{"RR","14"})
  2394. aadd(aUF,{"PA","15"})
  2395. aadd(aUF,{"AP","16"})
  2396. aadd(aUF,{"TO","17"})
  2397. aadd(aUF,{"MA","21"})
  2398. aadd(aUF,{"PI","22"})
  2399. aadd(aUF,{"CE","23"})
  2400. aadd(aUF,{"RN","24"})
  2401. aadd(aUF,{"PB","25"})
  2402. aadd(aUF,{"PE","26"})
  2403. aadd(aUF,{"AL","27"})
  2404. aadd(aUF,{"MG","31"})
  2405. aadd(aUF,{"ES","32"})
  2406. aadd(aUF,{"RJ","33"})
  2407. aadd(aUF,{"SP","35"})
  2408. aadd(aUF,{"PR","41"})
  2409. aadd(aUF,{"SC","42"})
  2410. aadd(aUF,{"RS","43"})
  2411. aadd(aUF,{"MS","50"})
  2412. aadd(aUF,{"MT","51"})
  2413. aadd(aUF,{"GO","52"})
  2414. aadd(aUF,{"DF","53"})
  2415. aadd(aUF,{"SE","28"})
  2416. aadd(aUF,{"BA","29"})
  2417. aadd(aUF,{"EX","99"})
  2418. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2419. //蚯ogotipo �
  2420. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2421. If lMv_Logod
  2422. cGrpCompany := AllTrim(FWGrpCompany())
  2423. cCodEmpGrp := AllTrim(FWCodEmp())
  2424. cUnitGrp := AllTrim(FWUnitBusiness())
  2425. cFilGrp := AllTrim(FWFilial())
  2426. If !Empty(cUnitGrp)
  2427. cDescLogo := cGrpCompany + cCodEmpGrp + cUnitGrp + cFilGrp
  2428. Else
  2429. cDescLogo := cEmpAnt + cFilAnt
  2430. EndIf
  2431. cLogoD := GetSrvProfString("Startpath","") + "DANFE" + cDescLogo + ".BMP"
  2432. If !File(cLogoD)
  2433. cLogoD := GetSrvProfString("Startpath","") + "DANFE" + cEmpAnt + ".BMP"
  2434. If !File(cLogoD)
  2435. lMv_Logod := .F.
  2436. EndIf
  2437. EndIf
  2438. EndIf
  2439. If nfolha==1
  2440. If lMv_Logod
  2441. oDanfe:SayBitmap(045,003,cLogoD,070,070)
  2442. Else
  2443. oDanfe:SayBitmap(045,003,cLogo,070,070)
  2444. EndIF
  2445. Endif
  2446. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  2447. //彪odigo de barra �
  2448. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  2449. oDanfe:Box(042,350,088,603)
  2450. oDanfe:Box(075,350,110,603)
  2451. oDanfe:Say(095,355,TransForm(SubStr(oNF:_InfNfe:_ID:Text,4),"@r 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999"),oFont12N:oFont)
  2452. oDanfe:Box(105,350,137,603)
  2453. If nFolha == 1
  2454. oDanfe:Say(085,355,"CHAVE DE ACESSO DA "+iif(lNFCE,"NFC-E","NF-E"),oFont12N:oFont)
  2455. nFontSize := 28
  2456. oDanfe:Code128C(072,370,SubStr(oNF:_InfNfe:_ID:Text,4), nFontSize )
  2457. EndIf
  2458. If !Empty(cCodAutDPEC) .And. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"4" .And. !lUsaColab
  2459. cDataEmi := Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",Substr(oNFe:_NFE:_INFNFE:_IDE:_DHEMI:Text,9,2),Substr(oNFe:_NFE:_INFNFE:_IDE:_DEMI:Text,9,2))
  2460. cTPEmis := "4"
  2461. If Type("oDPEC:_ENVDPEC:_INFDPEC:_RESNFE") <> "U"
  2462. cUF := aUF[aScan(aUF,{|x| x[1] == oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_UF:Text})][02]
  2463. cValIcm := StrZero(Val(StrTran(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VNF:TEXT,".","")),14)
  2464. cICMSp := iif(Val(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VICMS:TEXT)>0,"1","2")
  2465. cICMSs := iif(Val(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VST:TEXT)>0,"1","2")
  2466. ElseIf type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST") <> "U" //EPEC NFE
  2467. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_UF:TEXT") <> "U"
  2468. cUF := aUF[aScan(aUF,{|x| x[1] == oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_UF:TEXT})][02]
  2469. EndIf
  2470. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VNF:TEXT") <> "U"
  2471. cValIcm := StrZero(Val(StrTran(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VNF:TEXT,".","")),14)
  2472. EndIf
  2473. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VICMS:TEXT") <> "U"
  2474. cICMSp:= IIf(Val(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VICMS:TEXT) > 0,"1","2")
  2475. EndIf
  2476. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VST:TEXT") <> "U"
  2477. cICMSs := IIf(Val(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VST:TEXT )> 0,"1","2")
  2478. EndIf
  2479. EndIf
  2480. ElseIF (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25" .Or. ( (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"4" .And. lUsaColab .And. !Empty(cCodAutDPEC) )
  2481. cUF := aUF[aScan(aUF,{|x| x[1] == oNFe:_NFE:_INFNFE:_DEST:_ENDERDEST:_UF:Text})][02]
  2482. cDataEmi := Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",Substr(oNFe:_NFE:_INFNFE:_IDE:_DHEMI:Text,9,2),Substr(oNFe:_NFE:_INFNFE:_IDE:_DEMI:Text,9,2))
  2483. cTPEmis := oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT
  2484. cValIcm := StrZero(Val(StrTran(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VNF:TEXT,".","")),14)
  2485. cICMSp := iif(Val(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VICMS:TEXT)>0,"1","2")
  2486. cICMSs :=iif(Val(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VST:TEXT)>0,"1","2")
  2487. EndIf
  2488. If !Empty(cUF) .And. !Empty(cDataEmi) .And. !Empty(cTPEmis) .And. !Empty(cValIcm) .And. !Empty(cICMSp) .And. !Empty(cICMSs)
  2489. If Type("oNF:_InfNfe:_DEST:_CNPJ:Text")<>"U"
  2490. cCNPJCPF := oNF:_InfNfe:_DEST:_CNPJ:Text
  2491. If cUf == "99"
  2492. cCNPJCPF := STRZERO(val(cCNPJCPF),14)
  2493. EndIf
  2494. ElseIf Type("oNF:_INFNFE:_DEST:_CPF:Text")<>"U"
  2495. cCNPJCPF := oNF:_INFNFE:_DEST:_CPF:Text
  2496. cCNPJCPF := STRZERO(val(cCNPJCPF),14)
  2497. Else
  2498. cCNPJCPF := ""
  2499. EndIf
  2500. cChaveCont += cUF+cTPEmis+cCNPJCPF+cValIcm+cICMSp+cICMSs+cDataEmi
  2501. cChaveCont := cChaveCont+Modulo11(cChaveCont)
  2502. EndIf
  2503. If Empty(cCodAutDPEC)
  2504. If Empty(cChaveCont)
  2505. oDanfe:Say(117,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  2506. oDanfe:Say(127,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  2507. Endif
  2508. Endif
  2509. If !Empty(cCodAutDPEC)
  2510. oDanfe:Say(117,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  2511. oDanfe:Say(127,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  2512. Endif
  2513. // inicio do segundo codigo de barras ref. a transmissao CONTIGENCIA OFF LINE
  2514. If !Empty(cChaveCont) .And. Empty(cCodAutDPEC) .And. !(Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900)
  2515. If nFolha == 1
  2516. If !Empty(cChaveCont)
  2517. nFontSize := 28
  2518. oDanfe:Code128C(135,370,cChaveCont, nFontSize )
  2519. EndIf
  2520. Else
  2521. If !Empty(cChaveCont)
  2522. nFontSize := 28
  2523. oDanfe:Code128C(112,370,cChaveCont, nFontSize )
  2524. EndIf
  2525. EndIf
  2526. EndIf
  2527. //Quadro 4
  2528. oDanfe:Box(139,000,162,603)
  2529. oDanfe:Box(139,000,162,350)
  2530. oDanfe:Say(148,002,"NATUREZA DA OPERAデO",oFont08N:oFont)
  2531. oDanfe:Say(158,002,oIdent:_NATOP:TEXT,oFont08:oFont)
  2532. If !Empty(cCodAutDPEC)
  2533. oDanfe:Say(148,352,"N渧ERO DE REGISTRO DPEC",oFont08N:oFont)
  2534. Endif
  2535. If Empty(cCodAutDPEC) .And. (((Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900).And.(oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"23") .Or. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"1|6|7")
  2536. oDanfe:Say(148,352,"PROTOCOLO DE AUTORIZAデO DE USO",oFont08N:oFont)
  2537. Endif
  2538. If((oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25")
  2539. oDanfe:Say(148,352,"DADOS DA "+iif(lNFCE,"NFC-E","NF-E"),oFont08N:oFont)
  2540. Endif
  2541. cDadosProt := IIF(!Empty(cCodAutDPEC),cCodAutDPEC+" "+AllTrim(IIF(!Empty(dDtReceb),ConvDate(DTOS(dDtReceb)),ConvDate(oNF:_InfNfe:_IDE:_DHEMI:Text)))+" "+AllTrim(cDtHrRecCab),IIF(!Empty(cCodAutSef) .And. ((Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900).And.(oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"23") .Or. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"1|6|7",cCodAutSef+" "+AllTrim(IIF(!Empty(dDtReceb),ConvDate(DTOS(dDtReceb)),ConvDate(oNF:_InfNfe:_IDE:_DHEMI:Text)))+" "+AllTrim(cDtHrRecCab),TransForm(cChaveCont,"@r 9999 9999 9999 9999 9999 9999 9999 9999 9999")))
  2542. oDanfe:Say(158,354,cDadosProt,oFont08:oFont)
  2543. nFolha++
  2544. //Quadro 5
  2545. oDanfe:Box(164,000,187,603)
  2546. oDanfe:Box(164,000,187,200)
  2547. oDanfe:Box(164,200,187,400)
  2548. oDanfe:Box(164,400,187,603)
  2549. oDanfe:Say(172,002,"INSCRIデO ESTADUAL",oFont08N:oFont)
  2550. oDanfe:Say(180,002,IIf(Type("oEmitente:_IE:TEXT")<>"U",oEmitente:_IE:TEXT,""),oFont08:oFont)
  2551. oDanfe:Say(172,205,"INSC.ESTADUAL DO SUBST.TRIB.",oFont08N:oFont)
  2552. oDanfe:Say(180,205,IIf(Type("oEmitente:_IEST:TEXT")<>"U",oEmitente:_IEST:TEXT,""),oFont08:oFont)
  2553. oDanfe:Say(172,405,"CNPJ/CPF",oFont08N:oFont)
  2554. Do Case
  2555. Case Type("oEmitente:_CNPJ")=="O"
  2556. cAux := TransForm(oEmitente:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  2557. Case Type("oEmitente:_CPF")=="O"
  2558. cAux := TransForm(oEmitente:_CPF:TEXT,"@r 999.999.999-99")
  2559. OtherWise
  2560. cAux := Space(14)
  2561. EndCase
  2562. oDanfe:Say(180,405,cAux,oFont08:oFont)
  2563. //Quadro destinat嫫io/remetente
  2564. Do Case
  2565. Case Type("oDestino:_CNPJ")=="O"
  2566. cAux := TransForm(oDestino:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  2567. Case Type("oDestino:_CPF")=="O"
  2568. cAux := TransForm(oDestino:_CPF:TEXT,"@r 999.999.999-99")
  2569. OtherWise
  2570. cAux := Space(14)
  2571. EndCase
  2572. oDanfe:Say(195,002,"DESTINATARIO/REMETENTE",oFont08N:oFont)
  2573. oDanfe:Box(197,000,217,450)
  2574. oDanfe:Say(205,002, "NOME/RAZ鬃 SOCIAL",oFont08N:oFont)
  2575. oDanfe:Say(215,002,NoChar(oDestino:_XNome:TEXT,lConverte),oFont08:oFont)
  2576. oDanfe:Box(197,280,217,500)
  2577. oDanfe:Say(205,283,"CNPJ/CPF",oFont08N:oFont)
  2578. oDanfe:Say(215,283,cAux,oFont08:oFont)
  2579. oDanfe:Box(217,000,237,500)
  2580. oDanfe:Box(217,000,237,260)
  2581. oDanfe:Say(224,002,"ENDEREと",oFont08N:oFont)
  2582. oDanfe:Say(234,002,aDest[01],oFont08:oFont)
  2583. oDanfe:Box(217,230,237,380)
  2584. oDanfe:Say(224,232,"BAIRRO/DISTRITO",oFont08N:oFont)
  2585. oDanfe:Say(234,232,aDest[02],oFont08:oFont)
  2586. oDanfe:Box(217,380,237,500)
  2587. oDanfe:Say(224,382,"CEP",oFont08N:oFont)
  2588. oDanfe:Say(234,382,aDest[03],oFont08:oFont)
  2589. oDanfe:Box(236,000,257,500)
  2590. oDanfe:Box(236,000,257,180)
  2591. oDanfe:Say(245,002,"MUNICIPIO",oFont08N:oFont)
  2592. oDanfe:Say(255,002,aDest[05],oFont08:oFont)
  2593. oDanfe:Box(236,150,257,256)
  2594. oDanfe:Say(245,152,"FONE/FAX",oFont08N:oFont)
  2595. oDanfe:Say(255,152,aDest[06],oFont08:oFont)
  2596. oDanfe:Box(236,255,257,341)
  2597. oDanfe:Say(245,257,"UF",oFont08N:oFont)
  2598. oDanfe:Say(255,257,aDest[07],oFont08:oFont)
  2599. oDanfe:Box(236,340,257,500)
  2600. oDanfe:Say(245,342,"INSCRIデO ESTADUAL",oFont08N:oFont)
  2601. oDanfe:Say(255,342,aDest[08],oFont08:oFont)
  2602. oDanfe:Box(197,502,217,603)
  2603. oDanfe:Say(205,504,"DATA DE EMISS鬃",oFont08N:oFont)
  2604. oDanfe:Say(215,504,Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",ConvDate(oIdent:_DHEmi:TEXT),ConvDate(oIdent:_DEmi:TEXT)),oFont08:oFont)
  2605. oDanfe:Box(217,502,237,603)
  2606. oDanfe:Say(224,504,"DATA ENTRADA/SA沝A",oFont08N:oFont)
  2607. oDanfe:Say(233,504,Iif( Empty(aDest[4]),"",ConvDate(aDest[4]) ),oFont08:oFont)
  2608. oDanfe:Box(236,502,257,603)
  2609. oDanfe:Say(243,503,"HORA ENTRADA/SA沝A",oFont08N:oFont)
  2610. oDanfe:Say(252,503,aHrEnt[01],oFont08:oFont)
  2611. //Quadro Informa踥es do local de retirada
  2612. If valType(oRetirada)=="O"
  2613. Do Case
  2614. Case Type("oRetirada:_CNPJ")=="O"
  2615. cAux := TransForm(oRetirada:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  2616. Case Type("oRetirada:_CPF")=="O"
  2617. cAux := TransForm(oRetirada:_CPF:TEXT,"@r 999.999.999-99")
  2618. OtherWise
  2619. cAux := Space(14)
  2620. EndCase
  2621. oDanfe:Say(195+nAjustaRet,002,"INFORMAベES DO LOCAL DE RETIRADA",oFont08N:oFont)
  2622. oDanfe:Box(197+nAjustaRet,000,217+nAjustaRet,450)
  2623. oDanfe:Say(205+nAjustaRet,002, "NOME/RAZ鬃 SOCIAL",oFont08N:oFont)
  2624. oDanfe:Say(215+nAjustaRet,002,NoChar(aRetirada[1],lConverte),oFont08:oFont)
  2625. oDanfe:Box(197+nAjustaRet,380,217+nAjustaRet,500)
  2626. oDanfe:Say(205+nAjustaRet,383,"CNPJ/CPF",oFont08N:oFont)
  2627. oDanfe:Say(215+nAjustaRet,383,cAux,oFont08:oFont)
  2628. oDanfe:Box(217+nAjustaRet,000,237+nAjustaRet,500)
  2629. oDanfe:Box(217+nAjustaRet,000,237+nAjustaRet,260)
  2630. oDanfe:Say(224+nAjustaRet,002,"ENDEREと",oFont08N:oFont)
  2631. oDanfe:Say(234+nAjustaRet,002,MontaEnd(oRetirada),oFont08:oFont)
  2632. oDanfe:Say(224+nAjustaRet,262,"BAIRRO/DISTRITO",oFont08N:oFont)
  2633. oDanfe:Say(234+nAjustaRet,262,aRetirada[7],oFont08:oFont)
  2634. oDanfe:Box(236+nAjustaRet,000,257+nAjustaRet,500)
  2635. oDanfe:Box(236+nAjustaRet,000,257+nAjustaRet,480)
  2636. oDanfe:Say(245+nAjustaRet,002,"MUNICIPIO",oFont08N:oFont)
  2637. oDanfe:Say(255+nAjustaRet,002,aRetirada[8],oFont08:oFont)
  2638. oDanfe:Say(245+nAjustaRet,485,"UF",oFont08N:oFont)
  2639. oDanfe:Say(255+nAjustaRet,485,aRetirada[09],oFont08:oFont)
  2640. oDanfe:Box(197+nAjustaRet,502,217+nAjustaRet,603)
  2641. oDanfe:Say(205+nAjustaRet,504,"INSCRIデO ESTADUAL",oFont08N:oFont)
  2642. oDanfe:Say(215+nAjustaRet,504,aRetirada[10],oFont08:oFont)
  2643. oDanfe:Box(217+nAjustaRet,502,237+nAjustaRet,603)
  2644. oDanfe:Say(224+nAjustaRet,504,"CEP",oFont08N:oFont)
  2645. oDanfe:Say(233+nAjustaRet,504,aRetirada[11],oFont08:oFont)
  2646. oDanfe:Box(236+nAjustaRet,502,257+nAjustaRet,603)
  2647. oDanfe:Say(243+nAjustaRet,503,"FONE/FAX",oFont08N:oFont)
  2648. oDanfe:Say(252+nAjustaRet,503,aRetirada[12],oFont08:oFont)
  2649. endIf
  2650. //Quadro Informa踥es do local de entrega
  2651. If valType(oEntrega)=="O"
  2652. Do Case
  2653. Case Type("oEntrega:_CNPJ")=="O"
  2654. cAux := TransForm(oEntrega:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  2655. Case Type("oEntrega:_CPF")=="O"
  2656. cAux := TransForm(oEntrega:_CPF:TEXT,"@r 999.999.999-99")
  2657. OtherWise
  2658. cAux := Space(14)
  2659. EndCase
  2660. oDanfe:Say(195+nAjustaEnt,002,"INFORMAベES DO LOCAL DE ENTREGA",oFont08N:oFont)
  2661. oDanfe:Box(197+nAjustaEnt,000,217+nAjustaEnt,450)
  2662. oDanfe:Say(205+nAjustaEnt,002, "NOME/RAZ鬃 SOCIAL",oFont08N:oFont)
  2663. oDanfe:Say(215+nAjustaEnt,002,NoChar(aEntrega[1],lConverte),oFont08:oFont)
  2664. oDanfe:Box(197+nAjustaEnt,380,217+nAjustaEnt,500)
  2665. oDanfe:Say(205+nAjustaEnt,383,"CNPJ/CPF",oFont08N:oFont)
  2666. oDanfe:Say(215+nAjustaEnt,383,cAux,oFont08:oFont)
  2667. oDanfe:Box(217+nAjustaEnt,000,237+nAjustaEnt,500)
  2668. oDanfe:Box(217+nAjustaEnt,000,237+nAjustaEnt,260)
  2669. oDanfe:Say(224+nAjustaEnt,002,"ENDEREと",oFont08N:oFont)
  2670. oDanfe:Say(234+nAjustaEnt,002,MontaEnd(oEntrega),oFont08:oFont)
  2671. oDanfe:Say(224+nAjustaEnt,262,"BAIRRO/DISTRITO",oFont08N:oFont)
  2672. oDanfe:Say(234+nAjustaEnt,262,aEntrega[7],oFont08:oFont)
  2673. oDanfe:Box(236+nAjustaEnt,000,257+nAjustaEnt,500)
  2674. oDanfe:Box(236+nAjustaEnt,000,257+nAjustaEnt,480)
  2675. oDanfe:Say(245+nAjustaEnt,002,"MUNICIPIO",oFont08N:oFont)
  2676. oDanfe:Say(255+nAjustaEnt,002,aEntrega[8],oFont08:oFont)
  2677. oDanfe:Say(245+nAjustaEnt,485,"UF",oFont08N:oFont)
  2678. oDanfe:Say(255+nAjustaEnt,485,aEntrega[9],oFont08:oFont)
  2679. oDanfe:Box(197+nAjustaEnt,502,217+nAjustaEnt,603)
  2680. oDanfe:Say(205+nAjustaEnt,504,"INSCRIデO ESTADUAL",oFont08N:oFont)
  2681. oDanfe:Say(215+nAjustaEnt,504,aEntrega[10],oFont08:oFont)
  2682. oDanfe:Box(217+nAjustaEnt,502,237+nAjustaEnt,603)
  2683. oDanfe:Say(224+nAjustaEnt,504,"CEP",oFont08N:oFont)
  2684. oDanfe:Say(233+nAjustaEnt,504,aEntrega[11],oFont08:oFont)
  2685. oDanfe:Box(236+nAjustaEnt,502,257+nAjustaEnt,603)
  2686. oDanfe:Say(243+nAjustaEnt,503,"FONE/FAX",oFont08N:oFont)
  2687. oDanfe:Say(252+nAjustaEnt,503,aEntrega[12],oFont08:oFont)
  2688. EndiF
  2689. //Quadro fatura
  2690. aAux := {{{},{},{},{},{},{},{},{},{}}}
  2691. nY := 0
  2692. For nX := 1 To Len(aFaturas)
  2693. nY++
  2694. aadd(Atail(aAux)[nY],aFaturas[nX][1])
  2695. nY++
  2696. aadd(Atail(aAux)[nY],aFaturas[nX][2])
  2697. nY++
  2698. aadd(Atail(aAux)[nY],aFaturas[nX][3])
  2699. nY++
  2700. aadd(Atail(aAux)[nY],aFaturas[nX][4])
  2701. nY++
  2702. aadd(Atail(aAux)[nY],aFaturas[nX][5])
  2703. nY++
  2704. aadd(Atail(aAux)[nY],aFaturas[nX][6])
  2705. nY++
  2706. aadd(Atail(aAux)[nY],aFaturas[nX][7])
  2707. nY++
  2708. aadd(Atail(aAux)[nY],aFaturas[nX][8])
  2709. nY++
  2710. aadd(Atail(aAux)[nY],aFaturas[nX][9])
  2711. If nY >= 9
  2712. nY := 0
  2713. EndIf
  2714. Next nX
  2715. oDanfe:Say(263+nAjustaFat,002,"FATURA",oFont08N:oFont)
  2716. oDanfe:Box(265+nAjustaFat,000,296+nAjustaFat,068)
  2717. oDanfe:Box(265+nAjustaFat,067,296+nAjustaFat,134)
  2718. oDanfe:Box(265+nAjustaFat,134,296+nAjustaFat,202)
  2719. oDanfe:Box(265+nAjustaFat,201,296+nAjustaFat,268)
  2720. oDanfe:Box(265+nAjustaFat,268,296+nAjustaFat,335)
  2721. oDanfe:Box(265+nAjustaFat,335,296+nAjustaFat,403)
  2722. oDanfe:Box(265+nAjustaFat,402,296+nAjustaFat,469)
  2723. oDanfe:Box(265+nAjustaFat,469,296+nAjustaFat,537)
  2724. oDanfe:Box(265+nAjustaFat,536,296+nAjustaFat,603)
  2725. nColuna := 002
  2726. If Len(aFaturas) >0
  2727. For nY := 1 To 9
  2728. oDanfe:Say(273+nAjustaFat,nColuna,aAux[1][nY][1],oFont08:oFont)
  2729. oDanfe:Say(281+nAjustaFat,nColuna,aAux[1][nY][2],oFont08:oFont)
  2730. oDanfe:Say(289+nAjustaFat,nColuna,aAux[1][nY][3],oFont08:oFont)
  2731. nColuna:= nColuna+67
  2732. Next nY
  2733. Endif
  2734. //Calculo do imposto
  2735. oDanfe:Say(305+nAjustImp,002,"CALCULO DO IMPOSTO",oFont08N:oFont)
  2736. oDanfe:Box(307+nAjustImp,000,330+nAjustImp,121)
  2737. oDanfe:Say(316+nAjustImp,002,"BASE DE CALCULO DO ICMS",oFont08N:oFont)
  2738. If cMVCODREG $ "2|3"
  2739. oDanfe:Say(326+nAjustImp,002,aTotais[01],oFont08:oFont)
  2740. ElseIf lImpSimpN
  2741. oDanfe:Say(326+nAjustImp,002,aSimpNac[01],oFont08:oFont)
  2742. Endif
  2743. oDanfe:Box(307+nAjustImp,120,330+nAjustImp,200)
  2744. oDanfe:Say(316+nAjustImp,125,"VALOR DO ICMS",oFont08N:oFont)
  2745. If cMVCODREG $ "2|3"
  2746. oDanfe:Say(326+nAjustImp,125,aTotais[02],oFont08:oFont)
  2747. ElseIf lImpSimpN
  2748. oDanfe:Say(326+nAjustImp,125,aSimpNac[02],oFont08:oFont)
  2749. Endif
  2750. oDanfe:Box(307+nAjustImp,199,330+nAjustImp,360)
  2751. oDanfe:Say(316+nAjustImp,200,"BASE DE CALCULO DO ICMS SUBSTITUIデO",oFont08N:oFont)
  2752. oDanfe:Say(326+nAjustImp,202,aTotais[03],oFont08:oFont)
  2753. oDanfe:Box(307+nAjustImp,360,330+nAjustImp,490)
  2754. oDanfe:Say(316+nAjustImp,363,"VALOR DO ICMS SUBSTITUIデO",oFont08N:oFont)
  2755. oDanfe:Say(326+nAjustImp,363,aTotais[04],oFont08:oFont)
  2756. oDanfe:Box(307+nAjustImp,490,330+nAjustImp,603)
  2757. oDanfe:Say(316+nAjustImp,491,"VALOR TOTAL DOS PRODUTOS",oFont08N:oFont)
  2758. oDanfe:Say(327+nAjustImp,491,aTotais[05],oFont08:oFont)
  2759. oDanfe:Box(330+nAjustImp,000,353+nAjustImp,110)
  2760. oDanfe:Say(339+nAjustImp,002,"VALOR DO FRETE",oFont08N:oFont)
  2761. oDanfe:Say(349+nAjustImp,002,aTotais[06],oFont08:oFont)
  2762. oDanfe:Box(330+nAjustImp,100,353+nAjustImp,190)
  2763. oDanfe:Say(339+nAjustImp,102,"VALOR DO SEGURO",oFont08N:oFont)
  2764. oDanfe:Say(349+nAjustImp,102,aTotais[07],oFont08:oFont)
  2765. oDanfe:Box(330+nAjustImp,190,353+nAjustImp,290)
  2766. oDanfe:Say(339+nAjustImp,194,"DESCONTO",oFont08N:oFont)
  2767. oDanfe:Say(349+nAjustImp,194,aTotais[08],oFont08:oFont)
  2768. oDanfe:Box(330+nAjustImp,290,353+nAjustImp,415)
  2769. oDanfe:Say(339+nAjustImp,295,"OUTRAS DESPESAS ACESS紑IAS",oFont08N:oFont)
  2770. oDanfe:Say(349+nAjustImp,295,aTotais[09],oFont08:oFont)
  2771. oDanfe:Box(330+nAjustImp,414,353+nAjustImp,500)
  2772. oDanfe:Say(339+nAjustImp,420,"VALOR DO IPI",oFont08N:oFont)
  2773. oDanfe:Say(349+nAjustImp,420,aTotais[10],oFont08:oFont)
  2774. oDanfe:Box(330+nAjustImp,500,353+nAjustImp,603)
  2775. oDanfe:Say(339+nAjustImp,506,"VALOR TOTAL DA NOTA",oFont08N:oFont)
  2776. oDanfe:Say(349+nAjustImp,506,aTotais[11],oFont08:oFont)
  2777. //Transportador/Volumes transportados
  2778. oDanfe:Say(361+nAjustaVt,002,"TRANSPORTADOR/VOLUMES TRANSPORTADOS",oFont08N:oFont)
  2779. oDanfe:Box(363+nAjustaVt,000,386+nAjustaVt,603)
  2780. oDanfe:Say(372+nAjustaVt,002,"RAZ鬃 SOCIAL",oFont08N:oFont)
  2781. oDanfe:Say(382+nAjustaVt,002,aTransp[01],oFont08:oFont)
  2782. oDanfe:Box(363+nAjustaVt,243,386+nAjustaVt,315)
  2783. oDanfe:Say(372+nAjustaVt,245,"FRETE POR CONTA",oFont08N:oFont)
  2784. If cModFrete =="0"
  2785. oDanfe:Say(382+nAjustaVt,245,"0-REMETENTE",oFont08:oFont)
  2786. ElseIf cModFrete =="1"
  2787. oDanfe:Say(382+nAjustaVt,245,"1-DESTINATARIO",oFont08:oFont)
  2788. ElseIf cModFrete =="2"
  2789. oDanfe:Say(382+nAjustaVt,245,"2-TERCEIROS",oFont08:oFont)
  2790. ElseIf cModFrete =="3"
  2791. oDanfe:Say(382+nAjustaVt,245,"3-TRANSP PROP/REM",oFont08:oFont)
  2792. ElseIf cModFrete =="4"
  2793. oDanfe:Say(382+nAjustaVt,245,"4-TRANSP PROP/DEST",oFont08:oFont)
  2794. ElseIf cModFrete =="9"
  2795. oDanfe:Say(382+nAjustaVt,245,"9-SEM FRETE",oFont08:oFont)
  2796. Else
  2797. oDanfe:Say(382+nAjustaVt,245,"",oFont08:oFont)
  2798. Endif
  2799. //oDanfe:Say(382,102,"0-EMITENTE/1-DESTINATARIO [" + aTransp[02] + "]",oFont08:oFont)
  2800. oDanfe:Box(363+nAjustaVt,315,386+nAjustaVt,370)
  2801. oDanfe:Say(372+nAjustaVt,317,"C笈IGO ANTT",oFont08N:oFont)
  2802. oDanfe:Say(382+nAjustaVt,319,aTransp[03],oFont08:oFont)
  2803. oDanfe:Box(363+nAjustaVt,370,386+nAjustaVt,490)
  2804. oDanfe:Say(372+nAjustaVt,375,"PLACA DO VE沊ULO",oFont08N:oFont)
  2805. oDanfe:Say(382+nAjustaVt,375,aTransp[04],oFont08:oFont)
  2806. oDanfe:Box(363+nAjustaVt,450,386+nAjustaVt,510)
  2807. oDanfe:Say(372+nAjustaVt,452,"UF",oFont08N:oFont)
  2808. oDanfe:Say(382+nAjustaVt,452,aTransp[05],oFont08:oFont)
  2809. oDanfe:Box(363+nAjustaVt,510,386+nAjustaVt,603)
  2810. oDanfe:Say(372+nAjustaVt,512,"CNPJ/CPF",oFont08N:oFont)
  2811. oDanfe:Say(382+nAjustaVt,512,aTransp[06],oFont08:oFont)
  2812. oDanfe:Box(385+nAjustaVt,000,409+nAjustaVt,603)
  2813. oDanfe:Box(385+nAjustaVt,000,409+nAjustaVt,241)
  2814. oDanfe:Say(393+nAjustaVt,002,"ENDEREと",oFont08N:oFont)
  2815. oDanfe:Say(404+nAjustaVt,002,aTransp[07],oFont08:oFont)
  2816. oDanfe:Box(385+nAjustaVt,240,409+nAjustaVt,341)
  2817. oDanfe:Say(393+nAjustaVt,242,"MUNICIPIO",oFont08N:oFont)
  2818. oDanfe:Say(404+nAjustaVt,242,aTransp[08],oFont08:oFont)
  2819. oDanfe:Box(385+nAjustaVt,340,409+nAjustaVt,440)
  2820. oDanfe:Say(393+nAjustaVt,342,"UF",oFont08N:oFont)
  2821. oDanfe:Say(404+nAjustaVt,342,aTransp[09],oFont08:oFont)
  2822. oDanfe:Box(385+nAjustaVt,440,409+nAjustaVt,603)
  2823. oDanfe:Say(393+nAjustaVt,442,"INSCRIデO ESTADUAL",oFont08N:oFont)
  2824. oDanfe:Say(404+nAjustaVt,442,aTransp[10],oFont08:oFont)
  2825. oDanfe:Box(408+nAjustaVt,000,432+nAjustaVt,603)
  2826. oDanfe:Box(408+nAjustaVt,000,432+nAjustaVt,101)
  2827. oDanfe:Say(418+nAjustaVt,002,"QUANTIDADE",oFont08N:oFont)
  2828. oDanfe:Say(428+nAjustaVt,002,aTransp[11],oFont08:oFont)
  2829. oDanfe:Box(408+nAjustaVt,59,432+nAjustaVt,285)
  2830. oDanfe:Say(418+nAjustaVt,61,"ESPECIE",oFont08N:oFont)
  2831. oDanfe:Say(428+nAjustaVt,61,Iif(!Empty(aTransp[12]),aTransp[12],Iif(Len(aEspVol)>0,aEspVol[1][1],"")),oFont08:oFont)
  2832. //oDanfe:Say(428,102,aEspVol[1][1],oFont08:oFont)
  2833. oDanfe:Box(408+nAjustaVt,285,432+nAjustaVt,285)
  2834. oDanfe:Say(418+nAjustaVt,287,"MARCA",oFont08N:oFont)
  2835. oDanfe:Say(428+nAjustaVt,287,aTransp[13],oFont08:oFont)
  2836. oDanfe:Box(408+nAjustaVt,385,432+nAjustaVt,385)
  2837. oDanfe:Say(418+nAjustaVt,387,"NUMERAデO",oFont08N:oFont)
  2838. oDanfe:Say(428+nAjustaVt,387,aTransp[14],oFont08:oFont)
  2839. oDanfe:Box(408+nAjustaVt,485,432+nAjustaVt,485)
  2840. oDanfe:Say(418+nAjustaVt,487,"PESO BRUTO",oFont08N:oFont)
  2841. oDanfe:Say(428+nAjustaVt,487,Iif(!Empty(aTransp[15]),aTransp[15],Iif(Len(aEspVol)>0 .And. Val(aEspVol[1][3])>0,Transform(Val(aEspVol[1][3]),"@E 999999.9999"),"")),oFont08:oFont)
  2842. //oDanfe:Say(428,402,Iif (!Empty(aEspVol[1][3]),Transform(val(aEspVol[1][3]),"@E 999999.9999"),""),oFont08:oFont)
  2843. oDanfe:Box(408+nAjustaVt,544,432+nAjustaVt,603)
  2844. oDanfe:Say(418+nAjustaVt,546,"PESO LIQUIDO",oFont08N:oFont)
  2845. oDanfe:Say(428+nAjustaVt,546,Iif(!Empty(aTransp[16]),aTransp[16],Iif(Len(aEspVol)>0 .And. Val(aEspVol[1][2])>0,Transform(Val(aEspVol[1][2]),"@E 999999.9999"),"")),oFont08:oFont)
  2846. //oDanfe:Say(428,502,Iif (!Empty(aEspVol[1][2]),Transform(val(aEspVol[1][2]),"@E 999999.9999"),""),oFont08:oFont)
  2847. //Calculo do ISSQN
  2848. oDanfe:Say(686,000,"CALCULO DO ISSQN",oFont08N:oFont)
  2849. oDanfe:Box(688,000,711,151)
  2850. oDanfe:Say(696,002,"INSCRIデO MUNICIPAL",oFont08N:oFont)
  2851. oDanfe:Say(706,002,aISSQN[1],oFont08:oFont)
  2852. oDanfe:Box(688,150,711,301)
  2853. oDanfe:Say(696,152,"VALOR TOTAL DOS SERVIとS",oFont08N:oFont)
  2854. oDanfe:Say(706,152,aISSQN[2],oFont08:oFont)
  2855. oDanfe:Box(688,300,711,451)
  2856. oDanfe:Say(696,302,"BASE DE C簇CULO DO ISSQN",oFont08N:oFont)
  2857. oDanfe:Say(706,302,aISSQN[3],oFont08:oFont)
  2858. oDanfe:Box(688,450,711,603)
  2859. oDanfe:Say(696,452,"VALOR DO ISSQN",oFont08N:oFont)
  2860. oDanfe:Say(706,452,aISSQN[4],oFont08:oFont)
  2861. //Dados Adicionais
  2862. oDanfe:Say(719,000,"DADOS ADICIONAIS",oFont08N:oFont)
  2863. oDanfe:Box(721,000,865,351)
  2864. oDanfe:Say(729,002,"INFORMAベES COMPLEMENTARES",oFont08N:oFont)
  2865. nLenMensagens:= Len(aMensagem)
  2866. nLin:= 741
  2867. nMensagem := 0
  2868. For nX := 1 To Min(nLenMensagens, MAXMSG)
  2869. oDanfe:Say(nLin,002,aMensagem[nX],oFont08:oFont)
  2870. nLin:= nLin+10
  2871. Next nX
  2872. nMensagem := nX
  2873. oDanfe:Box(721,350,865,603)
  2874. oDanfe:Say(729,352,"RESERVADO AO FISCO",oFont08N:oFont)
  2875. //Logotipo Rodape
  2876. if file(cLogoTotvs) .or. Resource2File ( cLogoTotvs, cStartPath+cLogoTotvs )
  2877. oDanfe:SayBitmap(866,484,cLogoTotvs,120,20)
  2878. endif
  2879. nLenMensagens:= Len(aResFisco)
  2880. nLin:= 741
  2881. For nX := 1 To Min(nLenMensagens, MAXMSG)
  2882. oDanfe:Say(nLin,351,aResFisco[nX],oFont08:oFont)
  2883. nLin:= nLin+10
  2884. Next
  2885. //Dados do produto ou servico
  2886. aAux := {{{},{},{},{},{},{},{},{},{},{},{},{},{},{}}}
  2887. nY := 0
  2888. nLenItens := Len(aItens)
  2889. For nX :=1 To nLenItens
  2890. nY++
  2891. aadd(Atail(aAux)[nY],aItens[nX][01])
  2892. nY++
  2893. aadd(Atail(aAux)[nY],NoChar(aItens[nX][02],lConverte))
  2894. nY++
  2895. aadd(Atail(aAux)[nY],aItens[nX][03])
  2896. nY++
  2897. aadd(Atail(aAux)[nY],aItens[nX][04])
  2898. nY++
  2899. aadd(Atail(aAux)[nY],aItens[nX][05])
  2900. nY++
  2901. aadd(Atail(aAux)[nY],aItens[nX][06])
  2902. nY++
  2903. aadd(Atail(aAux)[nY],aItens[nX][07])
  2904. nY++
  2905. aadd(Atail(aAux)[nY],aItens[nX][08])
  2906. nY++
  2907. aadd(Atail(aAux)[nY],aItens[nX][09])
  2908. nY++
  2909. aadd(Atail(aAux)[nY],aItens[nX][10])
  2910. nY++
  2911. aadd(Atail(aAux)[nY],aItens[nX][11])
  2912. nY++
  2913. aadd(Atail(aAux)[nY],aItens[nX][12])
  2914. nY++
  2915. aadd(Atail(aAux)[nY],aItens[nX][13])
  2916. nY++
  2917. aadd(Atail(aAux)[nY],aItens[nX][14])
  2918. If nY >= 14
  2919. nY := 0
  2920. EndIf
  2921. Next nX
  2922. For nX := 1 To nLenItens
  2923. nY++
  2924. aadd(Atail(aAux)[nY],"")
  2925. nY++
  2926. aadd(Atail(aAux)[nY],"")
  2927. nY++
  2928. aadd(Atail(aAux)[nY],"")
  2929. nY++
  2930. aadd(Atail(aAux)[nY],"")
  2931. nY++
  2932. aadd(Atail(aAux)[nY],"")
  2933. nY++
  2934. aadd(Atail(aAux)[nY],"")
  2935. nY++
  2936. aadd(Atail(aAux)[nY],"")
  2937. nY++
  2938. aadd(Atail(aAux)[nY],"")
  2939. nY++
  2940. aadd(Atail(aAux)[nY],"")
  2941. nY++
  2942. aadd(Atail(aAux)[nY],"")
  2943. nY++
  2944. aadd(Atail(aAux)[nY],"")
  2945. nY++
  2946. aadd(Atail(aAux)[nY],"")
  2947. nY++
  2948. aadd(Atail(aAux)[nY],"")
  2949. nY++
  2950. aadd(Atail(aAux)[nY],"")
  2951. If nY >= 14
  2952. nY := 0
  2953. EndIf
  2954. Next nX
  2955. // Popula o array de cabe蓷lho das colunas de produtos/servi蔞s.
  2956. aAuxCabec := {;
  2957. "COD. PROD",;
  2958. "DESCRIデO DO PROD./SERV.",;
  2959. "NCM/SH",;
  2960. IIf( cMVCODREG == "1", "CSOSN","CST" ),;
  2961. "CFOP",;
  2962. "UN",;
  2963. "QUANT.",;
  2964. "V.UNITARIO",;
  2965. "V.TOTAL",;
  2966. "BC.ICMS",;
  2967. "V.ICMS",;
  2968. "V.IPI",;
  2969. "A.ICMS",;
  2970. "A.IPI";
  2971. }
  2972. // Retorna o tamanho das colunas baseado em seu conteudo
  2973. aTamCol := RetTamCol(aAuxCabec, aAux, oDanfe, oFont08:oFont, oFont08N:oFont)
  2974. oDanfe:Say(440+nAjustaPro,002,"DADOS DO PRODUTO / SERVIと",oFont08N:oFont)
  2975. oDanfe:Box(442+nAjustaPro,000,678,603)
  2976. nAuxH := 0
  2977. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[1])
  2978. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "COD. PROD",oFont08N:oFont)
  2979. nAuxH += aTamCol[1]
  2980. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[2])
  2981. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "DESCRIデO DO PROD./SERV.", oFont08N:oFont)
  2982. nAuxH += aTamCol[2]
  2983. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[3])
  2984. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "NCM/SH", oFont08N:oFont)
  2985. nAuxH += aTamCol[3]
  2986. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[4])
  2987. If cMVCODREG == "1"
  2988. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "CSOSN", oFont08N:oFont)
  2989. Else
  2990. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "CST", oFont08N:oFont)
  2991. Endif
  2992. nAuxH += aTamCol[4]
  2993. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[5])
  2994. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "CFOP", oFont08N:oFont)
  2995. nAuxH += aTamCol[5]
  2996. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[6])
  2997. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "UN", oFont08N:oFont)
  2998. nAuxH += aTamCol[6]
  2999. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[7])
  3000. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "QUANT.", oFont08N:oFont)
  3001. nAuxH += aTamCol[7]
  3002. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[8])
  3003. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "V.UNITARIO", oFont08N:oFont)
  3004. nAuxH += aTamCol[8]
  3005. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[9])
  3006. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "V.TOTAL", oFont08N:oFont)
  3007. nAuxH += aTamCol[9]
  3008. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[10])
  3009. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "BC.ICMS", oFont08N:oFont)
  3010. nAuxH += aTamCol[10]
  3011. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[11])
  3012. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "V.ICMS", oFont08N:oFont)
  3013. nAuxH += aTamCol[11]
  3014. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[12])
  3015. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "V.IPI", oFont08N:oFont)
  3016. nAuxH += aTamCol[12]
  3017. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[13])
  3018. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "A.ICMS", oFont08N:oFont)
  3019. nAuxH += aTamCol[13]
  3020. oDanfe:Box(442+nAjustaPro, nAuxH, 678, nAuxH + aTamCol[14])
  3021. oDanfe:Say(450+nAjustaPro, nAuxH + 2, "A.IPI", oFont08N:oFont)
  3022. If MV_PAR05=1 .And. nFolhas>1
  3023. oDanfe:Say(875,497,"CONTINUA NO VERSO")
  3024. Endif
  3025. // INICIANDO INFORMAベES PARA O CABEずLHO DA PAGINA 2
  3026. nLinha := 460+nAjustaPro
  3027. nL := 0
  3028. lFlag := .T.
  3029. For nY := 1 To nLenItens
  3030. nL++
  3031. nLin:= 741
  3032. nCont := 0
  3033. If lflag
  3034. If nL > nMaxItemP2
  3035. oDanfe:EndPage()
  3036. oDanfe:StartPage()
  3037. If MV_PAR05 == 1
  3038. nLinhavers := 42
  3039. Else
  3040. nLinhavers := 0
  3041. EndIf
  3042. nLinha := 181 + IIF(nFolha >=3 ,0, nLinhavers)
  3043. oDanfe:Box(000+nLinhavers,000,095+nLinhavers,250)
  3044. oDanfe:Say(010+nLinhavers,096, "Identifica誽o do emitente",oFont12N:oFont)
  3045. nLinCalc := 023 + nLinhavers
  3046. cStrAux := AllTrim(NoChar(oEmitente:_xNome:Text,lConverte))
  3047. nForTo := Len(cStrAux)/24
  3048. nForTo := Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1,Round(nForTo,0))
  3049. For nX := 1 To nForTo
  3050. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*24)+1),24), oFont12N:oFont )
  3051. nLinCalc+=10
  3052. Next nX
  3053. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xLgr:Text,lConverte))+", "+AllTrim(oEmitente:_EnderEmit:_Nro:Text)
  3054. nForTo := Len(cStrAux)/40
  3055. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3056. For nX := 1 To nForTo
  3057. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3058. nLinCalc+=10
  3059. Next nX
  3060. If ValAtrib("oEmitente:_EnderEmit:_xCpl") <> "U"
  3061. cStrAux := "Complemento: "+AllTrim(NoChar(oEmitente:_EnderEmit:_xCpl:TEXT,lConverte))
  3062. nForTo := Len(cStrAux)/40
  3063. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3064. For nX := 1 To nForTo
  3065. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3066. nLinCalc+=10
  3067. Next nX
  3068. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xBairro:Text,lConverte))
  3069. If ValAtrib("oEmitente:_EnderEmit:_Cep")<>"U"
  3070. cStrAux += " Cep:"+TransForm(oEmitente:_EnderEmit:_Cep:Text,"@r 99999-999")
  3071. EndIf
  3072. nForTo := Len(cStrAux)/40
  3073. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3074. For nX := 1 To nForTo
  3075. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3076. nLinCalc+=10
  3077. Next nX
  3078. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  3079. nLinCalc+=9
  3080. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(ValAtrib("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  3081. Else
  3082. oDanfe:Say(nLinCalc,098, NoChar(oEmitente:_EnderEmit:_xBairro:Text,lConverte)+" Cep:"+TransForm(IIF(ValAtrib("oEmitente:_EnderEmit:_Cep")=="U","",oEmitente:_EnderEmit:_Cep:Text),"@r 99999-999"),oFont08N:oFont)
  3083. nLinCalc+=10
  3084. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  3085. nLinCalc+=9
  3086. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(ValAtrib("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  3087. EndIf
  3088. oDanfe:Box(000+nLinhavers,248,095+nLinhavers,351)
  3089. oDanfe:Say(013+nLinhavers,275, "DANFE",oFont18N:oFont)
  3090. oDanfe:Say(023+nLinhavers,255, "DOCUMENTO AUXILIAR DA",oFont07:oFont)
  3091. if lNFCE
  3092. oDanfe:Say(033+nLinhavers,255, "NOTA FISCAL DE CONSUMIDOR",oFont07:oFont)
  3093. else
  3094. oDanfe:Say(033+nLinhavers,255, "NOTA FISCAL ELETR偡ICA",oFont07:oFont)
  3095. endif
  3096. oDanfe:Say(043+nLinhavers,255, "0-ENTRADA",oFont08:oFont)
  3097. oDanfe:Say(053+nLinhavers,255, "1-SA沝A" ,oFont08:oFont)
  3098. oDanfe:Box(037+nLinhavers,305,047+nLinhavers,315)
  3099. oDanfe:Say(045+nLinhavers,307, oIdent:_TpNf:Text,oFont08N:oFont)
  3100. oDanfe:Say(062+nLinhavers,255,"N. "+StrZero(Val(oIdent:_NNf:Text),9),oFont10N:oFont)
  3101. oDanfe:Say(072+nLinhavers,255,"S仂IE "+SubStr(oIdent:_Serie:Text,1,3),oFont10N:oFont)
  3102. oDanfe:Say(082+nLinhavers,255,"FOLHA "+StrZero(nFolha,2)+"/"+StrZero(nFolhas,2),oFont10N:oFont)
  3103. oDanfe:Box(000+nLinhavers,350,095+nLinhavers,603)
  3104. oDanfe:Box(000+nLinhavers,350,040+nLinhavers,603)
  3105. oDanfe:Box(040+nLinhavers,350,062+nLinhavers,603)
  3106. oDanfe:Box(063+nLinhavers,350,095+nLinhavers,603)
  3107. oDanfe:Say(058+nLinhavers,355,TransForm(SubStr(oNF:_InfNfe:_ID:Text,4),"@r 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999"),oFont12N:oFont)
  3108. oDanfe:Say(048+nLinhavers,355,"CHAVE DE ACESSO DA "+iif(lNFCE,"NFC-E","NF-E"),oFont12N:oFont)
  3109. nFontSize := 28
  3110. oDanfe:Code128C(036+nLinhavers,370,SubStr(oNF:_InfNfe:_ID:Text,4), nFontSize )
  3111. If lMv_Logod
  3112. oDanfe:SayBitmap(003+nLinhavers,003,cLogoD,090,090)
  3113. Else
  3114. oDanfe:SayBitmap(003+nLinhavers,003,cLogo,090,090)
  3115. EndIf
  3116. If Empty(cChaveCont)
  3117. oDanfe:Say(075+nLinhavers,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  3118. oDanfe:Say(085+nLinhavers,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  3119. Endif
  3120. If !Empty(cCodAutDPEC)
  3121. oDanfe:Say(075+nLinhavers,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  3122. oDanfe:Say(085+nLinhavers,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  3123. Endif
  3124. If nFolha == 1
  3125. If !Empty(cCodAutDPEC)
  3126. nFontSize := 28
  3127. oDanfe:Code128C(093+nLinhavers,370,cCodAutDPEC, nFontSize )
  3128. Endif
  3129. Endif
  3130. // inicio do segundo codigo de barras ref. a transmissao CONTIGENCIA OFF LINE
  3131. If !Empty(cChaveCont) .And. Empty(cCodAutDPEC) .And. !(Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900)
  3132. If nFolha == 1
  3133. If !Empty(cChaveCont)
  3134. nFontSize := 28
  3135. oDanfe:Code128C(093+nLinhavers,370,cChaveCont, nFontSize )
  3136. EndIf
  3137. Else
  3138. If !Empty(cChaveCont)
  3139. nFontSize := 28
  3140. oDanfe:Code128C(093+nLinhavers,370,cChaveCont, nFontSize )
  3141. EndIf
  3142. EndIf
  3143. EndIf
  3144. oDanfe:Box(100+nLinhavers,000,123+nLinhavers,603)
  3145. oDanfe:Box(100+nLinhavers,000,123+nLinhavers,300)
  3146. oDanfe:Say(109+nLinhavers,002,"NATUREZA DA OPERAデO",oFont08N:oFont)
  3147. oDanfe:Say(119+nLinhavers,002,oIdent:_NATOP:TEXT,oFont08:oFont)
  3148. If(!Empty(cCodAutDPEC))
  3149. oDanfe:Say(109+nLinhavers,300,"N渧ERO DE REGISTRO DPEC",oFont08N:oFont)
  3150. Endif
  3151. If(((Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900).And.(oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"2") .Or. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"1")
  3152. oDanfe:Say(109+nLinhavers,302,"PROTOCOLO DE AUTORIZAデO DE USO",oFont08N:oFont)
  3153. Endif
  3154. If((oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25")
  3155. oDanfe:Say(109+nLinhavers,300,"DADOS DA "+iif(lNFCE,"NFC-E","NF-E"),oFont08N:oFont)
  3156. Endif
  3157. oDanfe:Say(119+nLinhavers,302,cDadosProt,oFont08:oFont)
  3158. nFolha++
  3159. oDanfe:Box(126+nLinhavers,000,153+nLinhavers,603)
  3160. oDanfe:Box(126+nLinhavers,000,153+nLinhavers,200)
  3161. oDanfe:Box(126+nLinhavers,200,153+nLinhavers,400)
  3162. oDanfe:Box(126+nLinhavers,400,153+nLinhavers,603)
  3163. oDanfe:Say(135+nLinhavers,002,"INSCRIデO ESTADUAL",oFont08N:oFont)
  3164. oDanfe:Say(143+nLinhavers,002,IIf(ValAtrib("oEmitente:_IE:TEXT")<>"U",oEmitente:_IE:TEXT,""),oFont08:oFont)
  3165. oDanfe:Say(135+nLinhavers,205,"INSC.ESTADUAL DO SUBST.TRIB.",oFont08N:oFont)
  3166. oDanfe:Say(143+nLinhavers,205,IIf(ValAtrib("oEmitente:_IEST:TEXT")<>"U",oEmitente:_IEST:TEXT,""),oFont08:oFont)
  3167. oDanfe:Say(135+nLinhavers,405,"CNPJ/CPF",oFont08N:oFont)
  3168. Do Case
  3169. Case ValAtrib("oEmitente:_CNPJ")=="O"
  3170. cAux := TransForm(oEmitente:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  3171. Case ValAtrib("oEmitente:_CPF")=="O"
  3172. cAux := TransForm(oEmitente:_CPF:TEXT,"@r 999.999.999-99")
  3173. OtherWise
  3174. cAux := Space(14)
  3175. EndCase
  3176. oDanfe:Say(143+nLinhavers,405,cAux,oFont08:oFont)
  3177. nLenMensagens:= Len(aMensagem)
  3178. nColLim := Iif(MV_PAR05==1,435,Iif(nMensagem <= nLenMensagens,680,865)) + nLinhavers
  3179. oDanfe:Say(161+nLinhavers,002,"DADOS DO PRODUTO / SERVIと",oFont08N:oFont)
  3180. oDanfe:Box(163+nLinhavers,000,nColLim,603)
  3181. nAuxH := 0
  3182. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[1])
  3183. oDanfe:Say(171+nLinhavers, nAuxH + 2, "COD. PROD",oFont08N:oFont)
  3184. nAuxH += aTamCol[1]
  3185. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[2])
  3186. oDanfe:Say(171+nLinhavers, nAuxH + 2, "DESCRIデO DO PROD./SERV.", oFont08N:oFont)
  3187. nAuxH += aTamCol[2]
  3188. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[3])
  3189. oDanfe:Say(171+nLinhavers, nAuxH + 2, "NCM/SH", oFont08N:oFont)
  3190. nAuxH += aTamCol[3]
  3191. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[4])
  3192. If cMVCODREG == "1"
  3193. oDanfe:Say(171+nLinhavers, nAuxH + 2, "CSOSN", oFont08N:oFont)
  3194. Else
  3195. oDanfe:Say(171+nLinhavers, nAuxH + 2, "CST", oFont08N:oFont)
  3196. Endif
  3197. nAuxH += aTamCol[4]
  3198. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[5])
  3199. oDanfe:Say(171+nLinhavers, nAuxH + 2, "CFOP", oFont08N:oFont)
  3200. nAuxH += aTamCol[5]
  3201. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[6])
  3202. oDanfe:Say(171+nLinhavers, nAuxH + 2, "UN", oFont08N:oFont)
  3203. nAuxH += aTamCol[6]
  3204. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[7])
  3205. oDanfe:Say(171+nLinhavers, nAuxH + 2, "QUANT.", oFont08N:oFont)
  3206. nAuxH += aTamCol[7]
  3207. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[8])
  3208. oDanfe:Say(171+nLinhavers, nAuxH + 2, "V.UNITARIO", oFont08N:oFont)
  3209. nAuxH += aTamCol[8]
  3210. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[9])
  3211. oDanfe:Say(171+nLinhavers, nAuxH + 2, "V.TOTAL", oFont08N:oFont)
  3212. nAuxH += aTamCol[9]
  3213. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[10])
  3214. oDanfe:Say(171+nLinhavers, nAuxH + 2, "BC.ICMS", oFont08N:oFont)
  3215. nAuxH += aTamCol[10]
  3216. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[11])
  3217. oDanfe:Say(171+nLinhavers, nAuxH + 2, "V.ICMS", oFont08N:oFont)
  3218. nAuxH += aTamCol[11]
  3219. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[12])
  3220. oDanfe:Say(171+nLinhavers, nAuxH + 2, "V.IPI", oFont08N:oFont)
  3221. nAuxH += aTamCol[12]
  3222. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[13])
  3223. oDanfe:Say(171+nLinhavers, nAuxH + 2, "A.ICMS", oFont08N:oFont)
  3224. nAuxH += aTamCol[13]
  3225. oDanfe:Box(163+nLinhavers, nAuxH, nColLim, nAuxH + aTamCol[14])
  3226. oDanfe:Say(171+nLinhavers, nAuxH + 2, "A.IPI", oFont08N:oFont)
  3227. // FINALIZANDO INFORMAベES PARA O CABEずLHO DA PAGINA 2
  3228. nL := 1
  3229. lFlag := .F.
  3230. //Verifico se ainda existem Dados Adicionais a serem impressos
  3231. IF MV_PAR05 <> 1 .And. nMensagem <= nLenMensagens
  3232. //Dados Adicionais
  3233. oDanfe:Say(719+nLinhavers,000,"DADOS ADICIONAIS",oFont08N:oFont)
  3234. oDanfe:Box(721+nLinhavers,000,865+nLinhavers,351)
  3235. oDanfe:Say(729+nLinhavers,002,"INFORMAベES COMPLEMENTARES",oFont08N:oFont)
  3236. nLin:= 741
  3237. nLenMensagens:= Len(aMensagem)
  3238. --nMensagem
  3239. For nX := 1 To Min(nLenMensagens - nMensagem, MAXMSG)
  3240. oDanfe:Say(nLin,002,aMensagem[nMensagem+nX],oFont08:oFont)
  3241. nLin:= nLin+10
  3242. Next nX
  3243. nMensagem := nMensagem+nX
  3244. oDanfe:Box(721+nLinhavers,350,865+nLinhavers,603)
  3245. oDanfe:Say(729+nLinhavers,352,"RESERVADO AO FISCO",oFont08N:oFont)
  3246. //Logotipo Rodape
  3247. if file(cLogoTotvs) .or. Resource2File ( cLogoTotvs, cStartPath+cLogoTotvs )
  3248. oDanfe:SayBitmap(866,484,cLogoTotvs,120,20)
  3249. endif
  3250. // Seta o m嫞imo de itens para o MAXITEMP2
  3251. nMaxItemP2 := MAXITEMP2
  3252. Else
  3253. // Seta o m嫞imo de itens para o MAXITEMP2F
  3254. nMaxItemP2 := MAXITEMP2F
  3255. EndIF
  3256. Endif
  3257. Endif
  3258. // INICIANDO INFORMAベES PARA O CABEずLHO DA PAGINA 3 E DIANTE
  3259. If nL > Iif( (nfolha-1)%2==0 .And. MV_PAR05==1,MAXITEMP3,nMaxItemP2)
  3260. oDanfe:EndPage()
  3261. oDanfe:StartPage()
  3262. nLenMensagens:= Len(aMensagem)
  3263. nColLim := Iif(!(nfolha-1)%2==0 .And. MV_PAR05==1,435,Iif(nMensagem <= nLenMensagens,680,865))
  3264. lFimpar := ((nfolha-1)%2==0)
  3265. nLinha := 181
  3266. If nfolha >= 3
  3267. nLinhavers := 0
  3268. EndIf
  3269. oDanfe:Box(000,000,095,250)
  3270. oDanfe:Say(010,096, "Identifica誽o do emitente",oFont12N:oFont)
  3271. nLinCalc := 023
  3272. cStrAux := AllTrim(NoChar(oEmitente:_xNome:Text,lConverte))
  3273. nForTo := Len(cStrAux)/24
  3274. nForTo := Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1,Round(nForTo,0))
  3275. For nX := 1 To nForTo
  3276. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*24)+1),24), oFont12N:oFont )
  3277. nLinCalc+=10
  3278. Next nX
  3279. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xLgr:Text,lConverte))+", "+AllTrim(oEmitente:_EnderEmit:_Nro:Text)
  3280. nForTo := Len(cStrAux)/40
  3281. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3282. For nX := 1 To nForTo
  3283. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3284. nLinCalc+=10
  3285. Next nX
  3286. If ValAtrib("oEmitente:_EnderEmit:_xCpl") <> "U"
  3287. cStrAux := "Complemento: "+AllTrim(NoChar(oEmitente:_EnderEmit:_xCpl:TEXT,lConverte))
  3288. nForTo := Len(cStrAux)/40
  3289. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3290. For nX := 1 To nForTo
  3291. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3292. nLinCalc+=10
  3293. Next nX
  3294. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xBairro:Text,lConverte))
  3295. If ValAtrib("oEmitente:_EnderEmit:_Cep")<>"U"
  3296. cStrAux += " Cep:"+TransForm(oEmitente:_EnderEmit:_Cep:Text,"@r 99999-999")
  3297. EndIf
  3298. nForTo := Len(cStrAux)/40
  3299. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3300. For nX := 1 To nForTo
  3301. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3302. nLinCalc+=10
  3303. Next nX
  3304. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  3305. nLinCalc+=9
  3306. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(ValAtrib("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  3307. Else
  3308. oDanfe:Say(nLinCalc,098, NoChar(oEmitente:_EnderEmit:_xBairro:Text,lConverte)+" Cep:"+TransForm(IIF(ValAtrib("oEmitente:_EnderEmit:_Cep")=="U","",oEmitente:_EnderEmit:_Cep:Text),"@r 99999-999"),oFont08N:oFont)
  3309. nLinCalc+=10
  3310. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  3311. nLinCalc+=9
  3312. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(ValAtrib("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  3313. EndIf
  3314. oDanfe:Box(000,248,095,351)
  3315. oDanfe:Say(013,275, "DANFE",oFont18N:oFont)
  3316. oDanfe:Say(023,255, "DOCUMENTO AUXILIAR DA",oFont07:oFont)
  3317. if lNFCE
  3318. oDanfe:Say(033,255, "NOTA FISCAL DE CONSUMIDOR",oFont07:oFont)
  3319. else
  3320. oDanfe:Say(033,255, "NOTA FISCAL ELETR偡ICA",oFont07:oFont)
  3321. endif
  3322. oDanfe:Say(043,255, "0-ENTRADA",oFont08:oFont)
  3323. oDanfe:Say(053,255, "1-SA沝A" ,oFont08:oFont)
  3324. oDanfe:Box(037,305,047,315)
  3325. oDanfe:Say(045,307, oIdent:_TpNf:Text,oFont08N:oFont)
  3326. oDanfe:Say(062,255,"N. "+StrZero(Val(oIdent:_NNf:Text),9),oFont10N:oFont)
  3327. oDanfe:Say(072,255,"S仂IE "+SubStr(oIdent:_Serie:Text,1,3),oFont10N:oFont)
  3328. oDanfe:Say(082,255,"FOLHA "+StrZero(nFolha,2)+"/"+StrZero(nFolhas,2),oFont10N:oFont)
  3329. oDanfe:Box(000,350,095,603)
  3330. oDanfe:Box(000,350,040,603)
  3331. oDanfe:Box(040,350,062,603)
  3332. oDanfe:Box(063,350,095,603)
  3333. oDanfe:Say(058,355,TransForm(SubStr(oNF:_InfNfe:_ID:Text,4),"@r 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999"),oFont12N:oFont)
  3334. oDanfe:Say(048,355,"CHAVE DE ACESSO DA "+iif(lNFCE,"NFC-E","NF-E"),oFont12N:oFont)
  3335. nFontSize := 28
  3336. oDanfe:Code128C(036,370,SubStr(oNF:_InfNfe:_ID:Text,4), nFontSize )
  3337. If lMv_Logod
  3338. oDanfe:SayBitmap(003,003,cLogoD,090,090)
  3339. Else
  3340. oDanfe:SayBitmap(003,003,cLogo,090,090)
  3341. EndIf
  3342. If Empty(cChaveCont)
  3343. oDanfe:Say(075,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  3344. oDanfe:Say(085,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  3345. Endif
  3346. If !Empty(cCodAutDPEC)
  3347. oDanfe:Say(075,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  3348. oDanfe:Say(085,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  3349. Endif
  3350. If nFolha == 1
  3351. If !Empty(cCodAutDPEC)
  3352. nFontSize := 28
  3353. oDanfe:Code128C(093,370,cCodAutDPEC, nFontSize )
  3354. Endif
  3355. Endif
  3356. // inicio do segundo codigo de barras ref. a transmissao CONTIGENCIA OFF LINE
  3357. If !Empty(cChaveCont) .And. Empty(cCodAutDPEC) .And. !(Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900)
  3358. If nFolha == 1
  3359. If !Empty(cChaveCont)
  3360. nFontSize := 28
  3361. oDanfe:Code128C(093,370,cChaveCont, nFontSize )
  3362. EndIf
  3363. Else
  3364. If !Empty(cChaveCont)
  3365. nFontSize := 28
  3366. oDanfe:Code128C(093,370,cChaveCont, nFontSize )
  3367. EndIf
  3368. EndIf
  3369. EndIf
  3370. oDanfe:Box(100,000,123,603)
  3371. oDanfe:Box(100,000,123,300)
  3372. oDanfe:Say(109,002,"NATUREZA DA OPERAデO",oFont08N:oFont)
  3373. oDanfe:Say(119,002,oIdent:_NATOP:TEXT,oFont08:oFont)
  3374. If(!Empty(cCodAutDPEC))
  3375. oDanfe:Say(109,300,"N渧ERO DE REGISTRO DPEC",oFont08N:oFont)
  3376. Endif
  3377. If(((Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900).And.(oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"2") .Or. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"1")
  3378. oDanfe:Say(109,302,"PROTOCOLO DE AUTORIZAデO DE USO",oFont08N:oFont)
  3379. Endif
  3380. If((oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25")
  3381. oDanfe:Say(109,300,"DADOS DA "+iif(lNFCE,"NFC-E","NF-E"),oFont08N:oFont)
  3382. Endif
  3383. oDanfe:Say(119,302,cDadosProt,oFont08:oFont)
  3384. nFolha++
  3385. oDanfe:Box(126,000,153,603)
  3386. oDanfe:Box(126,000,153,200)
  3387. oDanfe:Box(126,200,153,400)
  3388. oDanfe:Box(126,400,153,603)
  3389. oDanfe:Say(135,002,"INSCRIデO ESTADUAL",oFont08N:oFont)
  3390. oDanfe:Say(143,002,IIf(ValAtrib("oEmitente:_IE:TEXT")<>"U",oEmitente:_IE:TEXT,""),oFont08:oFont)
  3391. oDanfe:Say(135,205,"INSC.ESTADUAL DO SUBST.TRIB.",oFont08N:oFont)
  3392. oDanfe:Say(143,205,IIf(ValAtrib("oEmitente:_IEST:TEXT")<>"U",oEmitente:_IEST:TEXT,""),oFont08:oFont)
  3393. oDanfe:Say(135,405,"CNPJ/CPF",oFont08N:oFont)
  3394. Do Case
  3395. Case ValAtrib("oEmitente:_CNPJ")=="O"
  3396. cAux := TransForm(oEmitente:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  3397. Case ValAtrib("oEmitente:_CPF")=="O"
  3398. cAux := TransForm(oEmitente:_CPF:TEXT,"@r 999.999.999-99")
  3399. OtherWise
  3400. cAux := Space(14)
  3401. EndCase
  3402. oDanfe:Say(143,405,cAux,oFont08:oFont)
  3403. oDanfe:Say(161,002,"DADOS DO PRODUTO / SERVIと",oFont08N:oFont)
  3404. oDanfe:Box(163,000,nColLim,603)
  3405. nAuxH := 0
  3406. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[1])
  3407. oDanfe:Say(171, nAuxH + 2, "COD. PROD",oFont08N:oFont)
  3408. nAuxH += aTamCol[1]
  3409. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[2])
  3410. oDanfe:Say(171, nAuxH + 2, "DESCRIデO DO PROD./SERV.", oFont08N:oFont)
  3411. nAuxH += aTamCol[2]
  3412. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[3])
  3413. oDanfe:Say(171, nAuxH + 2, "NCM/SH", oFont08N:oFont)
  3414. nAuxH += aTamCol[3]
  3415. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[4])
  3416. If cMVCODREG == "1"
  3417. oDanfe:Say(171, nAuxH + 2, "CSOSN", oFont08N:oFont)
  3418. Else
  3419. oDanfe:Say(171, nAuxH + 2, "CST", oFont08N:oFont)
  3420. Endif
  3421. nAuxH += aTamCol[4]
  3422. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[5])
  3423. oDanfe:Say(171, nAuxH + 2, "CFOP", oFont08N:oFont)
  3424. nAuxH += aTamCol[5]
  3425. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[6])
  3426. oDanfe:Say(171, nAuxH + 2, "UN", oFont08N:oFont)
  3427. nAuxH += aTamCol[6]
  3428. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[7])
  3429. oDanfe:Say(171, nAuxH + 2, "QUANT.", oFont08N:oFont)
  3430. nAuxH += aTamCol[7]
  3431. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[8])
  3432. oDanfe:Say(171, nAuxH + 2, "V.UNITARIO", oFont08N:oFont)
  3433. nAuxH += aTamCol[8]
  3434. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[9])
  3435. oDanfe:Say(171, nAuxH + 2, "V.TOTAL", oFont08N:oFont)
  3436. nAuxH += aTamCol[9]
  3437. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[10])
  3438. oDanfe:Say(171, nAuxH + 2, "BC.ICMS", oFont08N:oFont)
  3439. nAuxH += aTamCol[10]
  3440. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[11])
  3441. oDanfe:Say(171, nAuxH + 2, "V.ICMS", oFont08N:oFont)
  3442. nAuxH += aTamCol[11]
  3443. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[12])
  3444. oDanfe:Say(171, nAuxH + 2, "V.IPI", oFont08N:oFont)
  3445. nAuxH += aTamCol[12]
  3446. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[13])
  3447. oDanfe:Say(171, nAuxH + 2, "A.ICMS", oFont08N:oFont)
  3448. nAuxH += aTamCol[13]
  3449. oDanfe:Box(163, nAuxH, nColLim, nAuxH + aTamCol[14])
  3450. oDanfe:Say(171, nAuxH + 2, "A.IPI", oFont08N:oFont)
  3451. //Verifico se ainda existem Dados Adicionais a serem impressos
  3452. nLenMensagens:= Len(aMensagem)
  3453. IF (MV_PAR05 <> 1 .Or. (MV_PAR05 == 1 .And. lFimpar )).And. nMensagem <= nLenMensagens
  3454. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  3455. //蛇ados Adicionais �
  3456. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  3457. oDanfe:Say(719,000,"DADOS ADICIONAIS",oFont08N:oFont)
  3458. oDanfe:Box(721,000,865,351)
  3459. oDanfe:Say(729,002,"INFORMAベES COMPLEMENTARES",oFont08N:oFont)
  3460. nLin:= 741
  3461. nLenMensagens:= Len(aMensagem)
  3462. --nMensagem
  3463. For nX := 1 To Min(nLenMensagens - nMensagem, MAXMSG)
  3464. oDanfe:Say(nLin,002,aMensagem[nMensagem+nX],oFont08:oFont)
  3465. nLin:= nLin+10
  3466. Next nX
  3467. nMensagem := nMensagem+nX
  3468. oDanfe:Box(721+nLinhavers,350,865+nLinhavers,603)
  3469. oDanfe:Say(729+nLinhavers,352,"RESERVADO AO FISCO",oFont08N:oFont)
  3470. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  3471. //蚯ogotipo Rodape
  3472. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  3473. if file(cLogoTotvs) .or. Resource2File ( cLogoTotvs, cStartPath+cLogoTotvs )
  3474. oDanfe:SayBitmap(866,484,cLogoTotvs,120,20)
  3475. endif
  3476. // Seta o m嫞imo de itens para o MAXITEMP2
  3477. nMaxItemP2 := MAXITEMP2
  3478. Else
  3479. // Seta o m嫞imo de itens para o MAXITEMP2F
  3480. nMaxItemP2 := MAXITEMP2F
  3481. EndIF
  3482. If (!(nfolha-1)%2==0) .And. MV_PAR05==1
  3483. If nY+69<nLenItens
  3484. oDanfe:Say(875+nLinhavers,497,"CONTINUA NO VERSO")
  3485. Endif
  3486. End
  3487. nL := 1
  3488. EndIf
  3489. nAuxH := 0
  3490. If aAux[1][1][nY] == "-"
  3491. oDanfe:Say(nLinha, nAuxH, Replicate("- ", 150), oFont08:oFont)
  3492. Else
  3493. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][1][nY], oFont08:oFont )
  3494. nAuxH += aTamCol[1]
  3495. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][2][nY], oFont08:oFont) // DESCRICAO DO PRODUTO
  3496. nAuxH += aTamCol[2]
  3497. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][3][nY], oFont08:oFont) // NCM
  3498. nAuxH += aTamCol[3]
  3499. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][4][nY], oFont08:oFont) // CST
  3500. nAuxH += aTamCol[4]
  3501. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][5][nY], oFont08:oFont) // CFOP
  3502. nAuxH += aTamCol[5]
  3503. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][6][nY], oFont08:oFont) // UN
  3504. nAuxH += aTamCol[6]
  3505. // Workaround para falha no FWMSPrinter:GetTextWidth()
  3506. nAuxH2 := len(aAux[1][7][nY]) + (nAuxH + (aTamCol[7]) - RetTamTex(aAux[1][7][nY], oFont08:oFont, oDanfe))
  3507. oDanfe:Say(nLinha, nAuxH2, aAux[1][7][nY], oFont08:oFont) // QUANT
  3508. nAuxH += aTamCol[7]
  3509. nAuxH2 := len(aAux[1][8][nY]) + (nAuxH + (aTamCol[8]) - RetTamTex(aAux[1][8][nY], oFont08:oFont, oDanfe))
  3510. oDanfe:Say(nLinha, nAuxH2, aAux[1][8][nY], oFont08:oFont) // V UNITARIO
  3511. nAuxH += aTamCol[8]
  3512. nAuxH2 := len(aAux[1][9][nY]) + (nAuxH + (aTamCol[9]) - RetTamTex(aAux[1][9][nY], oFont08:oFont, oDanfe))
  3513. oDanfe:Say(nLinha, nAuxH2, aAux[1][9][nY], oFont08:oFont) // V. TOTAL
  3514. nAuxH += aTamCol[9]
  3515. nAuxH2 := len(aAux[1][10][nY]) + (nAuxH + (aTamCol[10]) - RetTamTex(aAux[1][10][nY], oFont08:oFont, oDanfe))
  3516. oDanfe:Say(nLinha, nAuxH2, aAux[1][10][nY], oFont08:oFont) // BC. ICMS
  3517. nAuxH += aTamCol[10]
  3518. nAuxH2 := len(aAux[1][11][nY]) + (nAuxH + (aTamCol[11]) - RetTamTex(aAux[1][11][nY], oFont08:oFont, oDanfe))
  3519. oDanfe:Say(nLinha, nAuxH2, aAux[1][11][nY], oFont08:oFont) // V. ICMS
  3520. nAuxH += aTamCol[11]
  3521. nAuxH2 := len(aAux[1][12][nY]) + (nAuxH + (aTamCol[12]) - RetTamTex(aAux[1][12][nY], oFont08:oFont, oDanfe))
  3522. oDanfe:Say(nLinha, nAuxH2, aAux[1][12][nY], oFont08:oFont) // V.IPI
  3523. nAuxH += aTamCol[12]
  3524. nAuxH2 := len(aAux[1][13][nY]) + (nAuxH + (aTamCol[13]) - RetTamTex(aAux[1][13][nY], oFont08:oFont, oDanfe))
  3525. oDanfe:Say(nLinha, nAuxH2, aAux[1][13][nY], oFont08:oFont) // A.ICMS
  3526. nAuxH += aTamCol[13]
  3527. nAuxH2 := len(aAux[1][14][nY]) + (nAuxH + (aTamCol[14]) - RetTamTex(aAux[1][14][nY], oFont08:oFont, oDanfe))
  3528. oDanfe:Say(nLinha, nAuxH2, aAux[1][14][nY], oFont08:oFont) // A.IPI
  3529. EndIf
  3530. nLinha :=nLinha + 10
  3531. Next nY
  3532. nLenMensagens := Len(aMensagem)
  3533. While nMensagem <= nLenMensagens
  3534. DanfeCpl(oDanfe,aItens,aMensagem,@nItem,@nMensagem,oNFe,oIdent,oEmitente,@nFolha,nFolhas,cCodAutSef,oNfeDPEC,cCodAutDPEC,cDtHrRecCab,cLogoD,aUF,cDadosProt)
  3535. EndDo
  3536. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  3537. //蚶inaliza a Impress緌 �
  3538. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  3539. If lPreview
  3540. // oDanfe:Preview()
  3541. EndIf
  3542. oDanfe:EndPage()
  3543. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  3544. //袍ratamento para nao imprimir DANFEs diferentes na mesma folha, uma na FRENTE e outra no VERSO. |
  3545. //| Isso quando a impressora estiver configurada para frente e verso �
  3546. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  3547. If MV_PAR05==1 .And. MV_PAR01 <> MV_PAR02 .And. (--nFolha)%2<>0
  3548. oDanfe:StartPage()
  3549. oDanfe:EndPage()
  3550. EndIf
  3551. Return(.T.)
  3552. /*
  3553. Private oNF := oNFe:_NFe
  3554. Private oDPEC :=oNfeDPEC
  3555. Default cCodAutSef := ""
  3556. Default cCodAutDPEC:= ""
  3557. Default cDtHrRecCab:= ""
  3558. Default dDtReceb := CToD("")
  3559. */
  3560. //Impressao do Complemento da NFe
  3561. Static Function DanfeCpl(oDanfe,aItens,aMensagem,nItem,nMensagem,oNFe,oIdent,oEmitente,nFolha,nFolhas,cCodAutSef,oNfeDPEC,cCodAutDPEC,cDtHrRecCab,cLogoD,aUF,cDadosProt)
  3562. Local nX := 0
  3563. Local nLinha := 0
  3564. Local nLenMensagens := Len(aMensagem)
  3565. Local nItemOld := nItem
  3566. Local nMensagemOld := nMensagem
  3567. Local nForMensagens := 0
  3568. Local lMensagens := .F.
  3569. Local cLogo := FisxLogo("1")
  3570. Local cChaveCont := ""
  3571. Local lConverte := GetNewPar("MV_CONVERT",.F.)
  3572. Local lMv_Logod := If(GetNewPar("MV_LOGOD", "N" ) == "S", .T., .F. )
  3573. Local cCNPJCPF := ""
  3574. Local cUF := ""
  3575. Local cDataEmi := ""
  3576. Local cTPEmis := ""
  3577. Local cValIcm := ""
  3578. Local cICMSp := ""
  3579. Local cICMSs := ""
  3580. local cLogoTotvs := "Powered_by_TOTVS.bmp"
  3581. local cStartPath := GetSrvProfString("Startpath","")
  3582. local lNFCE := Substr(oNFe:_NFe:_InfNfe:_ID:Text,24,2) == "65"
  3583. If (nLenMensagens - (nMensagemOld - 1)) > 0
  3584. lMensagens := .T.
  3585. EndIf
  3586. //Dados Adicionais segunda parte em diante
  3587. If lMensagens
  3588. nLenMensagens := Len(aMensagem)
  3589. nForMensagens := Min(nLenMensagens, MAXITEMP2 + (nMensagemOld - 1) - (nItem - nItemOld))
  3590. oDanfe:EndPage()
  3591. oDanfe:StartPage()
  3592. nLinha :=180
  3593. oDanfe:Say(160,000,"DADOS ADICIONAIS",oFont08N:oFont)
  3594. oDanfe:Box(172,000,865,351)
  3595. oDanfe:Say(170,002,"INFORMAベES COMPLEMENTARES",oFont08N:oFont)
  3596. oDanfe:Box(172,350,865,603)
  3597. oDanfe:Say(170,352,"RESERVADO AO FISCO",oFont08N:oFont)
  3598. //Logotipo Rodape
  3599. if file(cLogoTotvs) .or. Resource2File ( cLogoTotvs, cStartPath+cLogoTotvs )
  3600. oDanfe:SayBitmap(866,484,cLogoTotvs,120,20)
  3601. endif
  3602. oDanfe:Box(000,000,095,250)
  3603. oDanfe:Say(010,096, "Identifica誽o do emitente",oFont12N:oFont)
  3604. nLinCalc := 023
  3605. cStrAux := AllTrim(NoChar(oEmitente:_xNome:Text,lConverte))
  3606. nForTo := Len(cStrAux)/24
  3607. nForTo := Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1,Round(nForTo,0))
  3608. For nX := 1 To nForTo
  3609. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*24)+1),24), oFont12N:oFont )
  3610. nLinCalc+=10
  3611. Next nX
  3612. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xLgr:Text,lConverte))+", "+AllTrim(oEmitente:_EnderEmit:_Nro:Text)
  3613. nForTo := Len(cStrAux)/40
  3614. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3615. For nX := 1 To nForTo
  3616. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3617. nLinCalc+=10
  3618. Next nX
  3619. If Type("oEmitente:_EnderEmit:_xCpl") <> "U"
  3620. cStrAux := "Complemento: "+AllTrim(NoChar(oEmitente:_EnderEmit:_xCpl:TEXT,lConverte))
  3621. nForTo := Len(cStrAux)/40
  3622. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3623. For nX := 1 To nForTo
  3624. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3625. nLinCalc+=10
  3626. Next nX
  3627. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xBairro:Text,lConverte))
  3628. If Type("oEmitente:_EnderEmit:_Cep")<>"U"
  3629. cStrAux += " Cep:"+TransForm(oEmitente:_EnderEmit:_Cep:Text,"@r 99999-999")
  3630. EndIf
  3631. nForTo := Len(cStrAux)/40
  3632. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  3633. For nX := 1 To nForTo
  3634. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  3635. nLinCalc+=10
  3636. Next nX
  3637. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  3638. nLinCalc+=9
  3639. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(Type("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  3640. Else
  3641. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xBairro:Text+" Cep:"+TransForm(IIF(Type("oEmitente:_EnderEmit:_Cep")=="U","",oEmitente:_EnderEmit:_Cep:Text),"@r 99999-999"),oFont08N:oFont)
  3642. nLinCalc+=10
  3643. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  3644. nLinCalc+=9
  3645. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(Type("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  3646. EndIf
  3647. oDanfe:Box(000,248,095,351)
  3648. oDanfe:Say(013,275, "DANFE",oFont18N:oFont)
  3649. oDanfe:Say(023,255, "DOCUMENTO AUXILIAR DA",oFont07:oFont)
  3650. if lNFCE
  3651. oDanfe:Say(033,255, "NOTA FISCAL DE CONSUMIDOR",oFont07:oFont)
  3652. else
  3653. oDanfe:Say(033,255, "NOTA FISCAL ELETR偡ICA",oFont07:oFont)
  3654. endif
  3655. oDanfe:Say(043,255, "0-ENTRADA",oFont08:oFont)
  3656. oDanfe:Say(053,255, "1-SA沝A" ,oFont08:oFont)
  3657. oDanfe:Box(037,305,047,315)
  3658. oDanfe:Say(045,307, oIdent:_TpNf:Text,oFont08N:oFont)
  3659. oDanfe:Say(062,255,"N. "+StrZero(Val(oIdent:_NNf:Text),9),oFont10N:oFont)
  3660. oDanfe:Say(072,255,"S仂IE "+SubStr(oIdent:_Serie:Text,1,3),oFont10N:oFont)
  3661. oDanfe:Say(082,255,"FOLHA "+StrZero(nFolha,2)+"/"+StrZero(nFolhas,2),oFont10N:oFont)
  3662. oDanfe:Box(000,350,095,603)
  3663. oDanfe:Box(000,350,040,603)
  3664. oDanfe:Box(040,350,062,603)
  3665. oDanfe:Box(063,350,095,603)
  3666. oDanfe:Say(058,355,TransForm(SubStr(oNF:_InfNfe:_ID:Text,4),"@r 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999"),oFont12N:oFont)
  3667. oDanfe:Say(048,355,"CHAVE DE ACESSO DA "+iif(lNFCE,"NFC-E","NF-E"),oFont12N:oFont)
  3668. nFontSize := 28
  3669. oDanfe:Code128C(036,370,SubStr(oNF:_InfNfe:_ID:Text,4), nFontSize )
  3670. If lMv_Logod
  3671. oDanfe:SayBitmap(000,003,cLogoD,090,090)
  3672. Else
  3673. oDanfe:SayBitmap(000,003,cLogo,090,090)
  3674. EndIf
  3675. If Empty(cChaveCont)
  3676. oDanfe:Say(075,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  3677. oDanfe:Say(085,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  3678. Endif
  3679. If !Empty(cCodAutDPEC)
  3680. oDanfe:Say(075,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  3681. oDanfe:Say(085,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  3682. Endif
  3683. If nFolha == 1
  3684. If !Empty(cCodAutDPEC)
  3685. nFontSize := 28
  3686. oDanfe:Code128C(093,370,cCodAutDPEC, nFontSize )
  3687. Endif
  3688. Endif
  3689. // inicio do segundo codigo de barras ref. a transmissao CONTIGENCIA OFF LINE
  3690. If !Empty(cChaveCont) .And. Empty(cCodAutDPEC) .And. !(Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900)
  3691. If nFolha == 1
  3692. If !Empty(cChaveCont)
  3693. nFontSize := 28
  3694. oDanfe:Code128C(093,370,cChaveCont, nFontSize )
  3695. EndIf
  3696. Else
  3697. If !Empty(cChaveCont)
  3698. nFontSize := 28
  3699. oDanfe:Code128C(093,370,cChaveCont, nFontSize )
  3700. EndIf
  3701. EndIf
  3702. EndIf
  3703. oDanfe:Box(100,000,123,603)
  3704. oDanfe:Box(100,000,123,300)
  3705. oDanfe:Say(109,002,"NATUREZA DA OPERAデO",oFont08N:oFont)
  3706. oDanfe:Say(119,002,oIdent:_NATOP:TEXT,oFont08:oFont)
  3707. If(!Empty(cCodAutDPEC))
  3708. oDanfe:Say(109,300,"N渧ERO DE REGISTRO DPEC",oFont08N:oFont)
  3709. Endif
  3710. If(((Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900).And.(oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"2") .Or. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"1")
  3711. oDanfe:Say(109,302,"PROTOCOLO DE AUTORIZAデO DE USO",oFont08N:oFont)
  3712. Endif
  3713. If((oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25")
  3714. oDanfe:Say(109,300,"DADOS DA "+iif(lNFCE,"NFC-E","NF-E"),oFont08N:oFont)
  3715. Endif
  3716. If !Empty(cCodAutDPEC) .And. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"4"
  3717. cDataEmi := Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",Substr(oNFe:_NFE:_INFNFE:_IDE:_DHEMI:Text,9,2),Substr(oNFe:_NFE:_INFNFE:_IDE:_DEMI:Text,9,2))
  3718. cTPEmis := "4"
  3719. If Type("oDPEC:_ENVDPEC:_INFDPEC:_RESNFE") <> "U"
  3720. cUF := aUF[aScan(aUF,{|x| x[1] == oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_UF:Text})][02]
  3721. cValIcm := StrZero(Val(StrTran(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VNF:TEXT,".","")),14)
  3722. cICMSp := iif(Val(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VICMS:TEXT)>0,"1","2")
  3723. cICMSs := iif(Val(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VST:TEXT)>0,"1","2")
  3724. ElseIf type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST") <> "U" //EPEC NFE
  3725. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_UF:TEXT") <> "U"
  3726. cUF := aUF[aScan(aUF,{|x| x[1] == oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_UF:TEXT})][02]
  3727. EndIf
  3728. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VNF:TEXT") <> "U"
  3729. cValIcm := StrZero(Val(StrTran(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VNF:TEXT,".","")),14)
  3730. EndIf
  3731. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VICMS:TEXT") <> "U"
  3732. cICMSp:= IIf(Val(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VICMS:TEXT) > 0,"1","2")
  3733. EndIf
  3734. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VST:TEXT") <> "U"
  3735. cICMSs := IIf(Val(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VST:TEXT )> 0,"1","2")
  3736. EndIf
  3737. EndIf
  3738. ElseIF (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25"
  3739. cUF := aUF[aScan(aUF,{|x| x[1] == oNFe:_NFE:_INFNFE:_DEST:_ENDERDEST:_UF:Text})][02]
  3740. cDataEmi := Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",Substr(oNFe:_NFE:_INFNFE:_IDE:_DHEMI:Text,9,2),Substr(oNFe:_NFE:_INFNFE:_IDE:_DEMI:Text,9,2))
  3741. cTPEmis := oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT
  3742. cValIcm := StrZero(Val(StrTran(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VNF:TEXT,".","")),14)
  3743. cICMSp := iif(Val(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VICMS:TEXT)>0,"1","2")
  3744. cICMSs :=iif(Val(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VST:TEXT)>0,"1","2")
  3745. EndIf
  3746. If !Empty(cUF) .And. !Empty(cDataEmi) .And. !Empty(cTPEmis) .And. !Empty(cValIcm) .And. !Empty(cICMSp) .And. !Empty(cICMSs)
  3747. If Type("oNF:_InfNfe:_DEST:_CNPJ:Text")<>"U"
  3748. cCNPJCPF := oNF:_InfNfe:_DEST:_CNPJ:Text
  3749. If cUf == "99"
  3750. cCNPJCPF := STRZERO(val(cCNPJCPF),14)
  3751. EndIf
  3752. ElseIf Type("oNF:_INFNFE:_DEST:_CPF:Text")<>"U"
  3753. cCNPJCPF := oNF:_INFNFE:_DEST:_CPF:Text
  3754. cCNPJCPF := STRZERO(val(cCNPJCPF),14)
  3755. Else
  3756. cCNPJCPF := ""
  3757. EndIf
  3758. cChaveCont += cUF+cTPEmis+cCNPJCPF+cValIcm+cICMSp+cICMSs+cDataEmi
  3759. cChaveCont := cChaveCont+Modulo11(cChaveCont)
  3760. EndIf
  3761. oDanfe:Say(119,302,cDadosProt,oFont08:oFont)
  3762. nFolha++
  3763. oDanfe:Box(126,000,153,603)
  3764. oDanfe:Box(126,000,153,200)
  3765. oDanfe:Box(126,200,153,400)
  3766. oDanfe:Box(126,400,153,603)
  3767. oDanfe:Say(135,002,"INSCRIデO ESTADUAL",oFont08N:oFont)
  3768. oDanfe:Say(143,002,IIf(Type("oEmitente:_IE:TEXT")<>"U",oEmitente:_IE:TEXT,""),oFont08:oFont)
  3769. oDanfe:Say(135,205,"INSC.ESTADUAL DO SUBST.TRIB.",oFont08N:oFont)
  3770. oDanfe:Say(143,205,IIf(Type("oEmitente:_IEST:TEXT")<>"U",oEmitente:_IEST:TEXT,""),oFont08:oFont)
  3771. oDanfe:Say(135,405,"CNPJ/CPF",oFont08N:oFont)
  3772. Do Case
  3773. Case Type("oEmitente:_CNPJ")=="O"
  3774. cAux := TransForm(oEmitente:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  3775. Case Type("oEmitente:_CPF")=="O"
  3776. cAux := TransForm(oEmitente:_CPF:TEXT,"@r 999.999.999-99")
  3777. OtherWise
  3778. cAux := Space(14)
  3779. EndCase
  3780. oDanfe:Say(143,405,cAux,oFont08:oFont)
  3781. For nX := nMensagem To nForMensagens
  3782. oDanfe:Say(nLinha,002,aMensagem[nX],oFont08:oFont)
  3783. nMensagem++
  3784. nLinha:= nLinha+ 10
  3785. Next nX
  3786. EndIf
  3787. //Finalizacao da pagina do objeto grafico
  3788. oDanfe:EndPage()
  3789. Return(.T.)
  3790. Static Function GetXML(cIdEnt,aIdNFe,cModalidade, lJob)
  3791. Local aRetorno := {}
  3792. Local aDados := {}
  3793. Local cURL := PadR(GetNewPar("MV_SPEDURL","http://localhost:8080/sped"),250)
  3794. Local cModel := "55"
  3795. Local nZ := 0
  3796. Local nCount := 0
  3797. Local oWS
  3798. default lJob := .F.
  3799. If Empty(cModalidade)
  3800. oWS := WsSpedCfgNFe():New()
  3801. oWS:cUSERTOKEN := "TOTVS"
  3802. oWS:cID_ENT := cIdEnt
  3803. oWS:nModalidade:= 0
  3804. oWS:_URL := AllTrim(cURL)+"/SPEDCFGNFe.apw"
  3805. oWS:cModelo := cModel
  3806. If oWS:CFGModalidade()
  3807. cModalidade := SubStr(oWS:cCfgModalidadeResult,1,1)
  3808. else
  3809. cModalidade := ""
  3810. endif
  3811. EndIf
  3812. oWs := nil
  3813. For nZ := 1 To len(aIdNfe)
  3814. nCount++
  3815. aDados := executeRetorna( aIdNfe[nZ], cIdEnt , , lJob)
  3816. if ( nCount == 10 )
  3817. delClassIntF()
  3818. nCount := 0
  3819. endif
  3820. aAdd(aRetorno,aDados)
  3821. Next nZ
  3822. Return(aRetorno)
  3823. Static Function ConvDate(cData)
  3824. Local dData
  3825. cData := StrTran(cData,"-","")
  3826. dData := Stod(cData)
  3827. Return PadR(StrZero(Day(dData),2)+ "/" + StrZero(Month(dData),2)+ "/" + StrZero(Year(dData),4),15)
  3828. /*
  3829. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  3830. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3831. 控奼迋迋迋迋迕迋迋迋迋迋冞迋迋迋敊迋迋迋迋迋迋迋迋迋豖迋迋迋敊迋迋迋迋迋迋跼�
  3832. 控摺rograma 蛇ANFE 態utor 蛉arcos Taranta � Data � 10/01/09 滷�
  3833. 控昅迋迋迋迋阹迋迋迋迋迋庋迋迋迋玵迋迋迋迋迋迋迋迋迋虮迋迋迋玵迋迋迋迋迋迋僚�
  3834. 控慣esc. 袈ega uma posi誽o (nTam) na string cString, e retorna o 滷�
  3835. 控� 販aractere de espa蔞 anterior. 滷�
  3836. 控昅迋迋迋迋阹迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋僚�
  3837. 控摻so � AP 滷�
  3838. 控¬迋迋迋迋迍迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋摹�
  3839. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3840. 葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔�
  3841. */
  3842. Static Function EspacoAt(cString, nTam)
  3843. Local nRetorno := 0
  3844. Local nX := 0
  3845. /**
  3846. * Caso a posi誽o (nTam) for maior que o tamanho da string, ou for um valor
  3847. * inv嫮ido, retorna 0.
  3848. */
  3849. If nTam > Len(cString) .Or. nTam < 1
  3850. nRetorno := 0
  3851. Return nRetorno
  3852. EndIf
  3853. /**
  3854. * Procura pelo caractere de espa蔞 anterior a posi誽o e retorna a posi誽o
  3855. * dele.
  3856. */
  3857. nX := nTam
  3858. While nX > 1
  3859. If Substr(cString, nX, 1) == " "
  3860. nRetorno := nX
  3861. Return nRetorno
  3862. EndIf
  3863. nX--
  3864. EndDo
  3865. /**
  3866. * Caso n緌 encontre nenhum caractere de espa蔞, � retornado 0.
  3867. */
  3868. nRetorno := 0
  3869. Return nRetorno
  3870. /*
  3871. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  3872. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3873. 控矬闡闡闡闡鐃闡闡闡闡闡鐃闡闡闡鐃闡闡闡闡闡闡闡闡闡闡闡薩闡闡鐃闡闡闡闡闡膨�
  3874. 控蚶un�o � DANFE_V � Autor � Luana Ferrari � Data � 20/07/10 陰�
  3875. 控藥闡闡闡闡霰闡闡闡闡闡鐘闡闡闡鐘闡闡闡闡闡闡闡闡闡闡闡謐闡闡鐘闡闡闡闡闡敢�
  3876. 控蛇escri�o � Funcao utilizada para verificar a ultima versao do fonte 陰�
  3877. 控� � DANFEII..PRW aplicado no rpo do cliente, assim verificando 陰�
  3878. 控� � a necessidade de uma atualizacao neste fonte. 陰�
  3879. 控藥闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  3880. 控� Uso � FAT/FIS 陰�
  3881. 控藥闡闡闡闡霰闡闡闡闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  3882. 控� DATA � Programador 蛉anutencao efetuada 陰�
  3883. 控藥闡闡闡闡霰闡闡闡闡闡闡闡霰闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡敢�
  3884. 控� � � 陰�
  3885. 控斂闡闡闡闡鐘闡闡闡闡闡闡闡鐘闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡棱�
  3886. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3887. */
  3888. User Function DANFE_V
  3889. //Local nRet := 20100720 // 20 de Julho de 2010 # Luana Ferrari
  3890. //Local nRet := 20100929 // 29 de Setembro de 2010 # Roberto Souza
  3891. Local nRet := 20130417 // 17 de Abril de 2013 # Rafael Iaquinto
  3892. Return nRet
  3893. /*
  3894. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  3895. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3896. 控奼迋迋迋迋迕迋迋迋迋迋冞迋迋迋敊迋迋迋迋迋迋迋迋迋豖迋迋迋敊迋迋迋迋迋迋跼�
  3897. 控摺rograma 蛇ANFE 態utor 蚶abio Santana � Data � 04/10/10 滷�
  3898. 控昅迋迋迋迋阹迋迋迋迋迋庋迋迋迋玵迋迋迋迋迋迋迋迋迋虮迋迋迋玵迋迋迋迋迋迋僚�
  3899. 控慣esc. 彪onverte caracteres espceiais 滷�
  3900. 控昅迋迋迋迋阹迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋僚�
  3901. 控摻so � AP 滷�
  3902. 控¬迋迋迋迋迍迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋摹�
  3903. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3904. */
  3905. STATIC FUNCTION NoChar(cString,lConverte)
  3906. Default lConverte := .F.
  3907. If lConverte
  3908. cString := (StrTran(cString,"&lt;","<"))
  3909. cString := (StrTran(cString,"&gt;",">"))
  3910. cString := (StrTran(cString,"&amp;","&"))
  3911. cString := (StrTran(cString,"&quot;",'"'))
  3912. cString := (StrTran(cString,"&#39;","'"))
  3913. EndIf
  3914. Return(cString)
  3915. /*
  3916. 嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈嗈�
  3917. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3918. 控奼迋迋迋迋迕迋迋迋迋迋冞迋迋迋敊迋迋迋迋迋迋迋迋迋豖迋迋迋敊迋迋迋迋迋迋跼�
  3919. 控摺rograma 蛇ANFEIII 態utor 蛉icrosiga � Data � 12/17/10 滷�
  3920. 控昅迋迋迋迋阹迋迋迋迋迋庋迋迋迋玵迋迋迋迋迋迋迋迋迋虮迋迋迋玵迋迋迋迋迋迋僚�
  3921. 控慣esc. � Tratamento para o c鏚igo do item 滷�
  3922. 控� � 滷�
  3923. 控昅迋迋迋迋阹迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋僚�
  3924. 控摻so � AP 滷�
  3925. 控¬迋迋迋迋迍迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋摹�
  3926. 控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控控�
  3927. 葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔�
  3928. */
  3929. STATIC FUNCTION MaxCod(cString,nTamanho)
  3930. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  3931. //袍ratamento para saber quantos caracteres ir緌 caber na linha �
  3932. //� visto que letras ocupam mais espa蔞 do que os n𤦤eros. �
  3933. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡�
  3934. Local nMax := 0
  3935. Local nY := 0
  3936. Default nTamanho := 45
  3937. For nMax := 1 to Len(cString)
  3938. If IsAlpha(SubStr(cString,nMax,1)) .And. SubStr(cString,nMax,1) $ "MOQW" // Caracteres que ocupam mais espa蔞 em pixels
  3939. nY += 7
  3940. Else
  3941. nY += 5
  3942. EndIf
  3943. If nY > nTamanho // � o m嫞imo de espa蔞 para uma coluna
  3944. nMax--
  3945. Exit
  3946. EndIf
  3947. Next
  3948. Return nMax
  3949. //-----------------------------------------------------------------------
  3950. /*/{Protheus.doc} RetTamCol
  3951. Retorna um array do mesmo tamanho do array de entrada, contendo as
  3952. medidas dos maiores textos para c嫮culo de colunas.
  3953. @author Marcos Taranta
  3954. @since 24/05/2011
  3955. @version 1.0
  3956. @param aCabec Array contendo as strings de cabe蓷lho das colunas
  3957. aValores Array contendo os valores que ser緌 populados nas
  3958. colunas.
  3959. oPrinter Objeto de impress緌 instanciado para utilizar o m彋odo
  3960. nativo de c嫮culo de tamanho de texto.
  3961. oFontCabec Objeto da fonte que ser� utilizada no cabe蓷lho.
  3962. oFont Objeto da fonte que ser� utilizada na impress緌.
  3963. @return aTamCol Array contendo os tamanhos das colunas baseados nos
  3964. valores.
  3965. /*/
  3966. //-----------------------------------------------------------------------
  3967. Static Function RetTamCol(aCabec, aValores, oPrinter, oFontCabec, oFont)
  3968. Local aTamCol := {}
  3969. Local nAux := 0
  3970. Local nX := 0
  3971. /* Valores fixados, devido erro de impr. quando S.O est� com visualiza誽o <> de 100%
  3972. */
  3973. aTamCol := {50,;
  3974. 150,;
  3975. 33,;
  3976. iif(aCabec[4] == "CSOSN", 22, 16),; // CST/CSON
  3977. 22,;
  3978. 14,;
  3979. iif(aCabec[4] == "CSOSN", 33, 35),; // Quant.
  3980. iif(aCabec[4] == "CSOSN", 49, 53),; // V.Unit嫫io
  3981. 38,;
  3982. 37,;
  3983. 32,;
  3984. 32,;
  3985. 24,;
  3986. 24}
  3987. // Checa se os campos completam a p墔ina, sen緌 joga o resto na coluna da
  3988. // descri誽o de produtos/servi蔞s
  3989. nAux := 0
  3990. For nX := 1 To Len(aTamCol)
  3991. nAux += aTamCol[nX]
  3992. Next nX
  3993. If nAux < 603
  3994. aTamCol[2] += 603 - nAux
  3995. EndIf
  3996. If nAux > 603
  3997. aTamCol[2] -= nAux - 603
  3998. EndIf
  3999. Return aTamCol
  4000. //-----------------------------------------------------------------------
  4001. /*/{Protheus.doc} RetTamTex
  4002. Retorna o tamanho em pixels de uma string. (Workaround para o GetTextWidth)
  4003. @author Marcos Taranta
  4004. @since 24/05/2011
  4005. @version 1.0
  4006. @param cTexto Texto a ser medido.
  4007. oFont Objeto instanciado da fonte a ser utilizada.
  4008. oPrinter Objeto de impress緌 instanciado.
  4009. @return nTamanho Tamanho em pixels da string.
  4010. /*/
  4011. //-----------------------------------------------------------------------
  4012. Static Function RetTamTex(cTexto, oFont, oPrinter)
  4013. Local nTamanho := 0
  4014. //Local oFontSize:= FWFontSize():new()
  4015. Local cAux := ""
  4016. Local cValor := "0123456789"
  4017. Local cVirgPonto := ",."
  4018. Local cPerc := "%"
  4019. Local nX := 0
  4020. //nTamanho := oPrinter:GetTextWidth(cTexto, oFont)
  4021. //nTamanho := oFontSize:getTextWidth( cTexto, oFont:Name, oFont:nWidth, oFont:Bold, oFont:Italic )
  4022. /*O calculo abaixo � o mesmo realizado pela oFontSize:getTextWidth
  4023. Retorna 5 para numeros (0123456789), 2 para virgula e ponto (, .) e 7 para percentual (%)
  4024. O ajuste foi realizado para diminuir o tempo na impress緌 de um danfe com muitos itens*/
  4025. For nX:= 1 to len(cTexto)
  4026. cAux:= Substr(cTexto,nX,1)
  4027. If cAux $ cValor
  4028. nTamanho += 5
  4029. ElseIf cAux $ cVirgPonto
  4030. nTamanho += 2
  4031. ElseIf cAux $ cPerc
  4032. nTamanho += 7
  4033. EndIf
  4034. Next nX
  4035. nTamanho := Round(nTamanho, 0)
  4036. Return nTamanho
  4037. //-----------------------------------------------------------------------
  4038. /*/{Protheus.doc} PosQuebrVal
  4039. Retorna a posi誽o onde um valor deve ser quebrado
  4040. @author Marcos Taranta
  4041. @since 27/05/2011
  4042. @version 1.0
  4043. @param cTexto Texto a ser medido.
  4044. @return nPos Posi誽o aonde o valor deve ser quebrado.
  4045. /*/
  4046. //-----------------------------------------------------------------------
  4047. Static Function PosQuebrVal(cTexto)
  4048. Local nPos := 0
  4049. If Empty(cTexto)
  4050. Return 0
  4051. EndIf
  4052. If Len(cTexto) <= MAXVALORC
  4053. Return Len(cTexto)
  4054. EndIf
  4055. If SubStr(cTexto, MAXVALORC, 1) $ ",."
  4056. nPos := MAXVALORC - 2
  4057. Else
  4058. nPos := MAXVALORC
  4059. EndIf
  4060. Return nPos
  4061. //-----------------------------------------------------------------------
  4062. /*/{Protheus.doc} MontaEnd
  4063. Retorna o endere蔞 completo do cliente (Logradouro + N𤦤ero + Complemento)
  4064. @author Renan Franco
  4065. @since 11/07/2019
  4066. @version 1.0
  4067. @param oMontaEnd Objeto que possui _xLgr, _xcpl e _xNRO.
  4068. @return cEndereco Endere蔞 concatenado. Ex.: AV BRAZ LEME, 1000, S艿ECA MALL
  4069. /*/
  4070. //-----------------------------------------------------------------------
  4071. Static Function MontaEnd(oMontaEnd)
  4072. Local lConverte := GetNewPar("MV_CONVERT",.F.)
  4073. Local cEndereco := ""
  4074. Default oMontaEnd := Nil
  4075. Private oEnd := oMontaEnd
  4076. if oEnd <> Nil .and. ValType(oEnd)=="O"
  4077. cEndereco := NoChar(oEnd:_Xlgr:Text,lConverte)
  4078. If " SN" $ (UPPER (oEnd:_Xlgr:Text)) .Or. ",SN" $ (UPPER (oEnd:_Xlgr:Text)) .Or. "S/N" $ (UPPER (oEnd:_Xlgr:Text))
  4079. cEndereco += IIf(type("oEnd:_xcpl") == "O", ", " + NoChar(oEnd:_xcpl:Text,lConverte), " ")
  4080. Else
  4081. cEndereco += ", " + NoChar(oEnd:_NRO:Text,lConverte) + IIf(type("oEnd:_xcpl") == "O", ", " + NoChar(oEnd:_xcpl:Text,lConverte), " ")
  4082. Endif
  4083. Endif
  4084. Return cEndereco
  4085. //-----------------------------------------------------------------------
  4086. /*/{Protheus.doc} executeRetorna
  4087. Executa o retorna de notas
  4088. @author Henrique Brugugnoli
  4089. @since 17/01/2013
  4090. @version 1.0
  4091. @param cID ID da nota que sera retornado
  4092. @return aRetorno Array com os dados da nota
  4093. /*/
  4094. //-----------------------------------------------------------------------
  4095. static function executeRetorna( aNfe, cIdEnt, lUsacolab, lJob)
  4096. Local aRetorno := {}
  4097. Local aDados := {}
  4098. Local aIdNfe := {}
  4099. Local aWsErro := {}
  4100. Local cAviso := ""
  4101. Local cCodRetNFE := ""
  4102. Local cDHRecbto := ""
  4103. Local cDtHrRec := ""
  4104. Local cDtHrRec1 := ""
  4105. Local cErro := ""
  4106. Local cModTrans := ""
  4107. Local cProtDPEC := ""
  4108. Local cProtocolo := ""
  4109. Local cMsgNFE := ""
  4110. local cMsgRet := ""
  4111. Local cRetDPEC := ""
  4112. Local cRetorno := ""
  4113. Local cURL := PadR(GetNewPar("MV_SPEDURL","http://localhost:8080/sped"),250)
  4114. Local cCodStat := ""
  4115. Local dDtRecib := CToD("")
  4116. Local nDtHrRec1 := 0
  4117. Local nX := 0
  4118. Local nY := 0
  4119. Local nZ := 1
  4120. Local nPos := 0
  4121. Local oWS
  4122. Private oDHRecbto
  4123. Private oNFeRet
  4124. Private oDoc
  4125. default lUsacolab := .F.
  4126. default lJob := .F.
  4127. aAdd(aIdNfe,aNfe)
  4128. if !lUsacolab
  4129. oWS:= WSNFeSBRA():New()
  4130. oWS:cUSERTOKEN := "TOTVS"
  4131. oWS:cID_ENT := cIdEnt
  4132. oWS:nDIASPARAEXCLUSAO := 0
  4133. oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
  4134. oWS:oWSNFEID := NFESBRA_NFES2():New()
  4135. oWS:oWSNFEID:oWSNotas := NFESBRA_ARRAYOFNFESID2():New()
  4136. aadd(aRetorno,{"","",aIdNfe[nZ][4]+aIdNfe[nZ][5],"","","",CToD(""),"","","",""})
  4137. aadd(oWS:oWSNFEID:oWSNotas:oWSNFESID2,NFESBRA_NFESID2():New())
  4138. Atail(oWS:oWSNFEID:oWSNotas:oWSNFESID2):cID := aIdNfe[nZ][4]+aIdNfe[nZ][5]
  4139. If oWS:RETORNANOTASNX()
  4140. If Len(oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5) > 0
  4141. For nX := 1 To Len(oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5)
  4142. cRetorno := oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5[nX]:oWSNFE:CXML
  4143. cProtocolo := oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5[nX]:oWSNFE:CPROTOCOLO
  4144. cDHRecbto := oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5[nX]:oWSNFE:CXMLPROT
  4145. oNFeRet := XmlParser(cRetorno,"_",@cAviso,@cErro)
  4146. cModTrans := IIf(ValAtrib("oNFeRet:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT") <> "U",IIf (!Empty("oNFeRet:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT"),oNFeRet:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT,1),1)
  4147. cCodStat := ""
  4148. If ValType(oWs:OWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5[nX]:OWSDPEC)=="O"
  4149. cRetDPEC := oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5[nX]:oWSDPEC:CXML
  4150. cProtDPEC := oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5[nX]:oWSDPEC:CPROTOCOLO
  4151. EndIf
  4152. //Tratamento para gravar a hora da transmissao da NFe
  4153. If !Empty(cProtocolo)
  4154. oDHRecbto := XmlParser(cDHRecbto,"","","")
  4155. cDtHrRec := IIf(ValAtrib("oDHRecbto:_ProtNFE:_INFPROT:_DHRECBTO:TEXT")<>"U",oDHRecbto:_ProtNFE:_INFPROT:_DHRECBTO:TEXT,"")
  4156. nDtHrRec1 := RAT("T",cDtHrRec)
  4157. cMsgRet := IIf(ValAtrib("oDHRecbto:_ProtNFE:_INFPROT:_XMSG:TEXT")<>"U",oDHRecbto:_ProtNFE:_INFPROT:_XMSG:TEXT,"")
  4158. cCodStat := IIf(ValAtrib("oDHRecbto:_ProtNFE:_INFPROT:_CSTAT:TEXT")<>"U",oDHRecbto:_ProtNFE:_INFPROT:_CSTAT:TEXT,"")
  4159. If nDtHrRec1 <> 0
  4160. cDtHrRec1 := SubStr(cDtHrRec,nDtHrRec1+1)
  4161. dDtRecib := SToD(StrTran(SubStr(cDtHrRec,1,AT("T",cDtHrRec)-1),"-",""))
  4162. EndIf
  4163. AtuSF2Hora(cDtHrRec1,aIdNFe[nZ][5]+aIdNFe[nZ][4]+aIdNFe[nZ][6]+aIdNFe[nZ][7])
  4164. EndIf
  4165. nY := aScan(aIdNfe,{|x| x[4]+x[5] == SubStr(oWs:oWSRETORNANOTASNXRESULT:OWSNOTAS:OWSNFES5[nX]:CID,1,Len(x[4]+x[5]))})
  4166. oWS:cIdInicial := aIdNfe[nZ][4]+aIdNfe[nZ][5]
  4167. oWS:cIdFinal := aIdNfe[nZ][4]+aIdNfe[nZ][5]
  4168. If oWS:MONITORFAIXA()
  4169. nPos := 0
  4170. aWsErro := {}
  4171. If !Empty(cProtocolo) .AND. !Empty(cCodStat)
  4172. aWsErro := oWS:OWSMONITORFAIXARESULT:OWSMONITORNFE[1]:OWSERRO:OWSLOTENFE
  4173. For nPos := 1 To Len(aWsErro)
  4174. If Alltrim(aWsErro[nPos]:CCODRETNFE) == Alltrim(cCodStat)
  4175. Exit
  4176. Endif
  4177. Next
  4178. Endif
  4179. If nPos > 0 .And. nPos <= Len(aWsErro)
  4180. cCodRetNFE := oWS:oWsMonitorFaixaResult:OWSMONITORNFE[1]:OWSERRO:OWSLOTENFE[nPos]:CCODRETNFE
  4181. cMsgNFE := oWS:oWsMonitorFaixaResult:OWSMONITORNFE[1]:OWSERRO:OWSLOTENFE[nPos]:CMSGRETNFE
  4182. Else
  4183. cCodRetNFE := oWS:oWsMonitorFaixaResult:OWSMONITORNFE[1]:OWSERRO:OWSLOTENFE[len(oWS:oWsMonitorFaixaResult:OWSMONITORNFE[1]:OWSERRO:OWSLOTENFE)]:CCODRETNFE
  4184. cMsgNFE := oWS:oWsMonitorFaixaResult:OWSMONITORNFE[1]:OWSERRO:OWSLOTENFE[len(oWS:oWsMonitorFaixaResult:OWSMONITORNFE[1]:OWSERRO:OWSLOTENFE)]:CMSGRETNFE
  4185. EndIf
  4186. endif
  4187. If nY > 0
  4188. aRetorno[nY][1] := cProtocolo
  4189. aRetorno[nY][2] := cRetorno
  4190. aRetorno[nY][4] := cRetDPEC
  4191. aRetorno[nY][5] := cProtDPEC
  4192. aRetorno[nY][6] := cDtHrRec1
  4193. aRetorno[nY][7] := dDtRecib
  4194. aRetorno[nY][8] := cModTrans
  4195. aRetorno[nY][9] := cCodRetNFE
  4196. aRetorno[nY][10]:= cMsgNFE
  4197. aRetorno[nY][11]:= cMsgRet
  4198. EndIf
  4199. cRetDPEC := ""
  4200. cProtDPEC:= ""
  4201. Next nX
  4202. EndIf
  4203. Elseif !lJob
  4204. Aviso("DANFE",IIf(Empty(GetWscError(3)),GetWscError(1),GetWscError(3)),{"OK"},3)
  4205. EndIf
  4206. else
  4207. oDoc := ColaboracaoDocumentos():new()
  4208. oDoc:cModelo := "NFE"
  4209. oDoc:cTipoMov := "1"
  4210. oDoc:cIDERP := aIdNfe[nZ][4]+aIdNfe[nZ][5]+FwGrpCompany()+FwCodFil()
  4211. aadd(aRetorno,{"","",aIdNfe[nZ][4]+aIdNfe[nZ][5],"","","",CToD(""),"","","",""})
  4212. if odoc:consultar()
  4213. aDados := ColDadosNf(1)
  4214. if !Empty(oDoc:cXMLRet)
  4215. cRetorno := oDoc:cXMLRet
  4216. else
  4217. cRetorno := oDoc:cXml
  4218. endif
  4219. aDadosXml := ColDadosXMl(cRetorno, aDados, @cErro, @cAviso)
  4220. if '<obsCont xCampo="nRegDPEC">' $ cRetorno
  4221. aDadosXml[9] := SubStr(cRetorno,At('<obsCont xCampo="nRegDPEC"><xTexto>',cRetorno)+35,15)
  4222. endif
  4223. cProtocolo := aDadosXml[3]
  4224. cModTrans := IIF(Empty(aDadosXml[5]),aDadosXml[7],aDadosXml[5])
  4225. cCodRetNFE := aDadosXml[1]
  4226. cMsgNFE := iif (aDadosXml[2]<> nil ,aDadosXml[2],"")
  4227. cMsgRet := aDadosXml[11]
  4228. //Dados do DEPEC
  4229. If !Empty( aDadosXml[9] )
  4230. cRetDPEC := cRetorno
  4231. cProtDPEC := aDadosXml[9]
  4232. EndIf
  4233. //Tratamento para gravar a hora da transmissao da NFe
  4234. If !Empty(cProtocolo)
  4235. cDtHrRec := aDadosXml[4]
  4236. nDtHrRec1 := RAT("T",cDtHrRec)
  4237. If nDtHrRec1 <> 0
  4238. cDtHrRec1 := SubStr(cDtHrRec,nDtHrRec1+1)
  4239. dDtRecib := SToD(StrTran(SubStr(cDtHrRec,1,AT("T",cDtHrRec)-1),"-",""))
  4240. EndIf
  4241. AtuSF2Hora(cDtHrRec1,aIdNFe[nZ][5]+aIdNFe[nZ][4]+aIdNFe[nZ][6]+aIdNFe[nZ][7])
  4242. EndIf
  4243. aRetorno[1][1] := cProtocolo
  4244. aRetorno[1][2] := cRetorno
  4245. aRetorno[1][4] := cRetDPEC
  4246. aRetorno[1][5] := cProtDPEC
  4247. aRetorno[1][6] := cDtHrRec1
  4248. aRetorno[1][7] := dDtRecib
  4249. aRetorno[1][8] := cModTrans
  4250. aRetorno[1][9] := cCodRetNFE
  4251. aRetorno[1][10]:= cMsgNFE
  4252. aRetorno[1][11]:= cMsgRet
  4253. cRetDPEC := ""
  4254. cProtDPEC:= ""
  4255. endif
  4256. endif
  4257. oWS := Nil
  4258. oDHRecbto := Nil
  4259. oNFeRet := Nil
  4260. return aRetorno[len(aRetorno)]
  4261. //-----------------------------------------------------------------------
  4262. /*/{Protheus.doc} SimpDanfe
  4263. Impressao do formulario DANFE grafico conforme laytout no formato
  4264. simplificado.
  4265. @author Rafael Iaquinto
  4266. @since 17.04.2013
  4267. @version 10
  4268. @param oDanfe Objeto FWMSPrinter, para desenho do documento.
  4269. @param oNfe Objeto do XML da NF-e
  4270. @param cCodAutSef C鏚igo de autoriza誽o da NF-e
  4271. @param cModalidade Modalidade de transmiss緌 da NF-e
  4272. @param oNfeDPEC Objeto do XML do DPEC.
  4273. @param cCodAutDPEC Codigo de autoriza誽o do DPEC
  4274. @param cDtHrRecCab Hora de Recebimento da NF-e
  4275. @param dDtReceb Data de recebimento da NF-e
  4276. @param aNota Array com informa踥es do documento a ser impresso.
  4277. @return .T.
  4278. /*/
  4279. //-----------------------------------------------------------------------
  4280. Static Function SimpDanfe(oDanfe,oNfe,cCodAutSef,cModalidade,oNfeDPEC,cCodAutDPEC,cDtHrRecCab,dDtReceb,aNota)
  4281. Local cLogo := FisxLogo("1")
  4282. Local cUF := ""
  4283. Local cDataEmi := ""
  4284. Local cTPEmis := ""
  4285. Local cValIcm := ""
  4286. Local cICMSp := ""
  4287. Local cICMSs := ""
  4288. Local cChaveCont := ""
  4289. Local cDadosProt := ""
  4290. Local nX := 0
  4291. Local nY := 0
  4292. Local nZ := 0
  4293. Local nFolha := 1
  4294. Local nFolhas := 0
  4295. Local nMaxDes := 54
  4296. Local nMaxI := 066 //MAXIMO DE ITENS PRIMEIRA PAGINA
  4297. Local nMaxI2 := 080 //MAXIMO DE ITENS SEGUNDA PAG. SE FOR O VERSO PAGINA
  4298. Local nMaxIAll := 085 //MAXIMO DE ITENS DA TERCEIRA PAGINA EM DIANTE
  4299. Local nFimL := 855 //NUMERO DA LINHA FINAL QUANDO HOUVER MAIS PAGINAS
  4300. Local aIndImp := {}
  4301. Local aIndAux := {}
  4302. Local aItens := {}
  4303. Local aSitTrib := {}
  4304. Local aSitSN := {}
  4305. Local aHrEnt := {}
  4306. Local aUF := {}
  4307. Local aTamCol := {271,27,76,91,138} //Tamanho das colunas s緌 fixas para os Itens
  4308. Local lConverte := .F. //GetNewPar("MV_CONVERT",.F.)
  4309. Local lMv_ItDesc := .F. //Iif( GetNewPar("MV_ITDESC","N")=="S", .T., .F. )
  4310. Local lMv_Logod := .F. //If(GetNewPar("MV_LOGOD", "N" ) == "S", .T., .F. )
  4311. Local lNFCE := Substr(oNFe:_NFe:_InfNfe:_ID:Text,24,2) == "65"
  4312. Private oDPEC := oNfeDPEC
  4313. Private oNF := oNFe:_NFe
  4314. Private oEmitente := oNF:_InfNfe:_Emit
  4315. Private oIdent := oNF:_InfNfe:_IDE
  4316. Private oDestino := IIf(Type("oNF:_InfNfe:_Dest")=="U",Nil,oNF:_InfNfe:_Dest)
  4317. Private oTotal := oNF:_InfNfe:_Total
  4318. Private oDet := oNF:_InfNfe:_Det
  4319. aadd(aSitTrib,"00")
  4320. aadd(aSitTrib,"10")
  4321. aadd(aSitTrib,"20")
  4322. aadd(aSitTrib,"30")
  4323. aadd(aSitTrib,"40")
  4324. aadd(aSitTrib,"41")
  4325. aadd(aSitTrib,"50")
  4326. aadd(aSitTrib,"51")
  4327. aadd(aSitTrib,"60")
  4328. aadd(aSitTrib,"70")
  4329. aadd(aSitTrib,"90")
  4330. aadd(aSitSN,"101")
  4331. aadd(aSitSN,"102")
  4332. aadd(aSitSN,"201")
  4333. aadd(aSitSN,"202")
  4334. aadd(aSitSN,"500")
  4335. aadd(aSitSN,"900")
  4336. //Preenchimento do Array de UF
  4337. aadd(aUF,{"RO","11"})
  4338. aadd(aUF,{"AC","12"})
  4339. aadd(aUF,{"AM","13"})
  4340. aadd(aUF,{"RR","14"})
  4341. aadd(aUF,{"PA","15"})
  4342. aadd(aUF,{"AP","16"})
  4343. aadd(aUF,{"TO","17"})
  4344. aadd(aUF,{"MA","21"})
  4345. aadd(aUF,{"PI","22"})
  4346. aadd(aUF,{"CE","23"})
  4347. aadd(aUF,{"RN","24"})
  4348. aadd(aUF,{"PB","25"})
  4349. aadd(aUF,{"PE","26"})
  4350. aadd(aUF,{"AL","27"})
  4351. aadd(aUF,{"MG","31"})
  4352. aadd(aUF,{"ES","32"})
  4353. aadd(aUF,{"RJ","33"})
  4354. aadd(aUF,{"SP","35"})
  4355. aadd(aUF,{"PR","41"})
  4356. aadd(aUF,{"SC","42"})
  4357. aadd(aUF,{"RS","43"})
  4358. aadd(aUF,{"MS","50"})
  4359. aadd(aUF,{"MT","51"})
  4360. aadd(aUF,{"GO","52"})
  4361. aadd(aUF,{"DF","53"})
  4362. aadd(aUF,{"SE","28"})
  4363. aadd(aUF,{"BA","29"})
  4364. aadd(aUF,{"EX","99"})
  4365. /*
  4366. Itens para impressao
  4367. */
  4368. oDet := IIf(ValType(oDet)=="O",{oDet},oDet)
  4369. nLenDet := Len(oDet)
  4370. If lMv_ItDesc
  4371. For nX := 1 To nLenDet
  4372. Aadd(aIndAux, {nX, SubStr(NoChar(oDet[nX]:_Prod:_xProd:TEXT,lConverte),1,MAXITEMC)})
  4373. Next
  4374. aIndAux := aSort(aIndAux,,, { |x, y| x[2] < y[2] })
  4375. For nX := 1 To nLenDet
  4376. Aadd(aIndImp, aIndAux[nX][1] )
  4377. Next
  4378. EndIf
  4379. For nZ := 1 To nLenDet
  4380. If lMv_ItDesc
  4381. nX := aIndImp[nZ]
  4382. Else
  4383. nX := nZ
  4384. EndIf
  4385. nPrivate := nX
  4386. nVTotal := Val(oDet[nX]:_Prod:_vProd:TEXT)//-Val(IIF(Type("oDet[nPrivate]:_Prod:_vDesc")=="U","",oDet[nX]:_Prod:_vDesc:TEXT))
  4387. nVUnit := Val(oDet[nX]:_Prod:_vUnCom:TEXT)
  4388. nQtd := Val(oDet[nX]:_Prod:_qCom:TEXT)
  4389. // Tratamento para quebrar os digitos dos valores
  4390. aAux := {}
  4391. AADD(aAux, AllTrim(TransForm(nQtd,TM(nQtd,TamSX3("D2_QUANT")[1],TamSX3("D2_QUANT")[2]))))
  4392. AADD(aAux, AllTrim(TransForm(nVUnit,TM(nVUnit,TamSX3("D2_PRCVEN")[1],TamSX3("D2_PRCVEN")[2]))))
  4393. AADD(aAux, AllTrim(TransForm(nVTotal,TM(nVTotal,TamSX3("D2_TOTAL")[1],TamSX3("D2_TOTAL")[2]))))
  4394. aadd(aItens,{;
  4395. SubStr(NoChar(oDet[nX]:_Prod:_xProd:TEXT,lConverte),1,nMaxDes),;
  4396. oDet[nX]:_Prod:_uCom:TEXT,;
  4397. SubStr(aAux[1], 1, Len(aAux[1])),;
  4398. SubStr(aAux[2], 1, Len(aAux[2])),;
  4399. SubStr(aAux[3], 1, Len(aAux[3])),;
  4400. })
  4401. cAux := AllTrim(SubStr(NoChar(oDet[nX]:_Prod:_xProd:TEXT,lConverte),(nMaxDes+1)))
  4402. aAux[1] := SubStr(aAux[1], Len(aAux[1]) + 1)
  4403. aAux[2] := SubStr(aAux[2], Len(aAux[2]) + 1)
  4404. aAux[3] := SubStr(aAux[3], Len(aAux[3]) + 1)
  4405. lPontilhado := .F.
  4406. While !Empty(cAux) .Or. !Empty(aAux[1]) .Or. !Empty(aAux[2]) .Or. !Empty(aAux[3])
  4407. aadd(aItens,{;
  4408. SubStr(cAux,1,nMaxDes),;
  4409. "",;
  4410. SubStr(aAux[1], 1, Len(aAux[1])),;
  4411. SubStr(aAux[2], 1, Len(aAux[2])),;
  4412. SubStr(aAux[3], 1, Len(aAux[3])),;
  4413. })
  4414. // Popula as informa踥es para as pr闛imas linhas adicionais
  4415. cAux := SubStr(cAux,(nMaxDes+1))
  4416. aAux[1] := SubStr(aAux[1], Len(aAux[1]) + 1)
  4417. aAux[2] := SubStr(aAux[2], Len(aAux[2]) + 1)
  4418. aAux[3] := SubStr(aAux[3], Len(aAux[3]) + 1)
  4419. lPontilhado := .T.
  4420. EndDo
  4421. If lPontilhado
  4422. aadd(aItens,{;
  4423. "-",;
  4424. "-",;
  4425. "-",;
  4426. "-",;
  4427. "-",;
  4428. "-",;
  4429. "-",;
  4430. "-",;
  4431. "-",;
  4432. "-",;
  4433. "-",;
  4434. "-",;
  4435. "-",;
  4436. "-";
  4437. })
  4438. EndIf
  4439. Next nZ
  4440. /*
  4441. Calculo do numero de folhas - DANFE Simplificado
  4442. */
  4443. nLenItens := Len(aItens) - nMaxI // Todos os produtos/servi蔞s excluindo a primeira p墔ina
  4444. nFolhas := 1 // Folhas utilizadas at� o momento
  4445. lFlag := .T.
  4446. While lFlag
  4447. If nLenItens > 0
  4448. nFolhas++
  4449. // Se estiver habilitado frente e verso e for a segunda folha
  4450. If MV_PAR05 == 1 .And. nFolhas == 2
  4451. nLenItens -= nMaxI2
  4452. Else
  4453. nLenItens -= nMaxIAll
  4454. EndIf
  4455. if ( nLenItens > -10 .And. nLenItens < 0 ) .And. nFolhas > 1 // Coloca mais uma folha para impressao do rodape
  4456. nFolhas++
  4457. endif
  4458. Else
  4459. if ( nLenItens > -10 .And. nLenItens < 0 ) .And. nFolhas == 1 // Coloca mais uma folha para impressao do rodape
  4460. nFolhas++
  4461. endif
  4462. lFlag := .F.
  4463. EndIf
  4464. EndDo
  4465. //Inicializacao da pagina do objeto grafico
  4466. oDanfe:StartPage()
  4467. //Definicao do Box - Recibo de entrega
  4468. oDanfe:Box(000,000,010,501)
  4469. oDanfe:Say(006, 002, "RECEBEMOS DE "+NoChar(oEmitente:_xNome:Text,lConverte)+" OS PRODUTOS CONSTANTES DA NOTA FISCAL INDICADA AO LADO", oFont07:oFont)
  4470. oDanfe:Box(009,000,037,101)
  4471. oDanfe:Say(017, 002, "DATA DE RECEBIMENTO", oFont07N:oFont)
  4472. oDanfe:Box(009,100,037,500)
  4473. oDanfe:Say(017, 102, "IDENTIFICAデO E ASSINATURA DO RECEBEDOR", oFont07N:oFont)
  4474. oDanfe:Box(000,500,037,603)
  4475. oDanfe:Say(007, 542, iif(lNFCE,"NFC-e","NF-e"), oFont08N:oFont)
  4476. oDanfe:Say(017, 510, "N. "+StrZero(Val(oIdent:_NNf:Text),9), oFont08:oFont)
  4477. oDanfe:Say(027, 510, "S仂IE "+SubStr(oIdent:_Serie:Text,1,3), oFont08:oFont)
  4478. //Quadro 1 IDENTIFICACAO DO EMITENTE
  4479. oDanfe:Box(042,000,147,250)
  4480. oDanfe:Say(052,096, "Identifica誽o do emitente",oFont12N:oFont)
  4481. nLinCalc := 065
  4482. cStrAux := AllTrim(NoChar(oEmitente:_xNome:Text,lConverte))
  4483. nForTo := Len(cStrAux)/24
  4484. nForTo := Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1,Round(nForTo,0))
  4485. For nX := 1 To nForTo
  4486. oDanfe:Say(nLinCalc,096,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*24)+1),24), oFont12N:oFont )
  4487. nLinCalc+=10
  4488. Next nX
  4489. cStrAux := AllTrim(NoChar(oEmitente:_EnderEmit:_xLgr:Text,lConverte))+", "+AllTrim(oEmitente:_EnderEmit:_Nro:Text)
  4490. nForTo := Len(cStrAux)/40
  4491. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  4492. For nX := 1 To nForTo
  4493. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  4494. nLinCalc+=10
  4495. Next nX
  4496. If Type("oEmitente:_EnderEmit:_xCpl") <> "U"
  4497. cStrAux := "Complemento: "+AllTrim(NoChar(oEmitente:_EnderEmit:_xCpl:TEXT,lConverte))
  4498. nForTo := Len(cStrAux)/40
  4499. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  4500. For nX := 1 To nForTo
  4501. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  4502. nLinCalc+=10
  4503. Next nX
  4504. cStrAux := AllTrim(oEmitente:_EnderEmit:_xBairro:Text)
  4505. If Type("oEmitente:_EnderEmit:_Cep")<>"U"
  4506. cStrAux += " Cep:"+TransForm(oEmitente:_EnderEmit:_Cep:Text,"@r 99999-999")
  4507. EndIf
  4508. nForTo := Len(cStrAux)/40
  4509. nForTo += Iif(nForTo>Round(nForTo,0),Round(nForTo,0)+1-nForTo,nForTo)
  4510. For nX := 1 To nForTo
  4511. oDanfe:Say(nLinCalc,098,SubStr(cStrAux,Iif(nX==1,1,((nX-1)*40)+1),40),oFont08N:oFont)
  4512. nLinCalc+=10
  4513. Next nX
  4514. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  4515. nLinCalc+=9
  4516. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(Type("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  4517. Else
  4518. oDanfe:Say(nLinCalc,098, NoChar(oEmitente:_EnderEmit:_xBairro:Text,lConverte)+" Cep:"+TransForm(IIF(Type("oEmitente:_EnderEmit:_Cep")=="U","",oEmitente:_EnderEmit:_Cep:Text),"@r 99999-999"),oFont08N:oFont)
  4519. nLinCalc+=10
  4520. oDanfe:Say(nLinCalc,098, oEmitente:_EnderEmit:_xMun:Text+"/"+oEmitente:_EnderEmit:_UF:Text,oFont08N:oFont)
  4521. nLinCalc+=9
  4522. oDanfe:Say(nLinCalc,098, "Fone: "+IIf(Type("oEmitente:_EnderEmit:_Fone")=="U","",oEmitente:_EnderEmit:_Fone:Text),oFont08N:oFont)
  4523. EndIf
  4524. //Logotipo
  4525. If lMv_Logod
  4526. cLogoD := GetSrvProfString("Startpath","") + "DANFE" + cEmpAnt + cFilAnt + ".BMP"
  4527. If !File(cLogoD)
  4528. cLogoD := GetSrvProfString("Startpath","") + "DANFE" + cEmpAnt + ".BMP"
  4529. If !File(cLogoD)
  4530. lMv_Logod := .F.
  4531. EndIf
  4532. EndIf
  4533. EndIf
  4534. If nfolha==1
  4535. If lMv_Logod
  4536. oDanfe:SayBitmap(045,003,cLogoD,090,090)
  4537. Else
  4538. oDanfe:SayBitmap(045,003,cLogo,090,090)
  4539. EndIF
  4540. Endif
  4541. //Codigo de barra
  4542. oDanfe:Box(042,350,093,603)
  4543. oDanfe:Box(085,350,115,603)
  4544. oDanfe:Say(107,355,TransForm(SubStr(oNF:_InfNfe:_ID:Text,4),"@r 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999"),oFont12N:oFont)
  4545. oDanfe:Box(115,350,147,603)
  4546. If !Empty(cCodAutDPEC) .And. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"4"
  4547. cDataEmi := Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",Substr(oNFe:_NFE:_INFNFE:_IDE:_DHEMI:Text,9,2),Substr(oNFe:_NFE:_INFNFE:_IDE:_DEMI:Text,9,2))
  4548. cTPEmis := "4"
  4549. If Type("oDPEC:_ENVDPEC:_INFDPEC:_RESNFE") <> "U"
  4550. cUF := aUF[aScan(aUF,{|x| x[1] == oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_UF:Text})][02]
  4551. cValIcm := StrZero(Val(StrTran(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VNF:TEXT,".","")),14)
  4552. cICMSp := iif(Val(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VICMS:TEXT)>0,"1","2")
  4553. cICMSs := iif(Val(oDPEC:_ENVDPEC:_INFDPEC:_RESNFE:_VST:TEXT)>0,"1","2")
  4554. ElseIf type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST") <> "U" //EPEC NFE
  4555. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_UF:TEXT") <> "U"
  4556. cUF := aUF[aScan(aUF,{|x| x[1] == oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_UF:TEXT})][02]
  4557. EndIf
  4558. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VNF:TEXT") <> "U"
  4559. cValIcm := StrZero(Val(StrTran(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VNF:TEXT,".","")),14)
  4560. EndIf
  4561. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VICMS:TEXT") <> "U"
  4562. cICMSp := IIf(Val(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VICMS:TEXT) > 0,"1","2")
  4563. EndIf
  4564. If Type ("oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VST:TEXT") <> "U"
  4565. cICMSs := IIf(Val(oDPEC:_EVENTO:_INFEVENTO:_DETEVENTO:_DEST:_VST:TEXT )> 0,"1","2")
  4566. EndIf
  4567. EndIf
  4568. ElseIF (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25"
  4569. cUF := aUF[aScan(aUF,{|x| x[1] == oNFe:_NFE:_INFNFE:_DEST:_ENDERDEST:_UF:Text})][02]
  4570. cDataEmi := Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",Substr(oNFe:_NFE:_INFNFE:_IDE:_DHEMI:Text,9,2),Substr(oNFe:_NFE:_INFNFE:_IDE:_DEMI:Text,9,2))
  4571. cTPEmis := oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT
  4572. cValIcm := StrZero(Val(StrTran(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VNF:TEXT,".","")),14)
  4573. cICMSp := Iif(Val(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VICMS:TEXT)>0,"1","2")
  4574. cICMSs := Iif(Val(oNFe:_NFE:_INFNFE:_TOTAL:_ICMSTOT:_VST:TEXT)>0,"1","2")
  4575. EndIf
  4576. If !Empty(cUF) .And. !Empty(cDataEmi) .And. !Empty(cTPEmis) .And. !Empty(cValIcm) .And. !Empty(cICMSp) .And. !Empty(cICMSs)
  4577. If Type("oNF:_InfNfe:_DEST:_CNPJ:Text")<>"U"
  4578. cCNPJCPF := oNF:_InfNfe:_DEST:_CNPJ:Text
  4579. If cUf == "99"
  4580. cCNPJCPF := STRZERO(val(cCNPJCPF),14)
  4581. EndIf
  4582. ElseIf Type("oNF:_INFNFE:_DEST:_CPF:Text")<>"U"
  4583. cCNPJCPF := oNF:_INFNFE:_DEST:_CPF:Text
  4584. cCNPJCPF := STRZERO(val(cCNPJCPF),14)
  4585. Else
  4586. cCNPJCPF := ""
  4587. EndIf
  4588. cChaveCont += cUF+cTPEmis+cCNPJCPF+cValIcm+cICMSp+cICMSs+cDataEmi
  4589. cChaveCont := cChaveCont+Modulo11(cChaveCont)
  4590. EndIf
  4591. oDanfe:Say(127,355,"Consulta de autenticidade no portal nacional da "+iif(lNFCE,"NFC-e","NF-e"),oFont12:oFont)
  4592. oDanfe:Say(137,355,"www.nfe.fazenda.gov.br/portal ou no site da SEFAZ Autorizada",oFont12:oFont)
  4593. //Quadro 2
  4594. oDanfe:Box(042,248,147,351)
  4595. oDanfe:Say(055,275, "DANFE",OFONT12N:oFont)
  4596. oDanfe:Say(065,258, "SIMPLIFICADO",OFONT12N:oFont)
  4597. oDanfe:Say(075,258, "DOCUMENTO AUXILIAR DA",oFont07:oFont)
  4598. if lNFCE
  4599. oDanfe:Say(085,258, "NOTA FISCAL DE CONSUMIDOR",oFont07:oFont)
  4600. else
  4601. oDanfe:Say(085,258, "NOTA FISCAL ELETR偡ICA",oFont07:oFont)
  4602. endif
  4603. oDanfe:Say(095,266, "0-ENTRADA",oFont08:oFont)
  4604. oDanfe:Say(105,266, "1-SA沝A" ,oFont08:oFont)
  4605. oDanfe:Box(088,315,105,325)
  4606. oDanfe:Say(099,318, oIdent:_TpNf:Text,oFont08N:oFont)
  4607. oDanfe:Say(120,258,"N. "+StrZero(Val(oIdent:_NNf:Text),9),oFont10N:oFont)
  4608. oDanfe:Say(130,258,"S仂IE "+SubStr(oIdent:_Serie:Text,1,3),oFont10N:oFont)
  4609. oDanfe:Say(140,258,"FOLHA "+StrZero(nFolha,2)+"/"+StrZero(nFolhas,2),oFont10N:oFont)
  4610. //Quadro 4
  4611. oDanfe:Box(149,000,172,603)
  4612. oDanfe:Box(149,351,172,603)
  4613. oDanfe:Say(158,002,"NATUREZA DA OPERAデO",oFont08N:oFont)
  4614. oDanfe:Say(168,002,oIdent:_NATOP:TEXT,oFont08:oFont)
  4615. oDanfe:Say(158,353,"PROTOCOLO DE AUTORIZAデO DE USO",oFont08N:oFont)
  4616. If nFolha == 1
  4617. If ((oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"25")
  4618. oDanfe:Say(097,355,"DADOS DA "+iif(lNFCE,"NFC-E","NF-E"),oFont12N:oFont)
  4619. Else
  4620. oDanfe:Say(097,355,"CHAVE DE ACESSO DA "+iif(lNFCE,"NFC-E","NF-E"),oFont12N:oFont)
  4621. EndIf
  4622. nFontSize := 28
  4623. oDanfe:Code128C(077,370,SubStr(oNF:_InfNfe:_ID:Text,4), nFontSize )
  4624. EndIf
  4625. cDadosProt := IIF(!Empty(cCodAutDPEC),cCodAutDPEC+" "+AllTrim(IIF(!Empty(dDtReceb),ConvDate(DTOS(dDtReceb)),ConvDate(oNF:_InfNfe:_IDE:_DHEMI:Text)))+" "+AllTrim(cDtHrRecCab),IIF(!Empty(cCodAutSef) .And. ((Val(SubStr(oNF:_INFNFE:_IDE:_SERIE:TEXT,1,3)) >= 900).And.(oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"23") .Or. (oNFe:_NFE:_INFNFE:_IDE:_TPEMIS:TEXT)$"1|6|7",cCodAutSef+" "+AllTrim(IIF(!Empty(dDtReceb),ConvDate(DTOS(dDtReceb)),ConvDate(oNF:_InfNfe:_IDE:_DHEMI:Text)))+" "+AllTrim(cDtHrRecCab),TransForm(cChaveCont,"@r 9999 9999 9999 9999 9999 9999 9999 9999 9999")))
  4626. oDanfe:Say(168,354,cDadosProt,oFont08:oFont)
  4627. //Quadro 5
  4628. oDanfe:Box(174,000,197,603)
  4629. oDanfe:Box(174,000,197,200)
  4630. oDanfe:Box(174,200,197,400)
  4631. oDanfe:Box(174,400,197,603)
  4632. oDanfe:Say(182,002,"INSCRIデO ESTADUAL",oFont08N:oFont)
  4633. oDanfe:Say(190,002,IIf(Type("oEmitente:_IE:TEXT")<>"U",oEmitente:_IE:TEXT,""),oFont08:oFont)
  4634. oDanfe:Say(182,205,"INSC.ESTADUAL DO SUBST.TRIB.",oFont08N:oFont)
  4635. oDanfe:Say(190,205,IIf(Type("oEmitente:_IEST:TEXT")<>"U",oEmitente:_IEST:TEXT,""),oFont08:oFont)
  4636. oDanfe:Say(182,405,"CNPJ/CPF",oFont08N:oFont)
  4637. Do Case
  4638. Case Type("oEmitente:_CNPJ")=="O"
  4639. cAux := TransForm(oEmitente:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  4640. Case Type("oEmitente:_CPF")=="O"
  4641. cAux := TransForm(oEmitente:_CPF:TEXT,"@r 999.999.999-99")
  4642. OtherWise
  4643. cAux := Space(14)
  4644. EndCase
  4645. oDanfe:Say(190,405,cAux,oFont08:oFont)
  4646. /*
  4647. Quadro Destinat嫫io/Remetente - DANFE Simplificado
  4648. */
  4649. if lNFCE .AND. (oDestino == Nil .or. type("oDestino:_EnderDest") == "U") // Impressao DANFE A4 no PDV NFC-e
  4650. oDestino := MontaNfcDest(oDestino)
  4651. endif
  4652. aDest := { MontaEnd(oDestino:_EnderDest),;
  4653. NoChar(oDestino:_EnderDest:_XBairro:Text,lConverte),;
  4654. IIF(Type("oDestino:_EnderDest:_Cep")=="U","",Transform(oDestino:_EnderDest:_Cep:Text,"@r 99999-999")),;
  4655. IIF(Type("oIdent:_DSaiEnt")=="U","",oIdent:_DSaiEnt:Text),;
  4656. oDestino:_EnderDest:_XMun:Text,;
  4657. IIF(Type("oDestino:_EnderDest:_fone")=="U","",oDestino:_EnderDest:_fone:Text),;
  4658. oDestino:_EnderDest:_UF:Text,;
  4659. IIF(Type("oDestino:_IE:Text")=="U","",oDestino:_IE:Text),;
  4660. "" }
  4661. If Type("oIdent:_DSaiEnt") <> "U" .And. Type("oIdent:_HSaiEnt:Text")<> "U"
  4662. aAdd(aHrEnt,oIdent:_HSaiEnt:Text)
  4663. Else
  4664. aAdd(aHrEnt,"")
  4665. EndIf
  4666. Do Case
  4667. Case Type("oDestino:_CNPJ")=="O"
  4668. cAux := TransForm(oDestino:_CNPJ:TEXT,"@r 99.999.999/9999-99")
  4669. Case Type("oDestino:_CPF")=="O"
  4670. cAux := TransForm(oDestino:_CPF:TEXT,"@r 999.999.999-99")
  4671. OtherWise
  4672. cAux := Space(14)
  4673. EndCase
  4674. oDanfe:Say(205,002,"DESTINATARIO/REMETENTE",oFont08N:oFont)
  4675. oDanfe:Box(207,000,227,450)
  4676. oDanfe:Say(215,002, "NOME/RAZ鬃 SOCIAL",oFont08N:oFont)
  4677. oDanfe:Say(225,002,NoChar(oDestino:_XNome:TEXT,lConverte),oFont08:oFont)
  4678. oDanfe:Box(207,280,227,500)
  4679. oDanfe:Say(215,283,"CNPJ/CPF",oFont08N:oFont)
  4680. oDanfe:Say(225,283,cAux,oFont08:oFont)
  4681. oDanfe:Box(227,000,247,500)
  4682. oDanfe:Box(227,000,247,260)
  4683. oDanfe:Say(234,002,"ENDEREと",oFont08N:oFont)
  4684. oDanfe:Say(244,002,aDest[01],oFont08:oFont)
  4685. oDanfe:Box(227,230,247,380)
  4686. oDanfe:Say(234,232,"BAIRRO/DISTRITO",oFont08N:oFont)
  4687. oDanfe:Say(254,232,aDest[02],oFont08:oFont)
  4688. oDanfe:Box(227,380,247,500)
  4689. oDanfe:Say(234,382,"CEP",oFont08N:oFont)
  4690. oDanfe:Say(244,382,aDest[03],oFont08:oFont)
  4691. oDanfe:Box(246,000,267,500)
  4692. oDanfe:Box(246,000,267,180)
  4693. oDanfe:Say(255,002,"MUNICIPIO",oFont08N:oFont)
  4694. oDanfe:Say(265,002,aDest[05],oFont08:oFont)
  4695. oDanfe:Box(246,150,267,256)
  4696. oDanfe:Say(255,152,"FONE/FAX",oFont08N:oFont)
  4697. oDanfe:Say(265,152,aDest[06],oFont08:oFont)
  4698. oDanfe:Box(246,255,267,341)
  4699. oDanfe:Say(255,257,"UF",oFont08N:oFont)
  4700. oDanfe:Say(265,257,aDest[07],oFont08:oFont)
  4701. oDanfe:Box(246,340,267,500)
  4702. oDanfe:Say(255,342,"INSCRIデO ESTADUAL",oFont08N:oFont)
  4703. oDanfe:Say(265,342,aDest[08],oFont08:oFont)
  4704. oDanfe:Box(207,502,227,603)
  4705. oDanfe:Say(215,504,"DATA DE EMISS鬃",oFont08N:oFont)
  4706. oDanfe:Say(225,504,Iif(oNF:_INFNFE:_VERSAO:TEXT >= "3.10",ConvDate(oIdent:_DHEmi:TEXT),ConvDate(oIdent:_DEmi:TEXT)),oFont08:oFont)
  4707. oDanfe:Box(227,502,247,603)
  4708. oDanfe:Say(234,504,"DATA ENTRADA/SA沝A",oFont08N:oFont)
  4709. oDanfe:Say(243,504,Iif( Empty(aDest[4]),"",ConvDate(aDest[4]) ),oFont08:oFont)
  4710. oDanfe:Box(246,502,267,603)
  4711. oDanfe:Say(255,503,"HORA ENTRADA/SA沝A",oFont08N:oFont)
  4712. oDanfe:Say(262,503,aHrEnt[01],oFont08:oFont)
  4713. // Quadro Dados do Produto / Servico
  4714. aAux := {{{},{},{},{},{}}}
  4715. nY := 0
  4716. nLenItens := Len(aItens)
  4717. For nX :=1 To nLenItens
  4718. nY++
  4719. aadd(Atail(aAux)[nY],aItens[nX][01])
  4720. nY++
  4721. aadd(Atail(aAux)[nY],NoChar(aItens[nX][02],lConverte))
  4722. nY++
  4723. aadd(Atail(aAux)[nY],aItens[nX][03])
  4724. nY++
  4725. aadd(Atail(aAux)[nY],aItens[nX][04])
  4726. nY++
  4727. aadd(Atail(aAux)[nY],aItens[nX][05])
  4728. If nY >= 5
  4729. nY := 0
  4730. EndIf
  4731. Next nX
  4732. For nX := 1 To nLenItens
  4733. nY++
  4734. aadd(Atail(aAux)[nY],"")
  4735. nY++
  4736. aadd(Atail(aAux)[nY],"")
  4737. nY++
  4738. aadd(Atail(aAux)[nY],"")
  4739. nY++
  4740. aadd(Atail(aAux)[nY],"")
  4741. nY++
  4742. aadd(Atail(aAux)[nY],"")
  4743. If nY >= 5
  4744. nY := 0
  4745. EndIf
  4746. Next nX
  4747. nLinha := 294 //Linha inicial da primeira pagina
  4748. RiscaItem( @oDanfe, nFolha, nFolhas, aTamCol )
  4749. For nX := 1 to Len(aAux)
  4750. For nZ := 1 to Len(aAux[nX][1])
  4751. ImpItem( @oDanfe, aAux[nX], nFolha, nFolhas, nZ, nLinha, aTamCol )
  4752. nLinha := nLinha + 10
  4753. if ( nFolha < nFolhas .And. nLinha >= nFimL )
  4754. nFolha++
  4755. oDanfe:EndPage()
  4756. oDanfe:StartPage()
  4757. RiscaItem( @oDanfe, nFolha, nFolhas, aTamCol )
  4758. if MV_PAR05 == 1 .And. nFolha == 2
  4759. nLinha := 052
  4760. else
  4761. nLinha := 006
  4762. endif
  4763. endif
  4764. Next Nz
  4765. Next nX
  4766. //Monta quadro dos Totais
  4767. oDanfe:Box(845, 000, 865, 374)
  4768. oDanfe:Say(859,002 , "VALOR TOTAL DA NOTA", oFont18N:oFont)
  4769. oDanfe:Box( 845, 374, 865, 603 )
  4770. oDanfe:Say(859, 376, Alltrim(Transform(Val(oTotal:_ICMSTOT:_vNF:TEXT),"@e 9,999,999,999,999.99")) ,oFont18N:oFont)
  4771. oDanfe:EndPage()
  4772. return(.T.)
  4773. static Function ImpItem(oDanfe, aItens, nFolha, nFolhas ,nItem ,nLinha, aTamCol)
  4774. local nAuxH := 0
  4775. if aAux[1][1][nItem] == "-"
  4776. oDanfe:Say(nLinha, nAuxH, Replicate("- ", 150), oFont08:oFont)
  4777. else
  4778. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][1][nItem], oFont08:oFont) // DESCRICAO DO PRODUTO
  4779. nAuxH += aTamCol[1]
  4780. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][2][nItem], oFont08:oFont) // UN
  4781. nAuxH += aTamCol[2]
  4782. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][3][nItem], oFont08:oFont) // QUANT
  4783. nAuxH += aTamCol[3]
  4784. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][4][nItem], oFont08:oFont) // V UNITARIO
  4785. nAuxH += aTamCol[4]
  4786. oDanfe:Say(nLinha, nAuxH + 2, aAux[1][5][nItem], oFont08:oFont) // V. TOTAL
  4787. endif
  4788. return(.T.)
  4789. //矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
  4790. //蚶inalizacao da pagina do objeto grafico �
  4791. //斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁
  4792. static Function RiscaItem( oDanfe, nFolha, nFolhas, aTamCol )
  4793. local lUltFolha := .F.
  4794. local lFrentVers := .F.
  4795. local lFirsFolha := nFolha == 1
  4796. local nAuxH := 0
  4797. //Declara onde inicia as linhas dos quadros dos itens e dos Says de cada quadro,
  4798. //os valores padr髊s s緌 para a primeira pagina com Danfe de apenas 1 pagina.
  4799. local nRow1 := 277 //Linha dos Box's
  4800. local nRow2 := 284 //Linha dos Say's
  4801. //Declara a altura dos quadros dos itens, o valor padr緌 � para a primeira
  4802. //p墔ina com DANFE de apenas 1 pagina
  4803. local nAlt1 := 843
  4804. if MV_PAR05 == 1
  4805. lFrentVers := .T.
  4806. endif
  4807. if nFolhas == nFolha
  4808. lUltFolha := .T.
  4809. endif
  4810. if nFolha ==1
  4811. oDanfe:Say(275,002,"DADOS DO PRODUTO / SERVIと",oFont08N:oFont)
  4812. oDanfe:Box(277,000,678,603)
  4813. if !lUltFolha
  4814. nAlt1 := 865
  4815. endif
  4816. elseif nFolhas > 1 .And. nFolha <> 1
  4817. if lFrentVers .And. nFolha == 2
  4818. nRow1 := 042
  4819. nRow2 := 052
  4820. if !lUltFolha
  4821. nAlt1 := 865
  4822. endif
  4823. //oDanfe:Box(042,000,147,250)
  4824. else
  4825. nRow1 := 000
  4826. nRow2 := 010
  4827. if !lUltFolha
  4828. nAlt1 := 865
  4829. endif
  4830. //oDanfe:Box(042,000,147,250)
  4831. endif
  4832. else
  4833. endif
  4834. nAuxH := 0
  4835. oDanfe:Box(nRow1, nAuxH, nAlt1, nAuxH + aTamCol[1])
  4836. if lFirsFolha
  4837. oDanfe:Say(nRow2, nAuxH + 2, "DESCRIデO DO PROD./SERV.", oFont08N:oFont)
  4838. endif
  4839. nAuxH += aTamCol[1]
  4840. oDanfe:Box(nRow1, nAuxH, nAlt1, nAuxH + aTamCol[2])
  4841. if lFirsFolha
  4842. oDanfe:Say(nRow2, nAuxH + 2, "UN", oFont08N:oFont)
  4843. endif
  4844. nAuxH += aTamCol[2]
  4845. oDanfe:Box(nRow1, nAuxH, nAlt1, nAuxH + aTamCol[3])
  4846. if lFirsFolha
  4847. oDanfe:Say(nRow2, nAuxH + 2, "QUANT.", oFont08N:oFont)
  4848. endif
  4849. nAuxH += aTamCol[3]
  4850. oDanfe:Box(nRow1, nAuxH, nAlt1, nAuxH + aTamCol[4])
  4851. if lFirsFolha
  4852. oDanfe:Say(nRow2, nAuxH + 2, "V.UNITARIO", oFont08N:oFont)
  4853. endif
  4854. nAuxH += aTamCol[4]
  4855. oDanfe:Box(nRow1, nAuxH, nAlt1, nAuxH + aTamCol[5])
  4856. if lFirsFolha
  4857. oDanfe:Say(nRow2, nAuxH + 2, "V.TOTAL", oFont08N:oFont)
  4858. endif
  4859. return(.T.)
  4860. static function getXMLColab(aIdNFe,cModalidade,lUsaColab)
  4861. local nZ := 0
  4862. local nCount := 0
  4863. local cIdEnt := "000000"
  4864. local aDados := {}
  4865. local aRetorno := {}
  4866. If Empty(cModalidade)
  4867. cModalidade := ColGetPar( "MV_MODALID", "1" )
  4868. EndIf
  4869. For nZ := 1 To len(aIdNfe)
  4870. nCount++
  4871. aDados := executeRetorna( aIdNfe[nZ], cIdEnt, lUsaColab)
  4872. if ( nCount == 10 )
  4873. delClassIntF()
  4874. nCount := 0
  4875. endif
  4876. aAdd(aRetorno,aDados)
  4877. Next nZ
  4878. Return(aRetorno)
  4879. static function atuSf2Hora( cDtHrRec,cSeek )
  4880. local aArea := GetArea()
  4881. dbSelectArea("SF2")
  4882. dbSetOrder(1)
  4883. If MsSeek(xFilial("SF2")+cSeek)
  4884. If SF2->(FieldPos("F2_HORA"))<>0 .And. Empty(SF2->F2_HORA)
  4885. RecLock("SF2")
  4886. SF2->F2_HORA := cDtHrRec
  4887. MsUnlock()
  4888. EndIf
  4889. EndIf
  4890. dbSelectArea("SF1")
  4891. dbSetOrder(1)
  4892. If MsSeek(xFilial("SF1")+cSeek)
  4893. If SF1->(FieldPos("F1_HORA"))<>0 .And. Empty(SF1->F1_HORA)
  4894. RecLock("SF1")
  4895. SF1->F1_HORA := cDtHrRec
  4896. MsUnlock()
  4897. EndIf
  4898. EndIf
  4899. RestArea(aArea)
  4900. return nil
  4901. //-----------------------------------------------------------------------
  4902. /*/{Protheus.doc} ColDadosNf
  4903. Devolve os dados com a informa誽o desejada conforme par滵etro nInf.
  4904. @author Rafel Iaquinto
  4905. @since 30/07/2014
  4906. @version 11.9
  4907. @param nInf, inteiro, Codigo da informa誽o desejada:<br>1 - Normal<br>2 - Cancelametno<br>3 - Inutiliza誽o
  4908. @return aRetorno Array com as posi踥es do XML desejado, sempre deve retornar a mesma quantidade de posi踥es.
  4909. /*/
  4910. //-----------------------------------------------------------------------
  4911. static function ColDadosNf(nInf)
  4912. local aDados := {}
  4913. do case
  4914. case nInf == 1
  4915. //Informa蔞es da NF-e
  4916. aadd(aDados,"NFEPROC|PROTNFE|INFPROT|CSTAT") //1 - Codigo Status documento
  4917. aadd(aDados,"NFEPROC|PROTNFE|INFPROT|XMOTIVO") //2 - Motivo do status
  4918. aadd(aDados,"NFEPROC|PROTNFE|INFPROT|NPROT") //3 - Protocolo Autporizacao
  4919. aadd(aDados,"NFEPROC|PROTNFE|INFPROT|DHRECBTO") //4 - Data e hora de recebimento
  4920. aadd(aDados,"NFEPROC|NFE|INFNFE|IDE|TPEMIS") //5 - Tipo de Emissao
  4921. aadd(aDados,"NFEPROC|NFE|INFNFE|IDE|TPAMB") //6 - Ambiente de transmiss緌
  4922. aadd(aDados,"NFE|INFNFE|IDE|TPEMIS") //7 - Tipo de Emissao - Caso nao tenha retorno
  4923. aadd(aDados,"NFE|INFNFE|IDE|TPAMB") //8 - Ambiente de transmiss緌 - Caso nao tenha retorno
  4924. aadd(aDados,"NFEPROC|RETDEPEC|INFDPECREG|NREGDPEC") //9 - Numero de autoriza誽o DPEC
  4925. aadd(aDados,"NFEPROC|PROTNFE|INFPROT|CHNFE") //10 - Chave da autorizacao
  4926. aadd(aDados,"NFEPROC|PROTNFE|INFPROT|XMSG") //11 - Tag <xMsg>
  4927. case nInf == 2
  4928. //Informacoes do cancelamento - evento
  4929. aadd(aDados,"PROCEVENTONFE|RETEVENTO|INFEVENTO|CSTAT") //1 - Codigo Status documento
  4930. aadd(aDados,"PROCEVENTONFE|RETEVENTO|INFEVENTO|XMOTIVO") //2 - Motivo do status
  4931. aadd(aDados,"PROCEVENTONFE|RETEVENTO|INFEVENTO|NPROT") //3 - Protocolo Autporizacao
  4932. aadd(aDados,"PROCEVENTONFE|RETEVENTO|INFEVENTO|DHREGEVENTO") //4 - Data e hora de recebimento
  4933. aadd(aDados,"") //5 - Tipo de Emissao
  4934. aadd(aDados,"PROCEVENTONFE|RETEVENTO|INFEVENTO|TPAMB") //6 - Ambiente de transmiss緌
  4935. aadd(aDados,"") //7 - Tipo de Emissao - Caso nao tenha retorno
  4936. aadd(aDados,"ENVEVENTO|EVENTO|INFEVENTO|TPAMB") //8 - Ambiente de transmiss緌 - Caso nao tenha retorno
  4937. aadd(aDados,"") //9 - Numero de autoriza誽o DPEC
  4938. aadd(aDados,"") //10 - Chave da autorizacao
  4939. aadd(aDados,"") //11 - Tag <xMsg>
  4940. case nInf == 3
  4941. //Informa踥es da Inutiliza誽o
  4942. aadd(aDados,"PROCINUTNFE|RETINUTNFE|INFINUT|CSTAT") //1 - Codigo Status documento
  4943. aadd(aDados,"PROCINUTNFE|RETINUTNFE|INFINUT|XMOTIVO") //2 - Motivo do status
  4944. aadd(aDados,"PROCINUTNFE|RETINUTNFE|INFINUT|NPROT") //3 - Protocolo Autporizacao
  4945. aadd(aDados,"PROCINUTNFE|RETINUTNFE|INFINUT|DHRECBTO") //4 - Data e hora de recebimento
  4946. aadd(aDados,"") //5 - Tipo de Emissao
  4947. aadd(aDados,"PROCINUTNFE|RETINUTNFE|INFINUT|TPAMB") //6 - Ambiente de transmiss緌
  4948. aadd(aDados,"") //7 - Tipo de Emissao - Caso nao tenha retorno
  4949. aadd(aDados,"INUTNFE|INFINUT|TPAMB ") //8 - Ambiente de transmiss緌 - Caso nao tenha retorno
  4950. aadd(aDados,"") //9 - Numero de autoriza誽o DPEC
  4951. aadd(aDados,"") //10 - Chave da autorizacao
  4952. aadd(aDados,"") //11 - Tag <xMsg>
  4953. end
  4954. return(aDados)
  4955. static function UsaColaboracao(cModelo)
  4956. Local lUsa := .F.
  4957. If FindFunction("ColUsaColab")
  4958. lUsa := ColUsaColab(cModelo)
  4959. endif
  4960. return (lUsa)
  4961. //-----------------------------------------------------------------------
  4962. /*/{Protheus.doc} IMPDNFLJ
  4963. Chama a fun誽o do Loja para impress緌 da Danfe Simplificado na Impressora N緌-Fiscal
  4964. @author eduardo.sales
  4965. @since 09/01/2018
  4966. @version 12
  4967. @return Nil
  4968. /*/
  4969. //-----------------------------------------------------------------------
  4970. User Function IMPDNFLJ(oNFE, cCodAutSef, dDtReceb, cDtHrRecCab)
  4971. local cProg := iif(existBlock("LJDNFNFE"),"U_LJDNFNFE","LJDNFNFE")
  4972. &cProg.(oNFE, cCodAutSef, dDtReceb, cDtHrRecCab)
  4973. Return Nil
  4974. /*/{Protheus.doc} ValAtrib
  4975. Fun誽o utilizada para substituir o type onde n緌 seja possiv幨 a sua retirada para n緌 haver
  4976. ocorrencia indevida pelo SonarQube.
  4977. @author valter Silva
  4978. @since 09/01/2018
  4979. @version 12
  4980. @return Nil
  4981. /*/
  4982. //-----------------------------------------------------------------------
  4983. static Function ValAtrib(atributo)
  4984. Return (type(atributo) )
  4985. //-----------------------------------------------------------------------
  4986. /*/{Protheus.doc} MontaNfcDest
  4987. Faz cria誽o tag <dest> quando n緌 vem no XML da NFCe
  4988. @author anderson.machado
  4989. @since 29/04/2020
  4990. @version 12
  4991. @return Nil
  4992. /*/
  4993. //-----------------------------------------------------------------------
  4994. Static Function MontaNfcDest(oDestino)
  4995. Local oDestRet := NIL
  4996. Local cAux := ""
  4997. cAux := '<?xml version="1.0" encoding="UTF-8"?>'
  4998. cAux += '<dest>'
  4999. if type("oDestino:_xNome") == "U"
  5000. cAux += '<xNome>CONSUMIDOR NAO IDENTIFICADO</xNome>'
  5001. endif
  5002. cAux += '<enderDest>'
  5003. cAux += '<xLgr> </xLgr>'
  5004. cAux += '<nro> </nro>'
  5005. cAux += '<xBairro> </xBairro>'
  5006. cAux += '<cMun> </cMun>'
  5007. cAux += '<Cep> </Cep>'
  5008. cAux += '<xMun> </xMun>'
  5009. cAux += '<UF> </UF>'
  5010. cAux += '<cPais>105</cPais>'
  5011. cAux += '<xPais>BRASIL</xPais>'
  5012. cAux += '</enderDest>'
  5013. cAux += '</dest>'
  5014. oDestRet := XmlParser(cAux,"_","","")
  5015. oDestRet := oDestRet:_dest
  5016. Return oDestRet