Собственно проблема после перехода на 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");
тДБФ = СоздатьОбъект("ТаблицаЗначений");
тВрем = СоздатьОбъект("ТаблицаЗначений");
тПлат = СоздатьОбъект("ТаблицаЗначений");
тАрхПлат = СоздатьОбъект("ТаблицаЗначений");
Но оно собака не подтягивает выписку
bezzil @ Сегодня, 15:48
,
похоже что в этих местах проблемы:
//
Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер))
//
СчетОсн = Число(Сред(стр,2,14));
//
(Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер))
//
берется 14 символов, вместо ..(29 может быть)... хз сколько, нужно смотреть на сам файл выписки, сколько заложили в банке.
Но лучше выгружать в дбф, согласен с предыдущим автором
Анализируйте файлы выписки - тот что грузился и тот что не грузит. Банки как правило просто добавили по 2 колонки, а не меняли существующие.
awp @ Сегодня, 8:30
,
структура файла идентичная, за исключением смены счета на 29 символов.
Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл
стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));
Если Лев(стр,1) = "0" Тогда
Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
// Сообщить("Ошибка! Проверьте сохранение выписки");
// Возврат;
ррр = 0;
Продолжить;
КонецЕсли;
ррр = 1;
СчетОсн = Число(Сред(стр,2,14));
ДатаВ = Сред(стр,16,8);
ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда
Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда
// Сообщить("Ошибка! Проверьте сохранение выписки");
// Возврат;
Продолжить;
КонецЕсли;
Sharzem @ Сегодня, 13:19
,
Я это уже исправил еще после первого поста, но оно всервно не загружает выписку, я вообще хз уже почему
bezzil @ Сегодня, 12:30
,
Можете викласти, що повертає стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном)); ?
Sharzem @ Сегодня, 13:46
,
Вот структура экспорта из банка
1я было
Тыц
2я стало
Тыц
OemToAnsi переводит в ANSI формат текста банка, насколько я понял
там проблема в кодовых страницах - у 77 - 866, а банк выдает 1251.
перекодировать надо.
sava1 @ Сегодня, 14:56
,
он всегда выдавал 1251, и первая(рабочая выгрузка) точно в таком же формате.
+ проблема в том, что я не 1с программист, а java/python, но наши бухи никак не хотят переходить на самописную CRM на java, приходится насиловать этот труп.
вот стандартная функция
Функция ЗаменитьСимволы(Стр)
СтрВозврата = Стр;
СтрВозврата = СтрЗаменить(СтрВозврата, "Ї", "Є");
СтрВозврата = СтрЗаменить(СтрВозврата, "ї", "є");
СтрВозврата = СтрЗаменить(СтрВозврата, "Ў", "І");
СтрВозврата = СтрЗаменить(СтрВозврата, "ў", "і");
СтрВозврата = СтрЗаменить(СтрВозврата, "•", "ї");
СтрВозврата = СтрЗаменить(СтрВозврата, "°", "Ї");
Возврат СтрВозврата;
КонецФункции
sava1 @ Сегодня, 15:01
,
Это ничего не даст, так как старая выгрузка имела точно такой же формат.
Если Сред(стр,12,29) <> ВыбСчет.Номер
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua