andreykyiv@bigmir.net @ Сегодня, 16:32
,
Дело в том что поменялось несколько моментов в файлах импорта из привата:
1. Имя файла больше 8 символов, 1С до сих пор не умеет их открывать. Обход - переименовываем.
2. Р/счет организации теперь всегда в одной колонке (COUNT_A)
3. Р/счет может быть как в формате IBAN так и в старом
4. Поменялся формат даты платежа
5. Поменялось обозначение вида операции (приход/расход)
В большинстве обработок на основе распространяемой АБИ (Конто) где под каждый формат банка используется мини-обработка достаточно поменять несколько строк.
Функция ИмпортDBF(Параметры)
ФайлDBF = Новый XBase;
ФайлDBF.Кодировка = КодировкаXBase[Параметры.КодировкаФайла]; //DOS
ИмяФайла = Параметры.ИмяФайла;
Попытка
ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина); //Только для чтения
Исключение
Предупреждение("Ошибка открытия файла " + ИмяФайла);
Возврат Неопределено;
КонецПопытки;
Если НЕ ФайлDBF.Открыта() Тогда
Предупреждение("Ошибка открытия файла " + ИмяФайла);
Возврат Неопределено;
КонецЕсли;
тзВыписка = Новый ТаблицаЗначений;
тзВыписка.Колонки.Добавить("НомерПП");
тзВыписка.Колонки.Добавить("Приход");
тзВыписка.Колонки.Добавить("Расход");
тзВыписка.Колонки.Добавить("ОКПО");
тзВыписка.Колонки.Добавить("Контрагент");
тзВыписка.Колонки.Добавить("МФО");
тзВыписка.Колонки.Добавить("РСчет");
тзВыписка.Колонки.Добавить("Содержание");
ФайлDBF.Первая();
Пока НЕ ФайлDBF.ВКонце() Цикл
// проверка на дату платежа
Если ФайлDBF.DATE <> Параметры.ДатаДок И СокрЛП(ФайлDBF.DATE) <> Формат(Параметры.ДатаДок,"ДФ=dd.MM.yyyy") Тогда
ФайлDBF.Следующая();
Продолжить;
КонецЕсли;
НомерСчетаА = СокрЛП(ФайлDBF.COUNT_A);
НомерСчетаБ = СокрЛП(ФайлDBF.COUNT_B);
Если СтрДлина(НомерСчетаА) = 14 Тогда
ПоискСчета = НомерСчетаА;
Иначе
ПоискСчета = Прав(НомерСчетаА,14);
КонецЕсли;
Если Найти(Параметры.Рсчет,ПоискСчета) = 0 Тогда
ФайлDBF.Следующая();
Продолжить;
КонецЕсли;
Если СокрЛП(ФайлDBF.TIP) = "D;R;" Тогда
НовСтрока = тзВыписка.Добавить();
НовСтрока.РСчет = СокрЛП(Формат(НомерСчетаБ,"ЧГ=0"));
НовСтрока.МФО = СокрЛП(Формат(ФайлDBF.MFO_B,"ЧГ=0"));
НовСтрока.ОКПО = СокрЛП(Формат(ФайлDBF.OKPO_B,"ЧГ=0"));
НовСтрока.Контрагент = СокрЛП(ФайлDBF.NAME_B);
НовСтрока.Приход = 0;
НовСтрока.Расход = -ФайлDBF.SUMMA;
ИначеЕсли СокрЛП(ФайлDBF.TIP) = "C;R;" Тогда
НовСтрока = тзВыписка.Добавить();
НовСтрока.РСчет = СокрЛП(Формат(НомерСчетаБ,"ЧГ=0"));
НовСтрока.МФО = СокрЛП(Формат(ФайлDBF.MFO_B,"ЧГ=0"));
НовСтрока.ОКПО = СокрЛП(Формат(ФайлDBF.OKPO_B,"ЧГ=0"));
НовСтрока.Контрагент = СокрЛП(ФайлDBF.NAME_B);
НовСтрока.Приход = ФайлDBF.SUMMA;
НовСтрока.Расход = 0;
Иначе
ФайлDBF.Следующая();
Продолжить;
КонецЕсли;
НовСтрока.НомерПП = СокрЛП(ФайлDBF.N_D);
НовСтрока.Содержание = СокрЛП(СтрЗаменить(ФайлDBF.N_P,Символы.ПС," "));
ФайлDBF.Следующая();
КонецЦикла;
Если НЕ тзВыписка.Количество() И ФайлDBF.КоличествоЗаписей() Тогда
Предупреждение("В текущем файле нет платежей с данной датой выписки и расчетным счетом!");
КонецЕсли;
ФайлDBF.ЗакрытьФайл();
Возврат тзВыписка;
КонецФункции
kihor @ Сегодня, 17:58
,
Кстати да. Уже можно переводить на 2.1 BAS Бухгалтерию))
В Бухгалтерии 1.2 нужно не забыть увеличить длину поля НомерСчета в справочнике Банковские счета до 29 символов