Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 апр 2025, 19:21

Обработка для втягивания платежей с клиент банка

Автор burza, 04 июл 2016, 11:57

0 Пользователей и 1 гость просматривают эту тему.

burza

Здравствуйте уважаемые! У меня такая проблема, есть клиент банк для бухгалтерии для обмена данными.В остальных предприятиях работает верно а в одном не верно заполняет форму,а именно вид операции.фото - http://saveimg.ru/show-image.php?id=e227bdf3c2cac98f11452e28324e5b10#linkss
То есть если расход то Оплата поставщику
если приход то Оплата от покупателя
Обработка работает на остальных повторюсь. где может быть проблема?

Код самой обработки

Процедура ИмпортВыписки()

// очищаем с таблицы все, кроме существующих платежей
// проверим, что таблица не пустая и не все уже существующие - тогда и лишнего вопроса
// задавать не надо

Рез = 0;
Для Каждого Строка Из тчИмпорт Цикл
Если Строка.Статус <> СтатусыСтрокИмпорта.СуществующийПлатеж Тогда
Рез = 1;
Прервать;
КонецЕсли;
КонецЦикла;

Если Рез = 1 Тогда
ТекстВопроса = НСтр("ru='Будут удалены все платежи, кроме существующих. Продолжить?';uk='Будуть вилучені всі платежі, крім існуючих. Продовжити?'");
Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ОчиститьНесуществующиеПлатежи();
КонецЕсли;


// 1. Проверяем, что выбрано имя файла, файл существует, ФормаОбработкиФормата определена
// дата, организация, расчетный счет, формат обмена, тип файла
Если НЕ ПроверитьЗаполнениеПолейДляИмпорта() Тогда
Возврат;
КонецЕсли;

// 1.1 Сохраняем значения для выбранного формата
// Вызываем функцию СохранитьЗначения для формата

Параметры = Новый Структура;
Параметры.Вставить("Режим", "Импорт");
Параметры.Вставить("Организация", Организация);
Параметры.Вставить("ТекущееИмяФайла", ИмяФайлаИмпорт);
Параметры.Вставить("КодВБанке", КодВБанке); // если есть
Параметры.Вставить("ТекущийТипФайла", ТипФайлаИмпорт);

ФормаОбработкиФормата.СохранитьЗначения(Параметры);

// 2. Формируем параметры для вызова функции импорта формы обработки формата

// запрос к обработке формата на импорт
Параметры = Новый Структура;

Параметры.Вставить("ДатаДок", ДатаППС);
Параметры.Вставить("ДатаДок1", ДатаПППо);
Параметры.Вставить("Организация", Организация);
Параметры.Вставить("РСчет", СокрЛП(Счет.НомерСчета));
Параметры.Вставить("РСчетПолный", Счет);
Параметры.Вставить("ИмяФайла", ИмяФайлаИмпорт);
Параметры.Вставить("ТипФайла", ТипФайлаИмпорт);
Параметры.Вставить("НашМФО", СокрЛП(Счет.Банк.Код));

// 3. Вызываем функцию обработки, получаем таблицу платежей

тзВыписка = ФормаОбработкиФормата.ИмпортВыписки(Параметры);

// 4. Обрабатываем таблицу платежей
// (перекодировка, только входящие, ищем юрфизлиц, контрагентов, сделки, заказы, договора)

тзПлатежи = тчИмпорт.Выгрузить();
тзПлатежи.Очистить();

ПерекодировкаИмпорта = ФормаОбработкиФормата.ПерекодировкаИмпорта();

Для Каждого Строка Из тзВыписка Цикл

// проверяем на только входящие платежи
Если НастройкиОбработки.ИмпортТолькоВходящихПлатежей Тогда
Если Строка.Расход > 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

НоваяСтрока = тзПлатежи.Добавить();

// перекодировка
Если ПерекодировкаИмпорта Тогда
Строка.Контрагент = ЗаменитьСимволы(Строка.Контрагент);
Строка.Содержание = ЗаменитьСимволы(Строка.Содержание);
КонецЕсли;

НоваяСтрока.Приход      = Строка.Приход;
НоваяСтрока.Расход      = Строка.Расход;

НоваяСтрока.НомерПП = Строка.НомерПП;
попытка
НоваяСтрока.ДатаПП=Строка.ДатаПП;
исключение
конецпопытки;
// только

// 4.1. Определение юридического/физического лица, контрагента
// Ищем по коду ЕДРПОУ (в дальнейшем ОКПО):

ТаблицаКоды = РегистрыСведений.КодыОрганизации.СрезПоследних(,Новый Структура("Организация",Организация));
//Если ТаблицаКоды.Количество()>0 Тогда
// ПериодЗаписи = ТаблицаКоды[0].Период;
//Иначе
// ПериодЗаписи = РабочаяДата;
//КонецЕсли;
//КодыОрганизаций.Организация = Ссылка;
//КодыОрганизаций.Период = ПериодЗаписи;
//КодыОрганизаций.Прочитать();
КодыОрганизаций=ТаблицаКоды[0];

Если Строка.ОКПО=КодыОрганизаций.КодПоЕДРПОУ и Строка.Приход=0 Тогда
НоваяСтрока.ВидОперации=Перечисления.ВидыОперацийППИсходящее.ПереводНаДругойСчет;
Иначе
ВыборкаПоОКПО = НайтиПоОКПО(Строка.ОКПО, Строка.Контрагент);
НайденКонтрагент = Ложь;

Если Строка.Приход=0 Тогда
ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;
НоваяСтрока.ВидОперации=Перечисления.ВидыОперацийППИсходящее.ОплатаПоставщику;
ИначеЕсли Строка.Приход<>0 Тогда
ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
НоваяСтрока.ВидОперации=Перечисления.ВидыОперацийПоступлениеБезналичныхДенежныхСредств.ОплатаПокупателя;

КонецЕсли;

Если ВыборкаПоОКПО.Следующий() Тогда //есть хоть один

Контрагент = ВыборкаПоОКПО.Ссылка;
НайденКонтрагент = Истина;
//Если Не Контрагент.ОсновнойДоговорКонтрагента.Пустая() Тогда
// Договор = Контрагент.ОсновнойДоговорКонтрагента;
//Иначе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
   | ДоговорыКонтрагентов.Ссылка
   |ИЗ
   | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
   |ГДЕ
   | ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
   | И ДоговорыКонтрагентов.Владелец = &Контрагент
   | И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
   | И ДоговорыКонтрагентов.ВалютаВзаиморасчетов = &ВалютаВзаиморасчетов";

Запрос.УстановитьПараметр("Контрагент",Контрагент);
Запрос.УстановитьПараметр("ВидДоговора",ВидДоговора);
Запрос.УстановитьПараметр("ВалютаВзаиморасчетов",Счет.ВалютаДенежныхСредств);

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
спрКонтрагентОб=Контрагент.ПолучитьОбъект();
спрКонтрагентОб.ОсновнойДоговорКонтрагента = СоздатьДоговор(спрКонтрагентОб,ВидДоговора);
спрКонтрагентОб.Записать();
Договор = Контрагент.ОсновнойДоговорКонтрагента;
Иначе
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Договор = Выборка.Ссылка;
Прервать;
КонецЦикла;
КонецЕсли;
//КонецЕсли;
//спрКонтрагентОб.ОсновнойДоговорКонтрагента = СоздатьДоговор(спрКонтрагентОб);
Иначе
Если Не СокрЛП(Строка.ОКПО)="" Тогда
// в зависимости от флага
// "АвтоСозданиеКонтрагента" создаем новые элементы справочника Контрагенты

Если НастройкиОбработки.АвтоСозданиеКонтрагента Тогда

Реквизиты = Новый Структура;
Реквизиты.Вставить("Наименование", Строка.Контрагент);
Реквизиты.Вставить("ОКПО", Строка.ОКПО);
ПР = ?(Строка.Приход = 0, "Р", "П");
Реквизиты.Вставить("ПР", ПР); //Приход ("П") или расход ("Р")
Реквизиты.Вставить("РСчет", Строка.РСчет);
Реквизиты.Вставить("МФО", Строка.МФО);

Реквизиты = Новый Структура;
Реквизиты.Вставить("Наименование", Строка.Контрагент);
Реквизиты.Вставить("ПР", ПР); //Приход ("П") или расход ("Р")
Реквизиты.Вставить("ОКПО", Строка.ОКПО);
Реквизиты.Вставить("РСчет", Строка.РСчет);
Реквизиты.Вставить("МФО", Строка.МФО);

//Создаём нового контрагента в справочнике
Контрагент = СоздатьСпрКонтрагент(Реквизиты,ВидДоговора);
Договор = Контрагент.ОсновнойДоговорКонтрагента;
Иначе
// ПустаяСсылка
Контрагент = Справочники[ПолучитьИмяОбъектаКонфигурации("ТипСправочникаКонтрагенты")].ПустаяСсылка();
КонецЕсли;
Иначе
Контрагент=Справочники.Контрагенты.ПустаяСсылка();
КонецЕсли;
КонецЕсли;

НоваяСтрока.Контрагент = Контрагент;

// 4.2. Определение сделки, заказа, договора.
// основной договор
НоваяСтрока.Договор = Договор;

//НоваяСтрока.Содержание = СокрЛП(Строка.Содержание);
// осталось сделки и заказы только в том случае, если найден Контрагент
Если НайденКонтрагент Тогда
//пытаемся найти сделки и заказы

//из "Строка.Содержание" находим список номеров
масНомераСделок = НайтиНомер(Строка.Содержание);
// нужно масНомераСделок дополнить:
// 1. нулями до длины = 8
// 2. префикс + нулями до длины = 8
масНомераСделокДополнить(масНомераСделок, СокрЛП(Организация.Префикс));

Если масНомераСделок.Количество() > 0 Тогда
//сначала ищем среди сделок, затем, если результат пуст, среди договоров
//ВыборкаСделки = НайтиСделки(масНомераСделок, Контрагент, Организация);
//масСписокНайденныхСделок = ВыборкаСделки.ВыгрузитьКолонку("Ссылка");
//Если ВыборкаСделки.Количество() > 0  Тогда
// //нашли хоть одну сделку
// НоваяСтрока.Сделка = ВыборкаСделки[0].Ссылка;
// Если клЕстьТабличнаяЧасть("РасшифровкаПлатежа",ВыборкаСделки[0].Ссылка.Метаданные()) Тогда
// НоваяСтрока.Договор = ВыборкаСделки[0].Ссылка.РасшифровкаПлатежа[0].ДоговорКонтрагента;
// Иначе
// НоваяСтрока.Договор = ВыборкаСделки[0].Ссылка.ДоговорКонтрагента;
// КонецЕсли;
//
// НоваяСтрока.СписокНайденныхСделок = ЗначениеВСтрокуВнутр(масСписокНайденныхСделок);
//
//Иначе
//ищем договора
ВыборкаДоговора = НайтиДоговора(масНомераСделок, Контрагент, Организация);
Если ВыборкаДоговора.Следующий() Тогда
//нашли хоть один договор
НоваяСтрока.Договор = ВыборкаДоговора.Ссылка;
КонецЕсли;
// КонецЕсли;
КонецЕсли;

КонецЕсли;

КонецЕсли;

НоваяСтрока.Содержание = СокрЛП(Строка.Содержание);

Если Строка.ОКПО=КодыОрганизаций.КодПоЕДРПОУ и Строка.Приход=0 Тогда
//ВидОперации=Перечисления.ВидыОперацийППИсходящее.ПереводНаДругойСчет;
НоваяСтрока.СчетКонтрагента = НайтиСчетКонтрагента(Строка.РСчет, Организация);
Иначе
// по счету ищем банковский счет для контрагента. Если нет - создать.
НоваяСтрока.СчетКонтрагента = НайтиСчетКонтрагента(Строка.РСчет, Контрагент);
Если клЗначениеНеЗаполнено(НоваяСтрока.СчетКонтрагента) Тогда
НоваяСтрока.СчетКонтрагента = ДобавитьСчетКонтрагента(Контрагент, Строка.РСчет, Строка.МФО);
КонецЕсли;
КонецЕсли;



////НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;

// определяем статус

Если клЗначениеНеЗаполнено(НоваяСтрока.Контрагент) Тогда
НоваяСтрока.Статус = СтатусыСтрокИмпорта.НеобходимоЗаполнитьРеквизиты;
Иначе
// договор должен быть заполнен всегда
Если клЗначениеНеЗаполнено(НоваяСтрока.Договор) Тогда
НоваяСтрока.Статус = СтатусыСтрокИмпорта.НеобходимоЗаполнитьРеквизиты;
Иначе

Если Конфигурация = "УПП" Или Конфигурация = "УТ" Тогда
Если НоваяСтрока.Договор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоСчетам Или
НоваяСтрока.Договор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам Тогда
// проверяем на заполненность сделку
Если клЗначениеНеЗаполнено(НоваяСтрока.Сделка) Тогда
НоваяСтрока.Статус = СтатусыСтрокИмпорта.НеобходимоЗаполнитьРеквизиты;
Иначе
НоваяСтрока.Статус = СтатусыСтрокИмпорта.ГотовКЗаписи;
КонецЕсли;
Иначе
НоваяСтрока.Статус = СтатусыСтрокИмпорта.ГотовКЗаписи;
КонецЕсли;
ИначеЕсли Конфигурация = "БУ" Тогда
НоваяСтрока.Статус = СтатусыСтрокИмпорта.ГотовКЗаписи;
КонецЕсли;

КонецЕсли;
КонецЕсли;
КонецЦикла;

// 4.5 Удаляем с тзПлатежи, те которые уже есть в тчИмпорт
// (совпадение по ЮрФизЛицу и приходу-расходу) (УТ)
// (совпадение по Контрагенту и приходу-расходу) (УПП)

//МассивУдаляемыхСтрок = Новый Массив;
//
//Для Каждого Строка Из тзПлатежи Цикл
// ПервоеСовпадениеПриход = Истина;
// ПервоеСовпадениеРасход = Истина;
// Для Каждого СтрокаИмпорт Из тчИмпорт Цикл
//
// СтрокаСравнения = "Контрагент";
// Если (Строка[СтрокаСравнения] = СтрокаИмпорт[СтрокаСравнения]) Тогда
// // приход-расход
// Если (Строка.Приход > 0) И (СтрокаИмпорт.Приход > 0) И (Строка.Приход = СтрокаИмпорт.Приход) Тогда
// // совпало
// Если ПервоеСовпадениеПриход Тогда
// // эту строку из тзПлатежи удаляем
// МассивУдаляемыхСтрок.Добавить(Строка);
// ПервоеСовпадениеПриход = Ложь;
// КонецЕсли;
// КонецЕсли;
// Если (Строка.Расход > 0) И (СтрокаИмпорт.Расход  > 0) И (Строка.Расход  = СтрокаИмпорт.Расход ) Тогда
// // совпало
// Если ПервоеСовпадениеРасход  Тогда
// // эту строку из тзПлатежи удаляем
// МассивУдаляемыхСтрок.Добавить(Строка);
// ПервоеСовпадениеРасход  = Ложь;
// КонецЕсли;
// КонецЕсли;
// КонецЕсли;
// КонецЦикла;
//КонецЦикла;
//
//Для Каждого ЭлементМассива Из МассивУдаляемыхСтрок Цикл
// тзПлатежи.Удалить(ЭлементМассива);
//КонецЦикла;

// 5. Объединяем с тчИмпорт, в которой сейчас существующие платежи. Устанавливаем статусы

Для Каждого Строка Из тзПлатежи Цикл 
НоваяСтрока = тчИмпорт.Добавить();

НоваяСтрока.ВидОперации=Строка.ВидОперации;

НоваяСтрока.Контрагент = Строка.Контрагент;

НоваяСтрока.Приход      = Строка.Приход;
НоваяСтрока.Расход      = Строка.Расход;

НоваяСтрока.НомерПП      = Строка.НомерПП;
НоваяСтрока.ДатаПП      = Строка.ДатаПП;

Если НоваяСтрока.Приход > 0 Тогда
НоваяСтрока.ВидДокумента = ПолучитьИмяОбъектаКонфигурации("ТипДокументаВыпискаПриходПоУмолчанию");
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли НоваяСтрока.Расход > 0 Тогда
НоваяСтрока.ВидДокумента = ПолучитьИмяОбъектаКонфигурации("ТипДокументаВыпискаРасходПоУмолчанию");
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
КонецЕсли;
//НоваяСтрока.СтавкаНДС = Строка.СтавкаНДС;

//НоваяСтрока.Сделка = Строка.Сделка;
НоваяСтрока.СчетКонтрагента = Строка.СчетКонтрагента;
НоваяСтрока.Договор = Строка.Договор;

НоваяСтрока.Содержание      = Строка.Содержание;

Если СокрЛП(Строка.НомерПП)="" Тогда
     ЕстьПП=Неопределено
Иначе
Если Строка.Расход>0 Тогда
ЕстьПП=НайтиПП(Строка.Контрагент,Строка.СчетКонтрагента,Строка.НомерПП,Строка.Расход,Истина);
Иначе
ЕстьПП=НайтиПП(Строка.Контрагент,Строка.СчетКонтрагента,Строка.НомерПП,Строка.Приход,Ложь);
КонецЕсли;
КонецЕсли;

Если ЕстьПП=Неопределено Тогда
НоваяСтрока.Статус = Строка.Статус;
Иначе
Если ЕстьПП.Проведен Тогда
НоваяСтрока.Статус = 1;
Иначе
НоваяСтрока.Статус = 2;
КонецЕсли;
НоваяСтрока.Контрагент=ЕстьПП.Контрагент;
НоваяСтрока.СчетКонтрагента=ЕстьПП.СчетКонтрагента;
НоваяСтрока.Документ=ЕстьПП;
КонецЕсли;

НоваяСтрока.СписокНайденныхСделок = Строка.СписокНайденныхСделок;
НоваяСтрока.Флаг = Истина;

глТекущийПользователь=Справочники.Пользователи.ПустаяСсылка();

Если Конфигурация = "БУ" Тогда
НоваяСтрока.Ответственный = глТекущийПользователь;
Иначе
// подразделение, ответственный - с настроек пользователя
Попытка
// старая редакция
НоваяСтрока.Подразделение = глТекущийПользователь.ОсновноеПодразделениеКомпании;
НоваяСтрока.Ответственный = глТекущийПользователь.ОсновнойОтветственный;
Исключение
// новая редакция
//НоваяСтрока.Подразделение = клПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОсновноеПодразделение");
НоваяСтрока.Ответственный = клПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОсновнойОтветственный");
КонецПопытки;
КонецЕсли;

КонецЦикла;

// 6. Сортируем тчИмпорт
СортировкаТчИмпорт();

КонецПроцедуры // ИмпортВыписки()


и код отдельно самого банка
Перем ИмяФормата;

// Отказ от открытия обработки, выдаем сообщение о "служебности" обработки
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Предупреждение("Обработка вызывается только из ПП ""Обмен информацией между ПП ""1С:Предприятие 8.0"" и системами ""Клиент-Банк""");
Отказ = Истина;
КонецПроцедуры

// Возвращает Истина, если код в банке есть, Ложь - иначе
//
// Параметры: нет
//
// Возвращаемое значение:
//
//   Булево   – Истина, если код в банке есть, Ложь - иначе
//
Функция ЕстьКодВБанке() Экспорт
Возврат Ложь;
КонецФункции

// Возвращает наименование кода в банке
//
// Параметры:
//
// нет
//
// Возвращаемое значение:
//
// Строка - наименование кода
//
Функция ПолучитьНаименованиеКода() Экспорт
Возврат "";
КонецФункции

// Возвращает код банка организации
//
// Параметры:
//
//  Структура Параметры
// Ключ Организация - Организация - Справочник.Ссылки.Организация         
//
// Возвращаемое значение:
//
//   Строка   – код организации в банке
//
//Функция ПолучитьКодОрганизации(Параметры) Экспорт
// Возврат "";
//КонецФункции

// Формирует имя файла по умолчанию
//
// Параметры:
//
// Структура Параметры
// Ключ Режим - Режим - Строка "Импорт"/"Экспорт"
// Ключ Дата -  Дата выписки (импорт) - Дата
// Ключ Организация - Организация - Справочник.Ссылки.Организация         
// Ключ КодВБанке - код в банке (если есть)
//
// Возвращаемое значение:
//
//   имя файла по умолчанию
//
Функция СформироватьИмяФайла(Параметры) Экспорт
ИмяФайла = ВосстановитьЗначение(ИмяФормата + Параметры.Организация +  "ИмяФайла" + Параметры.Режим);
Если Параметры.Режим = "Импорт" Тогда
//Если ИмяФайла = Неопределено Тогда
// Возврат "o_"+Сред(Параметры.Дата,9,2)+Сред(Параметры.Дата,4,2)+Лев(Параметры.Дата,2)+".dbf";
// //Возврат "Export.dbf";
//Иначе
// //Возврат ИмяФайла;
// Возврат "o_"+Сред(Параметры.Дата,9,2)+Сред(Параметры.Дата,4,2)+Лев(Параметры.Дата,2)+".dbf";
//КонецЕсли;
//ВладелецФормы.тчИспользуемыеФорматыОбмена
Возврат "";
Иначе
//Если ИмяФайла = Неопределено Тогда
//Возврат "c_epd.txt";
//Иначе
// Возврат ИмяФайла;
//КонецЕсли;
Возврат "";
КонецЕсли;
КонецФункции

// Выбирает имя файла
//
// Параметры:
//
// Структура Параметры
// Ключ Режим - Режим - Строка "Импорт"/"Экспорт"
// Ключ Дата -  Дата выписки (импорт) - Дата
// Ключ КодВБанке - код в банке (если есть)
//      Ключ ТекущееИмяФайла - строка - текущее имя файла в основной обработке
//      Ключ ТекущийТипФайла - текущий тип файла ("TXT"/"DBF"/"XML")
//
// Возвращаемое значение:
//
//   Строка   – выбранное имя файла
//
Функция ВыбратьИмяФайла(Параметры) Экспорт

РежимДиалога = ?(Параметры.Режим = "Импорт", РежимДиалогаВыбораФайла.Открытие, РежимДиалогаВыбораФайла.Сохранение);
Длг = Новый ДиалогВыбораФайла(РежимДиалога);

Длг.ПолноеИмяФайла = Параметры.ТекущееИмяФайла;
Длг.Заголовок = "Выберите файл";

Если Параметры.Режим = "Импорт" Тогда
Длг.Фильтр = "Файлы dBase (*.dbf)|*.dbf";
Длг.Расширение = "dbf";   //Параметры.ТекущийТипФайла;
Иначе
Длг.Фильтр = "Файлы dBase (*.dbf)|*.dbf";
Длг.Расширение = "dbf";   //Параметры.ТекущийТипФайла;
КонецЕсли;

Если Длг.Выбрать() Тогда
Возврат Длг.ПолноеИмяФайла;
КонецЕсли;

Возврат Параметры.ТекущееИмяФайла;
КонецФункции

// Возвращает сохраненный тип файла
//
// Параметры:
//
// Структура Параметры
// Ключ Режим - Режим - Строка "Импорт"/"Экспорт"
//
// Возвращаемое значение:
//
//   Строка – текущий тип файла ("TXT"/"DBF"/"XML")
//
Функция ПолучитьТекущийТипФайла(Параметры) Экспорт

ТипФайла = ВосстановитьЗначение(ИмяФормата + Параметры.Организация +  "ТипФайла" + Параметры.Режим);

Если Параметры.Режим = "Импорт" Тогда
//Если ТипФайла = Неопределено Тогда
Возврат "DBF";
//Иначе
//Возврат ТипФайла;
//КонецЕсли;
Иначе
// Параметры.Режим = "Экспорт"
// Если ТипФайла = Неопределено Тогда
Возврат "DBF";
// Иначе
// Возврат ТипФайла;
//КонецЕсли;
КонецЕсли;

КонецФункции

// Сохраняет значения для формата:
//
// Имя файла
// Тип файла
// Код в банке, если такой существует
//
// Параметры:
// Структура Параметры
// Ключ Режим - Режим - Строка "Импорт"/"Экспорт"
// Ключ Организация - Организация - Справочник.Ссылки.Организация         
// Ключ КодВБанке - код в банке (если есть)
//      Ключ ТекущееИмяФайла - строка - текущее имя файла в основной обработке
//      Ключ ТекущийТипФайла - строка - текущий тип файла в основной обработке
// 
Процедура СохранитьЗначения(Параметры) Экспорт

СохранитьЗначение(ИмяФормата + Параметры.Организация +  "ИмяФайла" + Параметры.Режим, Параметры.ТекущееИмяФайла);
СохранитьЗначение(ИмяФормата + Параметры.Организация +  "ТипФайла" + Параметры.Режим, Параметры.ТекущийТипФайла);
Если ЕстьКодВБанке() Тогда
СохранитьЗначение(ИмяФормата + Параметры.Организация +  "КодВБанке", Параметры.КодВБанке); // если есть
КонецЕсли;

КонецПроцедуры

// Обработка формата должна вернуть режимы и типы файлов, которая она поддерживает.
//
// Параметры: нет
//
//  Возвращаемое значение:
//
// Возвращает структуру со следующими ключами:
//
// Импорт (Истина/Ложь)
// ИмпортTXT (Истина/Ложь)
// ИмпортDBF (Истина/Ложь)
// ИмпортXML (Истина/Ложь)
// Экспорт (Истина/Ложь)
// ЭкспортTXT (Истина/Ложь)
// ЭкспортDBF (Истина/Ложь)
// ЭкспортXML (Истина/Ложь)
//
Функция ПолучитьПоддерживаемыеРежимы() Экспорт

ИмпортЭкспорт = Новый Структура;
ИмпортЭкспорт.Вставить("Импорт", Истина);
ИмпортЭкспорт.Вставить("ИмпортTXT", Ложь);
ИмпортЭкспорт.Вставить("ИмпортDBF", Истина);
ИмпортЭкспорт.Вставить("ИмпортXML", Ложь);

ИмпортЭкспорт.Вставить("Экспорт", Истина);
ИмпортЭкспорт.Вставить("ЭкспортTXT", Ложь);
ИмпортЭкспорт.Вставить("ЭкспортDBF", Истина);
ИмпортЭкспорт.Вставить("ЭкспортXML", Ложь);

Возврат ИмпортЭкспорт;

КонецФункции

// Осуществляет импорт выписки из файла типа "TXT"
//
// Параметры:
//
// Структура Параметры   
//
// Ключ ДатаДок - Дата выписки  – дата
// Ключ Организация - Организация - СправочникСсылка.Организации
// Ключ РСчет - Расчетный счет организации - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
//
//
// Возвращаемое значение:
//
//   Таблица значений тзВыписка
//
// тзВыписка - Таблица платежей – таблица значений тзВыписка с полями
// НомерПП – строка, номер платежного поручения
// Приход – число, сумма прихода
// Расход – число, сумма расхода
// ОКПО – строка, ЕДРПОУ контрагента
// Контрагент – строка, наименование контрагента, как оно указано в выписке
// МФО - строка, МФО банка контрагента
// РСчет - строка, расчетный счет контрагента
// Содержание - строка, содержание платежа
//
// Если при импорте выписки произошли ошибки, возвращается Неопределенно.
//     
//      При проверке на дату платежа, если платежей с датой, которая отличается от переданной было > 0
//      необходимо выдать предупреждение
//
Функция ИмпортTXT(Параметры)
Возврат Неопределено;
КонецФункции

// Осуществляет импорт выписки из файла типа "XML"
//
// Параметры:
//
// Структура Параметры   
//
// Ключ ДатаДок - Дата выписки  – дата
// Ключ Организация - Организация - СправочникСсылка.Организации
// Ключ РСчет - Расчетный счет организации - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
//
//
// Возвращаемое значение:
//
//   Таблица значений тзВыписка
//
// тзВыписка - Таблица платежей – таблица значений тзВыписка с полями
// НомерПП – строка, номер платежного поручения
// Приход – число, сумма прихода
// Расход – число, сумма расхода
// ОКПО – строка, ЕДРПОУ контрагента
// Контрагент – строка, наименование контрагента, как оно указано в выписке
// МФО - строка, МФО банка контрагента
// РСчет - строка, расчетный счет контрагента
// Содержание - строка, содержание платежа
//
// Если при импорте выписки произошли ошибки, возвращается Неопределенно.
//     
//      При проверке на дату платежа, если платежей с датой, которая отличается от переданной было > 0
//      необходимо выдать предупреждение
//
Функция ИмпортXML(Параметры)
Возврат Неопределено;
КонецФункции

// Осуществляет импорт выписки из файла типа "DBF"
//
// Параметры:
//
// Структура Параметры   
//
// Ключ ДатаДок - Дата выписки  – дата
// Ключ Организация - Организация - СправочникСсылка.Организации
// Ключ РСчет - Расчетный счет организации - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
//
//
// Возвращаемое значение:
//
//   Таблица значений тзВыписка
//
// тзВыписка - Таблица платежей – таблица значений тзВыписка с полями
// НомерПП – строка, номер платежного поручения
// Приход – число, сумма прихода
// Расход – число, сумма расхода
// ОКПО – строка, ЕДРПОУ контрагента
// Контрагент – строка, наименование контрагента, как оно указано в выписке
// МФО - строка, МФО банка контрагента
// РСчет - строка, расчетный счет контрагента
// Содержание - строка, содержание платежа
//
// Если при импорте выписки произошли ошибки, возвращается Неопределенно.
//     
//      При проверке на дату платежа, если платежей с датой, которая отличается от переданной было > 0
//      необходимо выдать предупреждение
//
Функция ИмпортDBF(Параметры)
ФайлDBF = Новый XBase;
ФайлDBF.Кодировка = КодировкаXBase.ANSI;    //DOS

ИмяФайла = Параметры.ИмяФайла;
ИмяВременногоФайла = СтрЗаменить(ПолучитьИмяВременногоФайла(), "v8_", "");

КопироватьФайл(ИмяФайла, ИмяВременногоФайла);


Попытка
ФайлDBF.ОткрытьФайл(ИмяВременногоФайла,,Истина); //Только для чтения
Исключение
Предупреждение("Ошибка открытия файла " + ИмяФайла + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

Если НЕ ФайлDBF.Открыта() Тогда
Предупреждение("Ошибка открытия файла " + ИмяФайла + ОписаниеОшибки());
Возврат Неопределено;
КонецЕсли;

тзВыписка =  Новый ТаблицаЗначений;
тзВыписка.Колонки.Добавить("НомерПП");
тзВыписка.Колонки.Добавить("Приход");
тзВыписка.Колонки.Добавить("Расход");
тзВыписка.Колонки.Добавить("ОКПО");
тзВыписка.Колонки.Добавить("Контрагент");
тзВыписка.Колонки.Добавить("МФО");
тзВыписка.Колонки.Добавить("РСчет");
тзВыписка.Колонки.Добавить("Содержание");
тзВыписка.Колонки.Добавить("ДатаПП");
//тзВыписка.Колонки.Добавить("Счет");

//спВыбранныеСчета= Новый СписокЗначений();
//
//Для каждого ТекСтр Из ВладелецФормы.тчСчета Цикл
// Если ТекСтр.Пометка Тогда
// спВыбранныеСчета.Добавить(ТекСтр.Счет,СокрЛП(ТекСтр.НомерСчета));
// КонецЕсли;
//КонецЦикла;

//ТаблицаКоды = РегистрыСведений.КодыОрганизации.СрезПоследних(,Новый Структура("Организация",ВладелецФормы.Организация));

//КодыОрганизаций=ТаблицаКоды[0];
//НашОКПО=КодыОрганизаций.КодПоЕДРПОУ;

ФайлDBF.Первая();
ДатаПлатежаТекст = "Ошибка дат в файла: ";
Пока НЕ ФайлDBF.ВКонце() Цикл

// проверка на дату платежа АРТ СОФТ
ДатаПлатежа = Дата(СтрЗаменить(ФайлDBF.DOC_DATE, ".", ""));
ДатаПлатежаТекст = ДатаПлатежаТекст + ДатаПлатежа + "; ";
Если  ДатаПлатежа < Параметры.ДатаДок или ДатаПлатежа > Параметры.ДатаДок1 Тогда
ФайлDBF.Следующая();
//Предупреждение(ДатаПлатежаТекст);
Продолжить;
КонецЕсли;

// проверка на совпадение расчетного счета

СчетВФайле=СокрЛП(Формат(ФайлDBF.ACC_NUMB, "ЧГ=0"));
//НайденныйСчет=спВыбранныеСчета.НайтиПоЗначению(СчетВФайле);

//тзСчета=ВладелецФормы.тчСчета.Найти();
//НайденныйСчет=ВладелецФормы.тчСчета.Найти(СчетВФайле,"НомерСчета");
//НайденныйСчет=ВладелецФормы.Счет;

//Если НайденныйСчет=Неопределено или Не НайденныйСчет.Пометка Тогда
// ФайлDBF.Следующая();
// Продолжить;
//КонецЕсли;

Если СчетВФайле <> Параметры.РСчет Тогда
ФайлDBF.Следующая();
Продолжить;
КонецЕсли;

// проверка на валюту
Если (СокрЛП(ФайлDBF.CUR_NUMB) <> Параметры.РсчетПолный.ВалютаДенежныхСредств.Код) Тогда
ФайлDBF.Следующая();
Продолжить;
КонецЕсли;

//КлиентОКПО=СокрЛП(Формат(ФайлDBF.KL_OKP_K,"ЧГ=0"));

НовСтрока = тзВыписка.Добавить();
НовСтрока.Расход = ФайлDBF.DB;
НовСтрока.Приход = ФайлDBF.CR;

//НовСтрока.Счет=НайденныйСчет;
НовСтрока.Контрагент = СокрЛП(ФайлDBF.KOR_NAME);
НовСтрока.ОКПО = СокрЛП(Формат(ФайлDBF.KOR_OKPO,"ЧГ=0"));
НовСтрока.МФО = СокрЛП(Формат(ФайлDBF.KOR_MFO,"ЧГ=0"));
  НовСтрока.РСчет = СчетВФайле;
//НовСтрока.РСчет = СокрЛП(Формат(ФайлDBF.KOR_ACC,"ЧГ=0"));
НовСтрока.НомерПП = СокрЛП(Формат(ФайлDBF.DOC_NO,"ЧГ=0"));
НовСтрока.ДатаПП=ДатаПлатежа;
        НовСтрока.Содержание = СокрЛП(ФайлDBF.DESCRIPT);

ФайлDBF.Следующая();
КонецЦикла;

Если НЕ тзВыписка.Количество() И ФайлDBF.КоличествоЗаписей() Тогда
Предупреждение("В текущем файле нет платежей с данной датой выписки и расчетным счетом!" + ДатаПлатежаТекст);
КонецЕсли;

ФайлDBF.ЗакрытьФайл();

УдалитьФайлы(ИмяВременногоФайла);

Возврат тзВыписка;

КонецФункции

// Осуществляет импорт выписки из файла
//
// Параметры:
//
// Структура Параметры   
//
// Ключ ДатаДок - Дата выписки  – дата
// Ключ Организация - Организация - СправочникСсылка.Организации
// Ключ РСчет - Расчетный счет организации - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
//
//
// Возвращаемое значение:
//
//   Таблица значений тзВыписка
//
// тзВыписка - Таблица платежей – таблица значений тзВыписка с полями
// НомерПП – строка, номер платежного поручения
// Приход – число, сумма прихода
// Расход – число, сумма расхода
// ОКПО – строка, ЕДРПОУ контрагента
// Контрагент – строка, наименование контрагента, как оно указано в выписке
// МФО - строка, МФО банка контрагента
// РСчет - строка, расчетный счет контрагента
// Содержание - строка, содержание платежа
//
// Если при импорте выписки произошли ошибки, возвращается Неопределенно.
//     
//      При проверке на дату платежа, если платежей с датой, которая отличается от переданной было > 0
//      необходимо выдать предупреждение
//
Функция ИмпортВыписки(Параметры) Экспорт
Если Параметры.ТипФайла = "DBF" Тогда
Возврат ИмпортDBF(Параметры);
ИначеЕсли Параметры.ТипФайла = "TXT" Тогда
Возврат ИмпортTXT(Параметры);
ИначеЕсли Параметры.ТипФайла = "XML" Тогда
Возврат ИмпортXML(Параметры);
КонецЕсли;
КонецФункции

Функция НадоДобавить(ЧтоДобавляем,РазмерСтроки);
Пайп = "                                                                                                                                                                                                                                                      ";
СколькоДобавить = РазмерСтроки-СтрДлина(ЧтоДобавляем);
Возврат Лев(Пайп,СколькоДобавить);
КонецФункции

// Осуществляет экспорт платежных поручений в файл типа "TXT"
//
// Параметры:
//
// Структура Параметры   
//                 
// Ключ НашМФО - МФО организации - строка
// Ключ НашСчет - Расчетный счет организации - строка
//      Ключ НашОКПО - ЕДРПОУ организации  - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
// Ключ тзПлатежныеПоручения - Таблица значений с полями:
// Номер платежного поручения (НомерПП) - строка
// Дата платежного поручения (ДатаПП) - строка
// Контрагент (Контрагент) - строка
// МФО расчетного счета контрагента (МФО) - строка
// Расчетный счет контрагента (Счет) - строка
// ЕДРПОУ контрагента (ОКПО) - строка
// Сумма платежного поручения (Сумма) – число
// Содержание платежа (Содержание) – строка
// !!!(Банк) - строка
//
// Возвращаемое значение:
//
//   Булево - Истина - успешный экспорт
//
Функция ЭкспортTXT(Параметры)
Возврат Ложь;
КонецФункции

// Осуществляет экспорт платежных поручений в файл типа "XML"
//
// Параметры:
//
// Структура Параметры   
//                 
// Ключ НашМФО - МФО организации - строка
// Ключ НашСчет - Расчетный счет организации - строка
//      Ключ НашОКПО - ЕДРПОУ организации  - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
// Ключ тзПлатежныеПоручения - Таблица значений с полями:
// Номер платежного поручения (НомерПП) - строка
// Дата платежного поручения (ДатаПП) - строка
// Контрагент (Контрагент) - строка
// МФО расчетного счета контрагента (МФО) - строка
// Расчетный счет контрагента (Счет) - строка
// ЕДРПОУ контрагента (ОКПО) - строка
// Сумма платежного поручения (Сумма) – число
// Содержание платежа (Содержание) – строка
// !!!(Банк) - строка
//
// Возвращаемое значение:
//
//   Булево - Истина - успешный экспорт
//
Функция ЭкспортXML(Параметры)
Возврат Ложь;
КонецФункции

// Осуществляет экспорт платежных поручений в файл типа "DBF"
//
// Параметры:
//
// Структура Параметры   
//                 
// Ключ НашМФО - МФО организации - строка
// Ключ НашСчет - Расчетный счет организации - строка
//      Ключ НашОКПО - ЕДРПОУ организации  - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
// Ключ тзПлатежныеПоручения - Таблица значений с полями:
// Номер платежного поручения (НомерПП) - строка
// Дата платежного поручения (ДатаПП) - строка
// Контрагент (Контрагент) - строка
// МФО расчетного счета контрагента (МФО) - строка
// Расчетный счет контрагента (Счет) - строка
// ЕДРПОУ контрагента (ОКПО) - строка
// Сумма платежного поручения (Сумма) – число
// Содержание платежа (Содержание) – строка
// !!!(Банк) - строка
//
// Возвращаемое значение:
//
//   Булево - Истина - успешный экспорт
//
Функция ЭкспортDBF(Параметры)

ФайлDBF = Новый XBase();
//ФайлDBF.Кодировка = КодировкаXBase.ANSI;
ФайлDBF.Кодировка = КодировкаXBase.OEM;

ФайлDBF.Поля.Добавить("OrgDate","D",8);
//ФайлDBF.Поля.Добавить("MFO_NM","S",50);
//ФайлDBF.Поля.Добавить("KL_NM","S",50); //Наши реквизиты
//ФайлDBF.Поля.Добавить("KL_OKP","S",15);
ФайлDBF.Поля.Добавить("DebAcc","S",32);
ФайлDBF.Поля.Добавить("CrnId","N",3); //Код валюты
ФайлDBF.Поля.Добавить("CrdMfo","N",6); //МФО клиент
//ФайлDBF.Поля.Добавить("MFO_NM_K","S",50); //Банк клиента
ФайлDBF.Поля.Добавить("CrdAccName","S",38); //Название клиента
ФайлDBF.Поля.Добавить("CrdCliCode","S",10); //ОКПО клиента
ФайлDBF.Поля.Добавить("CrdAcc","S",32); //Р/С клиента
ФайлDBF.Поля.Добавить("Nom","S",10); //Номер документа
//ФайлDBF.Поля.Добавить("DK","N",1); //Признак Дебет-Кредет
//ФайлDBF.Поля.Добавить("VOB","N",5); //Вид документа
ФайлDBF.Поля.Добавить("Summa","N",19,2); //Сумма
//ФайлDBF.Поля.Добавить("DATA","D",8); //Дата поступление
//ФайлDBF.Поля.Добавить("DATA_S","D",15); //Дата отправки
//ФайлDBF.Поля.Добавить("TIME_S","S",4); //Время отправки
//ФайлDBF.Поля.Добавить("ADATEOPL","D",8); //Дата проведения платежа
ФайлDBF.Поля.Добавить("Note","S",160); //Назначение платежа

ФайлDBF.СоздатьФайл(Параметры.ИмяФайла);

Если Не ФайлDBF.Открыта() Тогда 
Предупреждение(НСтр("ru='Не удалось создать и открыть указанный файл!';uk='Не вдалося створити й відкрити зазначений файл!'")); 
Возврат Ложь;
КонецЕсли;

Для Каждого Строка из Параметры.тзПлатежныеПоручения Цикл
Если Строка.Валюта<>"980" Тогда
Продолжить;
КонецЕсли;
ФайлDBF.Добавить();

ФайлDBF.OrgDate=Строка.ДатаПП;
ФайлDBF.DebAcc=Параметры.НашСчет;
//ФайлDBF.CrnId=Строка.Валюта;
ФайлDBF.CrnId="UAH";
ФайлDBF.CrdMfo=СокрЛП(Строка.МФО);
ФайлDBF.CrdAccName=Строка.Контрагент;
ФайлDBF.CrdCliCode=Строка.ОКПО;
ФайлDBF.CrdAcc=Строка.Счет;
ФайлDBF.Nom=Строка.НомерПП;
ФайлDBF.Summa=Строка.Сумма;
ПерекодировкаЭкспорта(Строка.Содержание);
ФайлDBF.Note=Строка.Содержание;

ФайлDBF.Записать();

Попытка
Док=Строка.Документ.ПолучитьОбъект();
Док.Оплачено=Истина;
Док.Записать(РежимЗаписиДокумента.Проведение);
Исключение
КонецПопытки;
КонецЦикла;
ФайлDBF.ЗакрытьФайл();

Возврат Ложь;
КонецФункции

// Осуществляет экспорт платежных поручений в файл
//
// Параметры:
//
// Структура Параметры   
//                 
// Ключ НашМФО - МФО организации - строка
// Ключ НашСчет - Расчетный счет организации - строка
//      Ключ НашОКПО - ЕДРПОУ организации  - строка
// Ключ ИмяФайла - Имя файла  - строка 
// Ключ ТипФайла - Тип файла  - строка ("TXT"/"DBF"/"XML")
// Ключ тзПлатежныеПоручения - Таблица значений с полями:
// Номер платежного поручения (НомерПП) - строка
// Дата платежного поручения (ДатаПП) - строка
// Контрагент (Контрагент) - строка
// МФО расчетного счета контрагента (МФО) - строка
// Расчетный счет контрагента (Счет) - строка
// ЕДРПОУ контрагента (ОКПО) - строка
// Сумма платежного поручения (Сумма) – число
// Содержание платежа (Содержание) – строка
//
// Возвращаемое значение:
//
//   Булево - Истина - успешный экспорт
//
Функция ЭкспортПлатежныхПоручений(Параметры) Экспорт
Если Параметры.ТипФайла = "DBF" Тогда
Возврат ЭкспортDBF(Параметры);
ИначеЕсли Параметры.ТипФайла = "TXT" Тогда
Возврат ЭкспортTXT(Параметры);
ИначеЕсли Параметры.ТипФайла = "XML" Тогда
Возврат ЭкспортXML(Параметры);
КонецЕсли;

КонецФункции

// Надо ли перекодировать текстовые поля (Контрагент, Содержание) после импорта.
// Под перекодировкой понимается замена украинских символов
//
// Параметры: нет
//
//
// Возвращаемое значение:
//
//   Булево    – Истина - надо перекодировать/Ложь - не надо перекодировать
//
Функция ПерекодировкаИмпорта() Экспорт
Возврат Истина;
КонецФункции

// Надо ли перекодировать текстовые поля (Контрагент, Содержание) перед экспортом.
// Под перекодировкой понимается замена украинских символов
//
// Параметры: нет
//
// Возвращаемое значение:
//
//   Булево    – Истина - надо перекодировать/Ложь - не надо перекодировать
//
Функция ПерекодировкаЭкспорта(Стр="") Экспорт
Стр=СтрЗаменить(Стр,"є","е");
Стр=СтрЗаменить(Стр,"і","i");
Стр=СтрЗаменить(Стр,"ї","i");
Стр=СтрЗаменить(Стр,"Є","E");
Стр=СтрЗаменить(Стр,"І","I");
Стр=СтрЗаменить(Стр,"Ї","I");

Возврат Истина;
КонецФункции

ИмяФормата = "Пумб";

burza


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск