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.
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
//
Перем ТаблицаДокументов, ОбязательныеАтрибуты, АтрибутыДокументов, ВидыОпераций;
Перем НачДатаВыгрузки, КонДатаВыгрузки;
Перем ЗагрРасчетныеСчета, ЗагрВидыДокументов, ЗагрДокументы;
Перем НачДатаЗагрузки, КонДатаЗагрузки;
Перем ВидыДокументовДляПоиска;
Функция ИзменитьАтрибут(Объект, Имя, Значение) Далее
Процедура ЗаписатьДокумент(Объект) Далее
//******************************************************************************
// ПолучитьИНН(ИННКПП)
//
// Параметры:
// ИННКПП - строка, написанные вместе ИНН и КПП юр лица.
//
// Возвращаемое значение:
// значение ИНН юр лица.
//
// Описание:
// Функция возращает ИНН из переданной строки
// ИНН - первые 10 цифр для Юр Лиц
// первые 12 цифр для Физ Лиц
//
Функция ПолучитьИНН(ИННКПП)
Стр = СокрЛП(ИННКПП);
Если СтрДлина(Стр) = 10 Тогда // только ИНН Юр Лица
Возврат Стр;
ИначеЕсли СтрДлина(Стр) = 12 Тогда // только ИНН ФизЛица
Возврат Стр;
Иначе
РазделительИННКПП = Сред(Стр, 11 , 1 );
Если Найти("1234567890", РазделительИННКПП) = 0 Тогда
Возврат Лев(Стр, 10 );
Иначе
Возврат Лев(ИННКПП, 12 );
КонецЕсли;
КонецЕсли;
КонецФункции // ПолучитьИНН()
//******************************************************************************
// ПолучитьВидОплатыДокумента(Докум)
//
// Параметры:
// Докум - Документ, вид оплаты по которому необходимо получить.
//
// Возвращаемое значение:
// Строка, цифровое значение вида оплаты документа в соответсвии с "2-П".
//
// Описание:
// Функция возращает цифровое значение вида оплаты документа в соответсвии с "2-П".
//
Функция ПолучитьВидОплатыДокумента(Докум)
Если Докум.Выбран() = 0 Тогда
Возврат "00";
КонецЕсли;
Если Докум.Вид() = "ЗаявлениеНаАккредитив" Тогда
Возврат "08";
ИначеЕсли Докум.Вид() = "ИнкассовоеПоручение" Тогда
Возврат "06";
ИначеЕсли Докум.Вид() = "ПлатежноеТребование" Тогда
Возврат "02";
КонецЕсли;
Возврат "01";
КонецФункции // ПолучитьВидОплатыДокумента()
//******************************************************************************
// ПустоеЗначениеНалоговогоРеквизита(Реквизит)
//
// Параметры:
// Реквизит - значение для проверки.
//
// Возвращаемое значение:
// 1 - пустое значение
// 0 - не пустое.
//
// Описание:
// Функция проверяет налоговый реквизит на предмет
// содержания пустого значения в нем
//
Функция ПустоеЗначениеНалоговогоРеквизита(Реквизит)
Если ПустоеЗначение(Реквизит) = 1 Тогда
Возврат 1 ;
ИначеЕсли СокрЛП(Строка(Реквизит)) = "0" Тогда
Возврат 1 ;
Иначе
Возврат ПустаяСтрока(СокрЛП(СтрЗаменить(Реквизит, ".", "")));
КонецЕсли;
КонецФункции // ПустоеЗначениеНалоговогоРеквизита()
//******************************************************************************
// ПолучитьПредставлениеНалоговогоРеквизита(Реквизит)
//
// Параметры:
// ИННКПП - строка, написанные вместе ИНН и КПП юр лица.
//
// Возвращаемое значение:
// значение ИНН юр лица.
//
// Описание:
// Функция возращает ИНН из переданной строки
// ИНН - первые 10 цифр для Юр Лиц
// первые 12 цифр для Физ Лиц
//
Функция ПолучитьПредставлениеНалоговогоРеквизита(Реквизит)
Если ПустоеЗначениеНалоговогоРеквизита(Реквизит) = 1 Тогда
Возврат "0";
Иначе
Если ТипЗначенияСтр(Реквизит) = "Дата" Тогда
Возврат Формат(Реквизит, "ДДДММГГГГ");
Иначе
Возврат Строка(Реквизит);
КонецЕсли;
КонецЕсли;
КонецФункции // ПолучитьПредставлениеНалоговогоРеквизита()
////////////////////////////////////////////////////////////////////////////////
// ИНДИВИДУАЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
// Настраиваются под конкретную конфигурацию
//
//******************************************************************************
// ПолучитьДанные(Параметр, Документ)
//
// Параметры:
// Параметр - строка, вид вычисляемого значения.
// Документ - документ – документ на основании которго вычисляется значение.
//
// Возвращаемое значение:
// значение данного параметра.
//
// Описание:
// Функция вычисляет значение по переданному параметру.
// Например: 1 . Реквизиты собственной организации в конфигурации "Бухгалтерский учет"
// определяются на основании констант, а в Комплексной конфигурации
// на основании общего реквизита документов "Фирма".
// 2 . Номер документа в конфигурации "Бухгалтерский учет" имеет тип "Числовой",
// а в Комплексной конфигурации "Текстовый" и формируется при этом с префиксом
// по фирме, в связи с этим в комплексной конфигурации существует специальная
// функция "глНомерНаПечать()" которая возвращает Номер документа без префикса.
//
Функция ПолучитьДанные(Параметр, Документ)
Результат = "";
Если Параметр = "НазваниеОрганизации" Тогда
Если Метаданные.Константа("НазваниеОрганизации").Выбран() = 1 Тогда
Результат = Константа.НазваниеОрганизации;
КонецЕсли;
ИначеЕсли Параметр = "Организация" Тогда
Если Метаданные.Константа("НазваниеОрганизации").Выбран() = 1 Тогда
Результат = Константа.НазваниеОрганизации;
КонецЕсли;
ИначеЕсли Параметр = "ИННОрганизации" Тогда
глПлатежныеРеквизиты(Документ.РасчетныйСчет,,,,,,Результат,, 2 );
ИначеЕсли Параметр = "КППОрганизации" Тогда
глПлатежныеРеквизиты(Документ.РасчетныйСчет,,,,,,,Результат, 2 );
Если (ПустоеЗначение(Документ.РасчетныйСчет.Корреспондент) = 1 )
или (ПустаяСтрока(Результат) = 1 ) Тогда
Результат = ?(Документ.ПеречислениеНалога= 1 ,?(ПустаяСтрока(Результат)= 1 ,"0", Результат),"");
КонецЕсли;
ИначеЕсли Параметр = "НазваниеКонтрагента" Тогда
Результат = Документ.Контрагент.ПолнНаименование;
ИначеЕсли Параметр = "ИННКонтрагента" Тогда
глПлатежныеРеквизиты(Документ.СчетКонтрагента,,,,,,Результат,, 2 );
ИначеЕсли Параметр = "КППКонтрагента" Тогда
глПлатежныеРеквизиты(Документ.СчетКонтрагента,,,,,,,Результат, 2 );
Если (ПустоеЗначение(Документ.СчетКонтрагента.Корреспондент) = 1 )
или (ПустаяСтрока(Результат) = 1 ) Тогда
Результат = ?(Документ.ПеречислениеНалога= 1 ,?(ПустаяСтрока(Результат)= 1 ,"0", Результат),"");
КонецЕсли;
ИначеЕсли Параметр = "БанковскийСчетОрганизации" Тогда
Результат = Документ.РасчетныйСчет;
ИначеЕсли Параметр = "Контрагент" Тогда
Результат = Документ.Контрагент;
ИначеЕсли Параметр = "БанковскийСчетКонтрагента" Тогда
Результат = Документ.СчетКонтрагента;
ИначеЕсли Параметр = "НомерДокумента" Тогда
Результат = глПреобразоватьНомерДок(Документ.НомерДок, 0 , 0 );
КонецЕсли;
Возврат Результат;
КонецФункции // ПолучитьДанные()
//******************************************************************************
// ПровестиДокументПоСчету(Документ, Счет, ДатаОперации='00.00.0000', Приход= 0 , Расход= 0 )
//
// Параметры:
// Документ - Документ, документ на основании которого формируется строка выписки.
// Счет - Справочник.БанковскиеСчета, по которому формируется строка выписки.
// ДатаОперации - Дата, дата на которую формируется строка выписки.
// Приход - Число, сумма операции по банку, приход на счет.
// Расход - Число, сумма операции по банку, расход со счета.
//
// Описание:
// В данной процедуре, на основании загруженного платежного документа или документа
// "ОперацияПоРасчСчету", формируется документ "Выписка".
//
Процедура ПровестиДокументПоСчету(Документ, Счет, ДатаОперации='00.00.0000', Приход= 0 , Расход= 0 )
Если ПустоеЗначение(Счет)= 1 Тогда Возврат; КонецЕсли;
Объект=СоздатьОбъект("Документ");
Объект.ВыбратьПодчиненныеДокументы(, , Документ);
Пока Объект.ПолучитьДокумент()= 1 Цикл
Если Объект.Вид()<>"Выписка" Тогда Продолжить;
ИначеЕсли Объект.БанковскийСчет<>Счет Тогда Продолжить;
КонецЕсли;
Замены= 0 ;
Объект.ВыбратьСтроки();
Пока Объект.ПолучитьСтроку()= 1 Цикл
Если Объект.ПервичныйДокумент<>Документ Тогда
ИначеЕсли Объект.ДатаДок<>ДатаОперации Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "Приход", 0 );
Замены=Замены+ИзменитьАтрибут(Объект, "Расход", 0 );
Иначе
Замены=Замены+ИзменитьАтрибут(Объект, "Приход", Мин(Объект.Приход, Приход));
Замены=Замены+ИзменитьАтрибут(Объект, "Расход", Мин(Объект.Расход, Расход));
Приход=Приход-Объект.Приход;
Расход=Расход-Объект.Расход;
КонецЕсли;
КонецЦикла;
Если 0 <Замены Тогда
ЗаписатьДокумент(Объект);
КонецЕсли;
КонецЦикла;
Если ПустоеЗначение(ДатаОперации)= 1 Тогда Возврат; КонецЕсли;
Если (Приход= 0 ) и (Расход= 0 ) Тогда Возврат; КонецЕсли;
Объект=СоздатьОбъект("Документ.Выписка");
Объект.ВыбратьДокументы(ДатаОперации, ДатаОперации);
Пока Объект.ПолучитьДокумент()= 1 Цикл
Если Объект.БанковскийСчет=Счет Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Объект.Выбран()= 0 Тогда
Объект.Новый();
Объект.ДатаДок=ДатаОперации;
Объект.БанковскийСчет=Счет;
Сообщить("Создан документ: "+Объект.Вид()+" "+Объект.НомерДок+" ("+Объект.ДатаДок+")", " ");
КонецЕсли;
Объект.НоваяСтрока();
Объект.ПервичныйДокумент = Документ;
глЗаполнитьСтрокуВыпискиПоПлатежномуДокументу(Объект, Документ, Приход + Расход);
ЗаписатьДокумент(Объект);
КонецПроцедуры // ПровестиДокументПоСчету()
//******************************************************************************
// СинхронизироватьДокументыПоСчетам()
//
// Описание:
// Процедура осуществляет синхронизацию документов "Выписка" с загруженными
// платежными документами и документами "ОперацияПоРасчСчету".
//
Процедура СинхронизироватьДокументыПоСчетам()
Объект=СоздатьОбъект("Документ.Выписка");
Объект.ВыбратьДокументы(НачДатаЗагрузки, КонДатаЗагрузки);
Пока Объект.ПолучитьДокумент()= 1 Цикл
Если Объект.БанковскийСчет.Выбран()= 0 Тогда
Продолжить;
ИначеЕсли ЗагрРасчетныеСчета.Принадлежит(Объект.БанковскийСчет.Номер)= 0 Тогда
Продолжить;
КонецЕсли;
Замены= 0 ;
Объект.ВыбратьСтроки();
Пока Объект.ПолучитьСтроку()= 1 Цикл
Если ЗагрДокументы.Принадлежит(Объект.ПервичныйДокумент)= 0 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "Приход", 0 );
Замены=Замены+ИзменитьАтрибут(Объект, "Расход", 0 );
КонецЕсли;
КонецЦикла;
Если 0 <Замены Тогда
ЗаписатьДокумент(Объект);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // СинхронизироватьДокументыПоСчетам()
////////////////////////////////////////////////////////////////////////////////
// ОБЩИЕ ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//
//******************************************************************************
// ИзменитьАтрибут(Объект, Имя, Значение)
//
// Параметры:
// Объект - справочник, документ, операция
// Имя - строка, идентификатор атрибута справочника, документа, операции.
// Значение - неопределенный – новое значение атрибута.
//
// Возвращаемое значение:
// 1 - атрибут изменен,
// 0 - атрибут не изменялся
//
// Описание:
// Функция устанавливает новое значение атрибута объекта, если изменяется атрибут
// существующего объекта выдается сообщение.
//
Функция ИзменитьАтрибут(Объект, Имя, Значение)
Атрибут=Объект.ПолучитьАтрибут(Имя);
Если ТипЗначенияСтр(Значение)="Строка" Тогда
Атрибут=СокрП(Атрибут); Значение=СокрП(Значение);
КонецЕсли;
Если Атрибут=Значение Тогда
Возврат( 0 );
КонецЕсли;
Объект.УстановитьАтрибут(Имя, Значение);
Если Объект.ТекущийДокумент().Выбран()= 1 Тогда
Стр=?( 0 <Объект.НомерСтроки, ", строка "+Объект.НомерСтроки, "");
Сообщить("Изменен атрибут документа: "+Объект+Стр+": "+Имя+" = "+Значение, "!");
КонецЕсли;
Возврат( 1 );
КонецФункции // ИзменитьАтрибут()
//******************************************************************************
// ИзменитьНалоговыйАтрибут(Объект, Имя, Значение)
//
// Параметры:
// Объект - справочник, документ, операция
// Имя - строка, идентификатор атрибута справочника, документа, операции.
// Значение - неопределенный – новое значение атрибута.
//
// Возвращаемое значение:
// 1 - атрибут изменен,
// 0 - атрибут не изменялся
//
// Описание:
// Функция устанавливает новое значение атрибута объекта, если изменяется атрибут
// существующего объекта выдается сообщение.
//
Функция ИзменитьНалоговыйАтрибут(Объект, Имя, Значение)
Если (ПустоеЗначениеНалоговогоРеквизита(Объект.ПолучитьАтрибут(Имя)) = 1 )
И (ПустоеЗначениеНалоговогоРеквизита(Объект.ПолучитьАтрибут(Имя)) = 1 ) Тогда
Возврат 0 ;
КонецЕсли;
Возврат ИзменитьАтрибут(Объект, Имя, Значение);
КонецФункции // ИзменитьНалоговыйАтрибут()
//******************************************************************************
// УдалитьДокумент(Объект)
//
// Параметры:
// Объект - документ
//
// Описание:
// Пытается пометить документ на удаление.
//
Процедура УдалитьДокумент(Объект)
Попытка
Если Объект.ПометкаУдаления()= 0 Тогда
Объект.Удалить( 0 );
Сообщить("Помечен на удаление документ: "+Объект, " ");
КонецЕсли;
Исключение
Сообщить("Неудачная попытка удаления документа: "+Объект+": "+ОписаниеОшибки(), "!!!");
КонецПопытки;
КонецПроцедуры // УдалитьДокумент()
//******************************************************************************
// СнятьПометкуУдаления(Объект)
//
// Параметры:
// Объект - документ
//
// Описание:
// Пытается снять пометку удаления документа.
//
Процедура СнятьПометкуУдаления(Объект)
Попытка
Если Объект.ПометкаУдаления()= 1 Тогда
Объект.СнятьПометкуУдаления();
Сообщить("Отменено удаление документа: "+Объект, " ");
КонецЕсли;
Исключение
Сообщить("Неудачная попытка отмены удаления: "+Объект+": "+ОписаниеОшибки(), "!!!");
КонецПопытки;
КонецПроцедуры // СнятьПометкуУдаления()
//******************************************************************************
// ЗаписатьДокумент(Объект)
//
// Параметры:
// Объект - документ
//
// Возвращаемое значение:
// 1 - в случае успешной попытки записи,
// 0 - иначе
//
// Описание:
// Пытается записать документ.
//
Процедура ЗаписатьДокумент(Объект)
Попытка
Объект.Записать();
Сообщить("Записан документ: "+Объект, " ");
Если Объект.ПометкаУдаления()= 1 Тогда
Объект.СнятьПометкуУдаления();
ИначеЕсли Объект.Проведен()= 1 Тогда
Объект.СделатьНеПроведенным();
КонецЕсли;
Исключение
Сообщить("Неудачная попытка записи документа: "+Объект+": "+ОписаниеОшибки(), "!!!");
КонецПопытки;
КонецПроцедуры // ЗаписатьДокумент()
//******************************************************************************
// ЗаполнитьРасчетныеСчета()
//
// Описание:
// Процедура формирует список банковских счетов, по которым выгружаются документы.
//
Процедура ЗаполнитьРасчетныеСчета()
Список=СоздатьОбъект("СписокЗначений");
БанкСчет=СоздатьОбъект("Справочник.БанковскиеСчета");
БанкСчет.ВыбратьЭлементы( 0 ); К= 0 ;
Пока 1 =БанкСчет.ПолучитьЭлемент() Цикл
Если Метаданные.Справочник("БанковскиеСчета").Владелец.Выбран() = 1 Тогда
Список.ДобавитьЗначение(БанкСчет.ТекущийЭлемент(), СокрЛП(БанкСчет) + " (" + СокрЛП(БанкСчет.Владелец) + ")");
Иначе
Список.ДобавитьЗначение(БанкСчет.ТекущийЭлемент(), СокрЛП(БанкСчет));
КонецЕсли;
К=К+ 1 ;
Н=ВыгрРасчетныеСчета.НайтиЗначение(БанкСчет.ТекущийЭлемент());
Если 0 <Н Тогда
Список.Пометка(К, ВыгрРасчетныеСчета.Пометка(Н));
КонецЕсли;
КонецЦикла;
Список.Выгрузить(ВыгрРасчетныеСчета);
КонецПроцедуры // ЗаполнитьРасчетныеСчета()
//******************************************************************************
// ЗаполнитьВыгрВидыДок()
//
// Описание:
// Процедура формирует список видов выгружаемых платежных документов.
//
Процедура ЗаполнитьВыгрВидыДок()
Список=СоздатьОбъект("СписокЗначений");
ВидыДокументовДляПоиска = СоздатьОбъект("СписокЗначений");
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ВидыДокументов");
Таб.Вывести();
Для Индекс = 1 По Таб.ВысотаТаблицы() Цикл
Если Метаданные.Документ(СокрЛП(Таб.Область(Индекс, 1 ).Текст)).Выбран() = 1 Тогда
Список.ДобавитьЗначение(СокрЛП(Таб.Область(Индекс, 1 ).Текст), СокрЛП(Таб.Область(Индекс, 2 ).Текст));
ВидыДокументовДляПоиска.ДобавитьЗначение(СокрЛП(Таб.Область(Индекс, 1 ).Текст), Врег(СокрЛП(Таб.Область(Индекс, 2 ).Текст)));
КонецЕсли;
КонецЦикла;
Для К= 1 По Список.РазмерСписка() Цикл
Н=ВыгрВидыДокументов.НайтиЗначение(Список.ПолучитьЗначение(К));
Если 0 <Н Тогда Список.Пометка(К, ВыгрВидыДокументов.Пометка(Н)); КонецЕсли;
КонецЦикла;
Список.Выгрузить(ВыгрВидыДокументов);
КонецПроцедуры // ЗаполнитьВыгрВидыДок()
//******************************************************************************
// КаталогИмяФайла(ПолноеИмяФайла, Каталог, Файл)
//
// Параметры:
// ПолноеИмяФайла - строка: каталог и имя файла.
// Каталог - если передан, в него будет возвращено имя каталога.
// Файл - если передан, в него будет возвращено имя файла.
//
// Возвращаемое значение:
// 0 - если указанного каталога не существует
// 1 - если указанный каталог существует
//
// Описание:
// Если каталог не существует, то пользователю предлагается его создать.
//
Функция КаталогИмяФайла(ПолноеИмяФайла, Каталог, Файл)
Каталог=""; Файл=ПолноеИмяФайла; Разд=Найти(Файл, "\");
Пока 0 <Разд Цикл
Каталог=Каталог+Лев(Файл, Разд); Файл=Сред(Файл, Разд+ 1 ); Разд=Найти(Файл, "\");
КонецЦикла;
Каталог=Каталог+".";
Если СтрДлина(Каталог)< 4 Тогда
ИначеЕсли ФС.СуществуетФайл(Каталог)= 1 Тогда
ИначеЕсли "Да"=Вопрос(Каталог+"
|Указанный каталог не существует! Создать?","Да+Нет") Тогда
ФС.СоздатьКаталог(Каталог);
Иначе
Каталог=""; Возврат( 0 );
КонецЕсли;
Возврат( 1 );
КонецФункции // КаталогИмяФайла()
//******************************************************************************
// РазбитьСтрокуНаСтроки(ОднаСтрока)
//
// Параметры:
// ОднаСтрока - строка, строка разбиваемая на многострочную.
//
// Возвращаемое значение:
// строка - многострочная строка.
//
// Описание:
// Функция разбивает строку на несколько строк максимальной длиной 50 знаков.
//
Функция РазбитьСтрокуНаСтроки(ОднаСтрока)
МинДлина= 40 ; МаксДлина= 50 ;
МногоСтрок=""; ДлинаСтроки= 0 ;
Пока 0 <СтрДлина(ОднаСтрока) Цикл
ДлинаСлова=Найти(ОднаСтрока, " ");
Если ДлинаСлова= 0 Тогда
ДлинаСлова=СтрДлина(ОднаСтрока);
КонецЕсли;
Если ДлинаСтроки+ДлинаСлова<=МаксДлина Тогда
МногоСтрок=МногоСтрок+Лев(ОднаСтрока, ДлинаСлова);
ОднаСтрока=Сред(ОднаСтрока, ДлинаСлова+ 1 );
ДлинаСтроки=ДлинаСтроки+ДлинаСлова;
Продолжить;
ИначеЕсли ДлинаСтроки<МинДлина Тогда
МногоСтрок=МногоСтрок+Лев(ОднаСтрока, МаксДлина-ДлинаСтроки);
ОднаСтрока=Сред(ОднаСтрока, МаксДлина-ДлинаСтроки+ 1 );
КонецЕсли;
Если 0 <СтрДлина(ОднаСтрока) Тогда
МногоСтрок=МногоСтрок+РазделительСтрок;
КонецЕсли;
ДлинаСтроки= 0 ;
КонецЦикла;
Возврат(МногоСтрок);
КонецФункции // РазбитьСтрокуНаСтроки()
//******************************************************************************
// ДоступностьКнопок()
//
// Возвращаемое значение:
// Нет.
//
// Вызывается из формул элементов диалога:
// Невидимый статик "ДоступностьКнопок()" на слое "Основной".
//
// Описание:
// Определяет доступность кнопок "кнЗагрузить", "кнПросмотрЗагрузки" и "кнПросмотрВыгрузки".
//
Функция ДоступностьКнопок()
ЕстьФайл=ФС.СуществуетФайл(ИмяФайлаВыгрузки);
Форма.кнПросмотрВыгрузки.Доступность(ЕстьФайл);
ЕстьФайл=ФС.СуществуетФайл(ИмяФайлаЗагрузки);
Форма.кнЗагрузить.Доступность(ЕстьФайл);
Форма.кнПросмотрЗагрузки.Доступность(ЕстьФайл);
КонецФункции // ДоступностьКнопок()
//******************************************************************************
// ТекстФайла(ИмяФайла, Заголовок = "")
//
// Параметры:
// ИмяФайла - строка, имя текстового файла.
// Заголовок - строка, заголовок окна редактирования текста.
//
// Возвращаемое значение:
// текст - объект вида "Текст", файла обмена данными.
//
// Вызывается из формул элементов диалога:
// Кнопка "кнПросмотрВыгрузки", "кнПросмотрЗагрузки".
//
// Описание:
// Процедура открывает текстовый файл обмена данными, в случае если задан заголовок
// (по кнопкам "Просмотр") файл открывается в окне редактирования.
//
Функция ТекстФайла(ИмяФайла, Заголовок = "")
ЗагрРасчетныеСчета.УдалитьВсе(); ЗагрВидыДокументов.УдалитьВсе();
Если ФС.СуществуетФайл(ИмяФайла)= 0 Тогда
Предупреждение("Указанный файл не существует!", 5 );
Возврат(ПолучитьПустоеЗначение());
КонецЕсли;
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(Кодировка.ПолучитьЗначение(Кодировка.ТекущаяСтрока()));
Текст.Открыть(ИмяФайла);
Если Текст.КоличествоСтрок()< 1 Тогда
Предупреждение("Указанный файл не является файлом обмена!", 5 );
Возврат(ПолучитьПустоеЗначение());
ИначеЕсли СокрЛП(Текст.ПолучитьСтроку( 1 ))<>"1CClientBankExchange" Тогда
Предупреждение("Указанный файл не является файлом обмена!", 5 );
Возврат(ПолучитьПустоеЗначение());
КонецЕсли;
Если ПустаяСтрока(Заголовок) = 0 Тогда
Текст.Показать(Заголовок + ":", ИмяФайла);
КонецЕсли;
Возврат(Текст);
КонецФункции // ТекстФайла()
//******************************************************************************
// Печать()
//
// Описание:
// Процедура осуществляет вывод печатной формы отчета о загрузке данных из
// системы "Клиент банка".
//
Процедура Печать()
Отчет=СоздатьОбъект("Таблица");
Отчет.ИсходнаяТаблица("Отчет");
Отчет.ВывестиСекцию("Шапка");
Для Индекс= 1 По ЗагрДокументы.РазмерСписка() Цикл
Документ=ЗагрДокументы.ПолучитьЗначение(Индекс);
Если ПустоеЗначение(Документ)= 0 Тогда
Если (Документ.Вид()="ОперацияПоРасчСчету") Тогда
Плательщик=Документ.Плательщик;
ПлательщикСчет=Документ.ПлательщикСчет;
Получатель=Документ.Получатель;
ПолучательСчет=Документ.ПолучательСчет;
Иначе
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ВидыДокументов");
Таб.Вывести();
Для Номер = 1 По Таб.ВысотаТаблицы() Цикл
Если Врег(СокрЛП(Таб.Область(Номер, 1 ).Текст)) = Врег(Документ.Вид()) Тогда
Корреспондент = СокрЛП(Таб.Область(Номер, 3 ).Текст);
Прервать;
КонецЕсли;
КонецЦикла;
Если Корреспондент = "Получатель" Тогда
Плательщик = ПолучитьДанные("Организация", Документ);
ПлательщикСчет = ПолучитьДанные("БанковскийСчетОрганизации", Документ);
Получатель = ПолучитьДанные("Контрагент", Документ);
ПолучательСчет = ПолучитьДанные("БанковскийСчетКонтрагента", Документ);
ИначеЕсли Корреспондент = "Плательщик" Тогда
Получатель = ПолучитьДанные("Организация", Документ);
ПолучательСчет = ПолучитьДанные("БанковскийСчетОрганизации", Документ);
Плательщик = ПолучитьДанные("Контрагент", Документ);
ПлательщикСчет = ПолучитьДанные("БанковскийСчетКонтрагента", Документ);
КонецЕсли;
КонецЕсли;
Сумма=Документ.Сумма;
Отчет.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
Отчет.ВывестиСекцию("Подвал");
Отчет.ТолькоПросмотр( 1 );
Отчет.Показать("Отчет","");
КонецПроцедуры // Печать()
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ЭКСПОРТА (ВЫГРУЗКИ)
//
//******************************************************************************
// ВыгрузитьПлатежныеРеквизиты(Счет, Слово)
//
// Параметры:
// Счет - справочник, элемент справочника "Банковские счета" или "Расчетные счета".
// Слово - строка, "Плательщик" или "Получатель" часть идентификатора колонки таблицы.
//
// Описание:
// Процедура выгружает поля документов, представляющие платежные реквизиты
// собственной организации или контрагента, в таблицу передаваемых документов.
//
Процедура ВыгрузитьПлатежныеРеквизиты(Счет, Слово)
Стр=ТаблицаДокументов.НомерСтроки;
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"Счет", Счет.Номер);
Если Счет.БанкДляРасчетов.Выбран()= 1 Тогда
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"2", Счет.Номер);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"3", Счет.БанкОрганизации.Наименование);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"4", Счет.БанкОрганизации.Местонахождение);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"РасчСчет", Счет.БанкОрганизации.КоррСчет);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"Банк1", Счет.БанкДляРасчетов.Наименование);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"Банк2", Счет.БанкДляРасчетов.Местонахождение);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"БИК", Счет.БанкДляРасчетов.Код);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"Корсчет", Счет.БанкДляРасчетов.КоррСчет);
Иначе
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"РасчСчет", Счет.Номер);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"Банк1", Счет.БанкОрганизации.Наименование);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"Банк2", Счет.БанкОрганизации.Местонахождение);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"БИК", Счет.БанкОрганизации.Код);
ТаблицаДокументов.УстановитьЗначение(Стр, Слово+"Корсчет", Счет.БанкОрганизации.КоррСчет);
КонецЕсли;
Текст = "";
глПлатежныеРеквизиты(Счет, Текст);
Текст=СтрЗаменить(Текст, РазделительСтрок, " ");
ТаблицаДокументов.УстановитьЗначение(Стр, Слово, Текст);
КонецПроцедуры // ВыгрузитьПлатежныеРеквизиты()
//******************************************************************************
// ВыгрузитьПлатежныйДокумент(Документ)
//
// Параметры:
// Документ - документ – выгружаемый документ.
//
// Описание:
// Процедура осуществляет выгрузку значений атрибутов переданного документа в
// таблицу выгружаемых документов.
//
Процедура ВыгрузитьПлатежныйДокумент(Документ)
Перем ВидДокумента, Корреспондент;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ВидыДокументов");
Таб.Вывести();
Для Индекс = 1 По Таб.ВысотаТаблицы() Цикл
Если Врег(СокрЛП(Таб.Область(Индекс, 1 ).Текст)) = Врег(Документ.Вид()) Тогда
ВидДокумента = СокрЛП(Таб.Область(Индекс, 2 ).Текст);
Корреспондент = СокрЛП(Таб.Область(Индекс, 3 ).Текст);
Прервать;
КонецЕсли;
КонецЦикла;
Если Корреспондент = "Получатель" Тогда
Организация="Плательщик";
ИначеЕсли Корреспондент = "Плательщик" Тогда
Организация="Получатель";
Иначе
Сообщить("ВыгрузитьДокументы(): выгрузка не описана");
Возврат;
КонецЕсли;
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("СтатусСоставителяПлДок").Выбран() = 1 Тогда
СтатусСоставителяПлДок = "<" + Документ.СтатусСоставителяПлДок + ">";
Иначе
СтатусСоставителяПлДок = "<>";
КонецЕсли;
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("ПеречислениеНалога").Выбран() = 1 Тогда
ПеречислениеНалога = Документ.ПеречислениеНалога;
Иначе
ПеречислениеНалога = 0 ;
КонецЕсли;
Поз=ВыгрРасчетныеСчета.НайтиЗначение(ПолучитьДанные("БанковскийСчетОрганизации", Документ));
Если Поз= 0 Тогда
Сообщить("Не выбран расчетный счет: "+Документ+" - документ не выгружен", "!!");
Возврат;
ИначеЕсли ВыгрРасчетныеСчета.Пометка(Поз)= 0 Тогда
Возврат;
ИначеЕсли ПолучитьДанные("Контрагент", Документ).Выбран()= 0 Тогда
Сообщить("Не выбран контрагент: "+Документ+" - документ не выгружен", "!!");
Возврат;
ИначеЕсли ПолучитьДанные("БанковскийСчетКонтрагента", Документ).Выбран()= 0 Тогда
Сообщить("Не выбран счет контрагента: "+Документ+" - документ не выгружен", "!!");
Возврат;
ИначеЕсли (Найти("<01><02><03><04><05><06><07><08>", СтатусСоставителяПлДок) = 0 ) И (ПеречислениеНалога = 1 ) Тогда
Сообщить("В статусе составителя указано недопустимое значение """ + СтатусСоставителяПлДок + """: "+Документ+" - документ не выгружен", "!!");
Возврат;
КонецЕсли;
ТаблицаДокументов.НоваяСтрока(); Стр=ТаблицаДокументов.НомерСтроки;
// шапка платежного документа
ТаблицаДокументов.СекцияДокумент = ВидДокумента;
ТаблицаДокументов.Номер = ПолучитьДанные("НомерДокумента", Документ.ТекущийДокумент());
ТаблицаДокументов.Дата = Документ.ДатаДок;
ТаблицаДокументов.Сумма = Документ.Сумма;
// реквизиты организации
ТаблицаДокументов.УстановитьЗначение(Стр, Организация + "ИНН", ПолучитьДанные("ИННОрганизации", Документ));
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("КППплательщика").Выбран() = 1 Тогда
ТаблицаДокументов.УстановитьЗначение(Стр, Организация + "КПП", Документ.КППплательщика);
КонецЕсли;
ТаблицаДокументов.УстановитьЗначение(Стр, Организация+"1", ПолучитьДанные("НазваниеОрганизации", Документ));
ВыгрузитьПлатежныеРеквизиты(ПолучитьДанные("БанковскийСчетОрганизации", Документ), Организация);
// реквизиты контрагента
ТаблицаДокументов.УстановитьЗначение(Стр, Корреспондент + "ИНН", ПолучитьДанные("ИННКонтрагента", Документ));
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("КППполучателя").Выбран() = 1 Тогда
ТаблицаДокументов.УстановитьЗначение(Стр, Корреспондент + "КПП", Документ.КППполучателя);
КонецЕсли;
ТаблицаДокументов.УстановитьЗначение(Стр, Корреспондент + "1", ПолучитьДанные("НазваниеКонтрагента", Документ));
ВыгрузитьПлатежныеРеквизиты(ПолучитьДанные("БанковскийСчетКонтрагента", Документ), Корреспондент);
// реквизиты платежа
ТаблицаДокументов.ВидПлатежа=Строка(Документ.ВидПлатежа);
ТаблицаДокументов.ВидОплаты=ПолучитьВидОплатыДокумента(Документ);
ТаблицаДокументов.СрокПлатежа=Документ.СрокПлатежа;
// реквизиты налогового платежа
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("ПеречислениеНалога").Выбран() = 1 Тогда
Если (Документ.ПеречислениеНалога > 0 ) Тогда
ТаблицаДокументов.СтатусСоставителя = ПолучитьПредставлениеНалоговогоРеквизита(Документ.СтатусСоставителяПлДок);
ТаблицаДокументов.ПоказательКБК = ПолучитьПредставлениеНалоговогоРеквизита(Документ.КодБК);
ТаблицаДокументов.ОКАТО = ПолучитьПредставлениеНалоговогоРеквизита(Документ.КодОКАТО);
ТаблицаДокументов.ПоказательОснования = ПолучитьПредставлениеНалоговогоРеквизита(Документ.ПоказательОснования);
ТаблицаДокументов.ПоказательПериода = ПолучитьПредставлениеНалоговогоРеквизита(Документ.ПоказательПериода);
ТаблицаДокументов.ПоказательНомера = ПолучитьПредставлениеНалоговогоРеквизита(Документ.ПоказательНомера);
ТаблицаДокументов.ПоказательДаты = ПолучитьПредставлениеНалоговогоРеквизита(Документ.ПоказательДаты);
ТаблицаДокументов.ПоказательТипа = ПолучитьПредставлениеНалоговогоРеквизита(Документ.ПоказательТипа);
ТаблицаДокументов.ПолучательКПП = ПолучитьПредставлениеНалоговогоРеквизита(ТаблицаДокументов.ПолучательКПП);
ТаблицаДокументов.ПлательщикКПП = ПолучитьПредставлениеНалоговогоРеквизита(ТаблицаДокументов.ПлательщикКПП);
КонецЕсли;
КонецЕсли;
// вид аккредитива
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("ВидАккредитива").Выбран() = 1 Тогда
ТаблицаДокументов.ВидАккредитива=Строка(Документ.ВидАккредитива);
КонецЕсли;
// платеж по представлению
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("ВидДокумента").Выбран() = 1 Тогда
ТаблицаДокументов.ПлатежПоПредст=Документ.ВидДокумента;
КонецЕсли;
// дополнительные условия
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("ДополнУсловия").Выбран() = 1 Тогда
ТаблицаДокументов.ДополнУсловия=Документ.ДополнУсловия;
КонецЕсли;
// номер счета поставщика
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("СчетПоставщика").Выбран() = 1 Тогда
ТаблицаДокументов.НомерСчетаПоставщика=Документ.СчетПоставщика;
КонецЕсли;
НДС="";
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("АвтоПодстСуммыНДС").Выбран() = 1 Тогда
НДС=ФормирСуммаНДС(Документ.АвтоПодстСуммыНДС, Документ.Сумма, Документ.НДС, Документ.СтавкаНДС);
КонецЕсли;
// очередность платежа
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("Очередность").Выбран() = 1 Тогда
ТаблицаДокументов.Очередность=Строка(Документ.Очередность);
КонецЕсли;
Содержание=РазбитьСтрокуНаСтроки(СокрП(Документ.Содержание)+НДС);
// назначение платежа
ТаблицаДокументов.НазначениеПлатежа=СтрЗаменить(СокрП(Документ.Содержание)+НДС, РазделительСтрок, " ");
ТаблицаДокументов.НазначениеПлатежа1=СтрПолучитьСтроку(Содержание, 1 );
ТаблицаДокументов.НазначениеПлатежа2=СтрПолучитьСтроку(Содержание, 2 );
ТаблицаДокументов.НазначениеПлатежа3=СтрПолучитьСтроку(Содержание, 3 );
ТаблицаДокументов.НазначениеПлатежа4=СтрПолучитьСтроку(Содержание, 4 );
ТаблицаДокументов.НазначениеПлатежа5=СтрПолучитьСтроку(Содержание, 5 );
ТаблицаДокументов.НазначениеПлатежа6=СтрПолучитьСтроку(Содержание, 6 );
// условия оплаты
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("УсловиеОплаты").Выбран() = 1 Тогда
УсловиеОплаты=РазбитьСтрокуНаСтроки(СокрП(Документ.УсловиеОплаты));
ТаблицаДокументов.УсловиеОплаты1=?(Документ.Акцепт= 1 ,"С акцептом ","Без акцепта ");
ТаблицаДокументов.УсловиеОплаты2=СтрПолучитьСтроку(УсловиеОплаты, 1 );
ТаблицаДокументов.УсловиеОплаты3=СтрПолучитьСтроку(УсловиеОплаты, 2 );
КонецЕсли;
// срок акцепта
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("СрокАкцепта").Выбран() = 1 Тогда
ТаблицаДокументов.СрокАкцепта = Строка(Документ.СрокАкцепта);
КонецЕсли;
// дата отсылки документов
Если Метаданные.Документ(Документ.Вид()).РеквизитШапки("ДатаОтсылки").Выбран() = 1 Тогда
ТаблицаДокументов.ДатаОтсылкиДок = Документ.ДатаОтсылки;
КонецЕсли;
Сообщить("Выгружен документ: "+Документ, " ");
КонецПроцедуры // ВыгрузитьПлатежныйДокумент()
//******************************************************************************
// ВыгрузитьТекст()
//
// Вызывается из формул элементов диалога:
// Кнопка "кнВыгрузить".
//
// Описание:
// Процедура формирует файл обмена данными, для экспорта платежных документов
// в систему типа "Клиент банка".
//
Процедура ВыгрузитьТекст()
Перем Вид, Часы, Минуты, Секунды, Кодир, Тип, Заголовок;
Если КаталогИмяФайла(ИмяФайлаВыгрузки, "", "") = 0 Тогда
Возврат;
КонецЕсли;
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(Кодировка.ПолучитьЗначение(Кодировка.ТекущаяСтрока(), Кодир));
ТекущееВремя(Часы, Минуты, Секунды);
Время=Шаблон("[Часы#Ч(0)2]:[Минуты#Ч(0)2]:[Секунды#Ч(0)2]");
Текст.ДобавитьСтроку("1CClientBankExchange");
Текст.ДобавитьСтроку("ВерсияФормата=1.01");
Текст.ДобавитьСтроку("Кодировка="+Кодир);
Текст.ДобавитьСтроку("Отправитель="+Метаданные.Представление());
Текст.ДобавитьСтроку("Получатель="+КлиентБанка);
Текст.ДобавитьСтроку("ДатаСоздания="+Формат(ТекущаяДата(), "ДДДММГГГГ"));
Текст.ДобавитьСтроку("ВремяСоздания="+Время);
Текст.ДобавитьСтроку("ДатаНачала="+Формат(НачДатаВыгрузки, "ДДДММГГГГ"));
Текст.ДобавитьСтроку("ДатаКонца="+Формат(КонДатаВыгрузки, "ДДДММГГГГ"));
Для К= 1 по ВыгрРасчетныеСчета.РазмерСписка() Цикл
Если ВыгрРасчетныеСчета.Пометка(К)= 1 Тогда
Счет=ВыгрРасчетныеСчета.ПолучитьЗначение(К);
Текст.ДобавитьСтроку("РасчСчет="+Счет.Номер);
КонецЕсли;
КонецЦикла;
Для К= 1 по ВыгрВидыДокументов.РазмерСписка() Цикл
Если ВыгрВидыДокументов.Пометка(К)= 1 Тогда
ВыгрВидыДокументов.ПолучитьЗначение(К, Вид);
Текст.ДобавитьСтроку("Документ="+Вид);
КонецЕсли;
КонецЦикла;
ТаблицаДокументов.УдалитьСтроки();
Для К= 1 по ВыгрВидыДокументов.РазмерСписка() Цикл
Если ВыгрВидыДокументов.Пометка(К)= 0 Тогда Продолжить; КонецЕсли;
Объект=СоздатьОбъект("Документ."+ВыгрВидыДокументов.ПолучитьЗначение(К, Вид));
Состояние("Обработка: "+Вид);
Объект.ВыбратьДокументы(НачДатаВыгрузки, КонДатаВыгрузки);
Пока Объект.ПолучитьДокумент()= 1 Цикл
Если Объект.ПометкаУдаления()= 1 Тогда Продолжить; КонецЕсли;
ВыгрузитьПлатежныйДокумент(Объект);
КонецЦикла;
КонецЦикла;
Для Стр= 1 по ТаблицаДокументов.КоличествоСтрок() Цикл
Для Кол= 1 по ТаблицаДокументов.КоличествоКолонок() Цикл
Значение=ТаблицаДокументов.ПолучитьЗначение(Стр, Кол);
Имя=ТаблицаДокументов.ПолучитьПараметрыКолонки(Кол, Тип, , , Заголовок);
Если ПустоеЗначение(Значение)= 1 Тогда
Если ОбязательныеАтрибуты.Принадлежит(Имя)= 1 Тогда
ТаблицаДокументов.ПолучитьСтрокуПоНомеру(Стр);
Сообщить(ТаблицаДокументов.ПолучитьЗначение(Стр, "СекцияДокумент")+
" № "+ТаблицаДокументов.ПолучитьЗначение(Стр, "Номер")+
" от "+ТаблицаДокументов.ПолучитьЗначение(Стр, "Дата")+
": не заполнено поле """+Заголовок+""".", "!");
КонецЕсли;
Продолжить;
КонецЕсли;
Если Тип="Число" Тогда Значение=Формат(Значение, "Ч.2");
ИначеЕсли Тип="Дата" Тогда Значение=Формат(Значение, "ДДДММГГГГ");
КонецЕсли;
Текст.ДобавитьСтроку(Имя+"="+Значение);
КонецЦикла;
Текст.ДобавитьСтроку("КонецДокумента");
КонецЦикла;
Текст.ДобавитьСтроку("КонецФайла");
Текст.Записать(ИмяФайлаВыгрузки);
КонецПроцедуры // ВыгрузитьТекст()
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ИМПОРТА (ЗАГРУЗКИ)
//
//******************************************************************************
// НайтиОрганизациюПоИНН(Слово, Вид)
//
// Параметры:
// ИННКраткий - строка, ИНН по которому надо найти организацию.
// Вид - строка – вид справочника.
// ДлинаИНН - Число –длина занчащей части реквизита ИНН.
//
// Возвращаемое значение:
// справочник - найденный элемент справочника.
//
// Описание:
// Функция осуществляет поиск в справочниках организацию по ИНН
//
Функция НайтиОрганизациюПоИНН(ИННКраткий, Вид, ДлинаИНН = 10 )
Перем Запрос, ТекстЗапроса;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(НайтиЮрЛицо)
|ТекущийЭлемент = Справочник." + Вид + ".ТекущийЭлемент;
|ИНН = Справочник." + Вид + ".ИНН;
|Группировка ТекущийЭлемент без групп;
|Условие((Лев(ИНН, " + ДлинаИНН + ") = ИННКраткий) ИЛИ (Лев(ИНН, 12) = ИННКраткий));
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда
Пока Запрос.Группировка( 1 ) = 1 Цикл
Возврат Запрос.ТекущийЭлемент;
КонецЦикла;
КонецЕсли;
Возврат СоздатьОбъект("Справочник." + Вид);
КонецФункции // НайтиОрганизациюПоИНН()
//******************************************************************************
// НайтиОрганизацию(Слово, Вид)
//
// Параметры:
// Слово - строка, "Плательщик" или "Получатель" часть идентификатора колонки таблицы.
// Вид - строка – вид справочника.
//
// Возвращаемое значение:
// 0 - если владельца такого вида не существует в конфигурации (Например: в Комплексной
// конфигурации владелец справочника "Банковские счета" справочник "Фирмы", в
// конфигурации "Бухгалтерский учет" у данного справочника владельца нет, возвращается 0 ).
// справочник - найденный элемент справочника.
//
// Описание:
// Функция осуществляет поиск в справочнике организацию по ИНН
// из текущей строки таблицы загружаемых документов.
//
Функция НайтиОрганизацию(Слово, Вид)
Если Метаданные.Справочник(Вид).Выбран() = 0 Тогда
Возврат 0 ;
КонецЕсли;
Объект=СоздатьОбъект("Справочник."+Вид);
ИННКраткий = СокрЛП(ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, Слово+"ИНН"));
// Ищем по значению ИНН
Если ПустаяСтрока(ИННКраткий)= 0 Тогда
Объект.НайтиЭлемент(НайтиОрганизациюПоИНН(ИННКраткий, Вид));
КонецЕсли;
Возврат Объект.ТекущийЭлемент();
КонецФункции // НайтиОрганизацию()
//******************************************************************************
// НайтиРасчетныйСчет(Слово, Вид)
//
// Параметры:
// Слово - строка, "Плательщик" или "Получатель" часть идентификатора колонки таблицы.
// Вид - строка – вид справочника.
//
// Возвращаемое значение:
// справочник - найденный элемент справочника.
//
// Описание:
// Функция осуществляет поиск в справочнике "Банковские счета" или "Расчетные счета"
// расчетный счет по номеру из текущей строки таблицы загружаемых документов.
//
Функция НайтиРасчетныйСчет(Слово, Вид, Владелец)
Объект = СоздатьОбъект("Справочник." + Вид);
Если ПустоеЗначение(Владелец) = 0 Тогда
Объект.ИспользоватьВладельца(Владелец);
КонецЕсли;
НомерСчета = СокрЛП(ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, Слово+"Счет"));
Если ПустоеЗначение(НомерСчета)= 0 Тогда
Объект.НайтиПоРеквизиту("Номер", НомерСчета, ПустоеЗначение(Владелец));
КонецЕсли;
Если (Объект.Выбран()= 1 ) и (ТипЗначенияСтр(Владелец)="Справочник") Тогда
Владелец=Объект.Владелец;
КонецЕсли;
Возврат Объект.ТекущийЭлемент();
КонецФункции // НайтиРасчетныйСчет()
//******************************************************************************
// НайтиЗначПеречисления(Вид, Стр)
//
// Параметры:
// Вид - строка – вид перечисления.
// Стр - строка, представление значения перечисления.
//
// Возвращаемое значение:
// значение перечисления
//
// Описание:
// Определяет значение перечисления по идентификатору перечисления и представлению
// его значения.
//
Функция НайтиЗначПеречисления(Вид, Стр)
Если Метаданные.Перечисление(Вид).Выбран() = 0 Тогда
Если (Метаданные.Перечисление("ВидыПлатежей").Выбран() = 1 ) и (Вид = "ВидыПлатежа") Тогда
Вид = "ВидыПлатежей";
Иначе
Возврат "";
КонецЕсли;
КонецЕсли;
Перечисл=Перечисление.ПолучитьАтрибут(Вид);
Для К= 1 по Перечисл.КоличествоЗначений() Цикл
Значение=Перечисл.ЗначениеПоНомеру(К);
Если Строка(Значение)=СокрЛП(Стр) Тогда Возврат(Значение); КонецЕсли;
КонецЦикла;
Возврат(ПолучитьПустоеЗначение("Перечисление."+Вид));
КонецФункции // НайтиЗначПеречисления()
//******************************************************************************
// ЗагрузитьПлатежныйДокумент()
//
// Возвращаемое значение:
// Документ - найденный платежный документ.
//
// Описание:
// Осуществляет поиск в информационной базе платежного документа, если такой документ
// существует вызывается процедура ПровестиДокументПоСчету(), осуществляющая формирование
// движений в учете.
//
Функция ЗагрузитьПлатежныйДокумент()
Перем ВидДокумента, Корреспондент, Контрагент;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ВидыДокументов");
Таб.Вывести();
Для Индекс = 1 По Таб.ВысотаТаблицы() Цикл
Если (Врег(СокрЛП(Таб.Область(Индекс, 2 ).Текст)) = Врег(СокрЛП(ТаблицаДокументов.СекцияДокумент))) и
(Метаданные.Документ(СокрЛП(Таб.Область(Индекс, 1 ).Текст)).Выбран() = 1 ) Тогда
ВидДокумента = СокрЛП(Таб.Область(Индекс, 1 ).Текст);
Корреспондент = СокрЛП(Таб.Область(Индекс, 3 ).Текст);
Прервать;
КонецЕсли;
КонецЦикла;
Плательщик = НайтиОрганизацию("Плательщик", "Фирмы");
ПлательщикСчет = НайтиРасчетныйСчет("Плательщик", "БанковскиеСчета", Плательщик);
Получатель = НайтиОрганизацию("Получатель", "Фирмы");
ПолучательСчет = НайтиРасчетныйСчет("Получатель", "БанковскиеСчета", Получатель);
Если Корреспондент = "Получатель" Тогда
РольОрганизации = "Плательщик";
Организация = Плательщик;
СчетОрганизации = ПлательщикСчет;
ИначеЕсли Корреспондент = "Плательщик" Тогда
РольОрганизации = "Получатель";
Организация = Получатель;
СчетОрганизации = ПолучательСчет;
Иначе
Возврат(ПолучитьПустоеЗначение("Документ"));
КонецЕсли;
Если СчетОрганизации.Выбран() = 0 Тогда
Возврат ПолучитьПустоеЗначение("Документ");
КонецЕсли;
Объект=СоздатьОбъект("Документ."+ВидДокумента);
Объект.ВыбратьДокументы(ТаблицаДокументов.Дата, ТаблицаДокументов.Дата);
Пока Объект.ПолучитьДокумент()= 1 Цикл
Номер = ПолучитьДанные("НомерДокумента", Объект.ТекущийДокумент());
Если Номер <> ТаблицаДокументов.Номер Тогда
Продолжить;
КонецЕсли;
Если ТипЗначенияСтр(Организация) = "Справочник" Тогда
Если ПолучитьДанные("Организация", Объект.ТекущийДокумент()) = Организация Тогда
Прервать;
КонецЕсли;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Если Объект.Выбран()= 0 Тогда
// Необходимо добавить в базу платежные документы, которые оформлены от нашего имени
// такие документы пользователи могут ввести непосредственно в программе клиента банка.
// Важно! У таких документов реквизит в таблице РольОрганизации + "ИНН" должен совпадать с
// константой "ИННОрганизации"
ИННОрганизации = ПолучитьИНН(Константа.ПолучитьАтрибут("ИННОрганизации"));
Если (ПустаяСтрока(ИННОрганизации) = 0 ) И (СокрЛП(ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, РольОрганизации + "ИНН")) = ИННОрганизации) Тогда
Объект.Новый();
Объект.НомерДок = Лев(Объект.НомерДок, СтрДлина(Объект.НомерДок) - 3 ) + Прав(ТаблицаДокументов.Номер, 3 );
Иначе
Возврат ПолучитьПустоеЗначение("Документ");
КонецЕсли;
КонецЕсли;
СнятьПометкуУдаления(Объект);
Замены= 0 ;
// дата документа
Замены=Замены+ИзменитьАтрибут(Объект, "ДатаДок", ТаблицаДокументов.Дата);
// сумма документа
Замены=Замены+ИзменитьАтрибут(Объект, "Сумма", ТаблицаДокументов.Сумма);
// банковский счет
Замены=Замены+ИзменитьАтрибут(Объект, "РасчетныйСчет", СчетОрганизации);
// контрагент и его расчетный счет
Контрагент = НайтиОрганизацию(Корреспондент, "Контрагенты");
РасчетныйСчет = НайтиРасчетныйСчет(Корреспондент, "РасчетныеСчета", Контрагент);
Замены=Замены+ИзменитьАтрибут(Объект, "Контрагент", Контрагент);
Замены=Замены+ИзменитьАтрибут(Объект, "СчетКонтрагента", РасчетныйСчет);
// вид платежа
ВидПлатежа=НайтиЗначПеречисления("ВидыПлатежа", ТаблицаДокументов.ВидПлатежа);
Замены=Замены+ИзменитьАтрибут(Объект, "ВидПлатежа", ВидПлатежа);
// срок платежа
Замены=Замены+ИзменитьАтрибут(Объект, "СрокПлатежа", ТаблицаДокументов.СрокПлатежа);
// реквизиты налогового платежа
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("ПеречислениеНалога").Выбран() = 1 Тогда
Если (Объект.ПеречислениеНалога > 0 ) Тогда
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "СтатусСоставителяПлДок", ТаблицаДокументов.СтатусСоставителя);
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "КодБК", ТаблицаДокументов.ПоказательКБК);
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "КодОКАТО", ТаблицаДокументов.ОКАТО);
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "ПоказательОснования", ТаблицаДокументов.ПоказательОснования);
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "ПоказательПериода", ТаблицаДокументов.ПоказательПериода);
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "ПоказательНомера", ТаблицаДокументов.ПоказательНомера);
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "ПоказательДаты", Дата(ТаблицаДокументов.ПоказательДаты));
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "ПоказательТипа", ТаблицаДокументов.ПоказательТипа);
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "КППплательщика",
ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, РольОрганизации + "КПП"));
Замены=Замены + ИзменитьНалоговыйАтрибут(Объект, "КППполучателя",
ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, Корреспондент + "КПП"));
Иначе
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("КППплательщика").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "КППплательщика",
ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, РольОрганизации + "КПП"));
КонецЕсли;
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("КППполучателя").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "КППполучателя",
ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, Корреспондент + "КПП"));
КонецЕсли;
КонецЕсли;
КонецЕсли;
// вид аккредитива
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("ВидАккредитива").Выбран() = 1 Тогда
ВидАккредитива=НайтиЗначПеречисления("ВидыАккредитива", ТаблицаДокументов.ВидАккредитива);
Замены=Замены+ИзменитьАтрибут(Объект, "ВидАккредитива", ВидАккредитива);
КонецЕсли;
// платеж по представлению
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("ВидДокумента").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "ВидДокумента", ТаблицаДокументов.ПлатежПоПредст);
КонецЕсли;
// дополнительные условия
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("ДополнУсловия").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "ДополнУсловия", ТаблицаДокументов.ДополнУсловия);
КонецЕсли;
// номер счета поставщика
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("СчетПоставщика").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "СчетПоставщика", ТаблицаДокументов.НомерСчетаПоставщика);
КонецЕсли;
// очередность платежа
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("Очередность").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "Очередность", Число(ТаблицаДокументов.Очередность));
КонецЕсли;
// строка содержания
Если ПустаяСтрока(ТаблицаДокументов.НазначениеПлатежа)= 0 Тогда
Содержание=ТаблицаДокументов.НазначениеПлатежа;
Иначе
Содержание=ТаблицаДокументов.НазначениеПлатежа1+ТаблицаДокументов.НазначениеПлатежа2+
ТаблицаДокументов.НазначениеПлатежа3+ТаблицаДокументов.НазначениеПлатежа4+
ТаблицаДокументов.НазначениеПлатежа5+ТаблицаДокументов.НазначениеПлатежа6;
КонецЕсли;
// исключение строки НДС из содержания
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("АвтоПодстСуммыНДС").Выбран() = 1 Тогда
НДС=СтрЗаменить(ФормирСуммаНДС(Объект.АвтоПодстСуммыНДС, Объект.Сумма, Объект.НДС, Объект.СтавкаНДС), РазделительСтрок, " ");
Если ПустаяСтрока(НДС) = 0 Тогда
НДС=Найти(Содержание, НДС);
Если 0 <НДС Тогда Содержание=Лев(Содержание, НДС- 1 ); КонецЕсли;
КонецЕсли;
КонецЕсли;
// содержание платежа
Замены=Замены+ИзменитьАтрибут(Объект, "Содержание", Содержание);
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("УсловиеОплаты").Выбран() = 1 Тогда
УсловиеОплаты=ТаблицаДокументов.УсловиеОплаты1+ТаблицаДокументов.УсловиеОплаты2+
ТаблицаДокументов.УсловиеОплаты3;
// акцепт
Если 0 <Найти(УсловиеОплаты, "С акцептом ") Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "Акцепт", 1 );
УсловиеОплаты=СтрЗаменить(УсловиеОплаты, "С акцептом ", "");
ИначеЕсли 0 <Найти(УсловиеОплаты, "Без акцепта ") Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "Акцепт", 0 );
УсловиеОплаты=СтрЗаменить(УсловиеОплаты, "Без акцепта ", "");
КонецЕсли;
// условия оплаты
Замены=Замены+ИзменитьАтрибут(Объект, "УсловиеОплаты", УсловиеОплаты);
КонецЕсли;
// срок акцепта
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("СрокАкцепта").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "СрокАкцепта", Число(ТаблицаДокументов.СрокАкцепта));
КонецЕсли;
// дата отсылки документов
Если Метаданные.Документ(Объект.Вид()).РеквизитШапки("ДатаОтсылки").Выбран() = 1 Тогда
Замены=Замены+ИзменитьАтрибут(Объект, "ДатаОтсылки", ТаблицаДокументов.ДатаОтсылкиДок);
КонецЕсли;
// запись при необходимости
Если 0 <Замены Тогда
ЗаписатьДокумент(Объект);
Иначе
Сообщить("Обработан документ: "+Объект, " ");
КонецЕсли;
// включение документа в банковские выписки
ПровестиДокументПоСчету(Объект.ТекущийДокумент(), ПлательщикСчет,
ТаблицаДокументов.ДатаСписано, 0 , Объект.Сумма);
ПровестиДокументПоСчету(Объект.ТекущийДокумент(), ПолучательСчет,
ТаблицаДокументов.ДатаПоступило, Объект.Сумма, 0 );
Возврат(Объект.ТекущийДокумент());
КонецФункции // ЗагрузитьПлатежныйДокумент()
//******************************************************************************
// ЗагрузитьОперациюПоРасчетномуСчету()
//
// Возвращаемое значение:
// Документ - найденный (созданный) документ "ОперацияПоРасчСчету".
//
// Описание:
// Осуществляет поиск в информационной базе документа "ОперацияПоРасчСчету", если
// такой документ несуществует добавляется новый. Затем вызывается процедура
// ПровестиДокументПоСчету(), осуществляющая формирование движений в учете.
//
Функция ЗагрузитьОперациюПоРасчетномуСчету()
Перем Синоним;
// строка, идентифицирующая документ
Идентификатор=СокрЛП(ТаблицаДокументов.СекцияДокумент)+
" с "+СокрЛП(ТаблицаДокументов.ПлательщикСчет)+
" на "+СокрЛП(ТаблицаДокументов.ПолучательСчет);
// поиск ранее загруженного документа
Объект=СоздатьОбъект("Документ.ОперацияПоРасчСчету");
Объект.ВыбратьПоНомеру(ТаблицаДокументов.Номер, ТаблицаДокументов.Дата);
Пока Объект.ПолучитьДокумент()= 1 Цикл
Если Объект.Идентификатор=Идентификатор Тогда
Прервать;
КонецЕсли;
КонецЦикла;
// обработка найденного или создание нового документа
Если Объект.Выбран()= 1 Тогда
СнятьПометкуУдаления(Объект);
Иначе
Объект.Новый();
Объект.НомерДок=ТаблицаДокументов.Номер;
Объект.ДатаДок=ТаблицаДокументов.Дата;
Объект.Идентификатор=Идентификатор;
Сообщить("Создан документ: "+Объект.Вид()+" "+Объект.НомерДок+" ("+Объект.ДатаДок+")", " ");
КонецЕсли;
Замены= 0 ;
// дата документа
Замены=Замены+ИзменитьАтрибут(Объект, "ДатаДок", ТаблицаДокументов.Дата);
// сумма документа
Замены=Замены+ИзменитьАтрибут(Объект, "Сумма", ТаблицаДокументов.Сумма);
// плательщик и его расчетный счет - элементы справочников
Плательщик = НайтиОрганизацию("Плательщик", "Фирмы");
ПлательщикСчет = НайтиРасчетныйСчет("Плательщик", "БанковскиеСчета",Плательщик);
Если ПлательщикСчет.Выбран()= 0 Тогда
Плательщик = НайтиОрганизацию("Плательщик", "Контрагенты");
ПлательщикСчет = НайтиРасчетныйСчет("Плательщик", "РасчетныеСчета", Плательщик);
ИначеЕсли ТипЗначенияСтр(Плательщик) <> "Справочник" Тогда
Плательщик = ПолучитьПустоеЗначение("Справочник.Контрагенты");
КонецЕсли;
// плательщик
Замены=Замены+ИзменитьАтрибут(Объект, "Плательщик", Плательщик);
// расчетный счет плательщика
Замены=Замены+ИзменитьАтрибут(Объект, "ПлательщикСчет", ПлательщикСчет);
// получатель и его расчетный счет - элементы справочников
Получатель = НайтиОрганизацию("Получатель", "Фирмы");
ПолучательСчет = НайтиРасчетныйСчет("Получатель", "БанковскиеСчета",Получатель);
Если ПолучательСчет.Выбран()= 0 Тогда
Получатель = НайтиОрганизацию("Получатель", "Контрагенты");
ПолучательСчет = НайтиРасчетныйСчет("Получатель", "РасчетныеСчета", Получатель);
ИначеЕсли ТипЗначенияСтр(Получатель) <> "Справочник" Тогда
Получатель = ПолучитьПустоеЗначение("Справочник.Контрагенты");
КонецЕсли;
// получатель
Замены=Замены+ИзменитьАтрибут(Объект, "Получатель", Получатель);
// расчетный счет получателя
Замены=Замены+ИзменитьАтрибут(Объект, "ПолучательСчет", ПолучательСчет);
// таблица всех реквизитов документа
Реквизиты=СоздатьОбъект("ТаблицаЗначений");
Реквизиты.НоваяКолонка("Имя", "Строка", 25 );
Реквизиты.НоваяКолонка("Синоним", "Строка", 50 );
Реквизиты.НоваяКолонка("Значение", "Строка", 100 );
// отбор всех непустых реквизитов
Стр=ТаблицаДокументов.НомерСтроки;
Для Кол= 1 по ТаблицаДокументов.КоличествоКолонок() Цикл
Значение=ТаблицаДокументов.ПолучитьЗначение(Стр, Кол);
Если ПустоеЗначение(Значение)= 1 Тогда Продолжить; КонецЕсли;
Имя=ТаблицаДокументов.ПолучитьПараметрыКолонки(Кол, "", 0 , 0 , Синоним);
Реквизиты.НоваяСтрока();
Реквизиты.Имя=Имя; Реквизиты.Синоним=Синоним; Реквизиты.Значение=Строка(Значение);
КонецЦикла;
// установка значений ранее записанных реквизитов документа
Объект.ВыбратьСтроки();
Пока Объект.ПолучитьСтроку()= 1 Цикл
Стр= 0 ;
Если 1 =Реквизиты.НайтиЗначение(Объект.Имя, Стр, "Имя") Тогда
Значение=Реквизиты.ПолучитьЗначение(Стр, "Значение");
Замены=Замены+ИзменитьАтрибут(Объект, "Значение", Значение);
Реквизиты.УдалитьСтроку(Стр);
КонецЕсли;
КонецЦикла;
// запись новых реквизитов документа
Реквизиты.ВыбратьСтроки();
Пока Реквизиты.ПолучитьСтроку()= 1 Цикл
Объект.НоваяСтрока();
Объект.Имя=Реквизиты.Имя; Объект.Синоним=Реквизиты.Синоним;
Замены=Замены+ИзменитьАтрибут(Объект, "Значение", Реквизиты.Значение);
КонецЦикла;
// запись документа при необходимости
Если 0 <Замены Тогда
ЗаписатьДокумент(Объект);
Иначе
Сообщить("Обработан документ: "+Объект, " ");
КонецЕсли;
// включение документа в банковские выписки
ПровестиДокументПоСчету(Объект.ТекущийДокумент(), ПлательщикСчет,
ТаблицаДокументов.ДатаСписано, 0 , Объект.Сумма);
ПровестиДокументПоСчету(Объект.ТекущийДокумент(), ПолучательСчет,
ТаблицаДокументов.ДатаПоступило, Объект.Сумма, 0 );
Возврат(Объект.ТекущийДокумент());
КонецФункции // ЗагрузитьОперациюПоРасчетномуСчету()
//******************************************************************************
// ЗагрузитьТаблицуДокументов()
//
// Описание:
// Процедура осуществляет последовательный вызов процедур поиска (создания)
// платежных документов на основании сформированной таблицы загружаемых
// документов, при этом формируется список загруженных документов.
//
Процедура ЗагрузитьТаблицуДокументов()
ЗагрДокументы.УдалитьВсе();
ТаблицаДокументов.ВыбратьСтроки();
Пока ТаблицаДокументов.ПолучитьСтроку()= 1 Цикл
Документ=ЗагрузитьПлатежныйДокумент();
Если ПустоеЗначение(Документ)= 1 Тогда
Документ=ЗагрузитьОперациюПоРасчетномуСчету();
Если ПустоеЗначение(Документ)= 1 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если 0 =ЗагрДокументы.НайтиЗначение(Документ) Тогда
ЗагрДокументы.ДобавитьЗначение(Документ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ЗагрузитьТаблицуДокументов()
//******************************************************************************
// СинхронизироватьДокументы(Вид, Атрибут1, Атрибут2)
//
// Параметры:
// Вид - строка, вид (идентификатор) документа.
// Атрибут1 - строка, вид (идентификатор) атрибута 1 документа (банковский счет).
// Атрибут2 - строка, вид (идентификатор) атрибута 2 документа (банковский счет).
//
// Описание:
// Процедура синхронизирует документ определенного вид за загружаемый период.
// При этом документ, не вошедший в список загруженных, помечается на удаление,
// при условии что документы данного вида загружались.
//
Процедура СинхронизироватьДокументы(Вид, Атрибут1, Атрибут2)
Объект=СоздатьОбъект("Документ."+Вид);
Объект.ВыбратьДокументы(НачДатаЗагрузки, КонДатаЗагрузки);
Пока Объект.ПолучитьДокумент()= 1 Цикл
Счет1=Объект.ПолучитьАтрибут(Атрибут1);
Счет2=Объект.ПолучитьАтрибут(Атрибут2);
Если ЗагрДокументы.Принадлежит(Объект.ТекущийДокумент())= 1 Тогда
ИначеЕсли Счет1.Выбран()= 0 Тогда
ИначеЕсли ЗагрРасчетныеСчета.Принадлежит(Счет1.Номер)= 1 Тогда
УдалитьДокумент(Объект);
ИначеЕсли Счет2.Выбран()= 0 Тогда
ИначеЕсли ЗагрРасчетныеСчета.Принадлежит(Счет2.Номер)= 1 Тогда
УдалитьДокумент(Объект);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // СинхронизироватьДокументы()
//******************************************************************************
// СинхронизироватьСчета()
//
// Описание:
// Процедура осуществляет синхронизацию платежных документов и документов
// формирующих движения в учете по расчетным счетам.
//
Процедура СинхронизироватьСчета()
СинхронизироватьДокументыПоСчетам();
Для Н= 1 По ЗагрВидыДокументов.РазмерСписка() Цикл
ВидДокумента=ЗагрВидыДокументов.ПолучитьЗначение(Н);
СинхронизироватьДокументы(ВидДокумента, "РасчетныйСчет", "СчетКонтрагента");
КонецЦикла;
СинхронизироватьДокументы("ОперацияПоРасчСчету", "ПлательщикСчет", "ПолучательСчет");
КонецПроцедуры // СинхронизироватьСчета()
//******************************************************************************
// ОшибкаЗагрузкиТекста(Ном, СтрТекста, СтрОшибки)
//
// Ном - число, номер текущей строки файла обмена данными.
// СтрТекста - строка, строка файла обмена данными.
// СтрОшибки - строка, строка описания ошибки.
//
// Описание:
// Процедура сообщает об ошибки загрузки данных из файла обмена даннами.
//
Процедура ОшибкаЗагрузкиТекста(Ном, СтрТекста, СтрОшибки)
Стр="Ошибка: ";
Если 0 <Ном Тогда Стр=Стр+"строка "+Ном+", "; КонецЕсли;
Если ПустаяСтрока(СтрТекста)= 0 Тогда Стр=Стр+""""+СтрТекста+""", "; КонецЕсли;
Сообщить(Стр+СтрОшибки, "!!");
КонецПроцедуры // ОшибкаЗагрузкиТекста()
//******************************************************************************
// ЗагрузитьСтрокуЗаголовка(Стр, Ном)
//
// Параметры:
// Стр - строка, строка файла обмена данными.
// Ном - число, номер текущей строки файла обмена данными.
//
// Описание:
// Процедура осуществляет загрузку строки заголовка файла обмена даннами.
//
Процедура ЗагрузитьСтрокуЗаголовка(Стр, Ном)
Равно=Найти(Стр, "=");
Имя=Врег(СокрЛП(Лев(Стр, Равно- 1 ))); Значение=Сред(Стр, Равно+ 1 );
Если Равно= 0 Тогда
ОшибкаЗагрузкиТекста(Ном, Стр, "не найден символ ""=""");
ИначеЕсли Имя="ВЕРСИЯФОРМАТА" Тогда
// ДобавитьПараметрЗагрузки(Значение, "Версия формата файла:");
ИначеЕсли Имя="КОДИРОВКА" Тогда
// ДобавитьПараметрЗагрузки(Значение, "Кодировка файла:");
ИначеЕсли Имя="ОТПРАВИТЕЛЬ" Тогда
// ДобавитьПараметрЗагрузки(Значение, "Программа-экспортер:");
ИначеЕсли Имя="ПОЛУЧАТЕЛЬ" Тогда
// ДобавитьПараметрЗагрузки(Значение, "Программа-импортер:");
ИначеЕсли Имя="ДАТАСОЗДАНИЯ" Тогда
// ДобавитьПараметрЗагрузки(Значение, "Дата создания файла:");
ИначеЕсли Имя="ВРЕМЯСОЗДАНИЯ" Тогда
// ДобавитьПараметрЗагрузки(Значение, "Время создания файла:");
ИначеЕсли Имя="ДАТАНАЧАЛА" Тогда
НачДатаЗагрузки=Дата(СокрЛП(Значение));
// ДобавитьПараметрЗагрузки(Значение, "Начало интервала:");
ИначеЕсли Имя="ДАТАКОНЦА" Тогда
КонДатаЗагрузки=Дата(СокрЛП(Значение));
// ДобавитьПараметрЗагрузки(Значение, "Конец интервала:");
ИначеЕсли Имя="РАСЧСЧЕТ" Тогда
Значение=СокрЛП(Значение);
ЗагрРасчетныеСчета.Установить(Значение, Значение);
// ТекстРасчСчетаЗагрузки=ТекстРасчСчетаЗагрузки+Значение+РазделительСтрок;
ИначеЕсли Имя="ДОКУМЕНТ" Тогда
Значение = Врег(СокрЛП(Значение));
ВидДокумента = ВидыДокументовДляПоиска.Получить(Значение);
Если ПустаяСтрока(ВидДокумента) = 0 Тогда
ЗагрВидыДокументов.Установить(ВидДокумента, ВидДокумента);
Иначе
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ВидыДокументов");
Таб.Вывести();
Для Индекс = 1 По Таб.ВысотаТаблицы() Цикл
Если Врег(СокрЛП(Таб.Область(Индекс, 2 ).Текст)) = Значение Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Индекс > Таб.ВысотаТаблицы() Тогда
Сообщить("Внимание: строка " + Ном + ", """ + Стр + """, неверный вид документа: " + Значение + " !");
КонецЕсли;
КонецЕсли;
Иначе
ОшибкаЗагрузкиТекста(Ном, Стр, "неверный идентификатор: """+Имя+"""");
КонецЕсли;
КонецПроцедуры // ЗагрузитьСтрокуЗаголовка()
//******************************************************************************
// ЗагрузитьСтрокуДокумента(Стр, Ном)
//
// Стр - строка, строка файла обмена данными.
// Ном - число, номер текущей строки файла обмена данными.
//
// Описание:
// Процедура осуществляет запись строки секции "Секция платежного документа"
// файла обмена даннами, в таблицу значений загружаемых документов.
//
Процедура ЗагрузитьСтрокуДокумента(Стр, Ном)
Перем Тип, Длина;
Равно=Найти(Стр, "=");
Имя=Врег(СокрЛП(Лев(Стр, Равно- 1 ))); Значение=Сред(Стр, Равно+ 1 );
Колонка=АтрибутыДокументов.Получить(Имя);
Если Равно= 0 Тогда
ОшибкаЗагрузкиТекста(Ном, Стр, "не найден символ ""=""");
ИначеЕсли ПустоеЗначение(Колонка)= 0 Тогда
ТаблицаДокументов.ПолучитьПараметрыКолонки(Колонка, Тип, Длина);
Если Тип="Число" Тогда
Значение=Число(СокрЛП(Значение));
Если Значение < 0 Тогда
Значение = - Значение;
КонецЕсли;
ИначеЕсли Тип="Дата" Тогда
Значение=Дата(СокрЛП(Значение));
ИначеЕсли Длина<> 0 Тогда
Значение=СокрЛП(Значение);
КонецЕсли;
Если ((Имя = "ПЛАТЕЛЬЩИКИНН") ИЛИ (Имя = "ПОЛУЧАТЕЛЬИНН")) И (СтрДлина(Значение) < 10 ) Тогда
Сообщить("Значение поля """ + Имя + """ """ + Значение + """ имеет недопустимо малую длину!", "!");
КонецЕсли;
НомерСтроки=ТаблицаДокументов.НомерСтроки;
ТаблицаДокументов.УстановитьЗначение(НомерСтроки, Колонка, Значение);
Иначе
ОшибкаЗагрузкиТекста(Ном, Стр, "неверный идентификатор: """+Имя+"""");
КонецЕсли;
КонецПроцедуры // ЗагрузитьСтрокуДокумента()
//******************************************************************************
// ЗагрузитьСекциюДокумента(Текст, К)
//
// Параметры:
// Текст - текст, текст файла обмена данными.
// К - число, номер текущей строки файла обмена данными.
//
// Описание:
// Процедура осуществляет обход секции "Секция платежного документа"
// файла обмена даннами.
//
Процедура ЗагрузитьСекциюДокумента(Текст, К)
ТаблицаДокументов.НоваяСтрока();
Для К=К по Текст.КоличествоСтрок() Цикл
Состояние("Обработка: строка "+К);
Стр=Текст.ПолучитьСтроку(К);
Если ПустоеЗначение(Стр)= 1 Тогда
Продолжить;
ИначеЕсли Врег(Лев(СокрЛП(Стр), 5 ))="КОНЕЦ" Тогда
Прервать;
КонецЕсли;
ЗагрузитьСтрокуДокумента(Стр, К);
КонецЦикла;
ВидДокумента=ВидыОпераций.Получить(ТаблицаДокументов.ВидОплаты);
Если ПустоеЗначение(ВидДокумента)= 0 Тогда
ТаблицаДокументов.СекцияДокумент=ВидДокумента;
КонецЕсли;
КонецПроцедуры // ЗагрузитьСекциюДокумента()
//******************************************************************************
// ЗагрузитьСекциюРасчСчета(Текст, К)
//
// Параметры:
// Текст - текст, текст файла обмена данными.
// К - число, номер текущей строки файла обмена данными.
//
// Описание:
// Процедура осуществляет обход секции "Секция передачи остатков по расчетному счету"
// файла обмена даннами.
//
Процедура ЗагрузитьСекциюРасчСчета(Текст, К)
Для К=К+ 1 по Текст.КоличествоСтрок() Цикл
Состояние("Обработка: строка "+К);
Стр=Текст.ПолучитьСтроку(К);
Если ПустоеЗначение(Стр)= 1 Тогда
Продолжить;
ИначеЕсли Врег(Лев(СокрЛП(Стр), 5 ))="КОНЕЦ" Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ЗагрузитьСекциюРасчСчета()
//******************************************************************************
// ЗагрузитьТекст()
//
// Вызывается из формул элементов диалога:
// Кнопка "кнЗагрузить".
//
// Описание:
// Осуществляется загрузка файла обмена данными из системы "Клиент банка",
// в соответствии с принятым форматом.
//
Процедура ЗагрузитьТекст()
Если КаталогИмяФайла(ИмяФайлаЗагрузки, "", "") = 0 Тогда
Возврат;
КонецЕсли;
ТаблицаДокументов.УдалитьСтроки();
Текст=ТекстФайла(ИмяФайлаЗагрузки);
Если ПустоеЗначение(Текст)= 1 Тогда Возврат; КонецЕсли;
Для К= 2 по Текст.КоличествоСтрок() Цикл
Состояние("Обработка: строка "+К);
Стр=Текст.ПолучитьСтроку(К);
Если ПустаяСтрока(Стр)= 1 Тогда
Продолжить;
ИначеЕсли Лев(Врег(СокрЛП(Стр)), 10 )="КОНЕЦФАЙЛА" Тогда
Прервать;
ИначеЕсли Лев(Врег(СокрЛП(Стр)), 14 )="СЕКЦИЯДОКУМЕНТ" Тогда
ЗагрузитьСекциюДокумента(Текст, К);
ИначеЕсли Лев(Врег(СокрЛП(Стр)), 14 )="СЕКЦИЯРАСЧСЧЕТ" Тогда
ЗагрузитьСекциюРасчСчета(Текст, К);
Иначе
ЗагрузитьСтрокуЗаголовка(Стр, К);
КонецЕсли;
КонецЦикла;
ЗагрузитьТаблицуДокументов();
СинхронизироватьСчета();
Если ВыводитьОтчет= 1 Тогда
Печать();
КонецЕсли;
КонецПроцедуры // ЗагрузитьТекст()
////////////////////////////////////////////////////////////////////////////////
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии(Настройка)
Если Настройка= 0 Тогда
ИмяФайлаВыгрузки=КаталогПользователя()+"1c_to_kl.txt";
ИмяФайлаЗагрузки=КаталогПользователя()+"kl_to_1c.txt";
КонецЕсли;
ЗаполнитьРасчетныеСчета(); ЗаполнитьВыгрВидыДок();
НачДатаВыгрузки=РабочаяДата(); КонДатаВыгрузки=РабочаяДата();
КлиентБанка = ВосстановитьЗначение("ПрограммаКлиентБанка");
Форма.ИспользоватьСлой(Форма.Закладки.ПолучитьЗначение( 1 ), 2 );
КонецПроцедуры // ПриОткрытии()
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриЗакрытии()
СохранитьЗначение("ПрограммаКлиентБанка",КлиентБанка);
КонецПроцедуры // ПриЗакрытии()
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
Форма.ИспользоватьСлой(ЗначениеЗакладки, 2 );
КонецПроцедуры // ПриВыбореЗакладки()
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриНачалеВыбораЗначения(ЭлементДиалога, ФлагОбработки)
Перем Каталог, Файл;
Если ЭлементДиалога="ИмяФайлаВыгрузки" Тогда
КаталогИмяФайла(ИмяФайлаВыгрузки, Каталог, Файл);
Если ФС.ВыбратьФайл( 0 , Файл, Каталог, "Файл выгрузки",
"Текстовые (*.txt)|*.txt", "txt")= 1 Тогда
ИмяФайлаВыгрузки=Каталог+Файл;
КонецЕсли;
ИначеЕсли ЭлементДиалога="ИмяФайлаЗагрузки" Тогда
КаталогИмяФайла(ИмяФайлаЗагрузки, Каталог, Файл);
Если ФС.ВыбратьФайл( 0 , Файл, Каталог, "Файл загрузки",
"Текстовые (*.txt)|*.txt", "txt")= 1 Тогда
ИмяФайлаЗагрузки=Каталог+Файл;
КонецЕсли;
ИначеЕсли ЭлементДиалога="КлиентБанка" Тогда
Список=СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение("DiasoftCLIENT 4x4 for Windows Диасофт");
Список.ДобавитьЗначение("Клиент-Банк РФК");
Список.ДобавитьЗначение("LanVisit DOS 4.90 Ланит");
Список.ДобавитьЗначение("ДБО BS-Client v.3 BSS");
Список.ДобавитьЗначение("Система клиент-банк TIVAL");
Список.ДобавитьЗначение("Клиент банка InterBank v.5.1 R-Style Software Lab");
Список.ДобавитьЗначение("""Электронный клиент"" АКБ Автобанк");
Список.ДобавитьЗначение("""Клиент-ТЕЛЕБАНК"" АОЗТ Степ Ап");
Список.ДобавитьЗначение("ИНИСТ Банк-Клиент ЗАО ИНИСТ");
Список.ДобавитьЗначение("Клиент-банк МИБ");
Список.ДобавитьЗначение("Система Клиент-Банк ""BClient""");
Список.ДобавитьЗначение("Система электронных расчетов QuickPay ЗАО АО Кворум");
Список.ДобавитьЗначение("Комплекс обмена платежными документами Курьер. АОЗТ АстраСофт");
Список.ДобавитьЗначение("WinClient фирмы МПИ-Банк");
Список.ДобавитьЗначение("Система ""Клиент-Банк Плюс"" ОАО ""Уралвнешторгбанка""");
Список.ДобавитьЗначение("Система ""MailBank"" фирмы ""Системные технологии"" Минск");
Список.ДобавитьЗначение("On-Soft Клиент-Банк КБ ""ЛОКО-Банк""");
Список.ДобавитьЗначение("АРМ ""Клиент"" АС ""Клиент-Сбербанк"" Сбербанка России");
Список.ДобавитьЗначение("Система ""iBank 2"" ООО ""БИФИТ""");
Список.ДобавитьЗначение("""Yugo-Vostok Online"" ОАО БАНК ""ЮГО-ВОСТОК""");
Список.ВыбратьЗначение(КлиентБанка, "", , , 2 );
КонецЕсли;
КонецПроцедуры // ПриНачалеВыбораЗначения()
//******************************************************************************
Форма.ИспользоватьЗакладки( 1 );
Форма.Закладки.ДобавитьЗначение("Основной", "Экспорт и импорт");
Форма.Закладки.ДобавитьЗначение("Настройка", "Настройка обмена");
Кодировка.ДобавитьЗначение( 0 , "Windows");
Кодировка.ДобавитьЗначение( 1 , "DOS");
ТаблицаДокументов=СоздатьОбъект("ТаблицаЗначений");
// шапка платежного документа
ТаблицаДокументов.НоваяКолонка("Документ", "Строка", , , "Вид документа");
ТаблицаДокументов.НоваяКолонка("СекцияДокумент", "Строка", , , "Вид документа");
ТаблицаДокументов.НоваяКолонка("Номер", "Строка", , , "Номер документа");
ТаблицаДокументов.НоваяКолонка("Дата", "Дата", , , "Дата документа");
ТаблицаДокументов.НоваяКолонка("Сумма", "Число", 15 , 2 , "Сумма платежа");
// Квитанция по платежному документу
ТаблицаДокументов.НоваяКолонка("КвитанцияДата", "Дата", , , "Дата формирования квитанции");
ТаблицаДокументов.НоваяКолонка("КвитанцияВремя", "Строка", 8 , , "Время формирования квитанции");
ТаблицаДокументов.НоваяКолонка("КвитанцияСодержание", "Строка", , , "Содержание квитанции");
ТаблицаДокументов.НоваяКолонка("ПлательщикСчет", , , , "Номер р/с плательщика в его банке"); // Номер р/с плательщика в его банке
ТаблицаДокументов.НоваяКолонка("ДатаСписано", "Дата", , , "Дата списания средств с р/с");
// реквизиты плательщика в случае непрямых расчетов:
ТаблицаДокументов.НоваяКолонка("ПлательщикИНН", "Строка", 12 , , "ИНН плательщика"); // ИНН плательщика
ТаблицаДокументов.НоваяКолонка("ПлательщикКПП", "Строка", 9 , , "КПП плательщика"); // КПП плательщика
ТаблицаДокументов.НоваяКолонка("Плательщик", "Строка", , , "Плательщик"); // Плательщик
ТаблицаДокументов.НоваяКолонка("Плательщик1", "Строка", , , "Наименование плательщика"); // Наименование плательщика
ТаблицаДокументов.НоваяКолонка("Плательщик2", "Строка", , , "Наименование плательщика, стр. 2"); // Расчетный счет плательщика
ТаблицаДокументов.НоваяКолонка("Плательщик3", "Строка", , , "Наименование плательщика, стр. 3"); // Банк плательщика
ТаблицаДокументов.НоваяКолонка("Плательщик4", "Строка", , , "Наименование плательщика, стр. 4"); // Город банка плательщика
ТаблицаДокументов.НоваяКолонка("ПлательщикРасчСчет", "Строка", 20 , , "Расчетный счет плательщика"); // Корсчет банка плательщика
// реквизиты банка плательщика
ТаблицаДокументов.НоваяКолонка("ПлательщикБанк1", "Строка", , , "Банк плательщика"); // РЦ банка плательщика
ТаблицаДокументов.НоваяКолонка("ПлательщикБанк2", "Строка", , , "Город банка плательщика"); // Город РЦ банка плательщика
ТаблицаДокументов.НоваяКолонка("ПлательщикБИК", "Строка", 9 , , "БИК банка плательщика"); // БИК РЦ банка плательщика
ТаблицаДокументов.НоваяКолонка("ПлательщикКорсчет", "Строка", 20 , , "Корсчет банка плательщика"); // Корсчет РЦ банка плательщика
ТаблицаДокументов.НоваяКолонка("ПолучательСчет", , , , "Номер р/с получателя в его банке"); // Номер р/с получателя в его банке
ТаблицаДокументов.НоваяКолонка("ДатаПоступило", "Дата", , , "Дата поступления средств на р/с");
// реквизиты получателя (поставщика)
ТаблицаДокументов.НоваяКолонка("ПолучательИНН", "Строка", 12 , , "ИНН получателя"); // ИНН получателя
ТаблицаДокументов.НоваяКолонка("ПолучательКПП", "Строка", 9 , , "КПП получателя"); // КПП получателя
ТаблицаДокументов.НоваяКолонка("Получатель", "Строка", , , "Получатель"); // Получатель
ТаблицаДокументов.НоваяКолонка("Получатель1", "Строка", , , "Наименование получателя"); // Наименование получателя
ТаблицаДокументов.НоваяКолонка("Получатель2", "Строка", , , "Наименование получателя, стр. 2"); // Расчетный счет получателя
ТаблицаДокументов.НоваяКолонка("Получатель3", "Строка", , , "Наименование получателя, стр. 3"); // Банк получателя
ТаблицаДокументов.НоваяКолонка("Получатель4", "Строка", , , "Наименование получателя, стр. 4"); // Город банка получателя
ТаблицаДокументов.НоваяКолонка("ПолучательРасчСчет", "Строка", 20 , , "Расчетный счет получателя"); // Корсчет банка получателя
// реквизиты банка получателя (поставщика) в случае непрямых расчетов:
ТаблицаДокументов.НоваяКолонка("ПолучательБанк1", "Строка", , , "Банк получателя"); // РЦ банка получателя
ТаблицаДокументов.НоваяКолонка("ПолучательБанк2", "Строка", , , "Город банка получателя"); // Город РЦ банка получателя
ТаблицаДокументов.НоваяКолонка("ПолучательБИК", "Строка", 9 , , "БИК банка получателя"); // БИК РЦ банка получателя
ТаблицаДокументов.НоваяКолонка("ПолучательКорсчет", "Строка", 20 , , "Корсчет банка получателя"); // Корсчет РЦ банка получателя
// реквизиты платежа
ТаблицаДокументов.НоваяКолонка("ВидПлатежа", "Строка", , , "Вид платежа"); // "Почтой". "Телеграфом", "Электронно"
ТаблицаДокументов.НоваяКолонка("ВидОплаты", "Строка", 2 , , "Вид операции");
ТаблицаДокументов.НоваяКолонка("СрокПлатежа", "Дата", , , "Срок платежа (аккредитива)");
ТаблицаДокументов.НоваяКолонка("Очередность", "Строка", 1 , , "Очередность платежа");
// реквизиты налогового платежа
ТаблицаДокументов.НоваяКолонка("СтатусСоставителя", "Строка", 2 , , "Статус составителя платежного документа");
ТаблицаДокументов.НоваяКолонка("ПоказательКБК", "Строка", 7 , , "Показатель кода бюджетной классификации");
ТаблицаДокументов.НоваяКолонка("ОКАТО", "Строка", 11 , , "ОКАТО");
ТаблицаДокументов.НоваяКолонка("ПоказательОснования", "Строка", 2 , , "Показатель основания налогового платежа");
ТаблицаДокументов.НоваяКолонка("ПоказательПериода", "Строка", 10 , , "Показатель налогового периода");
ТаблицаДокументов.НоваяКолонка("ПоказательНомера", "Строка", 20 , , "Показатель номера налогового документа");
ТаблицаДокументов.НоваяКолонка("ПоказательДаты", "Строка", 10 , , "Показатель даты налогового документа");
ТаблицаДокументов.НоваяКолонка("ПоказательТипа", "Строка", 2 , , "Показатель типа налогового платежа");
// назначение платежа и пр.
ТаблицаДокументов.НоваяКолонка("НазначениеПлатежа", "Строка", , , "Назначение платежа");
ТаблицаДокументов.НоваяКолонка("НазначениеПлатежа1", "Строка", , , "Назначение платежа, стр. 1");
ТаблицаДокументов.НоваяКолонка("НазначениеПлатежа2", "Строка", , , "Назначение платежа, стр. 2");
ТаблицаДокументов.НоваяКолонка("НазначениеПлатежа3", "Строка", , , "Назначение платежа, стр. 3");
ТаблицаДокументов.НоваяКолонка("НазначениеПлатежа4", "Строка", , , "Назначение платежа, стр. 4");
ТаблицаДокументов.НоваяКолонка("НазначениеПлатежа5", "Строка", , , "Назначение платежа, стр. 5");
ТаблицаДокументов.НоваяКолонка("НазначениеПлатежа6", "Строка", , , "Назначение платежа, стр. 6");
// прочее
ТаблицаДокументов.НоваяКолонка("СрокАкцепта", "Строка", , , "Срок акцепта");
ТаблицаДокументов.НоваяКолонка("ВидАккредитива", "Строка", , , "Вид аккредитива");
ТаблицаДокументов.НоваяКолонка("УсловиеОплаты1", "Строка", , , "Условие оплаты, стр. 1");
ТаблицаДокументов.НоваяКолонка("УсловиеОплаты2", "Строка", , , "Условие оплаты, стр. 2");
ТаблицаДокументов.НоваяКолонка("УсловиеОплаты3", "Строка", , , "Условие оплаты, стр. 3");
ТаблицаДокументов.НоваяКолонка("ПлатежПоПредст", "Строка", , , "Платеж по представлению");
ТаблицаДокументов.НоваяКолонка("ДополнУсловия" , "Строка", , , "Дополнительные условия");
ТаблицаДокументов.НоваяКолонка("НомерСчетаПоставщика", "Строка", , , "№ счета поставщика");
ТаблицаДокументов.НоваяКолонка("ДатаОтсылкиДок", "Дата", , , "Дата отсылки документов");
ОбязательныеАтрибуты=СоздатьОбъект("СписокЗначений");
ОбязательныеАтрибуты.ДобавитьЗначение("СекцияДокумент");
ОбязательныеАтрибуты.ДобавитьЗначение("Номер");
ОбязательныеАтрибуты.ДобавитьЗначение("Дата");
ОбязательныеАтрибуты.ДобавитьЗначение("Сумма");
ОбязательныеАтрибуты.ДобавитьЗначение("ПлательщикСчет");
ОбязательныеАтрибуты.ДобавитьЗначение("ПлательщикИНН");
ОбязательныеАтрибуты.ДобавитьЗначение("Плательщик");
ОбязательныеАтрибуты.ДобавитьЗначение("ПлательщикРасчСчет");
ОбязательныеАтрибуты.ДобавитьЗначение("ПлательщикБанк1");
ОбязательныеАтрибуты.ДобавитьЗначение("ПлательщикБанк2");
ОбязательныеАтрибуты.ДобавитьЗначение("ПлательщикБИК");
ОбязательныеАтрибуты.ДобавитьЗначение("ПолучательСчет");
ОбязательныеАтрибуты.ДобавитьЗначение("ПолучательИНН");
ОбязательныеАтрибуты.ДобавитьЗначение("Получатель");
ОбязательныеАтрибуты.ДобавитьЗначение("ПолучательРасчСчет");
ОбязательныеАтрибуты.ДобавитьЗначение("ПолучательБанк1");
ОбязательныеАтрибуты.ДобавитьЗначение("ПолучательБанк2");
ОбязательныеАтрибуты.ДобавитьЗначение("ПолучательБИК");
ОбязательныеАтрибуты.ДобавитьЗначение("НазначениеПлатежа");
АтрибутыДокументов=СоздатьОбъект("СписокЗначений");
Для К= 1 по ТаблицаДокументов.КоличествоКолонок() Цикл
Колонка=ТаблицаДокументов.ПолучитьПараметрыКолонки(К);
АтрибутыДокументов.ДобавитьЗначение(Колонка, Врег(Колонка));
КонецЦикла;
ВидыОпераций=СоздатьОбъект("СписокЗначений");
ВидыОпераций.Установить("Платежное поручение", "01"); // 01 - Списано, зачислено по платежному поручению
ВидыОпераций.Установить("Платежное требование", "02"); // 02 - Оплачено, зачислено по платежному требованию
ВидыОпераций.Установить("Денежный чек", "03"); // 03 - Оплачен наличными денежный чек
ВидыОпераций.Установить("Объявление на взнос наличными", "04"); // 04 - Поступило наличными по объявлению на взнос наличными
ВидыОпераций.Установить("Платежное требование-поручение", "05"); // 05 - Оплачено, зачислено по требованию-поручению
ВидыОпераций.Установить("Инкассовое поручение", "06"); // 06 - Оплачено, зачислено по инкассовому поручению
ВидыОпераций.Установить("Расчетный чек", "07"); // 07 - Оплачено, поступило по расчетному чеку
ВидыОпераций.Установить("Аккредитив", "08"); // 08 - Открытие аккредитива, зачисление сумм
// неиспользованного, аннулированного аккредитива
ВидыОпераций.Установить("Мемориальный ордер", "09"); // 09 - Списано, зачислено по мемориальному
// (расходному, приходному кассовому) ордеру
ВидыОпераций.Установить("Погашение кредита", "10"); // 10 - Документы по погашению кредита, кроме поименованных выше
ВидыОпераций.Установить("Выдача кредита", "11"); // 11 - Документы по выдаче кредита, зачислению
// кредита на счет, кроме поименованных выше
ВидыОпераций.Установить("Авизо", "12"); // 12 - Зачислено на основании авизо
ВидыОпераций.Установить("Банковская карта", "13"); // 13 - Расчеты с применением банковских карт
ЗагрРасчетныеСчета=СоздатьОбъект("СписокЗначений");
ЗагрВидыДокументов=СоздатьОбъект("СписокЗначений");
ЗагрДокументы=СоздатьОбъект("СписокЗначений");