Показать сообщение отдельно
Старый 29.06.2012, 12:54   #1  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2161 (81) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Экспорт платежных поручений AX 2009 RU5+
По примеру из документации настроили шаблон экспорта в клиент-банк. Экспорт в "формате 1С", работаем с секциями.

На выходе получаем файл (условно) такой:
Цитата:
1CClientBankExchange
ВерсияФормата=1.0
Кодировка=Windows

СекцияДокумент
Номер=Т000084
Сумма=5000.00
КонецДокумента
КонецФайла
Т.е. перед секциями с документами идет пустая строка, клиент-банк такое не понимает и не загружает файл.

Кто-нибудь сталкивался?

Судя по коду, в методе BankClientExportFormatSection_RU.fillCommonFields() неверная обработка:
X++:
if (strStartsWith(tmpStr, #RecDelim))
    {
        tmpStr = substr(tmpStr, strlen(#RecDelim) + 1, strlen(s));
    }
т.е. проверяем, нет ли "перевода строки" в начале секции, а не после. Исходя из кода всего метода, "перевод строки" в начале секции ну никак не может появиться, а вот в конце - вполне может. Также вызывает вопрос "strlen(s)" - это длина последней добавленной строки, а по логике этой проверки - нужна длина всей строки "tmpStr" за вычетом длины "перевода строки".

В итоге исправил так (см. ниже), файл формируется корректно:
X++:
//+ IF 29.06.2012
    /*
    if (strStartsWith(tmpStr, #RecDelim))
    {
        tmpStr = substr(tmpStr, strlen(#RecDelim) + 1, strlen(s));
    }
    */
    if (strEndsWith(tmpStr, #RecDelim))
    {
        tmpStr = substr(tmpStr, 1, strlen(tmpStr) - strlen(#RecDelim));
    }
    //- IF 29.06.2012
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: gl00mie (3), Antoncheg (1).