Delivery Document Output

Delivery Document Output Print Program

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944:
945:
946:
947:
948:
949:
950:
951:
952:
953:
954:
955:
956:
957:
958:
959:
960:
961:
962:
963:
964:
965:
966:
967:
968:
969:
970:
971:
972:
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
997:
998:
999:
1000:
1001:
1002:
1003:
1004:
1005:
1006:
1007:
1008:
1009:
1010:
1011:
1012:
1013:
1014:
1015:
1016:
1017:
1018:
1019:
1020:
1021:
1022:
1023:
1024:
1025:
1026:
1027:
1028:
1029:
1030:
1031:
1032:
1033:
1034:
1035:
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043:
1044:
1045:
1046:
1047:
1048:
1049:
1050:
1051:
1052:
1053:
1054:
1055:
1056:
1057:
1058:
1059:
1060:
1061:
1062:
1063:
1064:
1065:
1066:
1067:
1068:
1069:
1070:
1071:
1072:
1073:
1074:
1075:
1076:
1077:
1078:
1079:
1080:
1081:
1082:
1083:
1084:
1085:
1086:
1087:
1088:
1089:
1090:
1091:
1092:
1093:
1094:
1095:
1096:
1097:
1098:
1099:
1100:
1101:
1102:
1103:
1104:
1105:
1106:
1107:
1108:
1109:
1110:
1111:
1112:
1113:
1114:
1115:
1116:
1117:
1118:
1119:
1120:
1121:
1122:
1123:
1124:
1125:
1126:
1127:
1128:
1129:
1130:
1131:
1132:
1133:
1134:
1135:
1136:
1137:
1138:
1139:
1140:
1141:
1142:
1143:
1144:
1145:
1146:
1147:
1148:
1149:
1150:
1151:
1152:
1153:
1154:
1155:
1156:
1157:
1158:
1159:
1160:
1161:
1162:
1163:
1164:
1165:
1166:
1167:
1168:
1169:
1170:
1171:
1172:
1173:
1174:
1175:
1176:
1177:
1178:
1179:
1180:
1181:
1182:
1183:
1184:
1185:
1186:
1187:
1188:
1189:
1190:
1191:
1192:
1193:
1194:
1195:
1196:
1197:
1198:
1199:
1200:
1201:
1202:
1203:
1204:
1205:
1206:
1207:
1208:
1209:
1210:
1211:
1212:
1213:
1214:
1215:
1216:
1217:
1218:
1219:
1220:
1221:
1222:
1223:
1224:
1225:
1226:
1227:
1228:
1229:
1230:
1231:
1232:
1233:
1234:
1235:
1236:
1237:
1238:
1239:
1240:
1241:
1242:
1243:
1244:
1245:
1246:
1247:
1248:
1249:
1250:
1251:
1252:
1253:
1254:
1255:
1256:
1257:
1258:
1259:
1260:
1261:
1262:
1263:
1264:
1265:
1266:
1267:
1268:
1269:
1270:
1271:
1272:
1273:
1274:
1275:
1276:
1277:
1278:
1279:
1280:
1281:
1282:
1283:
1284:
1285:
1286:
1287:
1288:
1289:
1290:
1291:
1292:
1293:
1294:
1295:
1296:
1297:
1298:
1299:
1300:
1301:
1302:
1303:
1304:
1305:
1306:
1307:
1308:
1309:
1310:
1311:
1312:
1313:
1314:
1315:
1316:
1317:
1318:
1319:
1320:
1321:
1322:
1323:
1324:
1325:
1326:
1327:
1328:
1329:
1330:
1331:
1332:
1333:
1334:
1335:
1336:
1337:
1338:
1339:
1340:
1341:
1342:
1343:
1344:
1345:
1346:
1347:
1348:
1349:
1350:
1351:
1352:
1353:
1354:
1355:
1356:
1357:
1358:
1359:
1360:
1361:
1362:
1363:
1364:
1365:
1366:
1367:
1368:
1369:
1370:
1371:
1372:
1373:
1374:
1375:
1376:
1377:
1378:
1379:
1380:
1381:
1382:
1383:
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391:
1392:
1393:
1394:
1395:
1396:
1397:
1398:
1399:
1400:
1401:
1402:
1403:
1404:
1405:
1406:
1407:
1408:
1409:
1410:
1411:
1412:
1413:
1414:
1415:
1416:
1417:
1418:
1419:
1420:
1421:
1422:
1423:
1424:
1425:
1426:
1427:
1428:
1429:
1430:
1431:
1432:
1433:
1434:
1435:
1436:
1437:
1438:
1439:
1440:
1441:
1442:
1443:
1444:
1445:
1446:
1447:
1448:
1449:
1450:
1451:
1452:
1453:
1454:
1455:
1456:
1457:
1458:
1459:
1460:
1461:
1462:
1463:
1464:
1465:
1466:
1467:
1468:
1469:
1470:
1471:
1472:
1473:
1474:
1475:
1476:
1477:
1478:
1479:
1480:
1481:
1482:
1483:
1484:
1485:
1486:
1487:
1488:
1489:
1490:
1491:
1492:
1493:
1494:
1495:
1496:
1497:
1498:
1499:
1500:
1501:
1502:
1503:
1504:
1505:
1506:
1507:
1508:
1509:
1510:
1511:
1512:
1513:
1514:
1515:
1516:
1517:
1518:
1519:
1520:
1521:
1522:
1523:
1524:
1525:
1526:
1527:
1528:
1529:
1530:
1531:
1532:
1533:
1534:
1535:
1536:
1537:
1538:
1539:
1540:
1541:
1542:
1543:
1544:
1545:
1546:
1547:
1548:
1549:
1550:
1551:
1552:
1553:
1554:
1555:
1556:
1557:
1558:
1559:
1560:
1561:
1562:
1563:
1564:
1565:
1566:
1567:
1568:
1569:
1570:
1571:
1572:
1573:
1574:
1575:
1576:
1577:
1578:
1579:
1580:
1581:
1582:
1583:
1584:
1585:
1586:
1587:
1588:
1589:
1590:
1591:
1592:
1593:
1594:
1595:
1596:
1597:
1598:
1599:
1600:
1601:
1602:
1603:
1604:
1605:
1606:
1607:
1608:
1609:
1610:
1611:
1612:
1613:
1614:
1615:
1616:
1617:
1618:
1619:
1620:
1621:
1622:
1623:
1624:
1625:
1626:
1627:
1628:
1629:
1630:
1631:
1632:
1633:
1634:
1635:
1636:
1637:
1638:
1639:
1640:
1641:
1642:
1643:
1644:
1645:
1646:
1647:
1648:
1649:
1650:
1651:
1652:
1653:
1654:
1655:
1656:
1657:
1658:
1659:
1660:
1661:
1662:
1663:
1664:
1665:
1666:
1667:
1668:
1669:
1670:
1671:
1672:
1673:
1674:
1675:
1676:
1677:
1678:
1679:
1680:
1681:
1682:
1683:
1684:
1685:
1686:
1687:
1688:
1689:
1690:
1691:
1692:
1693:
1694:
1695:
1696:
1697:
1698:
1699:
1700:
1701:
1702:
1703:
1704:
1705:
1706:
1707:
1708:
1709:
1710:
1711:
1712:
1713:
1714:
1715:
1716:
1717:
1718:
1719:
1720:
1721:
1722:
1723:
1724:
1725:
1726:
1727:
1728:
1729:
1730:
1731:
1732:
1733:
1734:
1735:
1736:
1737:
1738:
1739:
1740:
1741:
1742:
1743:
1744:
1745:
1746:
1747:
1748:
1749:
1750:
1751:
1752:
1753:
1754:
1755:
1756:
1757:
1758:
1759:
1760:
1761:
1762:
1763:
1764:
1765:
1766:
1767:
1768:
1769:
1770:
1771:
1772:
1773:
1774:
1775:
1776:
1777:
1778:
1779:
1780:
1781:
1782:
1783:
1784:
1785:
1786:
1787:
1788:
1789:
1790:
1791:
1792:
1793:
1794:
1795:
1796:
1797:
1798:
1799:
1800:
1801:
1802:
1803:
1804:
1805:
1806:
1807:
1808:
1809:
1810:
1811:
1812:
1813:
1814:
1815:
1816:
1817:
1818:
1819:
1820:
1821:
1822:
1823:
1824:
1825:
1826:
1827:
1828:
1829:
1830:
1831:
1832:
1833:
1834:
1835:
1836:
1837:
1838:
1839:
1840:
1841:
1842:
1843:
1844:
1845:
1846:
1847:
1848:
1849:
1850:
1851:
1852:
1853:
1854:
1855:
1856:
1857:
1858:
1859:
1860:
1861:
1862:
1863:
1864:
1865:
1866:
1867:
1868:
1869:
1870:
1871:
1872:
1873:
1874:
1875:
1876:
1877:
1878:
1879:
1880:
1881:
1882:
1883:
1884:
1885:
1886:
1887:
1888:
1889:
1890:
1891:
1892:
1893:
1894:
1895:
1896:
1897:
1898:
1899:
1900:
1901:
1902:
1903:
1904:
1905:
1906:
1907:
1908:
1909:
1910:
1911:
1912:
1913:
1914:
1915:
1916:
1917:
1918:
1919:
1920:
1921:
1922:
1923:
1924:
1925:
1926:
1927:
1928:
1929:
1930:
1931:
1932:
1933:
1934:
1935:
1936:
1937:
1938:
1939:
1940:
1941:
1942:
1943:
1944:
1945:
1946:
1947:
1948:
1949:
1950:
1951:
1952:
1953:
1954:
1955:
1956:
1957:
1958:
1959:
1960:
1961:
1962:
1963:
1964:
1965:
1966:
1967:
1968:
1969:
1970:
1971:
1972:
1973:
1974:
1975:
1976:
1977:
1978:
1979:
1980:
1981:
1982:
1983:
1984:
1985:
1986:
1987:
1988:
1989:
1990:
1991:
1992:
1993:
1994:
1995:
1996:
1997:
1998:
1999:
2000:
2001:
2002:
2003:
2004:
2005:
2006:
2007:
2008:
2009:
2010:
2011:
2012:
2013:
2014:
2015:
2016:
2017:
2018:
2019:
2020:
2021:
2022:
2023:
2024:
2025:
2026:
2027:
2028:
2029:
2030:
2031:
2032:
2033:
2034:
2035:
2036:
2037:
2038:
2039:
2040:
2041:
2042:
2043:
2044:
2045:
2046:
2047:
2048:
2049:
2050:
2051:
2052:
2053:
2054:
2055:
2056:
2057:
2058:
2059:
2060:
2061:
2062:
2063:
2064:
2065:
2066:
2067:
2068:
2069:
2070:
2071:
2072:
2073:
2074:
2075:
2076:
2077:
2078:
2079:
2080:
2081:
2082:
2083:
2084:
2085:
2086:
2087:
2088:
2089:
2090:
2091:
2092:
2093:
2094:
2095:
2096:
2097:
2098:
2099:
2100:
2101:
2102:
2103:
2104:
2105:
2106:
2107:
2108:
2109:
2110:
2111:
2112:
2113:
2114:
2115:
2116:
2117:
2118:
2119:
2120:
2121:
2122:
2123:
2124:
2125:
2126:
2127:
2128:
2129:
2130:
2131:
2132:
2133:
2134:
2135:
2136:
2137:
2138:
2139:
2140:
2141:
2142:
2143:
2144:
2145:
2146:
2147:
2148:
2149:
2150:
2151:
2152:
2153:
2154:
2155:
2156:
2157:
2158:
2159:
2160:
2161:
2162:
2163:
2164:
2165:
2166:
2167:
2168:
2169:
2170:
2171:
2172:
2173:
2174:
2175:
2176:
2177:
2178:
2179:
2180:
2181:
2182:
2183:
2184:
2185:
2186:
2187:
2188:
2189:
2190:
2191:
2192:
2193:
2194:
2195:
2196:
2197:
2198:
2199:
2200:
2201:
2202:
2203:
2204:
2205:
2206:
2207:
2208:
2209:
2210:
2211:
2212:
2213:
2214:
2215:
2216:
2217:
2218:
2219:
2220:
2221:
2222:
2223:
2224:
2225:
2226:
2227:
2228:
2229:
2230:
2231:
2232:
2233:
2234:
2235:
2236:
2237:
2238:
2239:
2240:
2241:
2242:
2243:
2244:
2245:
2246:
2247:
2248:
2249:
2250:
2251:
2252:
2253:
2254:
2255:
2256:
2257:
2258:
2259:
2260:
2261:
2262:
2263:
2264:
2265:
2266:
2267:
2268:
2269:
2270:
2271:
2272:
2273:
2274:
2275:
2276:
2277:
2278:
2279:
2280:
2281:
2282:
2283:
2284:
2285:
2286:
2287:
2288:
2289:
2290:
2291:
2292:
2293:
2294:
2295:
2296:
2297:
2298:
2299:
2300:
2301:
2302:
2303:
2304:
2305:
2306:
2307:
2308:
2309:
2310:
2311:
2312:
2313:
2314:
2315:
2316:
2317:
2318:
2319:
2320:
2321:
2322:
2323:
2324:
2325:
2326:
2327:
2328:
2329:
2330:
2331:
2332:
2333:
2334:
2335:
2336:
2337:
2338:
2339:
2340:
2341:
2342:
2343:
2344:
2345:
2346:
2347:
2348:
2349:
2350:
2351:
2352:
2353:
2354:
2355:
2356:
2357:
2358:
2359:
2360:
2361:
2362:
2363:
2364:
2365:
2366:
2367:
2368:
2369:
2370:
2371:
2372:
2373:
2374:
2375:
2376:
2377:
2378:
2379:
2380:
2381:
2382:
2383:
2384:
2385:
2386:
2387:
2388:
2389:
2390:
2391:
2392:
2393:
2394:
2395:
2396:
2397:
2398:
2399:
2400:
2401:
2402:
2403:
2404:
2405:
2406:
2407:
2408:
2409:
2410:
2411:
2412:
2413:
2414:
2415:
2416:
2417:
2418:
2419:
2420:
2421:
2422:
2423:
2424:
2425:
2426:
2427:
2428:
2429:
2430:
2431:
2432:
2433:
2434:
2435:
2436:
2437:
2438:
2439:
2440:
2441:
2442:
2443:
2444:
2445:
2446:
2447:
2448:
2449:
2450:
2451:
2452:
2453:
2454:
2455:
2456:
2457:
2458:
2459:
2460:
2461:
2462:
2463:
2464:
2465:
2466:
2467:
2468:
2469:
2470:
2471:
2472:
2473:
2474:
2475:
2476:
2477:
2478:
2479:
2480:
2481:
2482:
2483:
2484:
2485:
2486:
2487:
2488:
2489:
2490:
2491:
2492:
2493:
2494:
2495:
2496:
2497:
2498:
2499:
2500:
2501:
2502:
2503:
2504:
2505:
2506:
2507:
2508:
2509:
2510:
2511:
2512:
2513:
2514:
2515:
2516:
2517:
2518:
2519:
2520:
2521:
2522:
2523:
2524:
2525:
2526:
2527:
2528:
2529:
2530:
2531:
2532:
2533:
2534:
2535:
2536:
2537:
2538:
2539:
2540:
2541:
2542:
2543:
2544:
2545:
2546:
2547:
2548:
2549:
2550:
2551:
2552:
2553:
2554:
2555:
2556:
2557:
2558:
2559:
2560:
2561:
2562:
2563:
2564:
2565:
2566:
2567:
2568:
2569:
2570:
2571:
2572:
2573:
2574:
2575:
2576:
2577:
2578:
2579:
2580:
2581:
2582:
2583:
2584:
2585:
2586:
2587:
2588:
2589:
2590:
2591:
2592:
2593:
2594:
2595:
2596:
2597:
2598:
2599:
2600:
2601:
2602:
2603:
2604:
2605:
2606:
2607:
2608:
2609:
2610:
2611:
2612:
2613:
2614:
2615:
2616:
2617:
2618:
2619:
2620:
2621:
2622:
2623:
2624:
2625:
2626:
2627:
2628:
2629:
2630:
2631:
2632:
2633:
2634:
2635:
2636:
2637:
2638:
2639:
2640:
2641:
2642:
2643:
2644:
2645:
2646:
2647:
2648:
2649:
2650:
2651:
2652:
2653:
2654:
2655:
2656:
2657:
2658:
2659:
2660:
2661:
2662:
2663:
2664:
2665:
2666:
2667:
2668:
2669:
2670:
2671:
2672:
2673:
2674:
2675:
2676:
2677:
2678:
2679:
2680:
2681:
2682:
2683:
2684:
2685:
2686:
2687:
2688:
2689:
2690:
2691:
2692:
2693:
2694:
2695:
2696:
2697:
2698:
2699:
2700:
2701:
2702:
2703:
2704:
2705:
2706:
2707:
2708:
2709:
2710:
2711:
2712:
2713:
2714:
2715:
2716:
2717:
2718:
2719:
2720:
2721:
2722:
2723:
2724:
2725:
2726:
2727:
2728:
2729:
2730:
2731:
2732:
2733:
2734:
2735:
2736:
2737:
2738:
*&---------------------------------------------------------------------*
*& Report  ZSD_DELIVERYDOC_FLOE - Copy of RVADDN01
*&---------------------------------------------------------------------*
*& Print Program for Delivery Documents
*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*
*              Print of a delivery note by SAPscript                   *
*----------------------------------------------------------------------*
REPORT ZSD_DELIVERYDOC_FLOE LINE-COUNT 100.

TABLES: vbco3,                         "Communicationarea for view
        vbdkl,                         "Headerview
        vbdpl,                         "Itemview
        komser,                        "Communicationarea Serialnumbers
        conf_out,                      "Configuration data
        tvko,                          "Sales organization
        tvst,                          "Shipping points
        t001g,                         "Company codes dependend texts
        rdgprint,                      "Dangerous goods All of Data
        rdgtxtprt,                     "undepend. Texts
        komk,                          "Communicationarea for conditions
        komp,                          "Communicationarea for conditions
        komvd.                         "Communicationarea for conditions
INCLUDE rvadtabl.

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

DATA: retcode   LIKE sy-subrc.         "Returncode
DATA: xscreen(1) TYPE c.               "Output on printer or screen

DATA: BEGIN OF tvbdpl OCCURS 0.        "Internal table for items
    INCLUDE STRUCTURE vbdpl.
DATA: END OF tvbdpl.

DATA: BEGIN OF tkomv OCCURS 50.
    INCLUDE STRUCTURE komv.
DATA: END OF tkomv.

DATA: BEGIN OF tkomvd OCCURS 50.
    INCLUDE STRUCTURE komvd.
DATA: END OF tkomvd.

DATA: BEGIN OF tkomcon OCCURS 50.      "...  for configuration data
    INCLUDE STRUCTURE conf_out.
DATA: END OF tkomcon.

DATA: BEGIN OF tkomser OCCURS 5.
    INCLUDE STRUCTURE riserls.
DATA: END   OF tkomser.

DATA: BEGIN OF tkomser_print OCCURS 5.
    INCLUDE STRUCTURE komser.
DATA: END   OF tkomser_print.

DATA: BEGIN OF tkombat OCCURS 50.      " configuration data for batches
    INCLUDE STRUCTURE conf_out.
DATA: END   OF tkombat.

DATA:  address_selection LIKE addr1_sel.                    "MOS

DATA: pr_kappl(01)   TYPE c VALUE 'V'. "Application for pricing
DATA: print_mwskz.

DATA: price(1) TYPE c.                 "price switch

DATA: BEGIN OF rdgprint_tab OCCURS 0.
    INCLUDE STRUCTURE rdgprint.
DATA: END   OF rdgprint_tab.

DATA: i_undep_txt   LIKE rdgtxtprt OCCURS 0 WITH HEADER LINE, "undepend Tex
      l_spras_txt   LIKE rdgtxtprt OCCURS 0 WITH HEADER LINE, "undepend Tex
      i_idname_text LIKE rdgtxtprt OCCURS 0 WITH HEADER LINE.


DATA: "gv_fp_outputparams  type  sfpoutputparams, " Output parameters
  gv_fp_docparams   TYPE sfpdocparams,
  gv_w_cx_root      TYPE REF TO cx_root,  " Form Output
  gv_fm_name        TYPE rs38l_fnam,      " Function Name
  gv_interface_type TYPE fpinterfacetype, " interface name
  gv_form           TYPE fpwbformname,    " Form name
  gv_fpformoutput   TYPE fpformoutput,    " Form Output
  gv_mesg           TYPE string,
  print_opts        TYPE itcpo.

DATA : gt_vbdpl TYPE STANDARD TABLE OF vbdpl,
       gs_vbdpl TYPE vbdpl.

DATA : gt_komser TYPE STANDARD TABLE OF leshp_pdf_komser_pdf,
       gs_komser TYPE leshp_pdf_komser_pdf.

DATA : gt_rdgtxtprt TYPE STANDARD TABLE OF rdgtxtprt,
       gs_rdgtxtprt TYPE rdgtxtprt.

DATA : gt_conf_out TYPE STANDARD TABLE OF leshp_pdf_conf_out_pdf,
       gs_conf_out TYPE leshp_pdf_conf_out_pdf.

DATA : gs_shipment  TYPE vbdkl,
       gs_addr_info TYPE vbdkl,
       gs_inc_text  TYPE tvko,
       gv_repeat    TYPE char2.

DATA : gt_dg TYPE STANDARD TABLE OF rdgtxtprt,
       gs_dg TYPE rdgtxtprt.

CONSTANTS: gc_english TYPE char1 VALUE 'E'.

"Output Control Enhancements

DATA:
  gv_enhemail          TYPE char1,
  gv_address           TYPE adsmtp,
  gv_pdf               TYPE fpcontent,
  gv_dummy             TYPE char1,
  go_badi_mapper       TYPE REF TO badi_sd_obj_mapper,
  go_badi_sd_sls_email TYPE REF TO badi_sd_sls_email.

DATA:   otf_data TYPE TABLE OF itcoo.

**************************Start of Note changes 1503297*********************************
*
*  DATA:  gv_inupd           TYPE i.
*
**External Send
*  DATA:  gv_comm_type     TYPE ad_comm,
*         gv_comm_values   TYPE szadr_comm_values,
*         gs_recipient     TYPE swotobjid,
*         gs_sender        TYPE swotobjid,
*         gs_intnast       TYPE snast,
*         gv_xdevice(10),
*         gv_xprogramm     TYPE tdprogram,
*         gv_xdialog.
*
** sending output vai mail
*DATA:  gv_pdf_content        TYPE solix_tab.
*
**************************End of Note changes 1503297*********************************

DATA: lv_pdf       TYPE xstring,
      ls_fpe       TYPE /flm/fpe,
      lv_doc       TYPE text40,
      lv_ccode     TYPE /flm/cust_code,
      lv_ftype     TYPE /flm/ftype_code,
      lv_template  TYPE /flm/flang,
      lv_fver      TYPE /flm/fver,
      lv_fid       TYPE /flm/fid,
      lv_fidvar    TYPE /flm/id_var,
      ls_mess      TYPE bapiret2,
      lt_variables TYPE /flm/vars_t,
      ls_variables TYPE /flm/vars_s,
      lv_reprint   TYPE flag,
      ls_nast      TYPE nast.

*
*----------------------------------------------------------------------*
* Floe declarations
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_floe_rec_email_s,
         email TYPE ad_smtpadr,
         type  TYPE char1,
       END OF ty_floe_rec_email_s.

TYPES: ty_floe_rec_email_t TYPE TABLE OF ty_floe_rec_email_s.

TYPES: BEGIN OF ty_floe_var_code_s,
         var_code       TYPE char30,
         value          TYPE string,
         row_num        TYPE numc3,
         parent_row_num TYPE numc3,
       END OF ty_floe_var_code_s.

TYPES: ty_floe_var_code_t TYPE TABLE OF ty_floe_var_code_s.

DATA: gt_rec_emails TYPE ty_floe_rec_email_t,
      gs_rec_email  TYPE ty_floe_rec_email_s,
      gt_vars       TYPE ty_floe_var_code_t,
      gs_vars       TYPE ty_floe_var_code_s,
      gv_subrc      TYPE sysubrc.

DATA: ls_attach TYPE /floe/att_s,
      lt_attach TYPE /floe/att_t,
      l_im_doc  TYPE /floe/doc_ref,
      gv_etype  TYPE /floe/etype_code,
      l_order   TYPE string.

DATA: lt_lines TYPE TABLE OF tline,
      ls_lines TYPE tline,
      l_text   TYPE string,
      l_tdname TYPE tdobname.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*-----------------------------------------------------------------------
*
*-----------------------------------------------------------------------

FORM entry USING return_code us_screen.

  CLEAR retcode.
  CLEAR price.
  xscreen = us_screen.
  PERFORM processing USING us_screen.
  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "ENTRY


*&---------------------------------------------------------------------*
*&      Form  ENTRY_PDF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RETURN_CODE  text
*      -->US_SCREEN    text
*----------------------------------------------------------------------*
FORM entry_pdf USING return_code us_screen.
  CLEAR retcode.
  CLEAR price.
  CLEAR gv_fp_outputparams.                                 "n_1782166
  CLEAR gv_comm_type.                                       "n_1787700
  CLEAR gv_comm_values.                                     "n_1787700
  CLEAR gt_vbdpl.                                           "n_2483048
  xscreen = us_screen.
  PERFORM processing_pdf USING us_screen.
  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "ENTRY_PDF


*&---------------------------------------------------------------------*
*&      Form  ENTRY_VARO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RETURN_CODE  text
*      -->US_SCREEN    text
*----------------------------------------------------------------------*
FORM entry_varo USING return_code us_screen.
  CLEAR retcode.
  CLEAR price.
  CLEAR gv_fp_outputparams.                                 "n_1782166
  CLEAR gv_comm_type.                                       "n_1787700
  CLEAR gv_comm_values.                                     "n_1787700
  CLEAR gt_vbdpl.                                           "n_2483048
  xscreen = us_screen.
  PERFORM processing_varo.
  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "ENTRY_VARO

*---------------------------------------------------------------------*
*       FORM ENTRY FLOE                                                   *
*---------------------------------------------------------------------*
FORM entry_floe USING return_code us_screen.
  CLEAR retcode.
  CLEAR price.
  CLEAR gv_fp_outputparams.                                 "n_1782166
  CLEAR gv_comm_type.                                       "n_1787700
  CLEAR gv_comm_values.                                     "n_1787700
  CLEAR gt_vbdpl.                                           "n_2483048
  xscreen = us_screen.
  PERFORM processing_floe.
  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "entry_floe


*&---------------------------------------------------------------------*
*&      Form  ENTRY_PRICE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RETURN_CODE  text
*      -->US_SCREEN    text
*----------------------------------------------------------------------*
FORM entry_price USING return_code us_screen.

  CLEAR retcode.
  price = 'X'.
  xscreen = us_screen.
  PERFORM processing USING us_screen.
  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "ENTRY_PRICE

*---------------------------------------------------------------------*
*       FORM PROCESSING                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  PROC_SCREEN                                                   *
*---------------------------------------------------------------------*
FORM processing USING proc_screen.


*End Email output control enhancements.
  PERFORM get_data.
  CHECK retcode = 0.
*Email Output Control Enhancements - check only if type is External Send
  IF nast-nacha EQ '5'.
    PERFORM check_email_badi_impl.
  ENDIF.
  IF gv_enhemail EQ abap_true.
    PERFORM form_open_new USING proc_screen vbdkl-land1.
  ELSE.
    PERFORM form_open USING proc_screen vbdkl-land1.
  ENDIF.
  CHECK retcode = 0.
  PERFORM check_repeat.
  PERFORM header_data_print.
  CHECK retcode = 0.
  PERFORM header_text_print.
  CHECK retcode = 0.
  PERFORM item_print.
  CHECK retcode = 0.
  PERFORM end_print.
  CHECK retcode = 0.
*Email output control enhancements
  IF gv_enhemail EQ abap_true.
    PERFORM form_close_new.
  ELSE.
    PERFORM form_close.
  ENDIF.

  CHECK retcode = 0.
  PERFORM archive_data.

ENDFORM.                    "PROCESSING


*&---------------------------------------------------------------------*
*&      Form  PROCESSING_PDF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROC_SCREEN  text
*----------------------------------------------------------------------*
FORM processing_pdf USING proc_screen.
  PERFORM get_data_pdf.
  CHECK retcode = 0.
  PERFORM form_open_pdf USING proc_screen vbdkl-land1.
  CHECK retcode = 0.
  PERFORM check_repeat_pdf.
  CHECK retcode = 0.
  PERFORM item_print_pdf.
  PERFORM dg_print_undep_text_pdf.
  PERFORM write_pdf.
  PERFORM form_close_pdf.
  CHECK retcode = 0.

ENDFORM.                    "PROCESSING_PDF

*&---------------------------------------------------------------------*
*&      Form  PROCESSING_VARO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROC_SCREEN  text
*----------------------------------------------------------------------*
FORM processing_varo.
  PERFORM get_data_pdf.
  CHECK retcode = 0.
*  perform item_print_pdf.
*  perform dg_print_undep_text_pdf.

* Get output parameters
  PERFORM get_output_params.
  CHECK retcode = 0.
*
* Set up defaults
  lv_ftype    = tnapr-sform.
  lv_template = nast-spras.
  lv_fver     = '00'.
  lv_doc      = nast-objky.
  CLEAR lv_reprint.
*----------------------------------------------------------------------*
* Check Repeat print
*
  SELECT * INTO ls_nast FROM nast WHERE kappl = nast-kappl
                                AND   objky = nast-objky
                                AND   kschl = nast-kschl
                                AND   spras = nast-spras
                                AND   parnr = nast-parnr
                                AND   parvw = nast-parvw
                                AND   nacha BETWEEN '1' AND '4'
                                AND   vstat = '1'.
    IF nast-aende IS INITIAL.
      lv_reprint = 'X'.
    ENDIF.
  ENDSELECT.
*
* Find previous output for reprint.
*
  IF lv_reprint = 'X'.
*
    SELECT * FROM /flm/fpe UP TO 1 ROWS  INTO ls_fpe WHERE ftype = lv_ftype
                                                     AND   flang = lv_template
                                                     AND   document = lv_doc
                            ORDER BY id DESCENDING.
    ENDSELECT.
*
    IF sy-subrc EQ 0.
* Previous output found
*
      lv_ftype    = ls_fpe-ftype.
      lv_fver     = ls_fpe-fver.
      lv_template = ls_fpe-template.
      lv_fid      = ls_fpe-id.
      lv_doc      = ls_fpe-document.
    ELSE.
* No previous form found
      CLEAR lv_reprint.
    ENDIF.
*
  ENDIF.
*----------------------------------------------------------------------*
* Fill variables
*----------------------------------------------------------------------*
  CLEAR ls_variables.
  ls_variables-var_code = 'REPRINT'.
  ls_variables-value = lv_reprint.
  APPEND ls_variables TO lt_variables.
  CLEAR ls_variables.
*
  ls_variables-var_code = 'KSCHL'.
  ls_variables-value = nast-kschl.
  APPEND ls_variables TO lt_variables.
  CLEAR ls_variables.
*
  ls_variables-var_code = 'SPRAS'.
  ls_variables-value = nast-spras.
  APPEND ls_variables TO lt_variables.
*
*----------------------------------------------------------------------*
* Handle output scenario
*----------------------------------------------------------------------*
  IF xscreen NE 'X'.
*
    CALL FUNCTION '/FLM/PDF_PRINT'
      EXPORTING
        im_ftype        = lv_ftype
        im_outputparams = gv_fp_outputparams
        im_toption      = lv_template
        im_fver         = lv_fver
        im_fid          = lv_fid
        im_document     = lv_doc
        im_variables    = lt_variables
      IMPORTING
        ex_pdf          = lv_pdf
        ex_subrc        = retcode
        ex_mess         = ls_mess.
*
    CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
      EXPORTING
        msg_arbgb = ls_mess-id
        msg_nr    = ls_mess-number
        msg_ty    = ls_mess-type
        msg_v1    = ls_mess-message_v1
        msg_v2    = ls_mess-message_v2
        msg_v3    = ls_mess-message_v3
        msg_v4    = ls_mess-message_v4
      EXCEPTIONS
        OTHERS    = 0.
    IF retcode <> 0.
      RETURN.
    ENDIF.
*
  ELSE.
*----------------------------------------------------------------------*
* Call screen to preview PDF form
*----------------------------------------------------------------------*
    CALL FUNCTION '/FLM/PREVIEW_OUTPUT_PDF'
      EXPORTING
        im_ftype     = lv_ftype
        im_fid       = lv_fid
        im_fver      = lv_fver
        im_toption   = lv_template
        im_document  = lv_doc
        im_variables = lt_variables
*       IM_DNS_SUB   =
*       IM_HTTPS     =
      IMPORTING
        ex_subrc     = retcode
        ex_mess      = ls_mess.
*
  ENDIF.
*

ENDFORM.                    "PROCESSING_VARO

*&---------------------------------------------------------------------*
*&      Form  processing_floe
*&---------------------------------------------------------------------*
FORM processing_floe.

* Check email type
  gv_etype  = tnapr-fonam.
  CHECK gv_etype IS NOT INITIAL.

  PERFORM get_data_pdf.
  CHECK retcode = 0.

* Generate email
  PERFORM send_data_floe.
  CHECK retcode = 0.

ENDFORM.                    " processing_floe

*&---------------------------------------------------------------------*
*&      Form  send_data_floe
*&---------------------------------------------------------------------*
FORM send_data_floe.

  DATA:
    lv_cms_doc      TYPE /flm/cms_doc,
    ls_outputparams TYPE sfpoutputparams,
    ls_docparams    TYPE sfpdocparams,
    lv_device       TYPE output_device,
    ls_fpe          TYPE /flm/fpe,
    lv_delivery     TYPE char12.

  DATA:
    lt_mess TYPE bapiret2_t,
    ls_mess TYPE bapiret2.

  DATA:
    ev_ebody         TYPE  string,
    et_rec_emails    TYPE  /floe/rec_email_t,
    et_attachments   TYPE  /floe/att_t,
    ev_esubject_long TYPE  /floe/esubject_long,
    lv_emailaddr     TYPE adr6-smtp_addr,
    lv_inupd         TYPE i,
    lv_no_commit     TYPE flag.

*-----------------------------------------*
* Fill recipient
* Add additional recipients in recipient user-exit
*---------------------------------------------------------------------*
* get Email id from address no
  SELECT SINGLE smtp_addr FROM adr6 INTO lv_emailaddr WHERE addrnumber = addr_key-addrnumber AND flgdefault = abap_true.

  gs_rec_email-email = lv_emailaddr.
  gs_rec_email-type = '1'.
  APPEND gs_rec_email TO gt_rec_emails.
*----------------------------------------------------------------------*
* Add variables
* Add additional variables in email data user-exit
*----------------------------------------------------------------------*
  CLEAR ls_variables.
  ls_variables-var_code = 'REPRINT'.
  ls_variables-value = lv_reprint.
  APPEND ls_variables TO lt_variables.  "Varo
  APPEND ls_variables TO gt_vars.       "Floe
*
  CLEAR ls_variables.
  ls_variables-var_code = 'KSCHL'.
  ls_variables-value = nast-kschl.
  APPEND ls_variables TO lt_variables.  "Varo
  APPEND ls_variables TO gt_vars.       "Floe
*
  CLEAR ls_variables.
  ls_variables-var_code = 'SPRAS'.
  ls_variables-value = nast-spras.
  APPEND ls_variables TO lt_variables.  "Varo
  APPEND ls_variables TO gt_vars.       "Floe

  IF xscreen IS INITIAL.
    CLEAR ls_variables.
    ls_variables-var_code = 'FLOE_SEND'.
    ls_variables-value = 'X'.
    APPEND ls_variables TO gt_vars.       "Floe
  ENDIF.

*---------------------------------------------------------------------*
* Get PDF details if required
*---------------------------------------------------------------------*
  lv_ftype = tnapr-sform.
  IF lv_ftype IS NOT INITIAL.
* Generate PDF attachment with Varo, form type ftype.
*
* Set up defaults
    lv_ftype    = tnapr-sform.
    lv_template = nast-spras.
    lv_fver     = '00'.
    lv_doc      = nast-objky.
    lv_delivery = nast-objky.
*----------------------------------------------------------------------*
* Check if this is a re-print and set form id
*
    SELECT * FROM /flm/fpe UP TO 1 ROWS  INTO ls_fpe WHERE ftype    = lv_ftype
                                                     AND   flang = lv_template
                                                     AND   document = lv_doc
                            ORDER BY id DESCENDING.
    ENDSELECT.
*
    IF sy-subrc EQ 0 AND nast-aende IS INITIAL.
* Previous output found
*
      lv_ftype    = ls_fpe-ftype.
      lv_fver     = ls_fpe-fver.
      lv_template = ls_fpe-template.
      lv_fid      = ls_fpe-id.
      lv_doc      = ls_fpe-document.
      lv_reprint  = 'X'.
    ENDIF.
*
    IF xscreen = 'X'.
*----------------------------------------------------------------------*
* Preview the PDF
*
      CALL FUNCTION '/FLM/PREVIEW_OUTPUT_PDF'
        EXPORTING
          im_ftype     = lv_ftype
          im_fid       = lv_fid
          im_fver      = lv_fver
          im_toption   = lv_template
          im_document  = lv_doc
          im_variables = lt_variables
*         IM_DNS_SUB   =
*         IM_HTTPS     =
        IMPORTING
          ex_subrc     = retcode
          ex_mess      = ls_mess.
      RETURN.
*
    ELSE.
*
*----------------------------------------------------------------------*
* Call Varo to generate the PDF
*
      CALL FUNCTION '/FLM/OUTPUT_PDF_PDL_OUT'
        EXPORTING
          im_ftype     = lv_ftype
          im_fid       = lv_fid
          im_fver      = lv_fver
          im_toption   = lv_template
          im_document  = lv_doc
          im_variables = lt_variables
          im_no_print  = 'X'
*         IM_PDLTYPE   =
*         IM_XDCNAME   =
        IMPORTING
          ex_pdf       = lv_pdf
*         EX_PDL       =
*         EX_PAGECOUNT =
*         EX_JOB_ID    =
          ex_subrc     = retcode
          ex_mess      = ls_mess.
*
      IF retcode <> 0.
        CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
          EXPORTING
            msg_arbgb = ls_mess-id
            msg_nr    = ls_mess-number
            msg_ty    = ls_mess-type
            msg_v1    = ls_mess-message_v1
            msg_v2    = ls_mess-message_v2
            msg_v3    = ls_mess-message_v3
            msg_v4    = ls_mess-message_v4
          EXCEPTIONS
            OTHERS    = 0.
        RETURN.
      ENDIF.
*
* Get new form id etc.
      lv_cms_doc = ls_mess-parameter.
*
      CALL METHOD /flm/core=>split_xdp_cms_doc
        EXPORTING
          im_cms_doc = lv_cms_doc
        IMPORTING
          ex_ccode   = lv_ccode
          ex_ftype   = lv_ftype
          ex_fver    = lv_fver
          ex_flang   = lv_template
          ex_fid     = lv_fid
          ex_fid_var = lv_fidvar.
*
*-------------------------------------------------------------------
* Fill attachment
*
      CONCATENATE lv_delivery  '.pdf' INTO ls_attach-att_filename.
      ls_attach-att_description = 'Delivery'.
      ls_attach-att_data = lv_pdf.
      APPEND ls_attach TO lt_attach.
    ENDIF.
  ENDIF.
*
*-------------------------------------------------------------------
* Determine whether this is run as update task
*
  CLEAR: lv_inupd, lv_no_commit.
  CALL METHOD cl_system_transaction_state=>get_in_update_task
    RECEIVING
      in_update_task = lv_inupd.
*
  IF lv_inupd = 1.
    lv_no_commit = 'X'.
  ENDIF.
*
*----------------------------------------------------------------------*
* Call Floe API
*----------------------------------------------------------------------*
  CLEAR ev_ebody.
*
  l_im_doc = lv_delivery.
*
  CALL FUNCTION '/FLOE/EMAIL_OUT'
    EXPORTING
      im_etype            = gv_etype
      im_elang            = nast-spras
      im_document         = l_im_doc
      im_rec_emails       = gt_rec_emails
      im_variables        = gt_vars
      im_send_immediately = 'X'
      im_attachments      = lt_attach
      im_preview          = xscreen
      im_no_commit        = lv_no_commit
    IMPORTING
      ex_subrc            = retcode
      ex_ebody            = ev_ebody
      ex_mess             = lt_mess
      ex_rec_emails       = et_rec_emails
      ex_attachments      = et_attachments
      ex_esubject_long    = ev_esubject_long.

  LOOP AT lt_mess INTO ls_mess.
    CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
      EXPORTING
        msg_arbgb = ls_mess-id
        msg_nr    = ls_mess-number
        msg_ty    = ls_mess-type
        msg_v1    = ls_mess-message_v1
        msg_v2    = ls_mess-message_v2
        msg_v3    = ls_mess-message_v3
        msg_v4    = ls_mess-message_v4
      EXCEPTIONS
        OTHERS    = 0.
  ENDLOOP.
*
* Drop out if API has thrown an error
  IF retcode NE 0.
    RETURN.
  ENDIF.
*
*----------------------------------------------------------------------*
* Preview Email if required.
*----------------------------------------------------------------------*
  IF NOT xscreen IS INITIAL.
*
    CALL FUNCTION '/FLOE/EMAIL_VIEWER'
      EXPORTING
        im_preview     = 'X'
*       IM_ETYPE       =
*       IM_EID         =
        im_esubject    = 'FLOE Preview'
        im_ebody       = ev_ebody
        im_rec_emails  = et_rec_emails
        im_attachments = et_attachments
      IMPORTING
        ex_subrc       = retcode.
*
  ENDIF.
*
ENDFORM.                    " send_data_floe


***********************************************************************
*       S U B R O U T I N E S                                         *
***********************************************************************

*---------------------------------------------------------------------*
*       FORM CHECK_REPEAT                                             *
*---------------------------------------------------------------------*
*       A text is printed, if it is a repeat print for the document.  *
*---------------------------------------------------------------------*

FORM check_repeat.

  SELECT * INTO *nast FROM nast WHERE kappl = nast-kappl
                                AND   objky = nast-objky
                                AND   kschl = nast-kschl
                                AND   spras = nast-spras
                                AND   parnr = nast-parnr
                                AND   parvw = nast-parvw
                                AND   nacha BETWEEN '1' AND '4'
                                AND   vstat = '1'.
    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'REPEAT'
        window  = 'REPEAT'
      EXCEPTIONS
        element = 1
        window  = 2.
    IF sy-subrc NE 0.
      PERFORM protocol_update.
    ENDIF.
    EXIT.
  ENDSELECT.

ENDFORM.                    "CHECK_REPEAT

*---------------------------------------------------------------------*
*       FORM END_PRINT                                                *
*---------------------------------------------------------------------*
*                                                                     *
*---------------------------------------------------------------------*

FORM check_repeat_pdf.

  SELECT * INTO *nast FROM nast WHERE kappl = nast-kappl
                                AND   objky = nast-objky
                                AND   kschl = nast-kschl
                                AND   spras = nast-spras
                                AND   parnr = nast-parnr
                                AND   parvw = nast-parvw
                                AND   nacha BETWEEN '1' AND '4'
                                AND   vstat = '1'.
    gv_repeat = 1.

    EXIT.
  ENDSELECT.

ENDFORM.                    "CHECK_REPEAT_PDF


*&---------------------------------------------------------------------*
*&      Form  END_PRINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM end_print.

  IF price = 'X'.
    PERFORM get_header_prices.
    CALL FUNCTION 'CONTROL_FORM'
      EXPORTING
        command = 'PROTECT'.
    PERFORM header_price_print.
    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'END_VALUES'
      EXCEPTIONS
        OTHERS  = 1.
    CALL FUNCTION 'CONTROL_FORM'
      EXPORTING
        command = 'ENDPROTECT'.
  ENDIF.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element = 'SUPPLEMENT_TEXT'
    EXCEPTIONS
      element = 1
      window  = 2.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

* print standard texts for dangerous goods
  PERFORM dg_print_undep_text.

ENDFORM.                    "END_PRINT

*---------------------------------------------------------------------*
*       FORM FORM_CLOSE                                               *
*---------------------------------------------------------------------*
*       End of printing the form                                      *
*---------------------------------------------------------------------*

FORM form_close.

  DATA:
    lt_otfdata TYPE TABLE OF itcoo.

  IF cl_ops_switch_check=>sd_sfws_sc3( ) EQ abap_true AND
     xscreen                             EQ 'W'.
    CALL FUNCTION 'CLOSE_FORM'
      TABLES
        otfdata = lt_otfdata
      EXCEPTIONS
        OTHERS  = 1.
    IF sy-subrc IS INITIAL.
      PERFORM convert_otf_to_pdf
              TABLES lt_otfdata.
    ENDIF.
  ELSE.
    CALL FUNCTION 'CLOSE_FORM'           "...Ende Formulardruck
      EXCEPTIONS
        OTHERS = 1.
  ENDIF.
  IF sy-subrc NE 0.
    retcode = 1.
    PERFORM protocol_update.
  ENDIF.
  SET COUNTRY space.

ENDFORM.                    "FORM_CLOSE


*---------------------------------------------------------------------*
*       FORM FORM_OPEN                                                *
*---------------------------------------------------------------------*
*       Start of printing the form                                    *
*---------------------------------------------------------------------*
*  -->  US_SCREEN  Output on screen                                   *
*                  ' ' = printer                                      *
*                  'X' = screen                                       *
*  -->  US_COUNTRY County for telecommunication and SET COUNTRY       *
*---------------------------------------------------------------------*

FORM form_open USING us_screen us_country.

  INCLUDE rvadopfo.

ENDFORM.                    "FORM_OPEN

*---------------------------------------------------------------------*
*       FORM GET_DATA                                                 *
*---------------------------------------------------------------------*
*       General provision of data for the form                        *
*---------------------------------------------------------------------*

FORM get_data.

  CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
    TABLES
      tkomv = tkomv.
  CLEAR komk.
  CLEAR komp.


  vbco3-spras = nast-spras.
  vbco3-vbeln = nast-objky.
  vbco3-kunde = nast-parnr.
  vbco3-parvw = nast-parvw.

  CALL FUNCTION 'RV_DELIVERY_PRINT_VIEW'
    EXPORTING
      comwa = vbco3
    IMPORTING
      kopf  = vbdkl
    TABLES
      pos   = tvbdpl.

* fill address key --> necessary for emails
  addr_key-addrnumber = vbdkl-adrnr.
  addr_key-persnumber = vbdkl-adrnp.
  addr_key-addr_type  = vbdkl-address_type.

* Data selection for dangerous goods
  PERFORM dg_data_select USING vbdkl.
  PERFORM sender.

ENDFORM.                    "GET_DATA




*&---------------------------------------------------------------------*
*&      Form  GET_DATA_PDF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data_pdf.

  CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
    TABLES
      tkomv = tkomv.
  CLEAR komk.
  CLEAR komp.

  vbco3-spras = nast-spras.
  vbco3-vbeln = nast-objky.
  vbco3-kunde = nast-parnr.
  vbco3-parvw = nast-parvw.

  CALL FUNCTION 'RV_DELIVERY_PRINT_VIEW'
    EXPORTING
      comwa = vbco3
    IMPORTING
      kopf  = vbdkl
    TABLES
      pos   = tvbdpl.

  MOVE-CORRESPONDING vbdkl TO gs_shipment.

  LOOP AT tvbdpl.
    MOVE-CORRESPONDING tvbdpl TO gs_vbdpl.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  = gs_vbdpl-matnr
      IMPORTING
        output = gs_vbdpl-matnr.

    APPEND gs_vbdpl TO gt_vbdpl.
    CLEAR gs_vbdpl.
  ENDLOOP.

* fill address key --> necessary for emails
  addr_key-addrnumber = vbdkl-adrnr.
  addr_key-persnumber = vbdkl-adrnp.
  addr_key-addr_type  = vbdkl-address_type.

* Data selection for dangerous goods
  PERFORM dg_data_select USING vbdkl.
*  PERFORM sender.

  MOVE-CORRESPONDING tvko TO gs_inc_text.

*---------------------------------------------------------------------*
* fill_floe_variables
*---------------------------------------------------------------------*

  DATA: lt_comp        TYPE abap_compdescr_tab,
        ls_comp_a      LIKE LINE OF lt_comp,
        ld_type        TYPE abap_typekind,
        ls_item_detail TYPE vbdpl,
        l_row_num      TYPE numc3,
        l_parent_num   TYPE numc3,
        l_item_num     TYPE numc3,
        l_schl_num     TYPE numc3,
        l_old_posnr    TYPE posnr.

  DATA:
    lo_struct TYPE REF TO cl_abap_structdescr,
    lo_table  TYPE REF TO cl_abap_tabledescr,
    ldo_data  TYPE REF TO data.

  FIELD-SYMBOLS:
    <lt_itab>  TYPE table,
    <lo_field>.
*---------------------------------------------------------------------*
* Convert data into floe variables.
*---------------------------------------------------------------------*
*
* Only for Floe
  CHECK gv_etype IS NOT INITIAL.
* Take header data from structure <gs_vbdka>.
  GET REFERENCE OF vbdkl INTO ldo_data .
  lo_struct ?=  cl_abap_structdescr=>describe_by_data_ref( ldo_data ).
  lt_comp = lo_struct->components.
*
  LOOP AT lt_comp INTO ls_comp_a.
    ASSIGN COMPONENT ls_comp_a-name OF STRUCTURE vbdkl TO <lo_field>.
    gs_vars-var_code = ls_comp_a-name.
    gs_vars-value = <lo_field>.
    APPEND gs_vars TO gt_vars.
  ENDLOOP.
*
* Take item data and schedule line data from table vbdpa.
  GET REFERENCE OF gt_vbdpl INTO ldo_data .
  ASSIGN ldo_data->* TO <lt_itab>.
  lo_table  ?= cl_abap_structdescr=>describe_by_data_ref( ldo_data ).
  lo_struct ?= lo_table->get_table_line_type( ).
  lt_comp = lo_struct->components.
*
*
  l_item_num = 0.

  LOOP AT gt_vbdpl INTO ls_item_detail.
*
    IF sy-tabix EQ 1 OR l_old_posnr NE ls_item_detail-posnr.
      l_schl_num = 0.
      l_parent_num = 0.
      l_item_num = l_item_num + 1.
      l_row_num = l_item_num.
      l_old_posnr = ls_item_detail-posnr.
    ELSE.
* New schedule line
      l_schl_num = l_schl_num + 1.
      l_parent_num = l_item_num.
      l_row_num = l_schl_num.
    ENDIF.
*
    LOOP AT lt_comp INTO ls_comp_a.
      ASSIGN COMPONENT ls_comp_a-name OF STRUCTURE ls_item_detail TO <lo_field>.
*
      gs_vars-var_code = ls_comp_a-name.
      gs_vars-value = <lo_field>.
      gs_vars-row_num = l_row_num.
      gs_vars-parent_row_num = l_parent_num.
      APPEND gs_vars TO gt_vars.
    ENDLOOP.
*
  ENDLOOP.


ENDFORM.                    "GET_DATA_PDF


*---------------------------------------------------------------------*
*       FORM GET_HEADER_PRICES                                        *
*---------------------------------------------------------------------*
*       In this routine the price data for the header is fetched from *
*       the database.                                                 *
*---------------------------------------------------------------------*

FORM get_header_prices.

  CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
    EXPORTING
      comm_head_i = komk
      language    = nast-spras
    IMPORTING
      comm_head_e = komk
      comm_mwskz  = print_mwskz
    TABLES
      tkomv       = tkomv
      tkomvd      = tkomvd.

ENDFORM.                    "GET_HEADER_PRICES

*---------------------------------------------------------------------*
*       FORM GET_ITEM_CHARACTERISTICS                                 *
*---------------------------------------------------------------------*
*       In this routine the configuration data item is fetched from   *
*       the database.                                                 *
*---------------------------------------------------------------------*

FORM get_item_characteristics.

  DATA da_t_cabn LIKE cabn OCCURS 10 WITH HEADER LINE.
  DATA: BEGIN OF da_key,
          mandt LIKE cabn-mandt,
          atinn LIKE cabn-atinn,
        END   OF da_key.

  REFRESH tkomcon.
  CHECK NOT vbdpl-cuobj IS INITIAL.

  CALL FUNCTION 'VC_I_GET_CONFIGURATION'
    EXPORTING
      instance      = vbdpl-cuobj
      language      = nast-spras
      print_sales   = 'X'
    TABLES
      configuration = tkomcon
    EXCEPTIONS
      OTHERS        = 4.

  RANGES : da_in_cabn FOR da_t_cabn-atinn.
  CLEAR da_in_cabn. REFRESH da_in_cabn.
  LOOP AT tkomcon.
    da_in_cabn-option = 'EQ'.
    da_in_cabn-sign   = 'I'.
    da_in_cabn-low    = tkomcon-atinn.
    APPEND da_in_cabn.
  ENDLOOP.

  CLEAR da_t_cabn. REFRESH da_t_cabn.
  CALL FUNCTION 'CLSE_SELECT_CABN'
    TABLES
      in_cabn        = da_in_cabn
      t_cabn         = da_t_cabn
    EXCEPTIONS
      no_entry_found = 1
      OTHERS         = 2.

* Preisfindungsmerkmale / Merkmale auf VCSD_UPDATE herausnehmen
  SORT da_t_cabn.
  LOOP AT tkomcon.
    da_key-mandt = sy-mandt.
    da_key-atinn = tkomcon-atinn.
    READ TABLE da_t_cabn WITH KEY da_key BINARY SEARCH.
    IF sy-subrc <> 0 OR
         ( ( da_t_cabn-attab = 'SDCOM' AND
            da_t_cabn-atfel = 'VKOND'       ) OR
          ( da_t_cabn-attab = 'VCSD_UPDATE' ) ) .
      DELETE tkomcon.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "GET_ITEM_CHARACTERISTICS

*---------------------------------------------------------------------*
*       FORM GET_ITEM_CHARACTERISTICS_BATCH                           *
*---------------------------------------------------------------------*
*       In this routine the configuration data for batches is fetched *
*       from the database                                             *
*---------------------------------------------------------------------*

FORM get_item_characteristics_batch.

  REFRESH tkombat.
  CHECK NOT vbdpl-charg IS INITIAL.

  CALL FUNCTION 'VB_BATCH_VALUES_FOR_OUTPUT'
    EXPORTING
      material       = vbdpl-matnr
      plant          = vbdpl-werks
      batch          = vbdpl-charg
      language       = nast-spras
    TABLES
      classification = tkombat
    EXCEPTIONS
      OTHERS         = 4.

  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

ENDFORM.                    "GET_ITEM_CHARACTERISTICS_BATCH

*---------------------------------------------------------------------*
*       FORM GET_ITEM_PRICES                                          *
*---------------------------------------------------------------------*
*       In this routine the price data for the item is fetched from   *
*       the database.                                                 *
*---------------------------------------------------------------------*

FORM get_item_prices.

  CLEAR: komp,
         tkomv.

  IF komk-knumv NE vbdkl-knump.
    CLEAR komk.
    komk-mandt = sy-mandt.
    komk-kalsm = vbdkl-kalsp.
    komk-kappl = pr_kappl.
    komk-waerk = vbdkl-waerk.
    komk-knumv = vbdkl-knump.
    komk-vbtyp = vbdkl-vbtyp.
  ENDIF.
  komp-kposn = vbdpl-posnr.

  CALL FUNCTION 'RV_PRICE_PRINT_ITEM'
    EXPORTING
      comm_head_i = komk
      comm_item_i = komp
      language    = nast-spras
    IMPORTING
      comm_head_e = komk
      comm_item_e = komp
    TABLES
      tkomv       = tkomv
      tkomvd      = tkomvd.

ENDFORM.                    "GET_ITEM_PRICES

*---------------------------------------------------------------------*
*       FORM GET_SERIAL_NO                                            *
*---------------------------------------------------------------------*
*       In this routine the serialnumbers are fetched from the        *
*       database.                                                     *
*---------------------------------------------------------------------*

FORM get_serial_no.

  REFRESH tkomser.
  REFRESH tkomser_print.
  CHECK vbdpl-anzsn > 0.
* Read the Serialnumbers of a Position.
  CALL FUNCTION 'SERIAL_LS_PRINT'
    EXPORTING
      vbeln  = vbdkl-vbeln
      posnr  = vbdpl-posnr
    TABLES
      iserls = tkomser.

* Process the stringtable for Printing.
  CALL FUNCTION 'PROCESS_SERIALS_FOR_PRINT'
    EXPORTING
      i_boundary_left             = '(_'
      i_boundary_right            = '_)'
      i_sep_char_strings          = ',_'
      i_sep_char_interval         = '_-_'
      i_use_interval              = 'X'
      i_boundary_method           = 'C'
      i_line_length               = 50
      i_no_zero                   = 'X'
      i_alphabet                  = sy-abcde
      i_digits                    = '0123456789'
      i_special_chars             = '-'
      i_with_second_digit         = ' '
    TABLES
      serials                     = tkomser
      serials_print               = tkomser_print
    EXCEPTIONS
      boundary_missing            = 01
      interval_separation_missing = 02
      length_to_small             = 03
      internal_error              = 04
      wrong_method                = 05
      wrong_serial                = 06
      two_equal_serials           = 07
      serial_with_wrong_char      = 08
      serial_separation_missing   = 09.

  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

ENDFORM.                    "GET_SERIAL_NO

*&---------------------------------------------------------------------*
*&      Form  HEADER_DATA_PRINT
*&---------------------------------------------------------------------*
*       Printing of the header data like terms, weights                *
*----------------------------------------------------------------------*

FORM header_data_print.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element = 'HEADER_DATA'
    EXCEPTIONS
      element = 1
      window  = 2.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

ENDFORM.                               " HEADER_DATA_PRINT

*---------------------------------------------------------------------*
*       FORM HEADER_PRICE_PRINT                                       *
*---------------------------------------------------------------------*
*       Printout of the header prices                                 *
*---------------------------------------------------------------------*

FORM header_price_print.

  LOOP AT tkomvd.

    AT FIRST.
      IF komk-supos NE 0.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_SUM'
          EXCEPTIONS
            element = 1
            window  = 2.
      ELSE.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'UNDER_LINE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDAT.

    komvd = tkomvd.
    IF print_mwskz = space.
      CLEAR komvd-mwskz.
    ENDIF.

    IF komvd-koaid = 'D'.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'TAX_LINE'
        EXCEPTIONS
          element = 1
          window  = 2.
    ELSE.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'SUM_LINE'
        EXCEPTIONS
          element = 1
          window  = 2.
    ENDIF.
  ENDLOOP.
  DESCRIBE TABLE tkomvd LINES sy-tfill.
  IF sy-tfill = 0.
    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'UNDER_LINE'
      EXCEPTIONS
        element = 1
        window  = 2.
    IF sy-subrc NE 0.
      PERFORM protocol_update.
    ENDIF.
  ENDIF.

ENDFORM.                    "HEADER_PRICE_PRINT

*---------------------------------------------------------------------*
*       FORM HEADER_TEXT_PRINT                                        *
*---------------------------------------------------------------------*
*       Printout of the headertexts                                   *
*---------------------------------------------------------------------*

FORM header_text_print.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element = 'HEADER_TEXT'
    EXCEPTIONS
      element = 1
      window  = 2.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

ENDFORM.                    "HEADER_TEXT_PRINT

*---------------------------------------------------------------------*
*       FORM ITEM_PRINT                                               *
*---------------------------------------------------------------------*
*       Printout of the items                                         *
*---------------------------------------------------------------------*

FORM item_print.

* <<< START_OF_INSERTION_HP_327026 >>>
  DATA: lf_init_characteristics_done TYPE xfeld.
* <<< END_OF_INSERTION_HP_327026 >>>
  CALL FUNCTION 'WRITE_FORM'           "First header
    EXPORTING
      element = 'ITEM_HEADER'
    EXCEPTIONS
      OTHERS  = 1.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.
  CALL FUNCTION 'WRITE_FORM'          "Activate header
    EXPORTING
      element = 'ITEM_HEADER'
      type    = 'TOP'
    EXCEPTIONS
      OTHERS  = 1.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

  LOOP AT tvbdpl.
    vbdpl = tvbdpl.
* <<< START_OF_INSERTION_HP_327026 >>>
    IF ( lf_init_characteristics_done IS INITIAL ) AND
       ( ( NOT vbdpl-charg IS INITIAL ) OR
         ( NOT vbdpl-cuobj IS INITIAL ) ).
      CALL FUNCTION 'CTMS_DDB_INIT'.
      lf_init_characteristics_done = 'X'.
    ENDIF.
* <<< END_OF_INSERTION_HP_327026 >>>
    IF vbdpl-uecha IS INITIAL.
* <<< START_OF_INSERTION_HP_377469 >>>
      PERFORM item_print_oi.
* <<< END_OF_INSERTION_HP_377469 >>>
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'PROTECT'.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE'.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'ENDPROTECT'.
* Seitenumbruch, wenn Positionstexte nicht auf eine Seite passen.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'PROTECT'.
      PERFORM item_text_print.
      PERFORM dg_print_data_get.
      PERFORM dg_data_print.
      IF price = 'X'.
        PERFORM get_item_prices.
        PERFORM item_price_print.
      ENDIF.
      PERFORM get_serial_no.
      PERFORM item_serial_no_print.
      PERFORM get_item_characteristics.
      PERFORM item_characteristics_print.
      PERFORM get_item_characteristics_batch.
      PERFORM item_characteristics_batch.
      IF vbdpl-vbeln_vauf NE space AND
         vbdpl-vbeln_vauf NE vbdkl-vbeln_vauf.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_REFERENCE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
      IF vbdpl-qmnum NE space AND
         vbdpl-qmnum NE vbdkl-qmnum.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_QNUMBER'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_PURCHASE_DATA'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'ENDPROTECT'.
    ELSE.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_BATCH'
        EXCEPTIONS                                          "v_n_709399
          element = 1
          window  = 2.                                      "^_n_709399

      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
      IF price = 'X'.                                       "v_n_577292
        PERFORM get_item_prices.
        PERFORM item_price_print.
      ENDIF.                                                "^_n_577292
      PERFORM get_serial_no.
      PERFORM item_serial_no_print.
      PERFORM get_item_characteristics_batch.
      PERFORM item_characteristics_batch.
    ENDIF.
  ENDLOOP.

  CALL FUNCTION 'WRITE_FORM'          "Deactivate Header
    EXPORTING
      element  = 'ITEM_HEADER'
      function = 'DELETE'
      type     = 'TOP'
    EXCEPTIONS
      OTHERS   = 1.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

ENDFORM.                    "ITEM_PRINT


*&---------------------------------------------------------------------*
*&      Form  ITEM_PRINT_PDF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM item_print_pdf.

* <<< START_OF_INSERTION_HP_327026 >>>
  DATA: lf_init_characteristics_done TYPE xfeld.
* <<< END_OF_INSERTION_HP_327026 >>>

*  Move Data
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

  LOOP AT tvbdpl.
    vbdpl = tvbdpl.
* <<< START_OF_INSERTION_HP_327026 >>>
    IF ( lf_init_characteristics_done IS INITIAL ) AND
       ( ( NOT vbdpl-charg IS INITIAL ) OR
         ( NOT vbdpl-cuobj IS INITIAL ) ).
      CALL FUNCTION 'CTMS_DDB_INIT'.
      lf_init_characteristics_done = 'X'.
    ENDIF.
* <<< END_OF_INSERTION_HP_327026 >>>
    IF vbdpl-uecha IS INITIAL.
* <<< START_OF_INSERTION_HP_377469 >>>
      PERFORM item_print_oi.
* <<< END_OF_INSERTION_HP_377469 >>>

* Seitenumbruch, wenn Positionstexte nicht auf eine Seite passen.


      PERFORM dg_print_data_get_pdf.
      PERFORM dg_data_print_pdf.
      PERFORM get_serial_no.
      PERFORM item_serial_no_print_pdf.
      PERFORM get_item_characteristics.
      PERFORM item_characteristics_print_pdf.
      PERFORM get_item_characteristics_batch.
      PERFORM item_characteristics_batch_pdf.
    ELSE.
      PERFORM get_serial_no.
      PERFORM item_serial_no_print_pdf.
      PERFORM get_item_characteristics_batch.
      PERFORM item_characteristics_batch_pdf.

    ENDIF.
  ENDLOOP.
ENDFORM.                    "ITEM_PRINT_PDF


*---------------------------------------------------------------------*
*       FORM ITEM_CHARACERISTICS_BATCH                                *
*---------------------------------------------------------------------*
*       Printout of the item characteristics for batches              *
*---------------------------------------------------------------------*

FORM item_characteristics_batch.

  LOOP AT tkombat.
    conf_out = tkombat.
    IF sy-tabix = 1.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_CONFIGURATION_BATCH_HEADER'
        EXCEPTIONS
          OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ELSE.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_CONFIGURATION_BATCH'
        EXCEPTIONS
          OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "ITEM_CHARACTERISTICS_BATCH

*---------------------------------------------------------------------*
*       FORM ITEM_CHARACERISTICS_PRINT                                *
*---------------------------------------------------------------------*
*       Printout of the item characteristics -> configuration         *
*---------------------------------------------------------------------*

FORM item_characteristics_batch_pdf.

  LOOP AT tkombat.
    conf_out = tkombat.
    MOVE-CORRESPONDING conf_out TO gs_conf_out.
    MOVE-CORRESPONDING tvbdpl   TO gs_conf_out.
    gs_conf_out-flag = 'B'.
    APPEND gs_conf_out          TO gt_conf_out.
    CLEAR gs_conf_out.
  ENDLOOP.

ENDFORM.                    "ITEM_CHARACTERISTICS_


*&---------------------------------------------------------------------*
*&      Form  ITEM_CHARACTERISTICS_PRINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM item_characteristics_print.

  LOOP AT tkomcon.
    conf_out = tkomcon.
    IF sy-tabix = 1.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_CONFIGURATION_HEADER'
        EXCEPTIONS
          OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ELSE.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_CONFIGURATION'
        EXCEPTIONS
          OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "ITEM_CHARACTERISTICS_PRINT


*&---------------------------------------------------------------------*
*&      Form  ITEM_CHARACTERISTICS_PRINT_PDF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM item_characteristics_print_pdf.

  LOOP AT tkomcon.
    conf_out = tkomcon.
    MOVE: conf_out-atbez TO gs_conf_out-atbez,
          conf_out-atwtb TO gs_conf_out-atwtb,
          tvbdpl-vbeln   TO gs_conf_out-vbeln,
          tvbdpl-posnr   TO gs_conf_out-posnr.
    gs_conf_out-flag = 'C'.

    APPEND gs_conf_out TO gt_conf_out.
    CLEAR gs_conf_out.
  ENDLOOP.

ENDFORM.                    "ITEM_CHARACTERISTICS_PRINT_PDF


*---------------------------------------------------------------------*
*       FORM ITEM_PRICE_PRINT                                         *
*---------------------------------------------------------------------*
*       Printout of the item prices                                   *
*---------------------------------------------------------------------*

FORM item_price_print.

  LOOP AT tkomvd.
    komvd = tkomvd.
    IF print_mwskz = space.
      CLEAR komvd-mwskz.
    ENDIF.
    IF sy-tabix = 1.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_PRICE_QUANTITY'
        EXCEPTIONS
          element = 1
          window  = 2.
    ELSE.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_PRICE_TEXT'
        EXCEPTIONS
          element = 1
          window  = 2.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "ITEM_PRICE_PRINT

*---------------------------------------------------------------------*
*       FORM ITEM_SERIAL_NO_PRINT                                     *
*---------------------------------------------------------------------*
*       Printout of the item serialnumbers                            *
*---------------------------------------------------------------------*

FORM item_serial_no_print.

  LOOP AT tkomser_print.
    komser = tkomser_print.
    IF sy-tabix = 1.
*     Output of the Headerline
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_SERIAL_NO_HEADER'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ELSE.
*     Output of the following printlines
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_LINE_SERIAL_NO'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDIF.
    AT LAST.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'NEW-LINE'.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDAT.
  ENDLOOP.

ENDFORM.                    "ITEM_SERIAL_NO_PRINT


*&---------------------------------------------------------------------*
*&      Form  ITEM_SERIAL_NO_PRINT_PDF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM item_serial_no_print_pdf.

  LOOP AT tkomser_print.
    komser = tkomser_print.
    MOVE-CORRESPONDING komser TO gs_komser.
    MOVE-CORRESPONDING tvbdpl TO gs_komser.
    APPEND gs_komser TO gt_komser.
    CLEAR gs_komser.
  ENDLOOP.

ENDFORM.                    "ITEM_SERIAL_NO_PRINT_PDF


*---------------------------------------------------------------------*
*       FORM PROTOCOL_UPDATE                                          *
*---------------------------------------------------------------------*
*       The messages are collected for the processing protocol.       *
*---------------------------------------------------------------------*

FORM protocol_update.

  CHECK xscreen = space.
  CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
    EXPORTING
      msg_arbgb = syst-msgid
      msg_nr    = syst-msgno
      msg_ty    = syst-msgty
      msg_v1    = syst-msgv1
      msg_v2    = syst-msgv2
      msg_v3    = syst-msgv3
      msg_v4    = syst-msgv4
    EXCEPTIONS
      OTHERS    = 1.

ENDFORM.                    "PROTOCOL_UPDATE

*---------------------------------------------------------------------*
*       FORM SENDER                                                   *
*---------------------------------------------------------------------*
*       This routine determines the address of the sender             *
*---------------------------------------------------------------------*

FORM sender.

  SELECT SINGLE * FROM tvko  WHERE vkorg = vbdkl-vkorg.
  IF sy-subrc NE 0.
    syst-msgid = 'VN'.
    syst-msgno = '203'.
    syst-msgty = 'W'.
    syst-msgv1 = 'TVKO'.
    syst-msgv2 = syst-subrc.
    PERFORM protocol_update.
  ENDIF.
  SELECT SINGLE * FROM tvst  WHERE vstel = vbdkl-vstel.
  IF sy-subrc NE 0.
    syst-msgid = 'VN'.
    syst-msgno = '203'.
    syst-msgty = 'W'.
    syst-msgv1 = 'TVST'.
    syst-msgv2 = syst-subrc.
    PERFORM protocol_update.
  ENDIF.
  SELECT SINGLE * FROM t001g WHERE bukrs    = vbdkl-bukrs
                             AND   programm = 'RVADDN01'
                             AND   txtid    = space.
  IF sy-subrc NE 0.
    syst-msgid = 'VN'.
    syst-msgno = '203'.
    syst-msgty = 'W'.
    syst-msgv1 = 'T001G'.
    syst-msgv2 = syst-subrc.
    PERFORM protocol_update.
  ENDIF.

ENDFORM.                    "SENDER
*&---------------------------------------------------------------------*
*&      Form  ITEM_TEXT_PRINT
*&---------------------------------------------------------------------*
FORM item_text_print.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element = 'ITEM_TEXT'
    EXCEPTIONS
      element = 1
      window  = 2.
  IF sy-subrc NE 0.
    PERFORM protocol_update.
  ENDIF.

ENDFORM.                    " ITEM_TEXT_PRINT

* <<< START_OF_INSERTION_HP_377469 >>>
INCLUDE rvaddn01_dg.

INCLUDE rvaddn01_oi.
* <<< END_OF_INSERTION_HP_377469 >>>

INCLUDE rvaddn01_dg_pdf.                                    "#EC
***** End of PDF Changes by C5065471 *****

* <<< END_OF_INSERTION_HP_377469 >>>


FORM write_pdf .
  DATA: st_formular_pdf TYPE fpname.
*************************Start of Note changes 1503297*********************************
  DATA: ls_pdf_file  TYPE fpformoutput,
        lv_emailaddr TYPE adr6-smtp_addr.

* Setting for sending FAX
  DATA : lv_cam_address      TYPE REF TO cl_cam_address_bcs,
         lv_outputparams_fax TYPE sfpoutpar,
         lv_vend_cntry       TYPE lfa1-land1.

* BCS data
  DATA:
    send_request   TYPE REF TO cl_bcs,
    document       TYPE REF TO cl_document_bcs,
    recipient      TYPE REF TO if_recipient_bcs,
    bcs_exception  TYPE REF TO cx_bcs,
    lv_sent_to_all TYPE os_boolean,
    lp_pdf_size    TYPE so_obj_len,
    lv_subject     TYPE so_obj_des,
    lv_add_nr      TYPE adr6-addrnumber.

* Archiving specific data declaration
  DATA: lv_pdf_size      TYPE i,
        lv_archiveformat LIKE toadd-doc_type,  "PDF or OTF
        lv_documentclass LIKE toadv-doc_type.
*************************End of Note changes 1503297*********************************
*Email Enhancment BADI Impl Check

  IF nast-nacha EQ '5'.
    PERFORM check_email_badi_impl.
  ENDIF.

  gv_form = tnapr-sform.

  IF tnapr-formtype = 2.

    TRY.
* Function to find the FM name.
        CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
          EXPORTING
            i_name           = gv_form
          IMPORTING
            e_funcname       = gv_fm_name
            e_interface_type = gv_interface_type.

      CATCH cx_root INTO gv_w_cx_root.
        gv_mesg = gv_w_cx_root->get_text( ).
        MESSAGE gv_mesg TYPE 'E'.

    ENDTRY.
*    gv_fp_docparams-langu  = vbdkl-spras.                  "v_n_1676779
    gv_fp_docparams-langu     = nast-spras.
    gv_fp_docparams-replangu1 = vbdkl-spras_vko.     "sales org language
    gv_fp_docparams-replangu2 = gc_english.                 "^_n_1676779
    gv_fp_docparams-country   = vbdkl-land1.

    CALL FUNCTION gv_fm_name
      EXPORTING
        /1bcdwb/docparams  = gv_fp_docparams
        vbdpl              = gt_vbdpl
        deliveryheader     = gs_shipment
        conf_out           = gt_conf_out
        rdgtxtprt          = gt_rdgtxtprt
        komser             = gt_komser
        include_text       = gs_inc_text
        dg_text            = gt_dg
        repeat             = gv_repeat
      IMPORTING                                             "EHP5
        /1bcdwb/formoutput = ls_pdf_file                    "EHP5
      EXCEPTIONS
        usage_error        = 1
        system_error       = 2
        internal_error     = 3
        OTHERS             = 4.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
*   Enhancements for web dynpro pdf output  ****EHP5
    IF xscreen = 'W'.
      EXPORT lv_pdf_file = ls_pdf_file-pdf TO MEMORY ID 'PDF_FILE'.
    ELSE.
*****************************Start of Note 1503297************************************************************

*sending Document out via mail or FAX
      IF xscreen IS INITIAL  "In case of preview message should be displayed only
          AND ( nast-nacha EQ 5 OR nast-nacha EQ 2 ) AND ls_pdf_file IS NOT INITIAL.

* get Email id from address no
        SELECT SINGLE smtp_addr FROM adr6 INTO lv_emailaddr WHERE addrnumber = addr_key-addrnumber AND flgdefault = abap_true.
        " When more than one address is maintained default address should be selected.
        " When there is only one mail id then that will have default flag set
* Set FAX specific setting
        IF gv_comm_type EQ 'FAX' OR nast-nacha EQ 2.        "n_2058966
          IF nast-telfx IS INITIAL.                         "n_2058966
            CONCATENATE gv_comm_values-adfax-fax_number     "n_2058966
                        gv_comm_values-adfax-fax_extens
                        INTO lv_outputparams_fax-telenum.
          ELSE.
            lv_outputparams_fax-telenum  = nast-telfx.
          ENDIF.
          IF nast-tland IS INITIAL.
            lv_outputparams_fax-teleland = vbdkl-land1.
          ELSE.
            lv_outputparams_fax-teleland = nast-tland.
          ENDIF.
        ENDIF.
        IF gv_comm_type EQ 'FAX' OR gv_comm_type EQ 'INT' OR nast-nacha EQ 2.

          IF gv_comm_type = 'INT' AND  gv_enhemail = abap_true.

            PERFORM send_data_int USING lv_emailaddr ls_pdf_file-pdf.

          ELSE.
* ------------ Call BCS interface ----------------------------------
            TRY.
*   ---------- create persistent send request ----------------------
                send_request = cl_bcs=>create_persistent( ).

*   ---------- add document ----------------------------------------
*   get PDF xstring and convert it to BCS format
                lp_pdf_size = xstrlen( ls_pdf_file-pdf ).

                PERFORM xstring_to_solix
                            USING
                               ls_pdf_file-pdf.
                lv_subject = gv_fp_outputparams-covtitle.
                document = cl_document_bcs=>create_document(
                      i_type    = 'PDF' " cf. RAW, DOC
                      i_hex     = gv_pdf_content
                      i_length  = lp_pdf_size
                      i_subject = lv_subject ).             "#EC NOTEXT

*   add document to send request
                send_request->set_document( document ).

*     --------- set sender -------------------------------------------
*     note: this is necessary only if you want to set the sender
*           different from actual user (SY-UNAME). Otherwise sender is
*           set automatically with actual user.
*
*   ---------- add recipient (e-mail address) ----------------------

                CASE nast-nacha.
                  WHEN 5.
                    IF gv_comm_type EQ 'INT'.
*           add recipient (e-mail address)
                      recipient = cl_cam_address_bcs=>create_internet_address(
                      i_address_string = lv_emailaddr ).
                    ELSE.
*           add recipient (fax address)
                      recipient = cl_cam_address_bcs=>create_fax_address(
                                       i_country = lv_outputparams_fax-teleland
                                       i_number  = lv_outputparams_fax-telenum ).
                    ENDIF.

                  WHEN 2.
*           add recipient (fax address)
                    recipient = cl_cam_address_bcs=>create_fax_address(
                                     i_country = lv_outputparams_fax-teleland
                                     i_number  = lv_outputparams_fax-telenum ).
                ENDCASE.

*   add recipient to send request
                send_request->add_recipient( i_recipient = recipient ).

*   ---------- send document ---------------------------------------
                lv_sent_to_all = send_request->send(
                    i_with_error_screen = 'X' ).
* Issue message and COMMINT only if the subroutine is not called in update task
                IF gv_inupd = 0.
                  IF lv_sent_to_all = 'X'.
                    MESSAGE i022(so).
                  ENDIF.

*   ---------- explicit 'commit work' is mandatory! ----------------
                  COMMIT WORK.
                ENDIF.
* ------------------------------------------------------------------
* *            exception handling
* ------------------------------------------------------------------
              CATCH cx_bcs INTO bcs_exception.
                MESSAGE e451(so) WITH lv_outputparams_fax-telenum.
                retcode = 1.
                EXIT.
            ENDTRY.
          ENDIF.
        ENDIF.
      ENDIF.

* Arching for adobe forms
      IF nast-tdarmod = 2 OR  nast-tdarmod = 3.

* Get the PDF length
        lp_pdf_size = xstrlen( ls_pdf_file-pdf ).

* defaults for archive
        IF toa_dara-function = space.
          toa_dara-function = 'DARA'.
        ENDIF.
*     which format to be used for archiving: OTF or PDF?
        CALL FUNCTION 'ARCHIV_GET_PRINTFORMAT'
          EXPORTING
            application = 'PDF'
          IMPORTING
            printformat = lv_archiveformat.

        IF lv_archiveformat EQ 'PDF'.
          lv_documentclass = 'PDF'.

          CALL FUNCTION 'ARCHIV_CREATE_OUTGOINGDOCUMENT'
            EXPORTING
              arc_p                    = arc_params
              arc_i                    = toa_dara
              pdflen                   = lv_pdf_size
              documentclass            = lv_documentclass                "Since the output is in PDF document class is also PDF
              document                 = ls_pdf_file-pdf
            EXCEPTIONS
              error_archiv             = 1
              error_communicationtable = 2
              error_connectiontable    = 3
              error_kernel             = 4
              error_parameter          = 5
              OTHERS                   = 6.
          CASE sy-subrc.
            WHEN 0. " o.k.
            WHEN 1. RAISE error_archiv.
            WHEN 2. RAISE error_communicationtable.
            WHEN 3. RAISE error_connectiontable.
            WHEN 4. RAISE error_kernel.
            WHEN 5. RAISE error_parameter.
            WHEN 6. RAISE error_archiv. "?
          ENDCASE.

        ELSE.
          " Other than PDF format raise error.
          MESSAGE e789(po) WITH lv_archiveformat.
          retcode = 1.
        ENDIF.
      ENDIF.
    ENDIF.
*****************************End of Note 1503297**************************************************************
*--------------------------------------------------------EHP5

    REFRESH: gt_vbdpl,gt_conf_out,gt_rdgtxtprt,gt_komser.
    CLEAR : gv_repeat, gt_dg, gs_dg.
  ELSE.
    MESSAGE 'PDF form not available' TYPE 'I'.              "#EC NOTEXT
    CALL FUNCTION 'AUTHORITY_CHECK_TCODE'                    "v_n_2127378
      EXPORTING
        tcode  = 'VL71'
      EXCEPTIONS
        ok     = 1
        not_ok = 2
        OTHERS = 3.
    IF sy-subrc NE 1.
      MESSAGE e172(00) WITH 'VL71'.
    ENDIF.                                                   "^_n_2127378
    CALL TRANSACTION 'VL71'.
  ENDIF.

ENDFORM.                    " WRITE_PDF

*&---------------------------------------------------------------------*
*&      Form  FORM_OPEN_PDF
*&---------------------------------------------------------------------*
FORM form_open_pdf USING    us_screen us_country .
  INCLUDE rvadopfo_pdf.
ENDFORM.                    " FORM_OPEN_PDF
*&---------------------------------------------------------------------*
*&      Form  FORM_CLOSE_PDF
*&---------------------------------------------------------------------*
FORM form_close_pdf .
  CALL FUNCTION 'FP_JOB_CLOSE'
    EXCEPTIONS
      usage_error    = 1
      system_error   = 2
      internal_error = 3
      OTHERS         = 4.
  IF sy-subrc NE 0.
    retcode = 1.
    PERFORM protocol_update.
  ENDIF.
  SET COUNTRY space.
ENDFORM.                    " FORM_CLOSE_PDF
*************************Start of Note changes 1503297*********************************
*&---------------------------------------------------------------------*
*&      Form  xstring_to_solix
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IP_XSTRING text
*----------------------------------------------------------------------*
FORM  xstring_to_solix
  USING ip_xstring TYPE xstring.

  DATA:
    lp_offset          TYPE i,
    lt_solix           TYPE solix_tab,
    ls_solix_line      TYPE solix,
    lp_pdf_string_len  TYPE i,
    lp_solix_rows      TYPE i,
    lp_last_row_length TYPE i,
    lp_row_length      TYPE i.

  CLEAR gv_pdf_content.

* transform xstring to SOLIX
  DESCRIBE TABLE lt_solix.
  lp_row_length = sy-tleng.
  lp_offset = 0.

  lp_pdf_string_len = xstrlen( ip_xstring ).

  lp_solix_rows = lp_pdf_string_len DIV lp_row_length.
  lp_last_row_length = lp_pdf_string_len MOD lp_row_length.
  DO lp_solix_rows TIMES.
    ls_solix_line-line =
           ip_xstring+lp_offset(lp_row_length).
    APPEND ls_solix_line TO gv_pdf_content.
    ADD lp_row_length TO lp_offset.
  ENDDO.
  IF lp_last_row_length > 0.
    CLEAR ls_solix_line-line.
    ls_solix_line-line = ip_xstring+lp_offset(lp_last_row_length).
    APPEND ls_solix_line TO gv_pdf_content.
  ENDIF.

ENDFORM.                    "XSTRING_TO_SOLIX


FORM check_email_badi_impl.

  gv_enhemail = abap_false.

  TRY.
      GET BADI go_badi_sd_sls_email
        FILTERS
          sd_email_progs = if_sd_email_process_constant=>delv_prt.

      IF go_badi_sd_sls_email IS BOUND.
        IF go_badi_sd_sls_email->imps IS NOT INITIAL.
          gv_enhemail = abap_true.
        ENDIF.
      ENDIF.

*        Catch not implemented exception or multiple implementation
    CATCH cx_badi_not_implemented.
      gv_enhemail = abap_false.
      CLEAR go_badi_sd_sls_email.

    CATCH cx_badi_multiply_implemented.
      CLEAR go_badi_sd_sls_email.
  ENDTRY.

  IF gv_enhemail EQ abap_true.

    TRY.

*     get Badi handle for obj mapper
*            filters  any filters implement here
        GET BADI go_badi_mapper
          FILTERS
            sd_process_filter = if_sd_email_process_constant=>delv_prt.

*    Catch not implemented exception or multiple implementation
      CATCH cx_badi_not_implemented.
        CLEAR go_badi_mapper.
      CATCH cx_badi_multiply_implemented.
        CLEAR go_badi_mapper.
    ENDTRY.

  ENDIF.

ENDFORM.

*&------------------------------------------------------------------*
*        Output Control Email-Enhancement - New Form open
*            using screen, country.
*&------------------------------------------------------------------*
FORM form_open_new USING us_screen us_country.

  DATA: lvs_recipient  LIKE  swotobjid,
        lvs_sender     LIKE  swotobjid,
        lvf_device(30) TYPE  c,
        ls_addr_key    TYPE  addr_key,
        lvs_itcpo      TYPE  itcpo.

*set address key data for FM call
  ls_addr_key-addr_type       = vbdkl-address_type.
  ls_addr_key-addrnumber      = vbdkl-adrnr.
  ls_addr_key-persnumber      = vbdkl-adrnp.

*calling FM to get address data

  CALL FUNCTION 'SD_PDF_HELPER'
    EXPORTING
      is_addr_key         = ls_addr_key
      is_nast             = nast
      iv_prog_id          = sy-repid
      iv_country          = vbdkl-land1
      iv_screen           = us_screen
    IMPORTING
      es_address          = gv_address
      es_recipient        = lvs_recipient
      es_sender           = lvs_sender
      es_itcpo            = lvs_itcpo
      ev_device           = lvf_device
    EXCEPTIONS
      otf_data_exception  = 1
      address_exception   = 2
      comm_type_exception = 3
      OTHERS              = 4.

  IF sy-subrc <> 0.
*         Implement suitable error handling here
    PERFORM protocol_update.
    retcode = 1.
  ENDIF.

*Before calling open_form - set device to printer which will not trigger email send
* and request OTF data by setting itcpo table - tdgetotf
  lvf_device = 'PRINTER'.
  lvs_itcpo-tdgetotf = 'X'.


* open form
  CALL FUNCTION 'OPEN_FORM'
    EXPORTING
*     APPLICATION    = 'TX'
      archive_index  = toa_dara
      archive_params = arc_params
      device         = lvf_device
      dialog         = ' '
      form           = tnapr-fonam
      language       = nast-spras
      options        = lvs_itcpo
      mail_sender    = lvs_sender
      mail_recipient = lvs_recipient
*     MAIL_APPL_OBJECT   = ' '
*     RAW_DATA_INTERFACE = '*'
*      IMPORTING
*     LANGUAGE       =
*     NEW_ARCHIVE_PARAMS =
*     RESULT         =
    EXCEPTIONS
      canceled       = 1
      device         = 2
      form           = 3
      options        = 4
      unclosed       = 5
      mail_options   = 6
      archive_error  = 7
      OTHERS         = 8.

  IF sy-subrc NE 0.
    CASE sy-subrc.
      WHEN 7.
        retcode = sy-subrc.
        syst-msgid = 'VN'.
        syst-msgno = '096'.
        syst-msgty = 'E'.
        syst-msgv1 = nast-kschl.
        syst-msgv2 = nast-kappl.
        PERFORM protocol_update.
      WHEN OTHERS.
        retcode = sy-subrc.
        PERFORM protocol_update.
    ENDCASE.
  ENDIF.

ENDFORM.

*&------------------------------------------------------------------*
*        Output Control Email-Enhancement - New Form close
*
*&------------------------------------------------------------------*

FORM form_close_new.

  DATA: i_itcpp LIKE itcpp,
        t_lines LIKE tline OCCURS 100 WITH HEADER LINE.


  CALL FUNCTION 'CLOSE_FORM'
    IMPORTING
      result  = i_itcpp
    TABLES
      otfdata = otf_data.

  SET COUNTRY space.

*calling FM to get otf data

  CALL FUNCTION 'SD_PDF_HELPER'
    EXPORTING
      is_otf_data         = otf_data
      is_nast             = nast
    IMPORTING
      es_pdf_file         = gv_pdf
    EXCEPTIONS
      otf_data_exception  = 1
      address_exception   = 2
      comm_type_exception = 3
      OTHERS              = 4.

  IF sy-subrc <> 0.
*         Implement suitable error handling here
    PERFORM protocol_update.
    retcode = 1.
  ENDIF.


  PERFORM send_data_int USING gv_address-smtp_addr gv_pdf.
  CHECK retcode = 0.


ENDFORM.


FORM  send_data_int USING
        uv_emailaddr TYPE adr6-smtp_addr
        us_pdf_file  TYPE fpcontent.


  DATA:

    ls_ztype        TYPE type_sd_s_map,
    lt_mail_text    TYPE bcsy_text,
    lt_adsmtp       TYPE TABLE OF adsmtp,
    lt_adfax        TYPE TABLE OF adfax,

    ls_adsmtp       TYPE adsmtp,
    ls_adfax        TYPE adfax,
    ls_address      TYPE sdprt_addr_s,

    lv_date(14)     TYPE c,
    lv_mail_subject TYPE so_obj_des,
    lv_send_to_all  TYPE os_boolean,
    ls_enh_flag     TYPE char1,
    ls_email_rcp    TYPE smtp_sd_sls_addr_s,
    ls_email_sendr  TYPE smtp_sd_sls_addr_s,
    lo_cl_bcs       TYPE REF TO cl_bcs,
    ls_file_attribs TYPE file_attributes_s,
    lv_dummy        TYPE char1,
    ls_item_vbdpl   TYPE vbdpl,
    lt_item_vbdpl   TYPE ops_rvaddn01_vbdpl_t_pdf,
    lv_vbeln        TYPE vbeln.

  CONSTANTS:
      lc_true      TYPE char1 VALUE 'X'.


  ls_email_rcp-email_addr = uv_emailaddr.
  DATA: lt_email_addr TYPE  adr6_tt.


  "select * from adr6 into table lt_email_addr where addrnumber = <gs_vbdka>-adrnr.

  IF go_badi_sd_sls_email IS BOUND.

    IF go_badi_mapper IS BOUND.

      IF go_badi_mapper->imps IS NOT INITIAL.


*Move all items to item table type for Badi use
        LOOP AT tvbdpl.
          CLEAR ls_item_vbdpl.
          ls_item_vbdpl = tvbdpl.
          APPEND ls_item_vbdpl TO lt_item_vbdpl.
        ENDLOOP.

        CALL BADI go_badi_mapper->set_dlv_to_generic
          EXPORTING
            is_header_details = vbdkl
            it_item_details   = lt_item_vbdpl.

*  Call BAdI for modify email details
        CALL BADI go_badi_sd_sls_email->set_mapper
          EXPORTING
            io_mapper = go_badi_mapper->imp.

        IF sy-subrc <> 0.
          RETURN.
        ENDIF.
      ENDIF.
    ENDIF.

    CALL BADI go_badi_sd_sls_email->modify_email
      EXPORTING
        iv_language      = nast-spras
        is_email_rcp     = ls_email_rcp
        is_email_sendr   = ls_email_sendr
      CHANGING
        io_cl_bcs        = lo_cl_bcs
      EXCEPTIONS
        exc_send_req_bcs = 1
        exc_address_bcs  = 2
        OTHERS           = 3.

    IF sy-subrc <> 0.
      MESSAGE e000(so) WITH vbdkl-tdname
                  INTO gv_dummy.
      PERFORM protocol_update.
      retcode = 99.
      RETURN.
    ENDIF.


* add Exceptions for process document method and check response.
    ls_file_attribs-pdf_file-pdf = us_pdf_file.
    lv_mail_subject = gv_fp_outputparams-covtitle.
    CALL BADI go_badi_sd_sls_email->process_document
      EXPORTING
        iv_language      = nast-spras
        iv_text          = lt_mail_text
        iv_subject       = lv_mail_subject
        is_file_attribs  = ls_file_attribs
      CHANGING
        io_cl_bcs        = lo_cl_bcs
      EXCEPTIONS
        exc_send_req_bcs = 1
        exc_document_bcs = 2
        OTHERS           = 3.

    IF sy-subrc <> 0.
      MESSAGE e000(so) WITH vbdkl-tdname
                 INTO gv_dummy.
      PERFORM protocol_update.
      retcode = 99.
      RETURN.

    ENDIF.

* Send Document
    CALL BADI go_badi_sd_sls_email->send_document
      EXPORTING
        io_cl_bcs        = lo_cl_bcs
      CHANGING
        ev_send_to_all   = lv_send_to_all
      EXCEPTIONS
        exc_send_req_bcs = 1
        OTHERS           = 2.

    IF sy-subrc <> 0.
      MESSAGE e000(so) WITH vbdkl-vgbel
                    INTO gv_dummy.
      PERFORM protocol_update.
      retcode = 99.
      RETURN.
    ENDIF.

    IF lv_send_to_all = lc_true.
*   Write success message into log
      MESSAGE i022(so)
              INTO gv_dummy.
      PERFORM protocol_update.
    ELSE.
*   Write fail message into log
      MESSAGE i023(so)
              WITH vbdkl-tdname
              INTO gv_dummy.
      PERFORM protocol_update.
    ENDIF.
  ENDIF.

ENDFORM.



*************************End of Note changes 1503297*********************************

*&------------------------------------------------------------------*
*        Output Control Email-Enhancement - Archiving
*
*&------------------------------------------------------------------*
FORM archive_data.
  FIELD-SYMBOLS: <archive_params> TYPE arc_params.
  FIELD-SYMBOLS: <index>.
  DATA: lv_arc TYPE string VALUE '(SAPLSTXC)ARC_PARAMS'.
  DATA: BEGIN OF archive_otf OCCURS 0.
      INCLUDE STRUCTURE itcoo.
  DATA: END OF archive_otf.

  DATA: archive_params TYPE arc_params.

  DATA: length(2) TYPE n.
  DATA: offset    TYPE i.
  DATA: new_form  TYPE abap_bool.

  CHECK ( gv_enhemail = abap_true ).
  CHECK ( otf_data[] IS NOT INITIAL ).

  CHECK ( ( nast-tdarmod = 2 ) OR ( nast-tdarmod = 3 ) ).

  ASSIGN (lv_arc) TO <archive_params>.
  CHECK sy-subrc = 0.
  archive_params = <archive_params>.
  IF <archive_params> IS ASSIGNED.
    UNASSIGN <archive_params>.
  ENDIF.

  LOOP AT otf_data ASSIGNING FIELD-SYMBOL(<otf>).
    archive_otf = <otf>.
    IF archive_otf-tdprintcom = 'MC'.
      IF new_form = abap_true.
*       next form starts, archive current form
        PERFORM otf_archive(saplstxc) TABLES archive_otf USING archive_params toa_dara.
        REFRESH archive_otf.
        archive_otf = <otf>.
        CLEAR: toa_dara, length, offset, new_form.
      ENDIF.
*     collect data from MC... cmds into TOA_DARA structure
      length = archive_otf-tdprintpar+1(2).     "length of MC_xx... data
      IF length > 0.
        ASSIGN toa_dara+offset(length) TO <index>.
        <index> = archive_otf-tdprintpar+3.
        ADD length TO offset.
      ENDIF.
      IF archive_otf-tdprintpar(1) = 'X'.
*       this is the end of MC... archive index data
        new_form = abap_true.
      ENDIF.
    ENDIF.
    APPEND archive_otf.
  ENDLOOP.
  IF new_form = abap_true.
*   archive last form
    PERFORM otf_archive(saplstxc) TABLES archive_otf USING archive_params toa_dara.
    FREE archive_otf.
    CLEAR: toa_dara, length, offset, new_form.
  ENDIF.
ENDFORM.

INCLUDE dor01_f01.

*&---------------------------------------------------------------------*
*&      Form  get_output_params
*&---------------------------------------------------------------------*
FORM get_output_params.

  DATA: ls_itcpo       TYPE   itcpo,
        lvf_device(30) TYPE   c,
        lvf_dialog(1)  TYPE   c   VALUE ' ',
        lvf_program    LIKE   sy-repid.

* reset return code
  retcode = 0.

* convert communication data
  MOVE-CORRESPONDING nast TO gs_intnast.
  MOVE sy-repid           TO gv_xprogramm.
  CALL FUNCTION 'CONVERT_COMM_TYPE_DATA'
    EXPORTING
      pi_comm_type              = gv_comm_type
      pi_comm_values            = gv_comm_values
      pi_country                = vbdkl-land1
      pi_screen                 = xscreen
      pi_repid                  = gv_xprogramm
      pi_snast                  = gs_intnast
    IMPORTING
      pe_itcpo                  = ls_itcpo
      pe_device                 = gv_fp_outputparams-device
      pe_mail_recipient         = gs_recipient
      pe_mail_sender            = gs_sender
    EXCEPTIONS
      comm_type_not_supported   = 1
      recipient_creation_failed = 2
      sender_creation_failed    = 3
      OTHERS                    = 4.
  IF sy-subrc <> 0.
    CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
      EXPORTING
        msg_arbgb = sy-msgid
        msg_nr    = sy-msgno
        msg_ty    = sy-msgty
        msg_v1    = sy-msgv1
        msg_v2    = sy-msgv2
        msg_v3    = sy-msgv3
        msg_v4    = sy-msgv4
      EXCEPTIONS
        OTHERS    = 1.
    retcode = 1.
    EXIT.
  ENDIF.

* if there is no communication type
  IF  gv_comm_type IS INITIAL.
*   set device
    gv_fp_outputparams-device = 'PRINTER'.
    IF ls_itcpo-tdpreview EQ  'X'.
      gv_fp_outputparams-nodialog =  'X'.
    ENDIF.
  ENDIF.

  gv_fp_outputparams-preview    = ls_itcpo-tdpreview.
  gv_fp_outputparams-dest       = ls_itcpo-tddest.
  gv_fp_outputparams-reqnew     = ls_itcpo-tdnewid.
  gv_fp_outputparams-reqimm     = ls_itcpo-tdimmed.
  gv_fp_outputparams-reqdel     = ls_itcpo-tddelete.
  gv_fp_outputparams-reqfinal   = ls_itcpo-tdfinal.
  gv_fp_outputparams-senddate   = ls_itcpo-tdsenddate.
  gv_fp_outputparams-sendtime   = ls_itcpo-tdsendtime.
  gv_fp_outputparams-schedule   = ls_itcpo-tdschedule.
  gv_fp_outputparams-copies     = ls_itcpo-tdcopies.
  gv_fp_outputparams-dataset    = ls_itcpo-tddataset.
  gv_fp_outputparams-suffix1    = ls_itcpo-tdsuffix1.
  gv_fp_outputparams-suffix2    = ls_itcpo-tdsuffix2.
  gv_fp_outputparams-covtitle   = ls_itcpo-tdcovtitle.
  gv_fp_outputparams-cover      = ls_itcpo-tdcover.
  gv_fp_outputparams-receiver   = ls_itcpo-tdreceiver.
  gv_fp_outputparams-division   = ls_itcpo-tddivision.
  gv_fp_outputparams-lifetime   = ls_itcpo-tdlifetime.
  gv_fp_outputparams-authority  = ls_itcpo-tdautority.
  gv_fp_outputparams-rqposname  = ls_itcpo-rqposname.
  gv_fp_outputparams-arcmode    = ls_itcpo-tdarmod.
  gv_fp_outputparams-noarmch    = ls_itcpo-tdnoarmch.
  gv_fp_outputparams-title      = ls_itcpo-tdtitle.
  gv_fp_outputparams-nopreview  = ls_itcpo-tdnoprev.
  gv_fp_outputparams-noprint    = ls_itcpo-tdnoprint.


ENDFORM.                    " get_output_params