Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Импорт из Аваль Банка
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
bezzil
Собственно проблема после перехода на 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
bezzil @ Сегодня, 15:48 необходимо зарегистрироваться для просмотра ссылки ,
Грузите в ДБФ
Макс1С
bezzil @ Сегодня, 15:48 необходимо зарегистрироваться для просмотра ссылки ,
похоже что в этих местах проблемы:
//
Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер))
//
СчетОсн = Число(Сред(стр,2,14));
//
(Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер))
//


берется 14 символов, вместо ..(29 может быть)... хз сколько, нужно смотреть на сам файл выписки, сколько заложили в банке.
Но лучше выгружать в дбф, согласен с предыдущим автором
awp
Анализируйте файлы выписки - тот что грузился и тот что не грузит. Банки как правило просто добавили по 2 колонки, а не меняли существующие.
bezzil
awp @ Сегодня, 8:30 необходимо зарегистрироваться для просмотра ссылки ,
структура файла идентичная, за исключением смены счета на 29 символов.
Sharzem
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))
порівнюється з Число(ВыбСчет.Номер)) Нічого Вас тут не бентежить ?
bezzil
Sharzem @ Сегодня, 13:19 необходимо зарегистрироваться для просмотра ссылки ,
Я это уже исправил еще после первого поста, но оно всервно не загружает выписку, я вообще хз уже почему
Sharzem
bezzil @ Сегодня, 12:30 необходимо зарегистрироваться для просмотра ссылки ,
Можете викласти, що повертає стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном)); ?
bezzil
Sharzem @ Сегодня, 13:46 необходимо зарегистрироваться для просмотра ссылки ,
Вот структура экспорта из банка
1я было
необходимо зарегистрироваться для просмотра ссылки
необходимо зарегистрироваться для просмотра ссылки

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

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

Функция ЗаменитьСимволы(Стр)
    СтрВозврата = Стр;
    СтрВозврата = СтрЗаменить(СтрВозврата, "Ї", "Є");
    СтрВозврата = СтрЗаменить(СтрВозврата, "ї", "є");
    СтрВозврата = СтрЗаменить(СтрВозврата, "Ў", "І");
    СтрВозврата = СтрЗаменить(СтрВозврата, "ў", "і");
    СтрВозврата = СтрЗаменить(СтрВозврата, "•", "ї");
    СтрВозврата = СтрЗаменить(СтрВозврата, "°", "Ї");
    Возврат СтрВозврата;
КонецФункции
bezzil
sava1 @ Сегодня, 15:01 необходимо зарегистрироваться для просмотра ссылки ,
Это ничего не даст, так как старая выгрузка имела точно такой же формат.
sava1
Цитата(bezzil @ 06.09.19, 15:24) необходимо зарегистрироваться для просмотра ссылки
Это ничего не даст, так как старая выгрузка имела точно такой же формат.

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

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

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


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

+ добавить обработку счетов по старому формату
RedCat77
Цитата(sava1 @ 06.09.19, 16:05) необходимо зарегистрироваться для просмотра ссылки
Тогда условие
Если Сред(стр,12,29) <> ВыбСчет.Номер

Лучше через Найти(стр, ВыбСчет.Номер) и условие
Sharzem
Цитата(bezzil @ 06.09.19, 13:59) необходимо зарегистрироваться для просмотра ссылки
приходится насиловать этот труп.

faceoff.gif

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

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

Там немає нічого особливого.
Відбулося зміщення полів. Їх потрібно "вирівняти" на своє місце. В описі все є. Як не справитесь - гукніть, накинемо двійку стрічок для виправлення.
awp
Цитата(bezzil @ 06.09.19, 12:00) необходимо зарегистрироваться для просмотра ссылки
awp @ Сегодня, 8:30 ,
структура файла идентичная, за исключением смены счета на 29 символов.

12201689.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.