powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Задваиваются документы при экспорте из Газпромбанка в 1С
15 сообщений из 15, страница 1 из 1
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36116303
arrio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1С 7.7 Бухучет 4.5 462 нетиповая.
Задваиваются документы при экспорте из Газпромбанка в 1С, а затем импорте в 1С 7.7. В журнале Банк создаются платежные поручения с разными номерами, но по сути они просто дублируются - один с суммой, другие - без суммы. В ошибках выдает - номер не уникальный, и присваивает другой номер. Могу расписать подробней.

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36116392
Алексей2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очевидно, что не верный код в момент выгрузки или в момент загрузки.
а еще я слышал в Windows 7 глюки есть, помогите выловить?

для спящего время бодрствования равносильно сну
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36117136
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей2003, ну вполне возможно что и есть особенности но насчет ошибок при парсинге чего либо я сомневаюсь... если б импорт не через промежуточный файл (скажем по ОЛЕ) то ещё что то могло бы быть кроме ошибок кода или самой выгрузки а т.к. это просто "разбор" некого файла выгрузки то вряд ли

arrio, чтобы что-то можно было сказать необходима обработка импорта и собственно сам файлик откуда импорт идёт (можно без реквизитов и правильных сумм но чтоб данные со структурой были)
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36117494
Фотография bot67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrio,

Если загрузка документов делается стандартной обработиной из Бухгалтерии, то там почему-то сделано, чтобы номера документов обрезались до трех символов. Отсюда и дублирование номеров при загрузке потому что номер 1234 превращается в 234.
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36117640
Егорище85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программиста уволили?
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36118405
arrio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Last1Cmen, файлик импорта

1CClientBankExchange
ВерсияФормата=1.01
Кодировка=Windows
Отправитель=Бухгалтерский учет, редакция 4.5
Получатель=Система Клиент-Банк "BClient"
ДатаСоздания=30.07.2009
ВремяСоздания=09:09:58
ДатаНачала=29.07.2009
ДатаКонца=29.07.2009
Документ=Платежное поручение
СекцияДокумент=Платежное поручение
Номер=467
Дата=29.07.2009
Сумма=$$$
ПлательщикРасчСчет=nash_secret_chet
ПлательщикИНН=INN(nash)
Плательщик1=NASHA_FIRMA
ПлательщикБанк1=ГПБ (ОАО)
ПлательщикБанк2=URUPINSK
ПлательщикБИК=BIK(nash)
ПлательщикКорсчет=KORRSHET(nash)
ПолучательСчет=40**************01
ПолучательИНН=77*****88
ПолучательБИК=04****19
ПолучательКорсчет=30**************19
ВидПлатежа=Электронно
ВидОплаты=01
Очередность=6
НазначениеПлатежа=Опл по сч369 от 05.06.09 (**,82), сч189 от 03.04.09 (**,18) за краску. Курс:43,7675. В том числе НДС 18% **.47 руб.
ПолучательБанк1=ОАО БАНК
ПолучательБанк2=URUPINSK
ПлательщикКПП=50*****01
ПолучательКПП=77*****01
СтатусСоставителя=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательДаты=
ПоказательТипа=
Получатель1=ЗАО КЛИЕНТ 3
ПоказательНомера=
КонецДокумента
СекцияДокумент=Платежное поручение
Номер=466
Дата=29.07.2009
Сумма=$$$
ПлательщикРасчСчет=nash_secret_chet
ПлательщикИНН=INN(nash)
Плательщик1=NASHA_FIRMA
ПлательщикБанк1=ГПБ (ОАО)
ПлательщикБанк2=URUPINSK
ПлательщикБИК=BIK(nash)
ПлательщикКорсчет=KORRSHET(nash)
ПолучательСчет=40**************00
ПолучательИНН=77*****024
ПолучательБИК=04****99
ПолучательКорсчет=30**************99
ВидПлатежа=Электронно
ВидОплаты=01
Очередность=6
НазначениеПлатежа=Оплата по сч1324 от 08.07.09 (**,06), сч1313 от 07.07.09 (**,94) за материалы. В том числе НДС 18% **.42 руб.
ПолучательБанк1=ООО "КЛИЕНТ"
ПолучательБанк2=URUPINSK
ПлательщикКПП=50*****01
ПолучательКПП=77*****01
СтатусСоставителя=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательДаты=
ПоказательТипа=
Получатель1=ООО "КЛИЕНТ 2"
ПоказательНомера=
КонецДокумента
СекцияДокумент=Платежное поручение
Номер=466
Дата=29.07.2009
ДатаСписано=29.07.2009
ДатаПоступило=29.07.2009
Сумма=$$$
ПлательщикРасчСчет=nash_secret_chet
ПлательщикСчет=nash_secret_chet
ПлательщикИНН=INN(nash)
Плательщик1=NASHA_FIRMA
ПлательщикБанк1=ГПБ (ОАО)
Плательщик3=ГПБ (ОАО)
ПлательщикБанк2=URUPINSK
Плательщик4=URUPINSK
ПлательщикБИК=BIK(nash)
ПлательщикКорсчет=KORRSHET(nash)
ПолучательСчет=40**************00
ПолучательИНН=77*****024
ПолучательБИК=04****99
ПолучательКорсчет=30**************99
ВидОплаты=1
ВидПлатежа=
Очередность=6
НазначениеПлатежа=Оплата по сч1324 от 08.07.09 (**,06), сч1313 от 07.07.09 (**,94) за материалы. В том числе НДС 18% **.42 руб.
ПолучательБанк1=ООО "КЛИЕНТ"
Получатель3=ООО "КЛИЕНТ"
ПолучательБанк2=URUPINSK
Получатель4=URUPINSK
ПлательщикКПП=50*****01
ПолучательКПП=77*****01
СтатусСоставителя=0
ПоказательКБК=
ОКАТО=
ПоказательОснования=0
ПоказательПериода=0
ПоказательДаты=0
ПоказательТипа=0
Получатель1=ООО "КЛИЕНТ 2"
ПоказательНомера=0
КонецДокумента
СекцияДокумент=Платежное поручение
Номер=617
Дата=29.07.2009
ДатаСписано=29.07.2009
ДатаПоступило=29.07.2009
Сумма=$$$
ПлательщикРасчСчет=40**************01
ПлательщикСчет=40**************01
ПлательщикИНН=77*****02
Плательщик1=ООО "КЛИЕНТ 3"
ПлательщикБанк1=ЗАО КБ "СИТИБАНК"
Плательщик3=ЗАО КБ "СИТИБАНК"
ПлательщикБанк2=URUPINSK
Плательщик4=URUPINSK
ПлательщикБИК=044525202
ПлательщикКорсчет=30**************02
ПолучательСчет=nash_secret_chet
ПолучательИНН=INN(nash)
ПолучательБИК=BIK(nash)
ПолучательКорсчет=KORRSHET(nash)
ВидОплаты=1
ВидПлатежа=
Очередность=6
НазначениеПлатежа=Оплата за этикетку согласно сч-факт.1715, 1716 от 28.06.08, с учетом кредит-ноты128/2009, 129/2009 от 24.06.09, 136/200 9 от 30.06.09 ВКЛЮЧАЯ НДС **.74
ПолучательБанк1=ГПБ (ОАО)
Получатель3=ГПБ (ОАО)
ПолучательБанк2=URUPINSK
Получатель4=URUPINSK
ПлательщикКПП=0
ПолучательКПП=0
СтатусСоставителя=0
ПоказательКБК=
ОКАТО=
ПоказательОснования=0
ПоказательПериода=0
ПоказательДаты=0
ПоказательТипа=0
Получатель1=ЗАО ЭДАС ПАК
ПоказательНомера=0
КонецДокумента
СекцияДокумент=Платежное поручение
Номер=467
Дата=29.07.2009
ДатаСписано=29.07.2009
ДатаПоступило=29.07.2009
Сумма=$$$
ПлательщикРасчСчет=nash_secret_chet
ПлательщикСчет=nash_secret_chet
ПлательщикИНН=INN(nash)
Плательщик1=NASHA_FIRMA
ПлательщикБанк1=ГПБ (ОАО)
Плательщик3=ГПБ (ОАО)
ПлательщикБанк2=URUPINSK
Плательщик4=URUPINSK
ПлательщикБИК=BIK(nash)
ПлательщикКорсчет=KORRSHET(nash)
ПолучательСчет=40**************01
ПолучательИНН=77*****88
ПолучательБИК=04****19
ПолучательКорсчет=30**************19
ВидОплаты=1
ВидПлатежа=
Очередность=6
НазначениеПлатежа=Опл по сч369 от 05.06.09 (**,82), сч189 от 03.04.09 (**,18) за краску. Курс:43,7675. В том числе НДС 18% **.47 руб.
ПолучательБанк1=ОАО БАНК
Получатель3=ОАО БАНК 2
ПолучательБанк2=URUPINSK
Получатель4=URUPINSK
ПлательщикКПП=50*****01
ПолучательКПП=77*****01
СтатусСоставителя=0
ПоказательКБК=
ОКАТО=
ПоказательОснования=0
ПоказательПериода=0
ПоказательДаты=0
ПоказательТипа=0
Получатель1=ЗАО КЛИЕНТ 3
ПоказательНомера=0
КонецДокумента
КонецФайла
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36118475
arrio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Last1Cmen,
Код: plaintext
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  - Расчеты с применением банковских карт

ЗагрРасчетныеСчета=СоздатьОбъект("СписокЗначений");
ЗагрВидыДокументов=СоздатьОбъект("СписокЗначений");
ЗагрДокументы=СоздатьОбъект("СписокЗначений");
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36118777
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrio,

надо содержимое функции (глобальный модуль)

глПреобразоватьНомерДок


у платежного поручения в 1с сколько символов в номере ?

сам дубль (как и нормальный) создаётся в стрроке 1318 а причина в строке 1297 из-за результата который получен в строке 1296... а там неверное может быть из-за разных длин номеров... скорее всего в конфигурации больше т.к. после "обрезания" до 3х символов во вновь созданных уже есть такие документы (похоже на версию bot67 -а)


Код: plaintext
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.
	Объект=СоздатьОбъект("Документ."+ВидДокумента);
	
	Объект.ВыбратьДокументы(ТаблицаДокументов.Дата, ТаблицаДокументов.Дата);
	Пока Объект.ПолучитьДокумент()= 1  Цикл
		
		Номер = ПолучитьДанные("НомерДокумента", Объект.ТекущийДокумент());
		Если Номер <> ТаблицаДокументов.Номер Тогда
			Продолжить;
		КонецЕсли;
		
		Если ТипЗначенияСтр(Организация) = "Справочник" Тогда
			Если ПолучитьДанные("Организация", Объект.ТекущийДокумент()) = Организация Тогда
				Прервать;
			КонецЕсли;
		Иначе
			Прервать;
		КонецЕсли;
		
	КонецЦикла;
	
	Если Объект.Выбран()= 0  Тогда
		// Необходимо добавить в базу платежные документы, которые оформлены от нашего имени
		// такие документы пользователи могут ввести непосредственно в программе клиента банка.
		// Важно! У таких документов реквизит в таблице РольОрганизации + "ИНН" должен совпадать с 
		// константой "ИННОрганизации"
		ИННОрганизации =  ПолучитьИНН(Константа.ПолучитьАтрибут("ИННОрганизации"));
		Если (ПустаяСтрока(ИННОрганизации) =  0 ) И  (СокрЛП(ТаблицаДокументов.ПолучитьЗначение(ТаблицаДокументов.НомерСтроки, РольОрганизации + "ИНН")) = ИННОрганизации) Тогда
			Объект.Новый();
	        Объект.НомерДок = Лев(Объект.НомерДок, СтрДлина(Объект.НомерДок) -  3 ) + Прав(ТаблицаДокументов.Номер,  3 );
		Иначе
			Возврат ПолучитьПустоеЗначение("Документ");
			
		КонецЕсли;

	КонецЕсли;
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36118790
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да - в выгрузке у тебя 3 символа... процедуру получения номера преобразовать до возврата 3х символов (вообще очень интересно а какой там период нумератора стоит... для года 999 номеров неужели достаточно)
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36119918
arrio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Last1Cmen,

//*****************************************************************************
// глПреобразоватьНомерДок( <НомерДок>, <ВыводитьНули> ,<ВыводитьПрефикс> ) Экспорт
//
// Параметры:
// <НомерДок> - значение типа Строка - номер документа
// <ВыводитьНули>
// - число
// 0 - не выводить лидирующие нули
// 1 - выводить лидирующие нули
// <ВыводитьПрефикс>
// - число
// 0 - не выводить префикс
// 1 - выводить префикс
// 2 - выводить префикс сзади
//
// Возвращаемое значение.
// Строка - номер документа для печати
//
// Описание:
// Процедура предназначена для преобразования номера документа.
// Используется, например, при выводе номера документа на печать.
//
Функция глПреобразоватьНомерДок(НомерДок,ВыводитьНули=0,ВыводитьПрефикс=0) Экспорт

НовыйНомерДок=НомерДок;
Префикс=Лев(НовыйНомерДок,1);

Если ПустаяСтрока(ТекущаяИБКод())=1 Тогда
Префикс=""; //Работа не в распределенной ИБ
ИначеЕсли (Префикс>="0") И (Префикс<="9") Тогда
Префикс=""; //Не использовался буквенный префикс
Иначе
НовыйНомерДок=Сред(НовыйНомерДок,2); //Выделение префикса
КонецЕсли;

Если ВыводитьНули=0 Тогда //Отсекание лидирующих нулей
Для Сч=1 По СтрДлина(НовыйНомерДок)-1 Цикл
Если Лев(НовыйНомерДок,1)="0" Тогда
НовыйНомерДок=Сред(НовыйНомерДок,2);
КонецЕсли;
КонецЦикла;
КонецЕсли;

Если (ВыводитьПрефикс=0) ИЛИ (ПустаяСтрока(Префикс)=1) Тогда
Возврат НовыйНомерДок;
ИначеЕсли ВыводитьПрефикс=1 Тогда
Возврат Префикс+НовыйНомерДок;
ИначеЕсли ВыводитьПрефикс=2 Тогда
Возврат НовыйНомерДок+"/"+Префикс;
КонецЕсли;

Возврат НомерДок;
КонецФункции // глПреобразоватьНомерДок
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36120765
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrio,

автору платежного поручения в 1с сколько символов в номере ?

и номера последних нескольких в базе какие (обрезаются до 3х последних а если там 4 значащих разряда то будут дубли)
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36120889
arrio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Last1Cmen,
Обработан документ: Движение средств по расчетному счету 469 (30.07.09)
Обработан документ: Движение средств по расчетному счету 468 (30.07.09)
Неудачная попытка записи документа: : Номер не уникальный!
Обработан документ: Движение средств по расчетному счету 470 (30.07.09)
Неудачная попытка записи документа: : Номер не уникальный!
Обработан документ: Движение средств по расчетному счету 471 (30.07.09)
Создан документ: Выписка 00000296 (30.07.09)
В документе "Операция по р/с" №471 от 30.07.09 не указан банковский счет нашей организации.
По данному документу строка выписки банка не сформирована.
Записан документ: Выписка 00000296 (30.07.09)
Неудачная попытка записи документа: : Номер не уникальный!
Обработан документ: Движение средств по расчетному счету 469 (30.07.09)
Неудачная попытка записи документа: : Номер не уникальный!

и еще, извиняюсь, но я код из глобального модуля не из той базы указал!!! Вот верный:

Код: plaintext
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.
глПреобразоватьНомерДок( <НомерДок>, <ВыводитьНули> ,<ВыводитьПрефикс> ) Экспорт
//
// Параметры:
//  <НомерДок> - значение типа Строка - номер документа 
//  <ВыводитьНули> 
//     	 	   - число 
//				 0  - не выводить лидирующие нули
//				 1  - выводить лидирующие нули
//  <ВыводитьПрефикс> 
//     	 	   - число 
//				 0  - не выводить префикс
//				 1  - выводить префикс
//				 2  - выводить префикс сзади
//
// Возвращаемое значение.
//  Строка - номер документа для печати
//
// Описание:
// Процедура предназначена для преобразования номера документа.
// Используется, например, при выводе номера документа на печать.
//
Функция глПреобразоватьНомерДок(НомерДок,ВыводитьНули= 0 ,ВыводитьПрефикс= 0 ) Экспорт

	НовыйНомерДок=НомерДок;
	Префикс=Лев(НовыйНомерДок, 1 );
	
	Если ПустаяСтрока(ТекущаяИБКод())= 1  Тогда
	    Префикс=""; //Работа не в распределенной ИБ
	ИначеЕсли (Префикс>="0") И (Префикс<="9") Тогда
	    Префикс=""; //Не использовался буквенный префикс
	Иначе
		НовыйНомерДок=Сред(НовыйНомерДок, 2 );  //Выделение префикса
	КонецЕсли;        
	
	Если ВыводитьНули= 0  Тогда  //Отсекание лидирующих нулей
		Для Сч= 1  По СтрДлина(НовыйНомерДок)- 1  Цикл
			Если Лев(НовыйНомерДок, 1 )="0" Тогда
				НовыйНомерДок=Сред(НовыйНомерДок, 2 );
			КонецЕсли;
		КонецЦикла;								
	КонецЕсли;
	
	Если (ВыводитьПрефикс= 0 ) ИЛИ (ПустаяСтрока(Префикс)= 1 ) Тогда
		Возврат НовыйНомерДок;  
	ИначеЕсли ВыводитьПрефикс= 1  Тогда	
		Возврат Префикс+НовыйНомерДок;  
	ИначеЕсли ВыводитьПрефикс= 2  Тогда	
		Возврат НовыйНомерДок+"/"+Префикс;  
	КонецЕсли;
	
	Возврат НомерДок; 
КонецФункции	// глПреобразоватьНомерДок
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36121270
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrio, сколько символов в док-те платёжное поручение ? именно у них с уникальностью не всё в порядке из из-за того что они не могут создаться не заполняется уже и сама выписка


(если можно скрин этого журнала ну или на словах скажи кикие там номера)
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36121272
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а глПреобразоватьНомерДок... такая же :)

ещё может интересовать функция глобального модуля
глЗаполнитьСтрокуВыпискиПоПлатежномуДокументу
...
Рейтинг: 0 / 0
Задваиваются документы при экспорте из Газпромбанка в 1С
    #36659728
Майка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорь за некропост, столкнулись с такой же проблемой. Весь инет перерыли, нашли только эту тему, да и тут так и не написано чем дело кончилось.
Вобщем, докопались до следующего - при загрузке выписки формируются платежные документы, где для контрагента-плательщика подсталяется договор из справочника "Договоры контрагентов". И потом, когда формируется выписка, 1С сначала добавляет строку в нормальную выписку, а потом вдруг решает, что плательщик это и есть наша организация, а не контрагент, и пытается найти счет в справочнике счетов организации. А в справочнике счетов организации такого счета нет и появляется сообщение
"не указан банковский счет нашей организации".

Думаем сделать так:

обработка ПредприятиеКлиент

Процедура ПровестиДокументПоСчету(Документ, Счет, ДатаОперации='00.00.0000', Приход, Расход)

Если ПустоеЗначение(Счет)=1 Тогда Возврат; КонецЕсли;

тут добавить

Если Счет.Вид() <> "БанковскиеСчета" Тогда Возврат; КонецЕсли;

Кто что думает?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Задваиваются документы при экспорте из Газпромбанка в 1С
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]