Имя: Пароль:
1C
1С v8
Выгрузка в текст (сдвиг колонок)
0 листопад
 
22.11.11
14:52
ЗУП
Есть выгрузка в банк через текстовый фай, содержащий три колонки:
НомерЛицевого, Сумму и ФИО. Подскажите, почему у некоторых сотрудников происходит сдвиг суммы (например у Петрова, Копылова, Чернышева):
http://s017.radikal.ru/i439/1111/36/93e4ab544019.jpg
Надо, чтобы столбики стояли ровно.

Вот мой код:


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

Функция ОбработатьОтобранныеДокументы(ОтобранныеДокументы)
   Соотв = Новый Соответствие();
   Для Каждого Док Из ОтобранныеДокументы Цикл;
       Для Каждого Стр Из Док.Зарплата Цикл
           Если Соотв[Стр.Физлицо] <> Неопределено Тогда
               Соотв[Стр.Физлицо] = Соотв[Стр.Физлицо] + Стр.Сумма;
           Иначе
               Соотв.Вставить(Стр.Физлицо, Стр.Сумма);
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   Данные = Новый Массив();
   Для Каждого Физ Из Соотв Цикл
       Начисление = Новый Массив(3);
       Начисление[2] = Число(Физ.Значение);
       Если Начисление[2] <> 0 Тогда
           Начисление[0] = Физ.Ключ;
           Начисление[1] = ПолучитьНомерКарты(Физ.Ключ);
           Данные.Добавить(Начисление);
       КонецЕсли;
   КонецЦикла;
   
   Возврат Данные;
КонецФункции

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

Функция СформироватьРеестр(Данные)
   Реестр = Новый ТабличныйДокумент();
   Макет = ПолучитьМакет("Макет");
   ...
КонецФункции

Функция СформироватьТекст(Данные)
   Текст = Новый ЗаписьТекста(ВыбранныйКаталог + "\00_00_00_"+Формат(Дата, "ДФ=ddMMyyyy")+"_"+?(СтрДлина(строка(НомерФайла))=3,"",?(СтрДлина(строка(НомерФайла))=2,"0","00"))+строка(НомерФайла)+".txt", КодировкаТекста.ANSI);
   Текст.ЗаписатьСтроку("START;" + Формат(Дата, "ДФ=ddMMyyyy") + ";" + НомерФайла + ";" + ТипОперации + ";" + Организация);
   Для Каждого Строка Из Данные Цикл
       Текст.ЗаписатьСтроку(Строка[1] + ";" + Формат(Строка[2], "ЧЦ=14;ЧДЦ=2; ЧРД=,; ЧРГ=; ЧГ=0") + ";" + Строка[0]);
   КонецЦикла;
   Текст.ЗаписатьСтроку("END;" + ИтогСтрок + ";" + Формат(ИтогСумма, "ЧЦ=14;ЧДЦ=2; ЧРД=,; ЧРГ=; ЧГ=0") + ";" + Валюта);
   Текст.Закрыть();
   Возврат Текст;
КонецФункции

Процедура РасчитатьИтоги(Данные)
   ИтогСтрок = Данные.Количество();
   ИтогСумма = 0;
   Для Каждого Элемент Из Данные Цикл
       ИтогСумма = ИтогСумма + Элемент[2];
   КонецЦикла;
КонецПроцедуры
1 Wobland
 
22.11.11
14:53
зачем надо ровно? есть выгрузка в формате cvs, формат csv есть
2 листопад
 
22.11.11
15:00
(1) расчетчица сейчас вручную подгоняет сформированный текстовый файл: требование банка, я так полагаю...
3 листопад
 
22.11.11
15:17
Ап!
4 GenV
 
22.11.11
15:23
(2) Попробуй СокрП(Строка[1])
5 листопад
 
22.11.11
15:30
(4) Исправила, теперь все суммы сдвинулись влево:

Функция СформироватьТекст(Данные)
   Текст = Новый ЗаписьТекста(ВыбранныйКаталог + "\00_00_00_"+Формат(Дата, "ДФ=ddMMyyyy")+"_"+?(СтрДлина(строка(НомерФайла))=3,"",?(СтрДлина(строка(НомерФайла))=2,"0","00"))+строка(НомерФайла)+".txt", КодировкаТекста.ANSI);
   Текст.ЗаписатьСтроку("START;" + Формат(Дата, "ДФ=ddMMyyyy") + ";" + НомерФайла + ";" + ТипОперации + ";" + Организация);
   Для Каждого Строка Из Данные Цикл
       //Текст.ЗаписатьСтроку(Строка[1] + ";" + Формат(Строка[2], "ЧЦ=14;ЧДЦ=2; ЧРД=,; ЧРГ=; ЧГ=0") + ";" + Строка[0]);
         Текст.ЗаписатьСтроку(СокрП(Строка[1]) + ";" + Формат(Строка[2], "ЧЦ=14;ЧДЦ=2; ЧРД=,; ЧРГ=; ЧГ=0") + ";" + Строка[0]);

   КонецЦикла;
   Текст.ЗаписатьСтроку("END;" + ИтогСтрок + ";" + Формат(ИтогСумма, "ЧЦ=14;ЧДЦ=2; ЧРД=,; ЧРГ=; ЧГ=0") + ";" + Валюта);
   Текст.Закрыть();
   Возврат Текст;
КонецФункции
6 GenV
 
22.11.11
15:32
(5) Если нужно вправо, тогда: СокрП(Строка[1]) + "<нужное количество пробелов или чего-то там>;" )
7 листопад
 
22.11.11
15:52
(6) СПАСИБО!!!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс