Имя: Пароль:
1C
1С v8
Сложный вопрос на сообразительность
0 Grobik
 
20.01.12
21:30
табДокумента = Новый ТаблицаЗначений;
   табДокумента.Очистить();
   табДокумента.Колонки.Очистить();
   табДокумента.Колонки.Добавить("не_выгружать",Новый ОписаниеТипов("Булево"),"Не выгружать");
   табДокумента.Колонки.Добавить("номер_строки",Новый ОписаниеТипов("Число"));
   табДокумента.Колонки.Добавить("Карточный_счёт",Новый ОписаниеТипов("Строка"));
   табДокумента.Колонки.Добавить("ФИО",Новый ОписаниеТипов("Строка"));
   табДокумента.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка"));
   табДокумента.Колонки.Добавить("Таб_N",Новый ОписаниеТипов("Строка"));
   табДокумента.Колонки.Добавить("сумма_квыплате",Новый ОписаниеТипов("Строка"));

В котором заполнены ИНН и сумма_квыплате
Есть ТЗ табЗагрузки в котором заполнено все кроме сумма_квыплате, строк в котором намного больше. Нужно одним нажатием мыши загнать в табЗагрузки сумма_квыплате из табДокумента и удалить строки в которых сумма_квыплате=0. Для выгрузки в укрсоцбанк это нужно если кому интересно. Сделать нужно сегодня а спирт несколько мешает думать. Спасибо.
1 EvgeniuXP
 
20.01.12
21:40
табДокумента = Новый ТаблицаЗначений;
   табДокумента.Очистить();
   табДокумента.Колонки.Очистить();
Зачем это?

просто:
табДокумента = Новый ТаблицаЗначений;
2 DJ Anthon
 
20.01.12
21:41
отличный ник!
3 EvgeniuXP
 
20.01.12
21:43
временные таблицы - соединение... фильтр и выгрузка.

или дедовским методом, найти строки, нашел, перенесь, прошел снова по циклу с нулем все выбрал строки и удалил их за раз.
4 Дикообразко
 
20.01.12
21:44
такое пишется в любом состоянии
элементарно же
5 ПесняПроЗайцев
 
20.01.12
22:23
(1) мож в цикле далает )
(4) я тоже так думаю.
(0) или спросить у спирта или облегчиться на некоторую сумму дензнаков.
6 PVV65
 
21.01.12
00:44
(0) ИНН для чего упоминается? Это фильтр?
7 Grobik
 
23.01.12
01:05
Я сисадмин по жизни. В 35 лет решил переквалифицироваться в 1Снига. Чтобы заработать на семью. Пришел без опыта работы на восьмерке и сейчас такая проблема. Гугль не помог. Везде сильно другие вопросы. Киньте пожалуйста ссылку где этот "пишется в любом состоянии" вопрос решен.
8 rs_trade
 
23.01.12
01:10
(7) очень тронуло. хочу помочь, да спирт мешает.
9 Grobik
 
23.01.12
01:12
(6) да ИНН везде один и тот же, нужно в табЗагрузки сумма_квыплате из табДокумента и удалить строки в которых сумма_квыплате=0.
(2)
ник старый по пьяни созданный  http://forum.ixbt.com/users.cgi?id=info:Grobik
10 Конфигуратор1с
 
23.01.12
01:27
(0) так если у тебя тзшки одинаковы, почему не загрузить друг в дружку. И строки удалять не нужно будет.
11 Grobik
 
23.01.12
01:30
(10) пример пожалуйста, я не понимаю об чем речь, а надо
12 Конфигуратор1с
 
23.01.12
01:32
(11) тзшки одинаковые?
13 Grobik
 
23.01.12
01:59
(12) В смысле как? Строк разное количество. В табЗагрузки больше чем в табДокумент. Колонки подписаны одинаково. Как в (0) написано. Нужно по ИНН с загруженной выплаты зарплаты в нести в табЗагрузки загруженной из банка ведомости внести суммы и потом выгрузить в банк. Загрузить из банка табЗагрузки сделал, загрузить из 1С табДокумент сделал, выгрузить в банк текстовый докумет тоже считай готово. Только его выгружать нужно из табЗагрузки в который из табЗагрузки вставлены  сумма_квыплате и  удалены строки в которых сумма_квыплате=0. Я понимаю, что это как два пальца об асфальт, но я этого не учил и времени на учебу нет. Если покажете пример буду премного благодарен.
14 Bww_
 
23.01.12
04:23
Ну вот тебе некий простенький код, который под спирт понимается
//***
Для каждого строкаТД из ТабДокумента Цикл
    строкаТВ=ТабВыгрузки.Найти(строкаТД.ИНН,"ИНН")
    Если строкаТВ=Неопределено Тогда
        строкаТВ=ТабВыгрузки.Добавить();
        //присвоил знач.полей хотя это наверное дурь если ТабВыгрузки уже содержит
        //все строки ИНН
    КонецЕсли;
    строкаТВ.Сумма_КВыгрузке = строкаТД.суммма_КВгрузке;
КонецЦикла;
//***
ТабВыгрузки.Сортировать("Сумма_КВыгрузке");
Пока ТабВыгрузки.Количество()>0 Цикл
   Если ТабВыгрузки.Получить(0).Сумма_КВыгрузке<=0 Тогда
       ТабВыгрузки.Удалить(0);
   КонецЕсли;
КонецЦикла;
15 Alex375
 
23.01.12
05:01
Ты ж зачем его в бесконечный цикл пустил? )))
16 Bww_
 
23.01.12
05:05
Ну да - лоханулся.
Ну наверное поймет
17 kosts
 
23.01.12
06:13
(14) Нельзя удалять строки в таблице по которой идет цикл.
Вот так лучше


МасСтрок = новый Массив;
Для каждого строка из ТабВыгрузки Цикл
   Если <> Тогда
       МасСтрок.Добавить(строка);
   КонецЕсли;
КонецЦикла;

Для каждого Строка из МасСтрок Цикл
   ТабВыгрузки.Удалить(Строка);
КонецЦикла;
18 Bww_
 
23.01.12
06:33
Да что ты говоришь?
...ну если только масло маслом мазать.
19 Bww_
 
23.01.12
06:34
Сам то хоть понимаешь чего нарисовал?
20 kosts
 
23.01.12
06:47
(19) Это работает нормально
21 kosts
 
23.01.12
06:58
Конечно (14) будет работать, но я бы не стал применять такое, т.к. как минимум нарушает сортировку.
22 Grobik
 
23.01.12
15:27
Всем спасибо за помощь!!!

Итого вышло:


   табДокумента.Свернуть("ИНН, не_выгружать, Карточный_счёт, ФИО, Таб_N","сумма_квыплате");

   Для каждого строкаТД из табДокумента Цикл
    строкаТВ=табЗагрузки.Найти(строкаТД.ИНН,"ИНН");
    Если строкаТВ=Неопределено Тогда
        //Сообщить("Сотрудник " + строкаТД.ФИО + " с ИНН " + строкаТД.ИНН + " отсутсвует в справочнике банка", СтатусСообщения.Важное);
        строкаТВ=табЗагрузки.Добавить();
    КонецЕсли;
    строкаТВ.сумма_квыплате = строкаТД.сумма_квыплате;
   КонецЦикла;

   МасСтрок = Новый Массив;
   
   Для каждого Строка из табЗагрузки Цикл
       Если Строка.сумма_квыплате="0,00" Тогда
           МасСтрок.Добавить(Строка);
       КонецЕсли;
   КонецЦикла;
         
   Для каждого Строка из МасСтрок Цикл
       табЗагрузки.Удалить(Строка);
   КонецЦикла;

Работает ;)
23 kosts
 
23.01.12
17:19
(22)
> Строка.сумма_квыплате="0,00"
Это что?
24 Grobik
 
23.01.12
19:13
Это строки из табЗагрузки (выгрузка справочника из банка) которых не было в табДокумента (из ведомости перечисления з/п 1С) и соответственно они были забиты строками с 0,00. Мне удобней было во всех загрузке и выгрузке из банка суммы держать в формате стоки а не числа.
25 Grobik
 
23.01.12
19:15
Хотя это я так сразу думал, что удобней, сейчас попросили при выгрузке добавить сортировку по возрастанию, буду туда-сюда ТЗ теребить.
26 Grobik
 
24.01.12
12:29
Последнее западло вылезло


       Для Каждого ТекущаяСтрока Из табЗагрузки Цикл
           номрЧеловекаСчет = номрЧеловекаСчет+1;
                суммаВыписки=суммаВыписки+ТекущаяСтрока.сумма_квыплате;
                                ТекущаяСтрока.сумма_квыплате=Формат(ТекущаяСтрока.сумма_квыплате,"ЧДЦ=2;ЧРД='.';ЧГ=0");
       Сообщить("Как есть " + ТекущаяСтрока.сумма_квыплате + " как должно быть " + Формат(ТекущаяСтрока.сумма_квыплате,"ЧДЦ=2;ЧГ=0;ЧРД='.'") + "-+-   ФИО " + ТекущаяСтрока.ФИО);
       КонецЦикла;

Текст.ЗаписатьСтроку("AMOUNT="+Формат(суммаВыписки,"ЧДЦ=2;ЧГ=0;ЧРД='.'"));

Упорно выводит с пробелом после тысяч и с запятой в качестве разделителя. При этом суммуВыписки выводит Правильно! Никогда такого не встречал. Всегда "ЧДЦ=2;ЧГ=0;ЧРД='.'" как и "ЧДЦ=2;ЧГ=;ЧРД=." работало безотказно.
27 kosts
 
24.01.12
13:45
Никогда не знал какие буквы за что отвечают, всегда пользуюсь конструктором.
Формат(, "ЧДЦ=2; ЧРД=.; ЧН=0; ЧГ=0")
28 Mort
 
24.01.12
13:55
(26) Потому что вот это не имеет ничего общего с здравым смыслом:

ТекущаяСтрока.сумма_квыплате=Формат(ТекущаяСтрока.сумма_квыплате,"ЧДЦ=2;ЧРД='.';ЧГ=0");

За исключением случая составного типа колонки (число и строка), в чем сомневаюсь.
29 kosts
 
24.01.12
13:55
кстати
>они были забиты строками с 0,00
не в этом ли проблема
30 Mort
 
24.01.12
13:57
В (0) ТекущаяСтрока.сумма_квыплате имеет тип строка. Это ответ типа.
31 Grobik
 
24.01.12
15:12
(30) Спасибо. Оборжаться, но все работает.

ВЧисло = строка(ТекущаяСтрока.сумма_квыплате);
н1 = Найти(ВЧисло,",")+2;
ВЧисло = Лев(ВЧисло,н1);
ТоЧтоНадо =  Число(ВЧисло);
ТекущаяСтрока.сумма_квыплате=Формат(ТоЧтоНадо,"ЧДЦ=2;ЧРД='.';ЧГ=0");
32 Mort
 
24.01.12
15:15
(31) Какой жуткий ПЦ. А сделать числом не судьба?
33 Mort
 
24.01.12
15:16
Т.е. вот эту строку:

табДокумента.Колонки.Добавить("сумма_квыплате",Новый ОписаниеТипов("Строка"));
34 Grobik
 
24.01.12
15:35
тогда разборку файла из банка переделывать придется, там все колонки забиты как строковые

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

потом переделывать запрос из документа, где конечно сразу проще было числом брать, а потом и объединение.
А в чем проблема такого решения? Кроме красоты. Работает долю секунды, файл формирует верного формата.
35 Grobik
 
24.01.12
23:25
Завтра чтоб поржать выложу итоговый документ. Работает.
Теги добавлю для гугля (если можно), вдруг кому надо, 8 часов рабочего времени сэкономит.
36 1с-кин
 
25.01.12
00:33
(31) неявное преобразование, не находите?
37 Grobik
 
25.01.12
00:37
(36) Проблемы? Я на типовых примерах не заметил.
38 Grobik
 
25.01.12
00:39
Для меня положительный результат — правильный текстовый файл для импорта в клиент-банк. Пока все похоже на хорошо.
39 1с-кин
 
25.01.12
00:43
(370 неявное преобразование в 1с ведет к ошибкам выполнения - 1с не отслеживает в этом случае типы даных, и при их несовпадении - прекращает работу.
Если все работает - оставляйте. Будете решать проблемы по мере поступления тогда )
40 Grobik
 
25.01.12
12:07
Как обещал выкладываю свой шедевр
http://depositfiles.com/files/tizmq9etb

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

Процедура путьКФайлуЗагрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)
   Режим = РежимДиалогаВыбораФайла.Открытие;
   ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
   ДиалогОткрытияФайла.ПолноеИмяФайла = "";
   Фильтр = "Comma separated file (*.csv)|*.csv";
   ДиалогОткрытияФайла.Фильтр = Фильтр;
   ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
   ДиалогОткрытияФайла.Заголовок = "Выберите файл";
   
   Если ДиалогОткрытияФайла.Выбрать() Тогда
       путьКФайлуЗагрузки = ДиалогОткрытияФайла.ПолноеИмяФайла;
   КонецЕсли;
КонецПроцедуры

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

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

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

Процедура заполнитьИзДокументаНачалоВыбора(Элемент, СтандартнаяОбработка)
КонецПроцедуры


Процедура заполнитьИзДокументаОткрытие(Элемент, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   Если заполнитьИзДокумента = "" Тогда
       Возврат;    
   КонецЕсли;
КонецПроцедуры


Процедура КоманднаяПанель1Заполнить(Кнопка)
   Если табЗагрузки.Количество() > 0 И Вопрос("Таблица будет очищена. Вы уверены?",РежимДиалогаВопрос.ДаНет)
       = КодВозвратаДиалога.Нет Тогда
       Возврат;    
   КонецЕсли;
   ЗаполнитьТаблицу();
КонецПроцедуры

Процедура ЗаполнитьТаблицу()
   разделительПолей = ";";
   текст = Новый ТекстовыйДокумент;
   Попытка
       текст.Прочитать(путьКФайлуЗагрузки,КодировкаТекста.ANSI);
   Исключение
       Сообщить("Не удалось прочитать файл: "
           + ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
       Возврат;
   КонецПопытки;    
   табЗагрузки.Очистить();
   табЗагрузки.Колонки.Очистить();
   квоСтрок = текст.КоличествоСтрок();
   Если Не квоСтрок > 0 Тогда
       Сообщить("Файл пустой",СтатусСообщения.Внимание);
       Возврат;    
   КонецЕсли;
   стрТекста = текст.ПолучитьСтроку(1);
   масЗначСтр = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(стрТекста,разделительПолей);
   табЗагрузки.Колонки.Добавить("не_выгружать",Новый ОписаниеТипов("Булево"),"Не выгр.");
   КолоногВБанке=0;    
   Для каждого зн Из масЗначСтр Цикл
       КолоногВБанке=КолоногВБанке+1;
       значение = СтрЗаменить(зн,"""","");
       значение = СтрЗаменить(значение," ","_");
       значение = СтрЗаменить(значение,".","_");
       кол = табЗагрузки.Колонки.Добавить(значение,Новый ОписаниеТипов("Строка"));
   КонецЦикла;
   табЗагрузки.Колонки.Добавить("сумма_квыплате",Новый ОписаниеТипов("Строка"),"Сумма к выплате");    //Гробик для заполнения
   ЭлементыФормы.табЗагрузки.СоздатьКолонки();
   Для номСтр = 2 По квоСтрок Цикл
       стрТекста = текст.ПолучитьСтроку(номСтр)+"0,00";
       масЗначСтр = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(стрТекста,разделительПолей);
       новСтр = табЗагрузки.Добавить();
       номЗнач = 1;
       Для каждого зн Из масЗначСтр Цикл
           новСтр[номЗнач] = зн;
           номЗнач = номЗнач + 1;
       КонецЦикла;
   КонецЦикла;

КонецПроцедуры

Процедура КоманднаяПанель1Загрузить(Кнопка)
   Если табДокумента.Количество() > 0 И Вопрос("Таблица будет очищена. Вы уверены?",РежимДиалогаВопрос.ДаНет)
       = КодВозвратаДиалога.Нет Тогда
       Возврат;    
   КонецЕсли;
   ЗагрузитьДокумент();
КонецПроцедуры


Функция ЗагрузитьДокумент() Экспорт;
   Запрос = СформироватьЗапросДляПечати();
   Выборка = Запрос.Выполнить().Выгрузить();
   
   табДокумента = Новый ТаблицаЗначений;
   табДокумента.Очистить();
   табДокумента.Колонки.Очистить();
   табДокумента.Колонки.Добавить("не_выгружать",Новый ОписаниеТипов("Булево"),"Не выгр.",10);
   табДокумента.Колонки.Добавить("Карточный_счёт",Новый ОписаниеТипов("Строка"),"Карточный_счёт",30);
   табДокумента.Колонки.Добавить("ФИО",Новый ОписаниеТипов("Строка"),"ФИО",30);
   табДокумента.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка"));
   табДокумента.Колонки.Добавить("Таб_N",Новый ОписаниеТипов("Строка"));
   табДокумента.Колонки.Добавить("сумма_квыплате",Новый ОписаниеТипов("Строка"), "Сумма к выплате");
   ЭлементыФормы.табДокумента.СоздатьКолонки();
   Для НомерСтроки = 0 По Выборка.Количество()-1 Цикл
       ньюСтр = табДокумента.Добавить();
       ньюСтр.не_выгружать = Ложь;
       ньюСтр.Карточный_счёт = "";
       ньюСтр.ФИО = Выборка[НомерСтроки].ФИО;
       ньюСтр.ИНН = Выборка[НомерСтроки].КодПоДРФО;
       ньюСтр.Таб_N = "";
       ньюСтр.сумма_квыплате = Выборка[НомерСтроки].Сумма;
   КонецЦикла;
КонецФункции



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

Процедура КоманднаяПанель1ДляБанка(Кнопка)
       СвернутьДляБанка();
КонецПроцедуры

Функция СвернутьДляБанка()
   табДокумента.Свернуть("ИНН, не_выгружать, Карточный_счёт, ФИО, Таб_N","сумма_квыплате");

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

   МасСтрок = Новый Массив;
   
   Для каждого Строка из табЗагрузки Цикл
       Если Строка.сумма_квыплате="0,00" Тогда
           МасСтрок.Добавить(Строка);
       КонецЕсли;
   КонецЦикла;
         
   Для каждого Строка из МасСтрок Цикл
       табЗагрузки.Удалить(Строка);
   КонецЦикла;
   
КонецФункции

   
Функция КоманднаяПанель1Записать(Кнопка) Экспорт;
       ВыгрузитьВтекстовыйФайл();
   КонецФункции
   
   
Функция ВыгрузитьВтекстовыйФайл()
       номрЧеловекаСчет=-1;
       суммаВыписки=0;
       табЗагрузки.Сортировать("ФИО");
       НеНужные=0;
       Для Каждого ТекущаяСтрока Из табЗагрузки Цикл
           номрЧеловекаСчет = номрЧеловекаСчет+1;
               Если ТекущаяСтрока.не_выгружать = Ложь Тогда
                суммаВыписки=суммаВыписки+ТекущаяСтрока.сумма_квыплате;
               Иначе
                НеНужные=НеНужные+1;
               КонецЕсли;
                ВЧисло = строка(ТекущаяСтрока.сумма_квыплате);
                н1 = Найти(ВЧисло,",")+2;
                ВЧисло = Лев(ВЧисло,н1);
                ТоЧтоНадо =  Число(ВЧисло);
                ТекущаяСтрока.сумма_квыплате=Формат(ТоЧтоНадо,"ЧДЦ=2;ЧРД='.';ЧГ=0");
       КонецЦикла;
       Сообщить("Оработано " + номрЧеловекаСчет + " сотрудников! Сумма к выплате " + Формат(суммаВыписки,"ЧДЦ=2;ЧГ=0;ЧРД='.'") + " гривен" + Символы.ВК + НеНужные + "-е сотрудников не выгружено");
       
       ДатаПлатежаБанк=Формат(ДатаПлатежа,"ДЛФ=Д");
       Текст = Новый ЗаписьТекста(путьКФайлуВыгрузки, КодировкаТекста.ANSI);
       ДатаПлатежаБанк=Формат(ДатаПлатежа,"ДЛФ=Д");
       Текст.ЗаписатьСтроку("Content-Type=doc/pay_sheet");
       Текст.ЗаписатьСтроку("");
       Текст.ЗаписатьСтроку("DATE_DOC="+ДатаПлатежаБанк);
       Текст.ЗаписатьСтроку("NUM_DOC="+НумДок);
       Текст.ЗаписатьСтроку("CLN_NAME=ТОВ ”ПРОБЛЕМЫ ОПТОМ”");
       Текст.ЗаписатьСтроку("PAYER_BANK_MFO=300023");
       Текст.ЗаписатьСтроку("PAYER_BANK_NAME=ПАТ ”УКРСОЦБАНК”");
       Текст.ЗаписатьСтроку("PAYER_ACCOUNT=29240852000032");
               //Формат(ТекущаяСтрока.сумма_квыплате,"ЧДЦ=2;ЧРД=.;ЧГ=");
       номрЧеловека = -1;
       Для Каждого ТекущаяСтрока Из табЗагрузки Цикл
           номрЧеловека = номрЧеловека+1;
           Если ТекущаяСтрока.не_выгружать = Ложь Тогда
                Текст.ЗаписатьСтроку("CARD_HOLDERS."+номрЧеловека+".CARD_NUM="+ТекущаяСтрока.Карточный_счёт);
                Текст.ЗаписатьСтроку("CARD_HOLDERS."+номрЧеловека+".CARD_HOLDER="+ТекущаяСтрока.ФИО);
                Текст.ЗаписатьСтроку("CARD_HOLDERS."+номрЧеловека+".STATUS=0");
                Текст.ЗаписатьСтроку("CARD_HOLDERS."+номрЧеловека+".CARD_HOLDER_INN="+ТекущаяСтрока.ИНН);
                Текст.ЗаписатьСтроку("CARD_HOLDERS."+номрЧеловека+".AMOUNT="+ТекущаяСтрока.сумма_квыплате);
                Текст.ЗаписатьСтроку("CARD_HOLDERS."+номрЧеловека+".RESIDENT_FLAG=1");
                Текст.ЗаписатьСтроку("CARD_HOLDERS."+номрЧеловека+".CARD_HOLDER_TABN="+ТекущаяСтрока.Таб_N);
            Иначе
                Сообщить("Сотрудник " + ТекущаяСтрока.ФИО + " сумма " + ТекущаяСтрока.сумма_квыплате + "грн в банк не выгружен!");
                Продолжить;
           КонецЕсли;
       КонецЦикла;
       Текст.ЗаписатьСтроку("ONFLOW_TYPE=" + ПолеВвода1);
       Текст.ЗаписатьСтроку("AMOUNT="+Формат(суммаВыписки,"ЧДЦ=2;ЧГ=0;ЧРД='.'"));
       Текст.ЗаписатьСтроку("PAYER_BANK_ACCOUNT=29240852305000");
       
       Текст.Закрыть();
   
КонецФункции

разделительПолей = ";";
путьКФайлуЗагрузки="S:\Base1c\kb\zp.csv";
путьКФайлуВырузки ="S:\Base1c\kb\VBank.txt";
заполнитьИзДокумента="";
ПолеВвода1="Зарахування заробітної плати за січень 2012 року";
41 Grobik
 
25.01.12
15:15
Таки ошибка закралась:

Вместо

Для Каждого ТекущаяСтрока Из табЗагрузки Цикл
номрЧеловекаСчет = номрЧеловекаСчет+1;
Если ТекущаяСтрока.не_выгружать = Ложь Тогда

Читать

Для Каждого ТекущаяСтрока Из табЗагрузки Цикл
Если ТекущаяСтрока.не_выгружать = Ложь Тогда
номрЧеловека = номрЧеловека+1;

Плюс добавил в каждый этап    ПроверкаРаз = ПроверкаРаз + 1;

И в конце

Если ПроверкаРаз <> "1111" Тогда
ВызватьИсключение "Перед повторной выгрузкой в банк" + Символы.ВК + "необходимь заново перезаполнить все таблицы!" + Символы.ВК + "ПоказатьПлатежи > Заполнить > СобратьДляБанка > Загрузить в банк";
КонецЕсли;

Теперь готово.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший