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

Проблема с внешней обработкой "Загрузка банк-клиент.erp"

Автор raziel, 24 сен 2015, 12:29

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

raziel

Доброго времени суток, уважаемые знатоки!

Сразу же признаюсь, я не силен в программировании и конфигурировании. Но пытаюсь разобраться в решении возникшей проблемы. Прошу сильно не троллить. Буду надеятся, что Вы подскажете что-нибудь дельное!

Столкнулся с проблемой. У бухгалтеров появляется проблема с заполнением строки "Назначение платежа". После анализа данных выписки - заметил особенность, что загружаются строки которые имеют параметр "НазначениеПлатежа", но в выписке из банк клиента часто приходят платежки с параметрами "НазначениеПлатежа1" и "НазначениеПлатежа2".

ЦитироватьКод=
НазначениеПлатежа1=Перечисление денежных средств по договору Ш-2 от 01.08.2014 согласно реестра № 1 от 02.07.2015 г. кол-во квитанций 1 шт.
НазначениеПлатежа2=НДС не облагается.

Код=
НазначениеПлатежа=Перечисление денежных средств по договору Ш-2 от 01.08.2014 согласно реестра № 1 от 01.07.2015 г.  кол-во квитанций 1 шт

При этом в выписке из 100-300 платежек может быть 20-40 квитанций с НазначениеПлатежа1/2. Вручную вводить поле назначение платежа - долго по времени и не хотят этим заниматься. Попросили меня как-то решить эту проблему.

В коде нашел следующее:

Структура = Новый Структура;
Пока ЗагрузитьДокумент(ЧтениеТекста, Структура) Цикл
Индикатор1 = Индикатор1 + 1;
Если Структура.Свойство("ДАТАПОСТУПИЛО") Тогда
// Фильтруем исходящие платежи
Попытка
НовСтр = ТаблицаИмпорта.Добавить();
НомерПозиции = НомерПозиции + 1;
НовСтр.Номер        = НомерПозиции;
НовСтр.НомерПП = Структура.НОМЕР; // номер пл. документа
НовСтр.ДатаПП = Структура.ДатаПоступило+" 00:00:00"; // Дата пл. документа
НовСтр.СуммаПлатежа = Число(СокрЛП(Структура.Сумма)); // Сумма
НовСтр.БИКПлат = Структура.ПлательщикБИК;                      // Плательщик
НовСтр.РСПлат = СокрЛП(Структура.ПлательщикСчет); // Расчетный счет плательщика 
НовСтр.НазначениеПлатежа = СокрЛП(Структура.НазначениеПлатежа); // Назначение платежного документа   
НовСтр.Получатель     = СокрЛП(Структура.Получатель); //  получатель - организация
НовСтр.ПолучательБИК = СокрЛП(Структура.ПолучательБИК); // получатель
НовСтр.ПолучательСчет = СокрЛП(Структура.ПолучательСчет); // БИК банка получателя
Исключение
Сообщить("Не удалось загрузить строку! Номер " + Структура.НОМЕР+ " от " + Структура.ДатаПоступило + " сумма платежа " + Структура.Сумма);
КонецПопытки;
КонецЕсли;
КонецЦикла;


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

Пробовал делать конкатенацию строк
НовСтр.НазначениеПлатежа= СокрЛП(Структура.НазначениеПлатежа) + СокрЛП(Структура.НазначениеПлатежа1);
решения проблемы не дало
Пробовал решить с помощью функции
Функция НазПлат(Структура.НазначениеПлатежа, Структура.НазначениеПлатежа1, Структура.НазначениеПлатежа2)
    Возврат Структура.НазначениеПлатежа + " " + Структура.НазначениеПлатежа1 + " " + Структура.НазначениеПлатежа2;
КонецФункции
НовСтр.НазначениеПлатежа = НазПлат(Структура.НазначениеПлатежа, Структура.НазначениеПлатежа1, Структура.НазначениеПлатежа2);

Это так же не дает никакого результата. Пробовал так же сделать 2 штуки НовСтр. с НазначениеПлатежа и НазначениеПлатежа1

НовСтр.НазначениеПлатежа = СокрЛП(Структура.НазначениеПлатежа);
НовСтр.НазначениеПлатежа1 = СокрЛП(Структура.НазначениеПлатежа1);

и в конце обработки, где есть строка
ДокОплата.Комментарий = стр.НазначениеПлатежа;
добавить сумму строк
ДокОплата.Комментарий = стр.НазначениеПлатежа + " " + стр.НазначениеПлатежа;
И все так же тщетно.

Подскажите, пожалуйста, что я делаю не так? Может мне кто-то посоветовать как правильно будет сделать, чтоб работал эта внешняя обработка и работала корректно?

Kironten

Дай хотябы блок текстового документа из которого читается. (можешь изменить данные если хочешь)
А то создавать текстовик, чтобы проверить - заколебешься по условиям подгонять.

дфтын

В отладчике смотрите отчего вам не дало решение конкатенации, если по отдельности все работает

raziel

В отладчике пусто, при чем абсолютно пусто...

Сорри, прикрепил файл. Поудалял кучу цифр из данных банка и ооо.

Kironten

Цитата: raziel от 24 сен 2015, 18:23
В отладчике пусто, при чем абсолютно пусто...

Сорри, прикрепил файл. Поудалял кучу цифр из данных банка и ооо.

Попробуй так.
Во всяком случае на тестовом примере работает.
Возможно есть более изящное решение.

raziel

Огромное благодарствую! Все работает. Можно немного подробно описать добавленный код? И почему в НовСтр.НазначениеПлатежа = "";? И только потом идет условие?

Kironten

Цитата: raziel от 24 сен 2015, 18:52
Огромное благодарствую! Все работает. Можно немного подробно описать добавленный код? И почему в НовСтр.НазначениеПлатежа = "";? И только потом идет условие?

Не НовСтр.НазначениеПлатежа = "" а, НазначениеПлатежа = ""
т.е. просто нам нужна переменная с пустым значением типа строка к которой мы потом будем конкатенировать остальные строки.
С таким же успехом её можно было обозвать иначе, например "ОфигенныйТекст".
Тогда в цикле был бы код:
ОфигенныйТекст = ОфигенныйТекст + " " СокрЛП(Структура["НазначениеПлатежа" + ?(Сч = 0, "", Сч)]);

Дальше идет цикл от 0 до 10.
В нем мы ищем в структуре свойство НазначениеПлатежа плюс номер.
Т.к. у Вас может быть и свойство НазначениеПлатежа и НазначениеПлатежа2 в одной структуре, то подбираем свойство по номеру от 0 до 10.
Естественно Свойства НазначениеПлатежа0 быть не может, поэтому если счетчик = 0, то заменяем в обращении концовку ключа структуры НазначениеПлатежа на "", и на значение счетчика, если счетчик  <> 0.
Ну и если находим это свойство, то просто конкатенируем эту строку с переменной имя которой задали до цикла.
После выхода из цикла мы имеем в этой переменной уже готовые сконкатенированные строки, которые мы и помещаем в реквизит строки.
НовСтр.НазначениеПлатежа = ОфигенныйТекст;

Теги:

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

Рейтинг@Mail.ru

Поиск