Загрузка платежных поручений в формате казначейства (TXPP170101) в БГУ 1.0

25.06.19

Учетные задачи - Банковские операции

Загружает в базу (БГУ 1.0) Платежные поручения из файлов *.pp* расположенных в указанном каталоге. Считывает данные из файла в соответствии с описанием формата.

Скачать файлы

Наименование Файл Версия Размер
Загрузка Платежных поручений в формате казначейства (TXPP170101) в БГУ 1.0:
.epf 22,29Kb
21
.epf 2.00 22,29Kb 21 Скачать

1) Указываем Учреждение, Каталог (где лежат файлы), Договор (затычка для аналитики 302х счетов), Контрагент ЗП (Контрагент для аналитики 302.1Х - на кого начисляется зарплата).

2) "Считать данные" - подготовительный этап на котором файлы считываются во ВнутреннееПредставлениеДанных (далее по тексту, см скриншот 2).

3) "Заполнить"

4) Установить соответствие прочитанным в файлах КБК (PPST.KBK), Тип КБК (PPST.TYPE_KBK), ДК - Код цели (PPST.ADD_KLASS) И КБК в Базе данных

5) "Выполнить" для загрузки документов.

 

С помощью этой обработки я загружал ПП из файлов в базу Автономного учреждения (Конфигурация БГУ 1.0). Сразу предупрежу, что большое влияние на процесс загрузки сыграет региональная специфика. У нас в регионе используется определенная структура Назначения платежа, и обработка очень много информации берёт именно из него. (КВД, КЭК, ДК - код цели, РК - региональная классификация, СчетДебета в конце концов)

нпр: (013.244:12363,91) ЭК 223 л/с 3001304ХХХХ ДК 1.0113.4940110020.01 РК 2231 БО 3604131201900430 упд №6301/УС/16485 от 30.04.2019г, за теплоэнергию за апрель 2019, в т.ч 2060,65 НДС 20%

 

Ну а теперь немного хороших новостей: Велика вероятность, что обработка может существенно упростить вам загрузку любого другого Документа из файла в формате ФК. Обработка открывает первый файл в папке, считывает в нём название и версию формата (TXPP170101, TXZR170101). Считывает из базы данных описание формата (FK.NUM_VER, FK.FORMER,..., PPT.INN_PAY...) и в соответствии с этим описанием формирует ВнутреннееПредставлениеДанных в виде Структуры (см. скриншот №2) Теоретически ВнутреннееПредставлениеДанных сформируется для любого файла соответствующего формату казначейства, описание которого есть в базе данных  (Справочники.Форматы) Вам не придётся отсчитывать палочки ("|"), а процесс заполнения документов, вы будете описывать приблизительно сл. образом 

Объект.ИННПлательщика = PPT.INN_PAY;

Велика вероятность, что написанная вами обработка спокойно продолжит работать даже после обновления форматов.

Тестировалось на релизе 1.0.58.2.

Загрузка Бюджет СУФД УФК ФК СЭД Платежка Платежное поручение ПП Казначейство Формат TXPP170101 БГУ Заявка кассовый расход

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22452    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9212    9    8    

10

Автоматическая обработка документов по банку при загрузке банковской выписки в 1С

Банковские операции Обмен с интернет-банком Эквайринг/ридер магнитных карт Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

12000 руб.

21.03.2023    8165    32    12    

43

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48710    96    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81570    128    123    

147

Обмен с клиентом банка для Беларуси

Банковские операции Обмен с интернет-банком Платформа 1С v8.3 Бухгалтерский учет Конфигурации 1cv8 1С:Конвертация данных 1С:Бухгалтерия 3.0 Беларусь Бухгалтерский учет Платные (руб)

Типовая обработка "Клиент-банк" из конфигурации 1С "Бухгалтерия для Беларуси, редакция 2.1" корректно работает с выписками только банка "Дабрабыт", до 28.01.2019 "Москва-Минск". А бухгалтеру нужно работать и с другими банками и с другими конфигурациями. Для этого было разработано расширение, которое позволит решить данную проблему!

10.10.2017    36382    69    Xershi    41    

57
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. psa247 17 26.10.20 15:55 Сейчас в теме
2. psa247 17 04.11.20 15:45 Сейчас в теме
Денис, вроде, на файлах-реестрах (где в один файл выгружается несколько ПП) некорректно считывает все платежки. Точнее, цепляет только последнюю запись, т.е. создает один контейнер с описанием файла, вместо N-штук
3. dvsidelnikov 64 04.11.20 17:52 Сейчас в теме
(2) В каком формате грузим? Пришли пример файла.

P.S. когда считывал TXBD натыкался на проблему, решал её буквально исправлением пары строчек, но вот каких без отладки мне не вспомнить.
6. psa247 17 05.11.20 13:44 Сейчас в теме
Предыдущий пост делать не обязательно, но хуже не будет. Короче, как Я решил эту проблему:

в функции

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

Формат = Справочники.КС_Форматы.НайтиПоНаименованию(КодФормата);
ВнутреннееОписаниеФормата = ВнутреннееОписаниеФормата(Формат);

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

МассивРазделителейПолей = Новый Массив;
МассивРазделителейПолей.Добавить("|");

РезультатРаботы = Новый Массив; // ПРОФ
Результат = Новый Структура;

результат работы функции превратил в массив "результатов", далее ....

//Построчно читаем содержимое файла
//0) FK|TXPP170101|1С:Предприятие|8||
//1) FROM|2|10504131|...
Для Каждого СтрокаФайла из МассивСтрокФайла Цикл
Если ПустаяСтрока(СтрокаФайла) Тогда
Продолжить;
КонецЕсли;
//Разбираем строку файла на поля (в первом поле название группы полей)
//0)FK
//1)TXPP170101
//2)1С:Предприятие
МассивПолейСтрокиФайла = СтрРазделить(СтрокаФайла,МассивРазделителейПолей);
ГруппаПолей = МассивПолейСтрокиФайла[0];
СоставГруппыПолей = ВнутреннееОписаниеФормата[ГруппаПолей].Состав;
Если ВнутреннееОписаниеФормата.Свойство(ГруппаПолей) Тогда
Если ВнутреннееОписаниеФормата[ГруппаПолей].Тип = "КоллекцияРеквизитов" Тогда
//FK, FROM...
//{ ПРОФ
Если Результат.Свойство(ГруппаПолей) = ИСТИНА Тогда
Врем = СкопироватьСтруктуру(Результат);
РезультатРаботы.Добавить(Врем);

Результат = Новый Структура;
КонецЕсли;
//} ПРОФ


Результат.Вставить(ГруппаПолей, Новый Структура);
СчетчикПолей = 0;
Для Каждого ИмяПоля из ВнутреннееОписаниеФормата[ГруппаПолей].Состав Цикл
СчетчикПолей = СчетчикПолей + 1;
Результат[ГруппаПолей].Вставить(ИмяПоля, МассивПолейСтрокиФайла[СчетчикПолей]);
КонецЦикла;


добавил признак появления новых "документов". И в случае, если в одном файле находится несколько документов, то сохранял то, что уже "прочитали" из файла в массив результатов и создавали новую структуру для чтения в нее нового документа.
4. psa247 17 05.11.20 08:18 Сейчас в теме
5. psa247 17 05.11.20 13:07 Сейчас в теме
Скорее всего здесь идет не создание нового контейнера, а перезатирание созданного, проверь, плиз:

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

	Для Каждого СтрокаПравилаОбмена из пФормат.ПравилаОбмена Цикл
		Если СтрокаПравилаОбмена.Отключить Тогда
			Продолжить;
		КонецЕсли;
		
		тПолеФайла = СтрокаПравилаОбмена.ПолеФайлаПередачи;
		МассивСтрок = СтрРазделить(тПолеФайла, МассивРазделителей);
		ЛевоеЗначение = МассивСтрок[0];
		ПравоеЗначение = МассивСтрок[1];
		НачалоОбъекта = СтрокаПравилаОбмена.Условие = "*НачалоОбъекта";
		СменилосьЛевоеЗначение = ПредыдущееЛевоеЗначение <> ЛевоеЗначение;
		ЭтоТабличнаяЧасть = Не ПустаяСтрока(СтрокаПравилаОбмена.ТабличнаяЧасть);
Показать


Если СменилосьЛевоеЗначение Тогда
Результат.Вставить(ЛевоеЗначение, Новый Структура);
Результат[ЛевоеЗначение].Вставить("Имя", ЛевоеЗначение);
Результат[ЛевоеЗначение].Вставить("Состав", Новый Массив);

Результат[ЛевоеЗначение].Состав.Добавить(ПравоеЗначение);
			Результат[ЛевоеЗначение].Вставить("Тип");
			Результат[ЛевоеЗначение].Вставить("Владелец");
8. dvsidelnikov 64 05.11.20 14:16 Сейчас в теме
(5) Готово. Нужно заменить процедуру:

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

	Для Каждого СтрокаПравилаОбмена из пФормат.ПравилаОбмена Цикл
		Если СтрокаПравилаОбмена.Отключить Тогда
			Продолжить;
		КонецЕсли;
		
		тПолеФайла = СтрокаПравилаОбмена.ПолеФайлаПередачи;
		МассивСтрок = СтрРазделить(тПолеФайла, МассивРазделителей);
		ЛевоеЗначение = МассивСтрок[0];
		ПравоеЗначение = МассивСтрок[1];
		НачалоОбъекта = СтрокаПравилаОбмена.Условие = "*НачалоОбъекта";
		СменилосьЛевоеЗначение = ПредыдущееЛевоеЗначение <> ЛевоеЗначение;
		ЭтоТабличнаяЧасть = Не ПустаяСтрока(СтрокаПравилаОбмена.ТабличнаяЧасть);
		//костыль конкретно для TXBD180101
		//Если СменилосьЛевоеЗначение и ЛевоеЗначение = "BD" Тогда
		//	НачалоОбъекта = Истина;
		//КонецЕсли;
		
		Если СменилосьЛевоеЗначение и ЛевоеЗначение = "ZR" Тогда
			НачалоОбъекта = Истина;
		КонецЕсли;
		
		Если СменилосьЛевоеЗначение и ЛевоеЗначение = "ZRST" Тогда
			ЭтоТабличнаяЧасть = Истина;
		КонецЕсли;

				
		Если СменилосьЛевоеЗначение Тогда
			Результат.Вставить(ЛевоеЗначение, Новый Структура);
			Результат[ЛевоеЗначение].Вставить("Имя", ЛевоеЗначение);
			Результат[ЛевоеЗначение].Вставить("Состав", Новый Массив);
			Результат[ЛевоеЗначение].Состав.Добавить(ПравоеЗначение);
			Результат[ЛевоеЗначение].Вставить("Тип");
			Результат[ЛевоеЗначение].Вставить("Владелец");
			
			
			Если НачалоОбъекта Тогда
				Результат[ЛевоеЗначение].Тип = "Объект";
				Результат[ЛевоеЗначение].Владелец = Результат;
				Объект = Результат[ЛевоеЗначение];
			КонецЕсли;
			
			Если ЭтоТабличнаяЧасть Тогда
				Результат[ЛевоеЗначение].Тип = "ТЧ";
				Результат[ЛевоеЗначение].Владелец = Объект;
			КонецЕсли;
			
			Если Результат[ЛевоеЗначение].Владелец = Неопределено Тогда
				Результат[ЛевоеЗначение].Владелец = Результат;
				Результат[ЛевоеЗначение].Тип = "КоллекцияРеквизитов";
			КонецЕсли;
			
		Иначе
			Результат[ЛевоеЗначение].Состав.Добавить(ПравоеЗначение);
		КонецЕсли;
		ПредыдущееЛевоеЗначение = ЛевоеЗначение;
	КонецЦикла;
	Возврат Результат;
КонецФункции
Показать


P.S. Проблема в том, что я так и не придумал как глядя в правила обмена отличить начало нового объекта от начала новой строки... Приходится указывать явно условие в Функции
9. psa247 17 05.11.20 14:19 Сейчас в теме
(8) Это придется под каждый формат подстраиваться. Рассмотри мой вариант в 6м и 7м ответе
11. psa247 17 05.11.20 14:27 Сейчас в теме
(8) Я бы сделал следующим образом. Если произошла смена левой части, то проверил бы. В структуре Результата уже есть такая "левая часть", если есть - то это новый документ
12. dvsidelnikov 64 05.11.20 14:36 Сейчас в теме
(11) ... или это строка табличной части документа... лучше уж сверять левую часть с интерактивно набранными списками наименований Объектов и ТабличныхЧастей

схематично:

        Если СменилосьЛевоеЗначение и НаименованияОбъектов.Найти(ЛевоеЗначение) Тогда
            НачалоОбъекта = Истина;
        КонецЕсли;
        
        Если СменилосьЛевоеЗначение и НаименованияТабличныхЧастей.Найти(ЛевоеЗначение) Тогда
            ЭтоТабличнаяЧасть = Истина;
        КонецЕсли;
13. psa247 17 05.11.20 14:38 Сейчас в теме
(12) Данный подход требует подготовки алгоритма действий и запоминания. Через год, когда понадобится уже и не вспомнить что и где интерактивно набирать. Мне мой вариант предпочтительнее. Сделал и забыл. Работает как часы
14. psa247 17 05.11.20 14:47 Сейчас в теме
(12) Если это строка табличной части, то она идет друг-за-другом, если был "перерыв" в "левых" частях, то это однозначно признак нового документа. В общем, решай сам
7. psa247 17 05.11.20 13:47 Сейчас в теме
Но, чтобы уже прочитанный результат не "затерся" конструкцией Результат = Новый Структура;
использовал копирование:

Врем = СкопироватьСтруктуру(Результат);
РезультатРаботы.Добавить(Врем);

сама фукнкция копирования структуры:

Функция СкопироватьСтруктуру(Входящая)
	КопияСтруктуры = Новый Структура;
	Для Каждого ЭлементСтруктуры Из Входящая Цикл
		КопияСтруктуры.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
	КонецЦикла;
	Возврат(КопияСтруктуры);
КонецФункции
Показать

В результате вышеперечисленного получил массив состоящий из нескольких прочитанных документов. Недостатком будет только то, что у всех остальных документов, что идут за первым не будет "шапочных" данных типа FR, FROM. Но и без них хорошо, так как информации необходимой для испорта документов они не несут.
10. psa247 17 05.11.20 14:21 Сейчас в теме
Да, если по моему варианту, то Массив результатов надо обработать в цикле, естественно. С тебя стармани ))
15. DENSKR 15 13.07.21 22:30 Сейчас в теме
Имеется ли готовое решение? При попытке считать данные "Поле объекта не обнаружено (FK|TXBH190101|ППО АСФК|32.4.0C(+0||" Не понятно почему...
16. dvsidelnikov 64 14.07.21 06:39 Сейчас в теме
(15) Дайте больше данных. В какой конфигурации идёт работа? Загружены ли в вашу базы форматы обмена, в частности TXBH190101? Ну и было бы неплохо посмотреть на файл который вы пытаетесь загрузить.
17. DENSKR 15 14.07.21 07:12 Сейчас в теме
Конфигурация БГУ 2, форматы обмена не загружены, есть идея использовать вашу обработку в целях автоматизации отдела анализа данных.
18. dvsidelnikov 64 14.07.21 07:33 Сейчас в теме
(17) в качестве пояснения для других читающих: обсуждение перешло в личную переписку.
19. manas 27 07.03.22 09:39 Сейчас в теме
(17) Тоже интересует обработка для БГУ 2.0
20. dvsidelnikov 64 05.06.22 09:39 Сейчас в теме
(19) какие документы и из какого формата хотите загружать?
При загрузке платежных поручений есть сложность, которая заключается в том, что формат TXPP не предусматривает наличие данных для заполнения реквизитов КВД, КЭК и, соответственно, СчетДебета. В случае с нашим регионом эти данные можно раздобыть проанализировав Назначение платежа, т.к. у него чёткая структура и порядок полей обязательных для заполнения.
Оставьте свое сообщение