Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 6
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Импорт из Аваль Банка          
bezzil Подменю пользователя
сообщение 05.09.19, 14:48
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Собственно проблема после перехода на Ibon (29 значные счета) выписка банка перестала грузится в 1с 7.70,027
вот код как это было

Тыц
//*******************************************
Перем ДБФ,Плат,Врем, тВрем, тДБФ, тПлат, Вал, тАрхПлат,зн;
Перем ПутьБД;

Процедура ЗаполнитьБВ() далее
Процедура ОткрытьБД() далее
Процедура ВыбратьПлатежки() далее
Процедура СоздПуть() далее[hide="Тыц"]//*******************************************
Перем ДБФ,Плат,Врем, тВрем, тДБФ, тПлат, Вал, тАрхПлат,зн;
Перем ПутьБД;

Процедура ЗаполнитьБВ() далее
Процедура ОткрытьБД() далее
Процедура ВыбратьПлатежки() далее
Процедура СоздПуть() далее

Процедура ПриОткрытии()
    Режим=2;
    Дата1=РабочаяДата();
    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=0 Тогда
        СоздПуть();
    КонецЕсли;
    ВыбратьПлатежки();
    //ОткрытьБД("ArhivPLT.dbf");
КонецПроцедуры

Функция Остаток(Контрагент,Сумма)
    тЗаказы = СоздатьОбъект("ТаблицаЗначений");
    ИтЗапр = СоздатьОбъект("БухгалтерскиеИтоги");
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Заказы,,1);
    ИтЗапр.ВыполнитьЗапрос(НачМесяца(Дата1),Дата1,"361",,,,,1);
    Ост = 0;
        ИтЗапр.ВыбратьСубконто(1);
        Если ИтЗапр.ПолучитьСубконто(1,,Контрагент) = 1 Тогда
            ИтЗапр.ВыбратьСубконто(2);
            Пока ИтЗапр.ПолучитьСубконто(2,,) = 1 Цикл
                Ост = (ИтЗапр.СКД() - ИтЗапр.СКК());
                Если (Цел(Ост) = Цел(Число(Сумма))) И (Цел(ИтЗапр.Субконто(2).Итог("СуммаСНДС"))=Цел(Ост)) Тогда
                    Возврат ИтЗапр.Субконто(2);
                КонецЕсли;    
            КонецЦикла;
        КонецЕсли;
    Возврат 0;
    //Возврат СокрЛ(Формат(Ост,"Ч14.2.'"));
КонецФункции

Процедура Помощь()      
Перем Подсказка;
    Если  Режим=1 Тогда          
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы платежи (строки), которые НЕ желаете включать в будущую банковскую выписку, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Формировать выписку', и в открывшемся документе Вам останется только выбрать заказы";
    Иначе
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы выписки (строки), которые НЕ желаете переносить в клиент-банк, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Успешно выгруженые платежки не отображаются больше в таблице, и выгрузить их повторно в клиент-банк нельзя.
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Выгрузить платежки ', запустите клиент-банк и проверьте, правильно ли заполнены Ваши платежки";
    КонецЕсли;
    Предупреждение(Подсказка);
КонецПроцедуры

Процедура ОткрФайл(табл,файл)
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тВрем.Очистить();
тТест.Очистить();              
    Если файл="" Тогда
        ИмяФайла="";
        ИмяПути ="";
        ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,,,);
        ПутьБД=ИмяПути+ИмяФайла;
    ИначеЕсли ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);
        //ПутьБД=файл;
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;

    //Сообщить(ПутьБД);
    Врем.ОткрытьФайл(ПутьБД);
    Если (Врем.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //Сообщить("БД:"+Врем.КоличествоПолей());
    Для п=1 по Врем.КоличествоПолей() Цикл
        Врем.ОписаниеПоля(п,ОписПоля,т,д,т1);
        тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    КонецЦикла;
    //Сообщить("Табл:"+тВрем.КоличествоКолонок());
    п=0;
    Врем.Первая();
    Для з=1 по Врем.КоличествоЗаписей() Цикл
        Врем.Перейти(з);
            тВрем.НоваяСтрока(з);
            Для п=1 по Врем.КоличествоПолей() Цикл
                тВрем.УстановитьЗначение(з,п,Врем.ПолучитьЗначениеПоля(п));
            КонецЦикла;
    КонецЦикла;              
    Врем.ЗакрытьФайл();
    тВрем.Выгрузить(Табл);
КонецПроцедуры

Функция ПроверитьДокумент(НомерДок)
Перем тПлат, тАрхПлат;
ОткрФайл(тПлат,"plat.dbf");
ОткрФайл(тАрхПлат,"Detail_Y.dbf");
//тАрхПлат.Выгрузить();
Если тПлат.НайтиЗначение(НомерДок,,"NOMDOK")=1 Тогда
    //тАрхПлат.Выгрузить(тТест);
    Возврат 1;
КонецЕсли;
Если тАрхПлат.НайтиЗначение(НомерДок,,"NOMPLATDOK")=1 Тогда
    Возврат 1;
КонецЕсли;
    Возврат 0;
КонецФункции    


Процедура ВыбратьПлатежки()
    Перем Стр;
    тТест.УдалитьСтроки();
    тТест.НоваяКолонка("NOMDOK",,,, "Номер",,,);
    тТест.НоваяКолонка("DATDOK",,,, "Дата",,,);
    тТест.НоваяКолонка("NAMEPRED",,,, "Плательщик",,,);
    тТест.НоваяКолонка("MFOPRED",,,, "МФО плательщика",,,);
    тТест.НоваяКолонка("NAMEKONTR",,,, "Получатель",,,);
    тТест.НоваяКолонка("MFOKONTR",,,, "МФО получателя",,,);
    тТест.НоваяКолонка("CHETPRED",,,, "Счет плательщика",,,);
    тТест.НоваяКолонка("CHETKONTR",,,, "Счет получателя",,,);
    тТест.НоваяКолонка("OKPOPRED",,,, "ОКПО плательщика",,,);
    тТест.НоваяКолонка("NAZNACH",,,, "Содержание",,,);
    тТест.НоваяКолонка("OKPOKONTR",,,, "ОКПО получателя",,,);
    тТест.НоваяКолонка("SUMMDOK",,,, "Сумма",,,);
    тТест.НоваяКолонка("DATOKUSL",,,, "Дата валютирования",,,);
    стр=0;  

    Док = СоздатьОбъект("Документ.ПлатежноеПоручение");
    Док.ВыбратьДокументы(Дата1,Дата1);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (ПроверитьДокумент(Док.НомерДок)=0) И (Док.ПометкаУдаления()=0) Тогда
            стр=стр+1;                                      
            тТест.НоваяСтрока(стр);
            тТест.УстановитьЗначение(стр,"NOMDOK",Док.НомерДок);
            тТест.УстановитьЗначение(стр,"DATDOK",Формат(Док.ДатаДок,"ДГГГГММДД"));
            тТест.УстановитьЗначение(стр,"NAMEPRED",Константа.ОснФирма.Полное_Назв);
            тТест.УстановитьЗначение(стр,"MFOPRED",Число(ВыбСчет.Банк.Код));
            //Если Док.Заказ.Выбран()=1 Тогда
            //    Попытка
                    тТест.УстановитьЗначение(стр,"NAMEKONTR",Док.Контрагент.ПолнНаименование);
                    тТест.УстановитьЗначение(стр,"MFOKONTR",СокрЛП(Док.РСчетКонтрагента.Банк.Код));
                    тТест.УстановитьЗначение(стр,"CHETKONTR",СокрЛП(Док.РСчетКонтрагента.НомерСчета));
                    тТест.УстановитьЗначение(стр,"OKPOKONTR",СокрЛП(Док.Контрагент.ЕДРПОУ));
            //    Исключение
            //    КонецПопытки;    
            //КонецЕсли;
            тТест.УстановитьЗначение(стр,"CHETPRED",Число(ВыбСчет.НомерСчета));
            тТест.УстановитьЗначение(стр,"OKPOPRED",СокрЛП(Константа.ОснФирма.КодОКПО));
            тТест.УстановитьЗначение(стр,"NAZNACH",Док.НазначениеПлатежа.ПолнНаименование);
            тТест.УстановитьЗначение(стр,"SUMMDOK",Формат(Док.СуммаСНДС,"Ч12.2"));
            тТест.УстановитьЗначение(стр,"DATOKUSL","ПРЕДОПЛАТА");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры    

Процедура СоздПуть()
    ТекстДок=СоздатьОбъект("Текст");
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьКаталог(ИмяПути,"Выберите каталог с базой данных КБ Аваль",)=0 Тогда
        //ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0
            Возврат;
        КонецЕсли;
        //ПутьБД=ИмяПути+ИмяФайла;
        //Сообщить(КаталогПрограммы()+"klbank.ini",);
        Попытка
            ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");     
        Исключение
        КонецПопытки;
        ТекстДок.ВставитьСтроку(1,ИмяПути);
        //Сообщить("Путь "+ИмяПути);
        ТекстДок.Записать(КаталогПрограммы()+"klbank.ini");
КонецПроцедуры    


Процедура СформироватьДБФ()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок, тПлат;
тПлат = СоздатьОбъект("ТаблицаЗначений");
ТекстДок=СоздатьОбъект("Текст");
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежек!");
        Возврат;
    КонецЕсли;

    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\plat.dbf");
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    Если ПустаяСтрока(ПутьБД)=0 Тогда
        Плат.ОткрытьФайл(ПутьБД);
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    //Сообщить("ПутьБД"+ПутьБД);
    Если (Плат.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //********************Сверка с текущим архивом
    //Сообщить(ИмяПути+"\Detail_Y.dbf");
    //АрхПлат.ОткрытьФайл(СокрЛП(ТекстДок.ПолучитьСтроку(1))+"\Detail_Y.dbf");
    //Если (АрхПлат.Открыта()=0) Тогда
    //    Предупреждение("Не могу открыть файл "+ИмяПути+"\Detail_Y.dbf"+"!");
    //    возврат;
    //КонецЕсли;
    //Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //    АрхПлат.ОписаниеПоля(п,ОписПоля,т,д,т1);
    //    тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    //КонецЦикла;                                    
    //АрхПлат.Первая();
    //Для з=1 по АрхПлат.КоличествоЗаписей() Цикл
    //    АрхПлат.Перейти(з);
    //        тВрем.НоваяСтрока(з);
    //        Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //            тВрем.УстановитьЗначение(з,п,АрхПлат.ПолучитьЗначениеПоля(п));
    //        КонецЦикла;
    //КонецЦикла;              
    //АрхПлат.ЗакрытьФайл();
    //Для н=1 по тТест.КоличествоСтрок() Цикл
    //    Если тВрем.НайтиЗначение(тТест.ПолучитьЗначение(н,"NOMDOK"),,"NOMPLATDOK")=0 Тогда
    //        тТест.ТекущаяСтрока(н);
    //        тПлат.ДобавитьСтроку(тТест.ТекущаяСтрока());    
    //    КонецЕсли;
    //КонецЦикла;
    //тПлат.Выгрузить(тТест);
    //возврат;
    //********************Сверка с текущим архивом
    Плат.Последняя();
    Для п=1 по тТест.КоличествоСтрок() Цикл
        Плат.Добавить();
        Плат.NOMDOK=тТест.ПолучитьЗначение(п,"NOMDOK");
        Плат.DATDOK=тТест.ПолучитьЗначение(п,"DATDOK");        
        Плат.NAMEPRED=тТест.ПолучитьЗначение(п,"NAMEPRED");    
        Плат.MFOPRED=тТест.ПолучитьЗначение(п,"MFOPRED");        
        Плат.NAMEKONTR=тТест.ПолучитьЗначение(п,"NAMEKONTR");    
        Плат.MFOKONTR=тТест.ПолучитьЗначение(п,"MFOKONTR");      
        Плат.CHETPRED=тТест.ПолучитьЗначение(п,"CHETPRED");      
        Плат.CHETKONTR=тТест.ПолучитьЗначение(п,"CHETKONTR");    
        Плат.OKPOPRED=тТест.ПолучитьЗначение(п,"OKPOPRED");
        Плат.NAZNACH=тТест.ПолучитьЗначение(п,"NAZNACH");
        Плат.OKPOKONTR=тТест.ПолучитьЗначение(п,"OKPOKONTR");
        Плат.SUMMDOK=тТест.ПолучитьЗначение(п,"SUMMDOK");
        Плат.DATOKUSL=тТест.ПолучитьЗначение(п,"DATOKUSL");
    Плат.Записать();
    КонецЦикла;
    Плат.ЗакрытьФайл();
    тТест.Очистить();
    тПлат.Выгрузить(тТест);
    Предупреждение("Документы успешно выгружены!");
КонецПроцедуры
//***********************************************
Процедура Обраб()  
            Если ВвестиЗначение(зн,"Вибір значення ","Счет.Основной") = 1 Тогда
                  тТест.УстановитьЗначение(тТест.ТекущаяСтрока(),"КоррСчет",зн);
            КонецЕсли;
КонецПроцедуры  
//***********************************************,
Процедура СменаРежима()
    //Сообщить(Режим);
    тТест.Очистить();  
    тДБФ.Очистить();
    Если  Режим=1 Тогда          
        Форма.кнФормироватьВыписки.Видимость(1);
        Форма.кнВыгрузитьПлатежки.Видимость(0);
        ОткрытьБД();
    Иначе
        Форма.кнФормироватьВыписки.Видимость(0);
        Форма.кнВыгрузитьПлатежки.Видимость(1);
        ВыбратьПлатежки();
    КонецЕсли;
КонецПроцедуры
                                      
Процедура Выполнить()
    ЗаполнитьБВ();
КонецПроцедуры

Процедура УдалениеСтроки()
    Если тТест.КоличествоСтрок()>0 Тогда
        тТест.УдалитьСтроку();
    КонецЕсли;
КонецПроцедуры //УдалениеПД
                                
Процедура ОткрытьБД()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тТест.Очистить();
    ИмяФайла="";
    ИмяПути ="";
ФайлТекст = СоздатьОбъект("Текст");
файл = "v"+Прав(Формат(Дата1,"ДГГГГММДД"),6)+".zzz";
Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
    ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
//    ПутьБД= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);  
    Путь= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\");
    ФС.ВыбратьФайл(0,ИмяФайла, Путь, ,файл,,);
    ПутьБД=Путь+ИмяФайла;
Иначе
    ИмяФайла="";
    ИмяПути ="";
    ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,);
    ПутьБД=ИмяПути+ИмяФайла;
КонецЕсли;
    ФайлТекст.КодоваяСтраница(0);
    ФайлТекст.Открыть(ПутьБД);
    Если ФайлТекст.КоличествоСтрок() = 0 Тогда
        Предупреждение("Выписки банка не найдены");
    Возврат;
    КонецЕсли;
    
    тДБФ.НоваяКолонка("NOMDOK",,,, "NOMDOK",,,);
    тДБФ.НоваяКолонка("DATKVOPL",,,, "DATKVOPL",,,);
    тДБФ.НоваяКолонка("CHETPRED","Число",14,, "CHETPRED",,,);
    тДБФ.НоваяКолонка("OKPOKONTR","Строка",10,, "OKPOKONTR",,,);
    тДБФ.НоваяКолонка("NAMEKONTR",,,, "NAMEKONTR",,,);
    тДБФ.НоваяКолонка("SUMMDOK","Число",15,2, "SUMMDOK",,,);
    тДБФ.НоваяКолонка("DEB_KRED","Число",1,, "DEB_KRED",,,);
    тДБФ.НоваяКолонка("NAZNACH",,,, "NAZNACH",,,);
    тДБФ.НоваяКолонка("КоррСчет","Счет.Основной");  
    ррр = 0;
    Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл
        стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));  
    Если Лев(стр,1) = "0" Тогда
        Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
    ррр = 0;
        Продолжить;
    КонецЕсли;
    ррр = 1;
        СчетОсн = Число(Сред(стр,2,14));
        ДатаВ = Сред(стр,16,8);
    ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда    
        Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда  
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
        Продолжить;
        КонецЕсли;  
        тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NOMDOK",Сред(стр,159,10));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DATKVOPL",ДатаВ);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"CHETPRED",СчетОсн);
        Если Сред(стр,2,1) = "+" Тогда
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,26,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,40,40));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",1);
        Иначе
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,103,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,117,40));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",0);
        КонецЕсли;
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"SUMMDOK",Число(Сред(стр,169,19))/100);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAZNACH",Сред(стр,212,255));  
//        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",Сред(стр,159,10));
        
//        Для з=1 по ДБФ.КоличествоЗаписей() Цикл
//        ДБФ.Перейти(з);    
//       Если ДБФ.ПолучитьЗначениеПоля("CHETPRED") <> Число(ВыбСчет.Номер) Тогда
//        Продолжить;
//        КонецЕсли;
//        Если СокрЛП(ДБФ.ПолучитьЗначениеПоля("DATKVOPL"))=(Формат(Дата1,"ДГГГГММДД")) Тогда
            Назначение=Сред(стр,212,255);  
            Если (Найти(Назначение,"овердрафт")<> 0) Тогда  
                 Продолжить;
            КонецЕсли;
//            тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
//            Для п=1 по ДБФ.КоличествоПолей() Цикл
//                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),п,ДБФ.ПолучитьЗначениеПоля(п));
//            КонецЦикла;  
//            Назначение=ДБФ.ПолучитьЗначениеПоля("NAZNACH");
            ДенКасса= Сред(стр,40,40);
        Если (Сред(стр,2,1) = "-") Тогда
              Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
                  или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
                  или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
                  или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"тютюн")<> 0) Тогда
                  тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;  
              Если (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"горіл")<> 0)
                   или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"таба")<> 0)
                   или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
                   или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0)
                   или (Найти(Назначение,"сигар")<> 0)Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"Плата за инк")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("95.2"));
            КонецЕсли;
        Иначе
            Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
              или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
              или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
              или (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"ПИВО")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"тютюн")<> 0)
              или (Найти(Назначение,"горіл")<> 0) или (Найти(Назначение,"таба")<> 0)
              или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)  
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
              или (Найти(Назначение,"сигар")<> 0) или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если ((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("33.3"));
            КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"повор")<> 0) или (Найти(Назначение,"ПОВОР")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
            Если (((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) и (Найти(ДенКасса,"Центр.")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
        КонецЕсли;
        КонецЕсли;
    КонецЦикла;              
    
//    ДБФ.ЗакрытьФайл();
    тДБФ.Выгрузить(тТест);
    тТест.Сортировать("DEB_KRED,SUMMDOK");
    Для п=1 по тТест.КоличествоКолонок() Цикл
        тТест.ПолучитьПараметрыКолонки(п,,,,ОписПоля,,,);  
        Если (ОписПоля="КоррСчет") Тогда  
            тТест.УстановитьПараметрыКолонки(п,"Счет.Основной",,,"КоррСчет",6,,);
        ИначеЕсли (ОписПоля="NAMEKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Контрагент",16,,);
        ИначеЕсли (ОписПоля="OKPOKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"ОКПО",8,,);
        ИначеЕсли (ОписПоля="SUMMDOK") Тогда
            тТест.УстановитьПараметрыКолонки(п,"Число",,2,"Сумма",8,"Ч012.2",2);
        ИначеЕсли (ОписПоля="NAZNACH") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Содержание",30,,);
        Иначе
            тТест.ВидимостьКолонки(Строка(п),0);
        КонецЕсли;
    КонецЦикла;
    
//    КонецЦикла;
КонецПроцедуры    

Процедура ЗаполнитьБВ()
    Перем Контра;
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежей!");
        Возврат;
    КонецЕсли;
    тДБФ.Загрузить(тТест);
    Док = СоздатьОбъект("Документ.ВыпискаБанка");
    спрКонтр = СоздатьОбъект("Справочник.Клиенты");
    тДБФ.Сортировать("DEB_KRED,SUMMDOK");
    Док.Новый();
//    Фирма = глВосстановитьЗначение(,"БазФирма");
    //глУстановитьНомерДокумента(Контекст);
//    глУстановитьНомерДокумента(Док);
//    РСчет = Фирма.РС;
    Док.БанковскийСчет = ВыбСчет;  
    Док.ДатаДок = Дата1;
    Док.Автор=Пользователь;
    Док.Идентификатор="ВыпискаБанка";
    Док.Фирма=Константа.ОснФирма;
    Док.Фирма.ИспользоватьДату(Дата1);
    Док.СчетУчета = ВыбСчет.БухгалтерскийСчет;
//    Док.Субконто.Доступность(1);
Для з=1 по тДБФ.КоличествоСтрок() Цикл  
    Если тДБФ.ПолучитьЗначение(з,"CHETPRED") <> Число(ВыбСчет.Номер) Тогда
        Продолжить;
    КонецЕсли;
    Док.НоваяСтрока();                            
        //Сообщить(тДБФ.ПолучитьЗначение(з,"DEB_KRED"));
        Если (тДБФ.ПолучитьЗначение(з,"DEB_KRED")=1) Тогда
            Док.ПриходРасход = Перечисление.ПлюсМинус.Плюс;            
        Иначе
            Док.ПриходРасход = Перечисление.ПлюсМинус.Минус;            
        КонецЕсли;      
            Док.НазначениеПлатежа = тДБФ.ПолучитьЗначение(з,"NAZNACH");
    // проставляем реквизиты "по умолчанию"
                   Если Док.ПриходРасход = Перечисление.ПлюсМинус.Минус Тогда
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Списание;
                    Док.Расход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                    КонецЕсли;
                Иначе  
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Поступление;
                    Док.Приход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");  
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                         Док.НДС = Док.Приход/6;
                    КонецЕсли;
                КонецЕсли;
        Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
        Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
        Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));

        Контра=тДБФ.ПолучитьЗначение(з,"NAMEKONTR");
        КонтраКод=тДБФ.ПолучитьЗначение(з,"OKPOKONTR");
        Док.НомерПлатДок=тДБФ.ПолучитьЗначение(з,"NOMDOK");
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Фирмы Тогда  
            Док.Субконто1 = Константа.ОснФирма;
        КонецЕсли;
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда
        спрКонтр.ИспользоватьДату(ТекущаяДата());
        Если спрКонтр.НайтиПоРеквизиту("КодОКПО",КонтраКод,1)=1 Тогда
             Если спрКонтр.ПометкаУдаления() = 1 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" Помечен на удаление. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;  
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
            Иначе    
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            КонецЕсли;
        ИначеЕсли ПустаяСтрока(Контра)=0 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" не найден. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
        Иначе
КонецЕсли;
КонецЕсли;  
КонецЦикла;    
//       Форма.Закрыть();  
        НачатьТранзакцию();
           Док.Записать();
        ЗафиксироватьТранзакцию();
       ОткрытьФорму(Док.ТекущийДокумент(),0);
КонецПроцедуры

ДБФ = СоздатьОбъект("XBase");
Плат = СоздатьОбъект("XBase");
Врем = СоздатьОбъект("XBase");
АрхПлат = СоздатьОбъект("XBase");
тДБФ = СоздатьОбъект("ТаблицаЗначений");  
тВрем = СоздатьОбъект("ТаблицаЗначений");
тПлат = СоздатьОбъект("ТаблицаЗначений");
тАрхПлат = СоздатьОбъект("ТаблицаЗначений"); [/hide]

Процедура ПриОткрытии()
    Режим=2;
    Дата1=РабочаяДата();
    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=0 Тогда
        СоздПуть();
    КонецЕсли;
    ВыбратьПлатежки();
    //ОткрытьБД("ArhivPLT.dbf");
КонецПроцедуры

Функция Остаток(Контрагент,Сумма)
    тЗаказы = СоздатьОбъект("ТаблицаЗначений");
    ИтЗапр = СоздатьОбъект("БухгалтерскиеИтоги");
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Заказы,,1);
    ИтЗапр.ВыполнитьЗапрос(НачМесяца(Дата1),Дата1,"361",,,,,1);
    Ост = 0;
        ИтЗапр.ВыбратьСубконто(1);
        Если ИтЗапр.ПолучитьСубконто(1,,Контрагент) = 1 Тогда
            ИтЗапр.ВыбратьСубконто(2);
            Пока ИтЗапр.ПолучитьСубконто(2,,) = 1 Цикл
                Ост = (ИтЗапр.СКД() - ИтЗапр.СКК());
                Если (Цел(Ост) = Цел(Число(Сумма))) И (Цел(ИтЗапр.Субконто(2).Итог("СуммаСНДС"))=Цел(Ост)) Тогда
                    Возврат ИтЗапр.Субконто(2);
                КонецЕсли;    
            КонецЦикла;
        КонецЕсли;
    Возврат 0;
    //Возврат СокрЛ(Формат(Ост,"Ч14.2.'"));
КонецФункции

Процедура Помощь()      
Перем Подсказка;
    Если  Режим=1 Тогда          
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы платежи (строки), которые НЕ желаете включать в будущую банковскую выписку, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Формировать выписку', и в открывшемся документе Вам останется только выбрать заказы";
    Иначе
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы выписки (строки), которые НЕ желаете переносить в клиент-банк, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Успешно выгруженые платежки не отображаются больше в таблице, и выгрузить их повторно в клиент-банк нельзя.
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Выгрузить платежки ', запустите клиент-банк и проверьте, правильно ли заполнены Ваши платежки";
    КонецЕсли;
    Предупреждение(Подсказка);
КонецПроцедуры

Процедура ОткрФайл(табл,файл)
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тВрем.Очистить();
тТест.Очистить();              
    Если файл="" Тогда
        ИмяФайла="";
        ИмяПути ="";
        ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,,,);
        ПутьБД=ИмяПути+ИмяФайла;
    ИначеЕсли ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);
        //ПутьБД=файл;
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;

    //Сообщить(ПутьБД);
    Врем.ОткрытьФайл(ПутьБД);
    Если (Врем.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //Сообщить("БД:"+Врем.КоличествоПолей());
    Для п=1 по Врем.КоличествоПолей() Цикл
        Врем.ОписаниеПоля(п,ОписПоля,т,д,т1);
        тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    КонецЦикла;
    //Сообщить("Табл:"+тВрем.КоличествоКолонок());
    п=0;
    Врем.Первая();
    Для з=1 по Врем.КоличествоЗаписей() Цикл
        Врем.Перейти(з);
            тВрем.НоваяСтрока(з);
            Для п=1 по Врем.КоличествоПолей() Цикл
                тВрем.УстановитьЗначение(з,п,Врем.ПолучитьЗначениеПоля(п));
            КонецЦикла;
    КонецЦикла;              
    Врем.ЗакрытьФайл();
    тВрем.Выгрузить(Табл);
КонецПроцедуры

Функция ПроверитьДокумент(НомерДок)
Перем тПлат, тАрхПлат;
ОткрФайл(тПлат,"plat.dbf");
ОткрФайл(тАрхПлат,"Detail_Y.dbf");
//тАрхПлат.Выгрузить();
Если тПлат.НайтиЗначение(НомерДок,,"NOMDOK")=1 Тогда
    //тАрхПлат.Выгрузить(тТест);
    Возврат 1;
КонецЕсли;
Если тАрхПлат.НайтиЗначение(НомерДок,,"NOMPLATDOK")=1 Тогда
    Возврат 1;
КонецЕсли;
    Возврат 0;
КонецФункции    


Процедура ВыбратьПлатежки()
    Перем Стр;
    тТест.УдалитьСтроки();
    тТест.НоваяКолонка("NOMDOK",,,, "Номер",,,);
    тТест.НоваяКолонка("DATDOK",,,, "Дата",,,);
    тТест.НоваяКолонка("NAMEPRED",,,, "Плательщик",,,);
    тТест.НоваяКолонка("MFOPRED",,,, "МФО плательщика",,,);
    тТест.НоваяКолонка("NAMEKONTR",,,, "Получатель",,,);
    тТест.НоваяКолонка("MFOKONTR",,,, "МФО получателя",,,);
    тТест.НоваяКолонка("CHETPRED",,,, "Счет плательщика",,,);
    тТест.НоваяКолонка("CHETKONTR",,,, "Счет получателя",,,);
    тТест.НоваяКолонка("OKPOPRED",,,, "ОКПО плательщика",,,);
    тТест.НоваяКолонка("NAZNACH",,,, "Содержание",,,);
    тТест.НоваяКолонка("OKPOKONTR",,,, "ОКПО получателя",,,);
    тТест.НоваяКолонка("SUMMDOK",,,, "Сумма",,,);
    тТест.НоваяКолонка("DATOKUSL",,,, "Дата валютирования",,,);
    стр=0;  

    Док = СоздатьОбъект("Документ.ПлатежноеПоручение");
    Док.ВыбратьДокументы(Дата1,Дата1);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (ПроверитьДокумент(Док.НомерДок)=0) И (Док.ПометкаУдаления()=0) Тогда
            стр=стр+1;                                      
            тТест.НоваяСтрока(стр);
            тТест.УстановитьЗначение(стр,"NOMDOK",Док.НомерДок);
            тТест.УстановитьЗначение(стр,"DATDOK",Формат(Док.ДатаДок,"ДГГГГММДД"));
            тТест.УстановитьЗначение(стр,"NAMEPRED",Константа.ОснФирма.Полное_Назв);
            тТест.УстановитьЗначение(стр,"MFOPRED",Число(ВыбСчет.Банк.Код));
            //Если Док.Заказ.Выбран()=1 Тогда
            //    Попытка
                    тТест.УстановитьЗначение(стр,"NAMEKONTR",Док.Контрагент.ПолнНаименование);
                    тТест.УстановитьЗначение(стр,"MFOKONTR",СокрЛП(Док.РСчетКонтрагента.Банк.Код));
                    тТест.УстановитьЗначение(стр,"CHETKONTR",СокрЛП(Док.РСчетКонтрагента.НомерСчета));
                    тТест.УстановитьЗначение(стр,"OKPOKONTR",СокрЛП(Док.Контрагент.ЕДРПОУ));
            //    Исключение
            //    КонецПопытки;    
            //КонецЕсли;
            тТест.УстановитьЗначение(стр,"CHETPRED",Число(ВыбСчет.НомерСчета));
            тТест.УстановитьЗначение(стр,"OKPOPRED",СокрЛП(Константа.ОснФирма.КодОКПО));
            тТест.УстановитьЗначение(стр,"NAZNACH",Док.НазначениеПлатежа.ПолнНаименование);
            тТест.УстановитьЗначение(стр,"SUMMDOK",Формат(Док.СуммаСНДС,"Ч12.2"));
            тТест.УстановитьЗначение(стр,"DATOKUSL","ПРЕДОПЛАТА");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры    

Процедура СоздПуть()
    ТекстДок=СоздатьОбъект("Текст");
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьКаталог(ИмяПути,"Выберите каталог с базой данных КБ Аваль",)=0 Тогда
        //ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0
            Возврат;
        КонецЕсли;
        //ПутьБД=ИмяПути+ИмяФайла;
        //Сообщить(КаталогПрограммы()+"klbank.ini",);
        Попытка
            ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");     
        Исключение
        КонецПопытки;
        ТекстДок.ВставитьСтроку(1,ИмяПути);
        //Сообщить("Путь "+ИмяПути);
        ТекстДок.Записать(КаталогПрограммы()+"klbank.ini");
КонецПроцедуры    


Процедура СформироватьДБФ()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок, тПлат;
тПлат = СоздатьОбъект("ТаблицаЗначений");
ТекстДок=СоздатьОбъект("Текст");
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежек!");
        Возврат;
    КонецЕсли;

    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\plat.dbf");
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    Если ПустаяСтрока(ПутьБД)=0 Тогда
        Плат.ОткрытьФайл(ПутьБД);
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    //Сообщить("ПутьБД"+ПутьБД);
    Если (Плат.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //********************Сверка с текущим архивом
    //Сообщить(ИмяПути+"\Detail_Y.dbf");
    //АрхПлат.ОткрытьФайл(СокрЛП(ТекстДок.ПолучитьСтроку(1))+"\Detail_Y.dbf");
    //Если (АрхПлат.Открыта()=0) Тогда
    //    Предупреждение("Не могу открыть файл "+ИмяПути+"\Detail_Y.dbf"+"!");
    //    возврат;
    //КонецЕсли;
    //Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //    АрхПлат.ОписаниеПоля(п,ОписПоля,т,д,т1);
    //    тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    //КонецЦикла;                                    
    //АрхПлат.Первая();
    //Для з=1 по АрхПлат.КоличествоЗаписей() Цикл
    //    АрхПлат.Перейти(з);
    //        тВрем.НоваяСтрока(з);
    //        Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //            тВрем.УстановитьЗначение(з,п,АрхПлат.ПолучитьЗначениеПоля(п));
    //        КонецЦикла;
    //КонецЦикла;              
    //АрхПлат.ЗакрытьФайл();
    //Для н=1 по тТест.КоличествоСтрок() Цикл
    //    Если тВрем.НайтиЗначение(тТест.ПолучитьЗначение(н,"NOMDOK"),,"NOMPLATDOK")=0 Тогда
    //        тТест.ТекущаяСтрока(н);
    //        тПлат.ДобавитьСтроку(тТест.ТекущаяСтрока());    
    //    КонецЕсли;
    //КонецЦикла;
    //тПлат.Выгрузить(тТест);
    //возврат;
    //********************Сверка с текущим архивом
    Плат.Последняя();
    Для п=1 по тТест.КоличествоСтрок() Цикл
        Плат.Добавить();
        Плат.NOMDOK=тТест.ПолучитьЗначение(п,"NOMDOK");
        Плат.DATDOK=тТест.ПолучитьЗначение(п,"DATDOK");        
        Плат.NAMEPRED=тТест.ПолучитьЗначение(п,"NAMEPRED");    
        Плат.MFOPRED=тТест.ПолучитьЗначение(п,"MFOPRED");        
        Плат.NAMEKONTR=тТест.ПолучитьЗначение(п,"NAMEKONTR");    
        Плат.MFOKONTR=тТест.ПолучитьЗначение(п,"MFOKONTR");      
        Плат.CHETPRED=тТест.ПолучитьЗначение(п,"CHETPRED");      
        Плат.CHETKONTR=тТест.ПолучитьЗначение(п,"CHETKONTR");    
        Плат.OKPOPRED=тТест.ПолучитьЗначение(п,"OKPOPRED");
        Плат.NAZNACH=тТест.ПолучитьЗначение(п,"NAZNACH");
        Плат.OKPOKONTR=тТест.ПолучитьЗначение(п,"OKPOKONTR");
        Плат.SUMMDOK=тТест.ПолучитьЗначение(п,"SUMMDOK");
        Плат.DATOKUSL=тТест.ПолучитьЗначение(п,"DATOKUSL");
    Плат.Записать();
    КонецЦикла;
    Плат.ЗакрытьФайл();
    тТест.Очистить();
    тПлат.Выгрузить(тТест);
    Предупреждение("Документы успешно выгружены!");
КонецПроцедуры
//***********************************************
Процедура Обраб()  
            Если ВвестиЗначение(зн,"Вибір значення ","Счет.Основной") = 1 Тогда
                  тТест.УстановитьЗначение(тТест.ТекущаяСтрока(),"КоррСчет",зн);
            КонецЕсли;
КонецПроцедуры  
//***********************************************,
Процедура СменаРежима()
    //Сообщить(Режим);
    тТест.Очистить();  
    тДБФ.Очистить();
    Если  Режим=1 Тогда          
        Форма.кнФормироватьВыписки.Видимость(1);
        Форма.кнВыгрузитьПлатежки.Видимость(0);
        ОткрытьБД();
    Иначе
        Форма.кнФормироватьВыписки.Видимость(0);
        Форма.кнВыгрузитьПлатежки.Видимость(1);
        ВыбратьПлатежки();
    КонецЕсли;
КонецПроцедуры
                                      
Процедура Выполнить()
    ЗаполнитьБВ();
КонецПроцедуры

Процедура УдалениеСтроки()
    Если тТест.КоличествоСтрок()>0 Тогда
        тТест.УдалитьСтроку();
    КонецЕсли;
КонецПроцедуры //УдалениеПД
                                
Процедура ОткрытьБД()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тТест.Очистить();
    ИмяФайла="";
    ИмяПути ="";
ФайлТекст = СоздатьОбъект("Текст");
файл = "v"+Прав(Формат(Дата1,"ДГГГГММДД"),6)+".zzz";
Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
    ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
//    ПутьБД= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);  
    Путь= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\");
    ФС.ВыбратьФайл(0,ИмяФайла, Путь, ,файл,,);
    ПутьБД=Путь+ИмяФайла;
Иначе
    ИмяФайла="";
    ИмяПути ="";
    ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,);
    ПутьБД=ИмяПути+ИмяФайла;
КонецЕсли;
    ФайлТекст.КодоваяСтраница(0);
    ФайлТекст.Открыть(ПутьБД);
    Если ФайлТекст.КоличествоСтрок() = 0 Тогда
        Предупреждение("Выписки банка не найдены");
    Возврат;
    КонецЕсли;
    
    тДБФ.НоваяКолонка("NOMDOK",,,, "NOMDOK",,,);
    тДБФ.НоваяКолонка("DATKVOPL",,,, "DATKVOPL",,,);
    тДБФ.НоваяКолонка("CHETPRED","Число",14,, "CHETPRED",,,);
    тДБФ.НоваяКолонка("OKPOKONTR","Строка",10,, "OKPOKONTR",,,);
    тДБФ.НоваяКолонка("NAMEKONTR",,,, "NAMEKONTR",,,);
    тДБФ.НоваяКолонка("SUMMDOK","Число",15,2, "SUMMDOK",,,);
    тДБФ.НоваяКолонка("DEB_KRED","Число",1,, "DEB_KRED",,,);
    тДБФ.НоваяКолонка("NAZNACH",,,, "NAZNACH",,,);
    тДБФ.НоваяКолонка("КоррСчет","Счет.Основной");  
    ррр = 0;
    Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл
        стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));  
    Если Лев(стр,1) = "0" Тогда
        Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
    ррр = 0;
        Продолжить;
    КонецЕсли;
    ррр = 1;
        СчетОсн = Число(Сред(стр,2,14));
        ДатаВ = Сред(стр,16,8);
    ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда    
        Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда  
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
        Продолжить;
        КонецЕсли;  
        тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NOMDOK",Сред(стр,159,10));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DATKVOPL",ДатаВ);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"CHETPRED",СчетОсн);
        Если Сред(стр,2,1) = "+" Тогда
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,26,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,40,40));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",1);
        Иначе
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,103,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,117,40));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",0);
        КонецЕсли;
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"SUMMDOK",Число(Сред(стр,169,19))/100);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAZNACH",Сред(стр,212,255));  
//        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",Сред(стр,159,10));
        
//        Для з=1 по ДБФ.КоличествоЗаписей() Цикл
//        ДБФ.Перейти(з);    
//       Если ДБФ.ПолучитьЗначениеПоля("CHETPRED") <> Число(ВыбСчет.Номер) Тогда
//        Продолжить;
//        КонецЕсли;
//        Если СокрЛП(ДБФ.ПолучитьЗначениеПоля("DATKVOPL"))=(Формат(Дата1,"ДГГГГММДД")) Тогда
            Назначение=Сред(стр,212,255);  
            Если (Найти(Назначение,"овердрафт")<> 0) Тогда  
                 Продолжить;
            КонецЕсли;
//            тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
//            Для п=1 по ДБФ.КоличествоПолей() Цикл
//                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),п,ДБФ.ПолучитьЗначениеПоля(п));
//            КонецЦикла;  
//            Назначение=ДБФ.ПолучитьЗначениеПоля("NAZNACH");
            ДенКасса= Сред(стр,40,40);
        Если (Сред(стр,2,1) = "-") Тогда
              Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
                  или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
                  или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
                  или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"тютюн")<> 0) Тогда
                  тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;  
              Если (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"горіл")<> 0)
                   или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"таба")<> 0)
                   или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
                   или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0)
                   или (Найти(Назначение,"сигар")<> 0)Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"Плата за инк")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("95.2"));
            КонецЕсли;
        Иначе
            Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
              или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
              или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
              или (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"ПИВО")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"тютюн")<> 0)
              или (Найти(Назначение,"горіл")<> 0) или (Найти(Назначение,"таба")<> 0)
              или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)  
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
              или (Найти(Назначение,"сигар")<> 0) или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если ((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("33.3"));
            КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"повор")<> 0) или (Найти(Назначение,"ПОВОР")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
            Если (((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) и (Найти(ДенКасса,"Центр.")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
        КонецЕсли;
        КонецЕсли;
    КонецЦикла;              
    
//    ДБФ.ЗакрытьФайл();
    тДБФ.Выгрузить(тТест);
    тТест.Сортировать("DEB_KRED,SUMMDOK");
    Для п=1 по тТест.КоличествоКолонок() Цикл
        тТест.ПолучитьПараметрыКолонки(п,,,,ОписПоля,,,);  
        Если (ОписПоля="КоррСчет") Тогда  
            тТест.УстановитьПараметрыКолонки(п,"Счет.Основной",,,"КоррСчет",6,,);
        ИначеЕсли (ОписПоля="NAMEKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Контрагент",16,,);
        ИначеЕсли (ОписПоля="OKPOKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"ОКПО",8,,);
        ИначеЕсли (ОписПоля="SUMMDOK") Тогда
            тТест.УстановитьПараметрыКолонки(п,"Число",,2,"Сумма",8,"Ч012.2",2);
        ИначеЕсли (ОписПоля="NAZNACH") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Содержание",30,,);
        Иначе
            тТест.ВидимостьКолонки(Строка(п),0);
        КонецЕсли;
    КонецЦикла;
    
//    КонецЦикла;
КонецПроцедуры    

Процедура ЗаполнитьБВ()
    Перем Контра;
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежей!");
        Возврат;
    КонецЕсли;
    тДБФ.Загрузить(тТест);
    Док = СоздатьОбъект("Документ.ВыпискаБанка");
    спрКонтр = СоздатьОбъект("Справочник.Клиенты");
    тДБФ.Сортировать("DEB_KRED,SUMMDOK");
    Док.Новый();
//    Фирма = глВосстановитьЗначение(,"БазФирма");
    //глУстановитьНомерДокумента(Контекст);
//    глУстановитьНомерДокумента(Док);
//    РСчет = Фирма.РС;
    Док.БанковскийСчет = ВыбСчет;  
    Док.ДатаДок = Дата1;
    Док.Автор=Пользователь;
    Док.Идентификатор="ВыпискаБанка";
    Док.Фирма=Константа.ОснФирма;
    Док.Фирма.ИспользоватьДату(Дата1);
    Док.СчетУчета = ВыбСчет.БухгалтерскийСчет;
//    Док.Субконто.Доступность(1);
Для з=1 по тДБФ.КоличествоСтрок() Цикл  
    Если тДБФ.ПолучитьЗначение(з,"CHETPRED") <> Число(ВыбСчет.Номер) Тогда
        Продолжить;
    КонецЕсли;
    Док.НоваяСтрока();                            
        //Сообщить(тДБФ.ПолучитьЗначение(з,"DEB_KRED"));
        Если (тДБФ.ПолучитьЗначение(з,"DEB_KRED")=1) Тогда
            Док.ПриходРасход = Перечисление.ПлюсМинус.Плюс;            
        Иначе
            Док.ПриходРасход = Перечисление.ПлюсМинус.Минус;            
        КонецЕсли;      
            Док.НазначениеПлатежа = тДБФ.ПолучитьЗначение(з,"NAZNACH");
    // проставляем реквизиты "по умолчанию"
                   Если Док.ПриходРасход = Перечисление.ПлюсМинус.Минус Тогда
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Списание;
                    Док.Расход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                    КонецЕсли;
                Иначе  
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Поступление;
                    Док.Приход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");  
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                         Док.НДС = Док.Приход/6;
                    КонецЕсли;
                КонецЕсли;
        Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
        Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
        Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));

        Контра=тДБФ.ПолучитьЗначение(з,"NAMEKONTR");
        КонтраКод=тДБФ.ПолучитьЗначение(з,"OKPOKONTR");
        Док.НомерПлатДок=тДБФ.ПолучитьЗначение(з,"NOMDOK");
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Фирмы Тогда  
            Док.Субконто1 = Константа.ОснФирма;
        КонецЕсли;
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда
        спрКонтр.ИспользоватьДату(ТекущаяДата());
        Если спрКонтр.НайтиПоРеквизиту("КодОКПО",КонтраКод,1)=1 Тогда
             Если спрКонтр.ПометкаУдаления() = 1 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" Помечен на удаление. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;  
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
            Иначе    
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            КонецЕсли;
        ИначеЕсли ПустаяСтрока(Контра)=0 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" не найден. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
        Иначе
КонецЕсли;
КонецЕсли;  
КонецЦикла;    
//       Форма.Закрыть();  
        НачатьТранзакцию();
           Док.Записать();
        ЗафиксироватьТранзакцию();
       ОткрытьФорму(Док.ТекущийДокумент(),0);
КонецПроцедуры

ДБФ = СоздатьОбъект("XBase");
Плат = СоздатьОбъект("XBase");
Врем = СоздатьОбъект("XBase");
АрхПлат = СоздатьОбъект("XBase");
тДБФ = СоздатьОбъект("ТаблицаЗначений");  
тВрем = СоздатьОбъект("ТаблицаЗначений");
тПлат = СоздатьОбъект("ТаблицаЗначений");
тАрхПлат = СоздатьОбъект("ТаблицаЗначений");


как стало
Тыц
//*******************************************
Перем ДБФ,Плат,Врем, тВрем, тДБФ, тПлат, Вал, тАрхПлат,зн;
Перем ПутьБД;

Процедура ЗаполнитьБВ() далее
Процедура ОткрытьБД() далее
Процедура ВыбратьПлатежки() далее
Процедура СоздПуть() далее

Процедура ПриОткрытии()
    Режим=2;
    Дата1=РабочаяДата();
    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=0 Тогда
        СоздПуть();
    КонецЕсли;
    ВыбратьПлатежки();
    //ОткрытьБД("ArhivPLT.dbf");
КонецПроцедуры

Функция Остаток(Контрагент,Сумма)
    тЗаказы = СоздатьОбъект("ТаблицаЗначений");
    ИтЗапр = СоздатьОбъект("БухгалтерскиеИтоги");
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Заказы,,1);
    ИтЗапр.ВыполнитьЗапрос(НачМесяца(Дата1),Дата1,"361",,,,,1);
    Ост = 0;
        ИтЗапр.ВыбратьСубконто(1);
        Если ИтЗапр.ПолучитьСубконто(1,,Контрагент) = 1 Тогда
            ИтЗапр.ВыбратьСубконто(2);
            Пока ИтЗапр.ПолучитьСубконто(2,,) = 1 Цикл
                Ост = (ИтЗапр.СКД() - ИтЗапр.СКК());
                Если (Цел(Ост) = Цел(Число(Сумма))) И (Цел(ИтЗапр.Субконто(2).Итог("СуммаСНДС"))=Цел(Ост)) Тогда
                    Возврат ИтЗапр.Субконто(2);
                КонецЕсли;    
            КонецЦикла;
        КонецЕсли;
    Возврат 0;
    //Возврат СокрЛ(Формат(Ост,"Ч14.2.'"));
КонецФункции

Процедура Помощь()      
Перем Подсказка;
    Если  Режим=1 Тогда          
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы платежи (строки), которые НЕ желаете включать в будущую банковскую выписку, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Формировать выписку', и в открывшемся документе Вам останется только выбрать заказы";
    Иначе
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы выписки (строки), которые НЕ желаете переносить в клиент-банк, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Успешно выгруженые платежки не отображаются больше в таблице, и выгрузить их повторно в клиент-банк нельзя.
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Выгрузить платежки ', запустите клиент-банк и проверьте, правильно ли заполнены Ваши платежки";
    КонецЕсли;
    Предупреждение(Подсказка);
КонецПроцедуры

Процедура ОткрФайл(табл,файл)
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тВрем.Очистить();
тТест.Очистить();              
    Если файл="" Тогда
        ИмяФайла="";
        ИмяПути ="";
        ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,,,);
        ПутьБД=ИмяПути+ИмяФайла;
    ИначеЕсли ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);
        //ПутьБД=файл;
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;

    //Сообщить(ПутьБД);
    Врем.ОткрытьФайл(ПутьБД);
    Если (Врем.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //Сообщить("БД:"+Врем.КоличествоПолей());
    Для п=1 по Врем.КоличествоПолей() Цикл
        Врем.ОписаниеПоля(п,ОписПоля,т,д,т1);
        тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    КонецЦикла;
    //Сообщить("Табл:"+тВрем.КоличествоКолонок());
    п=0;
    Врем.Первая();
    Для з=1 по Врем.КоличествоЗаписей() Цикл
        Врем.Перейти(з);
            тВрем.НоваяСтрока(з);
            Для п=1 по Врем.КоличествоПолей() Цикл
                тВрем.УстановитьЗначение(з,п,Врем.ПолучитьЗначениеПоля(п));
            КонецЦикла;
    КонецЦикла;              
    Врем.ЗакрытьФайл();
    тВрем.Выгрузить(Табл);
КонецПроцедуры

Функция ПроверитьДокумент(НомерДок)
Перем тПлат, тАрхПлат;
ОткрФайл(тПлат,"plat.dbf");
ОткрФайл(тАрхПлат,"Detail_Y.dbf");
//тАрхПлат.Выгрузить();
Если тПлат.НайтиЗначение(НомерДок,,"NUM_DOC")=1 Тогда
    //тАрхПлат.Выгрузить(тТест);
    Возврат 1;
КонецЕсли;
Если тАрхПлат.НайтиЗначение(НомерДок,,"NOMPLATDOK")=1 Тогда
    Возврат 1;
КонецЕсли;
    Возврат 0;
КонецФункции    


Процедура ВыбратьПлатежки()
    Перем Стр;
    тТест.УдалитьСтроки();
    тТест.НоваяКолонка("NUM_DOC",,,, "Номер",,,);
    тТест.НоваяКолонка("DATE_DOC",,,, "Дата",,,);
    тТест.НоваяКолонка("CLN_NAME",,,, "Плательщик",,,);
    тТест.НоваяКолонка("CLN_BANK_MFO",,,, "МФО плательщика",,,);
    тТест.НоваяКолонка("RCPT_NAME",,,, "Получатель",,,);
    тТест.НоваяКолонка("RCPT_OKPO",,,, "МФО получателя",,,);
    тТест.НоваяКолонка("CLN_ACCOUNT",,,, "Счет плательщика",,,);
    тТест.НоваяКолонка("RCPT_ACCOUNT",,,, "Счет получателя",,,);
    тТест.НоваяКолонка("CLN_OKPO",,,, "ОКПО плательщика",,,);
    тТест.НоваяКолонка("PAYMENT_DETAILS",,,, "Содержание",,,);
    тТест.НоваяКолонка("RCPT_OKPO",,,, "ОКПО получателя",,,);
    тТест.НоваяКолонка("AMOUNT",,,, "Сумма",,,);
    тТест.НоваяКолонка("DATOKUSL",,,, "Дата валютирования",,,);
    стр=0;  

    Док = СоздатьОбъект("Документ.ПлатежноеПоручение");
    Док.ВыбратьДокументы(Дата1,Дата1);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (ПроверитьДокумент(Док.НомерДок)=0) И (Док.ПометкаУдаления()=0) Тогда
            стр=стр+1;                                      
            тТест.НоваяСтрока(стр);
            тТест.УстановитьЗначение(стр,"NUM_DOC",Док.НомерДок);
            тТест.УстановитьЗначение(стр,"DATE_DOC",Формат(Док.ДатаДок,"ДГГГГММДД"));
            тТест.УстановитьЗначение(стр,"CLN_NAME",Константа.ОснФирма.Полное_Назв);
            тТест.УстановитьЗначение(стр,"CLN_BANK_MFO",Число(ВыбСчет.Банк.Код));
            //Если Док.Заказ.Выбран()=1 Тогда
            //    Попытка
                    тТест.УстановитьЗначение(стр,"RCPT_NAME",Док.Контрагент.ПолнНаименование);
                    тТест.УстановитьЗначение(стр,"RCPT_OKPO",СокрЛП(Док.РСчетКонтрагента.Банк.Код));
                    тТест.УстановитьЗначение(стр,"RCPT_ACCOUNT",СокрЛП(Док.РСчетКонтрагента.НомерСчета));
                    тТест.УстановитьЗначение(стр,"RCPT_OKPO",СокрЛП(Док.Контрагент.ЕДРПОУ));
            //    Исключение
            //    КонецПопытки;    
            //КонецЕсли;
            тТест.УстановитьЗначение(стр,"CLN_ACCOUNT",Число(ВыбСчет.НомерСчета));
            тТест.УстановитьЗначение(стр,"CLN_OKPO",СокрЛП(Константа.ОснФирма.КодОКПО));
            тТест.УстановитьЗначение(стр,"PAYMENT_DETAILS",Док.НазначениеПлатежа.ПолнНаименование);
            тТест.УстановитьЗначение(стр,"AMOUNT",Формат(Док.СуммаСНДС,"Ч12.2"));
            тТест.УстановитьЗначение(стр,"DATOKUSL","ПРЕДОПЛАТА");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры    

Процедура СоздПуть()
    ТекстДок=СоздатьОбъект("Текст");
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьКаталог(ИмяПути,"Выберите каталог с базой данных КБ Аваль",)=0 Тогда
        //ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0
            Возврат;
        КонецЕсли;
        //ПутьБД=ИмяПути+ИмяФайла;
        //Сообщить(КаталогПрограммы()+"klbank.ini",);
        Попытка
            ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");     
        Исключение
        КонецПопытки;
        ТекстДок.ВставитьСтроку(1,ИмяПути);
        //Сообщить("Путь "+ИмяПути);
        ТекстДок.Записать(КаталогПрограммы()+"klbank.ini");
КонецПроцедуры    


Процедура СформироватьДБФ()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок, тПлат;
тПлат = СоздатьОбъект("ТаблицаЗначений");
ТекстДок=СоздатьОбъект("Текст");
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежек!");
        Возврат;
    КонецЕсли;

    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\plat.dbf");
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    Если ПустаяСтрока(ПутьБД)=0 Тогда
        Плат.ОткрытьФайл(ПутьБД);
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    //Сообщить("ПутьБД"+ПутьБД);
    Если (Плат.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //********************Сверка с текущим архивом
    //Сообщить(ИмяПути+"\Detail_Y.dbf");
    //АрхПлат.ОткрытьФайл(СокрЛП(ТекстДок.ПолучитьСтроку(1))+"\Detail_Y.dbf");
    //Если (АрхПлат.Открыта()=0) Тогда
    //    Предупреждение("Не могу открыть файл "+ИмяПути+"\Detail_Y.dbf"+"!");
    //    возврат;
    //КонецЕсли;
    //Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //    АрхПлат.ОписаниеПоля(п,ОписПоля,т,д,т1);
    //    тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    //КонецЦикла;                                    
    //АрхПлат.Первая();
    //Для з=1 по АрхПлат.КоличествоЗаписей() Цикл
    //    АрхПлат.Перейти(з);
    //        тВрем.НоваяСтрока(з);
    //        Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //            тВрем.УстановитьЗначение(з,п,АрхПлат.ПолучитьЗначениеПоля(п));
    //        КонецЦикла;
    //КонецЦикла;              
    //АрхПлат.ЗакрытьФайл();
    //Для н=1 по тТест.КоличествоСтрок() Цикл
    //    Если тВрем.НайтиЗначение(тТест.ПолучитьЗначение(н,"NUM_DOC"),,"NOMPLATDOK")=0 Тогда
    //        тТест.ТекущаяСтрока(н);
    //        тПлат.ДобавитьСтроку(тТест.ТекущаяСтрока());    
    //    КонецЕсли;
    //КонецЦикла;
    //тПлат.Выгрузить(тТест);
    //возврат;
    //********************Сверка с текущим архивом
    Плат.Последняя();
    Для п=1 по тТест.КоличествоСтрок() Цикл
        Плат.Добавить();
        Плат.NUM_DOC=тТест.ПолучитьЗначение(п,"NUM_DOC");
        Плат.DATE_DOC=тТест.ПолучитьЗначение(п,"DATE_DOC");        
        Плат.CLN_NAME=тТест.ПолучитьЗначение(п,"CLN_NAME");    
        Плат.CLN_BANK_MFO=тТест.ПолучитьЗначение(п,"CLN_BANK_MFO");        
        Плат.RCPT_NAME=тТест.ПолучитьЗначение(п,"RCPT_NAME");    
        Плат.RCPT_OKPO=тТест.ПолучитьЗначение(п,"RCPT_OKPO");      
        Плат.CLN_ACCOUNT=тТест.ПолучитьЗначение(п,"CLN_ACCOUNT");      
        Плат.RCPT_ACCOUNT=тТест.ПолучитьЗначение(п,"RCPT_ACCOUNT");    
        Плат.CLN_OKPO=тТест.ПолучитьЗначение(п,"CLN_OKPO");
        Плат.PAYMENT_DETAILS=тТест.ПолучитьЗначение(п,"PAYMENT_DETAILS");
        Плат.RCPT_OKPO=тТест.ПолучитьЗначение(п,"RCPT_OKPO");
        Плат.AMOUNT=тТест.ПолучитьЗначение(п,"AMOUNT");
        Плат.DATOKUSL=тТест.ПолучитьЗначение(п,"DATOKUSL");
    Плат.Записать();
    КонецЦикла;
    Плат.ЗакрытьФайл();
    тТест.Очистить();
    тПлат.Выгрузить(тТест);
    Предупреждение("Документы успешно выгружены!");
КонецПроцедуры
//***********************************************
Процедура Обраб()  
            Если ВвестиЗначение(зн,"Вибір значення ","Счет.Основной") = 1 Тогда
                  тТест.УстановитьЗначение(тТест.ТекущаяСтрока(),"КоррСчет",зн);
            КонецЕсли;
КонецПроцедуры  
//***********************************************,
Процедура СменаРежима()
    //Сообщить(Режим);
    тТест.Очистить();  
    тДБФ.Очистить();
    Если  Режим=1 Тогда          
        Форма.кнФормироватьВыписки.Видимость(1);
        Форма.кнВыгрузитьПлатежки.Видимость(0);
        ОткрытьБД();
    Иначе
        Форма.кнФормироватьВыписки.Видимость(0);
        Форма.кнВыгрузитьПлатежки.Видимость(1);
        ВыбратьПлатежки();
    КонецЕсли;
КонецПроцедуры
                                      
Процедура Выполнить()
    ЗаполнитьБВ();
КонецПроцедуры

Процедура УдалениеСтроки()
    Если тТест.КоличествоСтрок()>0 Тогда
        тТест.УдалитьСтроку();
    КонецЕсли;
КонецПроцедуры //УдалениеПД
                                
Процедура ОткрытьБД()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тТест.Очистить();
    ИмяФайла="";
    ИмяПути ="";
ФайлТекст = СоздатьОбъект("Текст");
файл = "v"+Прав(Формат(Дата1,"ДГГГГММДД"),6)+".zzz";
Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
    ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
//    ПутьБД= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);  
    Путь= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\");
    ФС.ВыбратьФайл(0,ИмяФайла, Путь, ,файл,,);
    ПутьБД=Путь+ИмяФайла;
Иначе
    ИмяФайла="";
    ИмяПути ="";
    ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,);
    ПутьБД=ИмяПути+ИмяФайла;
КонецЕсли;
    ФайлТекст.КодоваяСтраница(0);
    ФайлТекст.Открыть(ПутьБД);
    Если ФайлТекст.КоличествоСтрок() = 0 Тогда
        Предупреждение("Выписки банка не найдены");
    Возврат;
    КонецЕсли;
    
    тДБФ.НоваяКолонка("NUM_DOC",,,, "NUM_DOC",,,);
    тДБФ.НоваяКолонка("DATKVOPL",,,, "DATKVOPL",,,);
    тДБФ.НоваяКолонка("CLN_ACCOUNT","Число",14,, "CLN_ACCOUNT",,,);
    тДБФ.НоваяКолонка("RCPT_OKPO","Строка",10,, "RCPT_OKPO",,,);
    тДБФ.НоваяКолонка("RCPT_NAME",,,, "RCPT_NAME",,,);
    тДБФ.НоваяКолонка("AMOUNT","Число",15,2, "AMOUNT",,,);
    тДБФ.НоваяКолонка("DEB_KRED","Число",1,, "DEB_KRED",,,);
    тДБФ.НоваяКолонка("PAYMENT_DETAILS",,,, "PAYMENT_DETAILS",,,);
    тДБФ.НоваяКолонка("КоррСчет","Счет.Основной");  
    ррр = 0;
    Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл
        стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));  
    Если Лев(стр,1) = "0" Тогда
        Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
    ррр = 0;
        Продолжить;
    КонецЕсли;
    ррр = 1;
        СчетОсн = Число(Сред(стр,2,14));
        ДатаВ = Сред(стр,16,8);
    ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда    
        Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда  
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
        Продолжить;
        КонецЕсли;  
        тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NUM_DOC",Сред(стр,159,10));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DATKVOPL",ДатаВ);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"CLN_ACCOUNT",СчетОсн);
        Если Сред(стр,2,1) = "+" Тогда
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_OKPO",СокрЛ(Сред(стр,26,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_NAME",Сред(стр,40,40));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",1);
        Иначе
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_OKPO",СокрЛ(Сред(стр,103,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_NAME",Сред(стр,117,40));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",0);
        КонецЕсли;
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"AMOUNT",Число(Сред(стр,169,19))/100);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"PAYMENT_DETAILS",Сред(стр,212,255));  
//        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",Сред(стр,159,10));
        
//        Для з=1 по ДБФ.КоличествоЗаписей() Цикл
//        ДБФ.Перейти(з);    
//       Если ДБФ.ПолучитьЗначениеПоля("CLN_ACCOUNT") <> Число(ВыбСчет.Номер) Тогда
//        Продолжить;
//        КонецЕсли;
//        Если СокрЛП(ДБФ.ПолучитьЗначениеПоля("DATKVOPL"))=(Формат(Дата1,"ДГГГГММДД")) Тогда
            Назначение=Сред(стр,212,255);  
            Если (Найти(Назначение,"овердрафт")<> 0) Тогда  
                 Продолжить;
            КонецЕсли;
//            тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
//            Для п=1 по ДБФ.КоличествоПолей() Цикл
//                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),п,ДБФ.ПолучитьЗначениеПоля(п));
//            КонецЦикла;  
//            Назначение=ДБФ.ПолучитьЗначениеПоля("PAYMENT_DETAILS");
            ДенКасса= Сред(стр,40,40);
        Если (Сред(стр,2,1) = "-") Тогда
              Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
                  или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
                  или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
                  или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"тютюн")<> 0) Тогда
                  тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;  
              Если (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"горіл")<> 0)
                   или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"таба")<> 0)
                   или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
                   или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0)
                   или (Найти(Назначение,"сигар")<> 0)Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"Плата за инк")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("95.2"));
            КонецЕсли;
        Иначе
            Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
              или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
              или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
              или (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"ПИВО")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"тютюн")<> 0)
              или (Найти(Назначение,"горіл")<> 0) или (Найти(Назначение,"таба")<> 0)
              или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)  
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
              или (Найти(Назначение,"сигар")<> 0) или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если ((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("33.3"));
            КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"повор")<> 0) или (Найти(Назначение,"ПОВОР")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
            Если (((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) и (Найти(ДенКасса,"Центр.")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
        КонецЕсли;
        КонецЕсли;
    КонецЦикла;              
    
//    ДБФ.ЗакрытьФайл();
    тДБФ.Выгрузить(тТест);
    тТест.Сортировать("DEB_KRED,AMOUNT");
    Для п=1 по тТест.КоличествоКолонок() Цикл
        тТест.ПолучитьПараметрыКолонки(п,,,,ОписПоля,,,);  
        Если (ОписПоля="КоррСчет") Тогда  
            тТест.УстановитьПараметрыКолонки(п,"Счет.Основной",,,"КоррСчет",6,,);
        ИначеЕсли (ОписПоля="RCPT_NAME") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Контрагент",16,,);
        ИначеЕсли (ОписПоля="RCPT_OKPO") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"ОКПО",8,,);
        ИначеЕсли (ОписПоля="AMOUNT") Тогда
            тТест.УстановитьПараметрыКолонки(п,"Число",,2,"Сумма",8,"Ч012.2",2);
        ИначеЕсли (ОписПоля="PAYMENT_DETAILS") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Содержание",30,,);
        Иначе
            тТест.ВидимостьКолонки(Строка(п),0);
        КонецЕсли;
    КонецЦикла;
    
//    КонецЦикла;
КонецПроцедуры    

Процедура ЗаполнитьБВ()
    Перем Контра;
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежей!");
        Возврат;
    КонецЕсли;
    тДБФ.Загрузить(тТест);
    Док = СоздатьОбъект("Документ.ВыпискаБанка");
    спрКонтр = СоздатьОбъект("Справочник.Клиенты");
    тДБФ.Сортировать("DEB_KRED,AMOUNT");
    Док.Новый();
//    Фирма = глВосстановитьЗначение(,"БазФирма");
    //глУстановитьНомерДокумента(Контекст);
//    глУстановитьНомерДокумента(Док);
//    РСчет = Фирма.РС;
    Док.БанковскийСчет = ВыбСчет;  
    Док.ДатаДок = Дата1;
    Док.Автор=Пользователь;
    Док.Идентификатор="ВыпискаБанка";
    Док.Фирма=Константа.ОснФирма;
    Док.Фирма.ИспользоватьДату(Дата1);
    Док.СчетУчета = ВыбСчет.БухгалтерскийСчет;
//    Док.Субконто.Доступность(1);
Для з=1 по тДБФ.КоличествоСтрок() Цикл  
    Если тДБФ.ПолучитьЗначение(з,"CLN_ACCOUNT") <> Число(ВыбСчет.Номер) Тогда
        Продолжить;
    КонецЕсли;
    Док.НоваяСтрока();                            
        //Сообщить(тДБФ.ПолучитьЗначение(з,"DEB_KRED"));
        Если (тДБФ.ПолучитьЗначение(з,"DEB_KRED")=1) Тогда
            Док.ПриходРасход = Перечисление.ПлюсМинус.Плюс;            
        Иначе
            Док.ПриходРасход = Перечисление.ПлюсМинус.Минус;            
        КонецЕсли;      
            Док.НазначениеПлатежа = тДБФ.ПолучитьЗначение(з,"PAYMENT_DETAILS");
    // проставляем реквизиты "по умолчанию"
                   Если Док.ПриходРасход = Перечисление.ПлюсМинус.Минус Тогда
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Списание;
                    Док.Расход = тДБФ.ПолучитьЗначение(з,"AMOUNT");
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                    КонецЕсли;
                Иначе  
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Поступление;
                    Док.Приход = тДБФ.ПолучитьЗначение(з,"AMOUNT");  
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                         Док.НДС = Док.Приход/6;
                    КонецЕсли;
                КонецЕсли;
        Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
        Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
        Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));

        Контра=тДБФ.ПолучитьЗначение(з,"RCPT_NAME");
        КонтраКод=тДБФ.ПолучитьЗначение(з,"RCPT_OKPO");
        Док.НомерПлатДок=тДБФ.ПолучитьЗначение(з,"NUM_DOC");
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Фирмы Тогда  
            Док.Субконто1 = Константа.ОснФирма;
        КонецЕсли;
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда
        спрКонтр.ИспользоватьДату(ТекущаяДата());
        Если спрКонтр.НайтиПоРеквизиту("КодОКПО",КонтраКод,1)=1 Тогда
             Если спрКонтр.ПометкаУдаления() = 1 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" Помечен на удаление. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;  
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
            Иначе    
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            КонецЕсли;
        ИначеЕсли ПустаяСтрока(Контра)=0 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" не найден. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
        Иначе
КонецЕсли;
КонецЕсли;  
КонецЦикла;    
//       Форма.Закрыть();  
        НачатьТранзакцию();
           Док.Записать();
        ЗафиксироватьТранзакцию();
       ОткрытьФорму(Док.ТекущийДокумент(),0);
КонецПроцедуры

ДБФ = СоздатьОбъект("XBase");
Плат = СоздатьОбъект("XBase");
Врем = СоздатьОбъект("XBase");
АрхПлат = СоздатьОбъект("XBase");
тДБФ = СоздатьОбъект("ТаблицаЗначений");  
тВрем = СоздатьОбъект("ТаблицаЗначений");
тПлат = СоздатьОбъект("ТаблицаЗначений");
тАрхПлат = СоздатьОбъект("ТаблицаЗначений");



Но оно собака не подтягивает выписку

awp Подменю пользователя
сообщение 05.09.19, 17:16
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 450
Спасибо сказали: 52 раз
Рейтинг: 38

bezzil @ Сегодня, 15:48 * ,
Грузите в ДБФ


Signature
Бухгалтер - это не профессия! Это диагноз!

Макс1С Подменю пользователя
сообщение 05.09.19, 19:10
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 55
Из: Днепр
Спасибо сказали: 19 раз
Рейтинг: 19

bezzil @ Сегодня, 15:48 * ,
похоже что в этих местах проблемы:
//
Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер))
//
СчетОсн = Число(Сред(стр,2,14));
//
(Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер))
//


берется 14 символов, вместо ..(29 может быть)... хз сколько, нужно смотреть на сам файл выписки, сколько заложили в банке.
Но лучше выгружать в дбф, согласен с предыдущим автором

awp Подменю пользователя
сообщение 06.09.19, 7:30
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 450
Спасибо сказали: 52 раз
Рейтинг: 38

Анализируйте файлы выписки - тот что грузился и тот что не грузит. Банки как правило просто добавили по 2 колонки, а не меняли существующие.


Signature
Бухгалтер - это не профессия! Это диагноз!

bezzil Подменю пользователя
сообщение 06.09.19, 11:00
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

awp @ Сегодня, 8:30 * ,
структура файла идентичная, за исключением смены счета на 29 символов.

Sharzem Подменю пользователя
сообщение 06.09.19, 12:19
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 249
Спасибо сказали: 72 раз
Рейтинг: 72.6

bezzil @ Сегодня, 11:00 * ,
Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл 
    стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));  
    Если Лев(стр,1) = "0" Тогда
        Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
              ррр = 0;
              Продолжить;
         КонецЕсли;
        ррр = 1;
        СчетОсн = Число(Сред(стр,2,14));
        ДатаВ = Сред(стр,16,8);
    ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда    
        Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда  
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
               Продолжить;
        КонецЕсли;


(Число(Сред(стр,2,14))
(Число(Сред(стр,12,14))
(Число(Сред(стр,89,14))
порівнюється з Число(ВыбСчет.Номер)) Нічого Вас тут не бентежить ?


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

bezzil Подменю пользователя
сообщение 06.09.19, 12:30
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Sharzem @ Сегодня, 13:19 * ,
Я это уже исправил еще после первого поста, но оно всервно не загружает выписку, я вообще хз уже почему

Sharzem Подменю пользователя
сообщение 06.09.19, 12:46
Сообщение #8

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 249
Спасибо сказали: 72 раз
Рейтинг: 72.6

bezzil @ Сегодня, 12:30 * ,
Можете викласти, що повертає стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном)); ?


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

bezzil Подменю пользователя
сообщение 06.09.19, 13:00
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Sharzem @ Сегодня, 13:46 * ,
Вот структура экспорта из банка
1я было
Тыц
[необходимо зарегистрироваться для просмотра ссылки]

2я стало
Тыц
[необходимо зарегистрироваться для просмотра ссылки]

OemToAnsi переводит в ANSI формат текста банка, насколько я понял

sava1 Подменю пользователя
сообщение 06.09.19, 13:56
Сообщение #10

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2139
Из: Проскуров
Спасибо сказали: 508 раз
Рейтинг: 497.3

там проблема в кодовых страницах - у 77 - 866, а банк выдает 1251.
перекодировать надо.

bezzil Подменю пользователя
сообщение 06.09.19, 13:59
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

sava1 @ Сегодня, 14:56 * ,
он всегда выдавал 1251, и первая(рабочая выгрузка) точно в таком же формате.
+ проблема в том, что я не 1с программист, а java/python, но наши бухи никак не хотят переходить на самописную CRM на java, приходится насиловать этот труп.

sava1 Подменю пользователя
сообщение 06.09.19, 14:01
Сообщение #12

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2139
Из: Проскуров
Спасибо сказали: 508 раз
Рейтинг: 497.3

вот стандартная функция

Функция ЗаменитьСимволы(Стр)
    СтрВозврата = Стр;
    СтрВозврата = СтрЗаменить(СтрВозврата, "Ї", "Є");
    СтрВозврата = СтрЗаменить(СтрВозврата, "ї", "є");
    СтрВозврата = СтрЗаменить(СтрВозврата, "Ў", "І");
    СтрВозврата = СтрЗаменить(СтрВозврата, "ў", "і");
    СтрВозврата = СтрЗаменить(СтрВозврата, "•", "ї");
    СтрВозврата = СтрЗаменить(СтрВозврата, "°", "Ї");
    Возврат СтрВозврата;
КонецФункции

bezzil Подменю пользователя
сообщение 06.09.19, 14:24
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

sava1 @ Сегодня, 15:01 * ,
Это ничего не даст, так как старая выгрузка имела точно такой же формат.

sava1 Подменю пользователя
сообщение 06.09.19, 15:05
Сообщение #14

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2139
Из: Проскуров
Спасибо сказали: 508 раз
Рейтинг: 497.3

Цитата(bezzil @ 06.09.19, 15:24) *
Это ничего не даст, так как старая выгрузка имела точно такой же формат.

это я о своем....

ВыбСчет.Номер - строка ? длина больше 29 ?

Тогда условие
Если Сред(стр,12,29) <> ВыбСчет.Номер


+ учесть смещение остальных значений (как минимум на 15 вправо)

+ добавить обработку счетов по старому формату

RedCat77 Подменю пользователя
сообщение 06.09.19, 15:51
Сообщение #15

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Киев
Спасибо сказали: 11 раз
Рейтинг: 11

Цитата(sava1 @ 06.09.19, 16:05) *
Тогда условие
Если Сред(стр,12,29) <> ВыбСчет.Номер

Лучше через Найти(стр, ВыбСчет.Номер) и условие

Sharzem Подменю пользователя
сообщение 06.09.19, 16:33
Сообщение #16

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 249
Спасибо сказали: 72 раз
Рейтинг: 72.6

Цитата(bezzil @ 06.09.19, 13:59) *
приходится насиловать этот труп.

faceoff.gif

Він ще живий і може старітися разом з Вами...

Не полінувався, знайшов тут [необходимо зарегистрироваться для просмотра ссылки]

Там немає нічого особливого.
Відбулося зміщення полів. Їх потрібно "вирівняти" на своє місце. В описі все є. Як не справитесь - гукніть, накинемо двійку стрічок для виправлення.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: Макс1С,

awp Подменю пользователя
сообщение 06.09.19, 17:13
Сообщение #17

Оратор
Иконка группы
Группа: Местный
Сообщений: 450
Спасибо сказали: 52 раз
Рейтинг: 38

Цитата(bezzil @ 06.09.19, 12:00) *
awp @ Сегодня, 8:30 ,
структура файла идентичная, за исключением смены счета на 29 символов.

12201689.gif


Signature
Бухгалтер - это не профессия! Это диагноз!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 14.10.19, 23:57
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!