|
Выгрузка в текст (сдвиг колонок) | ☑ | ||
---|---|---|---|---|
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) СПАСИБО!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |