Мы выгружаем данные для зарплатного проекта в Промсвязьбанк
Имя файла формируется приблизительно такое: 1234501.922 (по инструкции)
Ниже полный код выгрузки для 1С 7.7 Зарплата и кадры
Все работает без ошибок уже более года.
В форме документа "ВыплатаЗаработнойПлаты" создать кнопку и указать процедуру "ВыгрузкаВПСБ()"
Один документ "ВыплатаЗаработнойПлаты" - это один файл выгрузки.
Если будут вопросы, оставляйте их тут, я отвечу.
//Формируем расширение файла (по инструкции банка)
//Первые 2 символа это номер дня месяца
//Третий символ - это последняя цифра номера месяца
Функция ПолучитьРасширениеПСБ()
С_ДатаЧисло=СокрЛП(Строка(ДатаЧисло(ТекущаяДата())));
Если СтрДлина(С_ДатаЧисло)=1 Тогда
С_ДатаЧисло="0"+С_ДатаЧисло;
КонецЕсли;
Возврат Прав(СокрЛП(Строка(ДатаМесяц(ТекущаяДата()))),1)+С_ДатаЧисло;
КонецФункции //ПолучитьРасширениеПСБ
//Формируем имя для файла выгрузки файла (по инструкции банка)
Функция ПолучитьФайлВыгрузкиПСБ()
Рез=СокрЛП(Константа.КодПредприятияПСБ);//Код предприятия ПСБ "12345";
С_ОлдКаталог = ФС.ТекКаталог();
Ч_НомерФайлаЗаДень=1;
С_ПутьКВыгрузкам=СокрЛП(Константа.КаталогВыгрузкиЗП);//"S:\Бухгалтерия\ВыгрузкиПСБ\";
ФС.УстТекКаталог(С_ПутьКВыгрузкам);
С_Файл = ФС.НайтиПервыйФайл("*."+ПолучитьРасширениеПСБ());
Пока ПустаяСтрока(С_Файл) = 0 Цикл
Если (С_Файл = "..") или (С_Файл = ".") Тогда
Продолжить;
КонецЕсли;
Ч_НомерФайлаЗаДень=Ч_НомерФайлаЗаДень+1;
С_Файл = ФС.НайтиСледующийФайл();
КонецЦикла;
ФС.УстТекКаталог(С_ОлдКаталог);
Если Ч_НомерФайлаЗаДень<10 Тогда
С_НомерФайлаЗаДень="0"+СокрЛП(Строка(Ч_НомерФайлаЗаДень));
Иначе
С_НомерФайлаЗаДень=СокрЛП(Строка(Ч_НомерФайлаЗаДень));
КонецЕсли;
Рез=Рез+С_НомерФайлаЗаДень+"."+ПолучитьРасширениеПСБ();
Возврат С_ПутьКВыгрузкам+Рез;
КонецФункции //ПолучитьФайлВыгрузкиПСБ
//Функция формирует строку для выгрузки по указанному сотруднику
//пар_Сотр - элемент справочника сорудники
//пар_Сумма - Сумма ЗП
Функция СотрВСтрокуПСБ(пар_Сотр,пар_Сумма)
Рез=СокрЛП(пар_Сотр.НомерЗарплатногоСчета)+"^";
Рез=Рез+"810^";//Рубли
Рез=Рез+СокрЛП(Формат(пар_Сумма,"Ч018.2"))+"^";//Сумма
С_ФИО=СтрЗаменить(СокрЛП(пар_Сотр.Наименование)," ",РазделительСтрок);
Рез=Рез+СтрПолучитьСтроку(С_ФИО,1)+"^";//Фамилия
Рез=Рез+СтрПолучитьСтроку(С_ФИО,2)+"^";//Имя
Рез=Рез+СтрПолучитьСтроку(С_ФИО,3)+"^";//Отчество
С_ПаспортСерия="";
С_ПаспортНомер="";
ДокументУдЛичностьСписком = глРазложитьДокУдостоверяющийЛичность(пар_Сотр.ДокументУдЛичность);
РазмерСпискаДокументУдЛичность = ДокументУдЛичностьСписком.РазмерСписка();
Если РазмерСпискаДокументУдЛичность > 1 тогда
С_ПаспортСерия=СтрЗаменить(СокрЛП(Врег(ДокументУдЛичностьСписком.ПолучитьЗначение(2)))," ","");
КонецЕсли;
Если РазмерСпискаДокументУдЛичность > 2 тогда
С_ПаспортНомер=СокрЛП(Врег(ДокументУдЛичностьСписком.ПолучитьЗначение(3)));
КонецЕсли;
Ч_Резидент=1;//Это резидент
Если пар_Сотр.Страна.Выбран()=1 Тогда
Если СокрЛП(пар_Сотр.Страна.Код)<>"643" Тогда
Ч_Резидент=0;//Это не резидент
КонецЕсли;
КонецЕсли;
Если Ч_Резидент=0 Тогда
Рез=Рез+С_ПаспортСерия+"^";
Рез=Рез+С_ПаспортНомер+"^";
Иначе
Рез=Рез+"^";
Рез=Рез+С_ПаспортСерия+С_ПаспортНомер+"^";
КонецЕсли;
Рез=Рез+"^";
Возврат Рез;
КонецФункции //СотрВСтрокуПСБ
//Главная процедура которая осуществляет выгрузку данных
//В форме документа "ВыплатаЗаработнойПлаты" создать кнопку и указать эту процедуру "ВыгрузкаВПСБ()"
Процедура ВыгрузкаВПСБ()
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Подразделение");
ТЗ.НоваяКолонка("ФИО");
ТЗ.НоваяКолонка("ЛС");
ТЗ.НоваяКолонка("Сумма");
ТЗ.НоваяКолонка("Резидент");
Об_Текст = СоздатьОбъект("Текст");
С_ПутьКФайлуВыгрузки=ПолучитьФайлВыгрузкиПСБ();
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Если СокрЛП(Сотрудник.НомерЗарплатногоСчета)="" Тогда
Сообщить("Отсутствует № зарп.счета: "+Сотрудник.Наименование,"!!!");
Возврат;
КонецЕсли;
Об_Текст.ДобавитьСтроку(СотрВСтрокуПСБ(Сотрудник.ТекущийЭлемент(),Сумма+Компенсация));
ТЗ.НоваяСтрока();
ТЗ.Подразделение=СокрЛП(Строка(Сотрудник.Родитель));
ТЗ.ФИО=СокрЛП(Сотрудник.Наименование);
ТЗ.ЛС=СокрЛП(Сотрудник.НомерЗарплатногоСчета);
ТЗ.Сумма=Сумма+Компенсация;
ТЗ.Резидент=1;//Это резидент
Если Сотрудник.Страна.Выбран()=1 Тогда
Если СокрЛП(Сотрудник.Страна.Код)<>"643" Тогда
ТЗ.Резидент=0;//Это не резидент
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТЗ.Итог("Резидент")=0 Тогда //Нерезиденты
Об_Текст.Записать(С_ПутьКФайлуВыгрузки);
Сообщить("Выгружено в файл: "+С_ПутьКФайлуВыгрузки);
ИначеЕсли ТЗ.Итог("Резидент")=ТЗ.КоличествоСтрок() Тогда //Резиденты
Об_Текст.Записать(С_ПутьКФайлуВыгрузки);
Сообщить("Выгружено в файл: "+С_ПутьКФайлуВыгрузки);
Иначе
Сообщить("Ошибка. В списке присутствуют резиденты и нерезиденты. Файл не выгружен.","!!!");
Возврат;
КонецЕсли;
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ВБанкПСБ");
тДата=Формат(ТекущаяДата(),"Д (0)ДДММММГГГГ");
тФайл=С_ПутьКФайлуВыгрузки;
Таб.ВывестиСекцию("Шапка");
ТЗ.Сортировать("+Подразделение,+ФИО");
тиСумма=0;
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
тНПП=ТЗ.НомерСтроки;
тПодразделение=ТЗ.Подразделение;
тФИО=ТЗ.ФИО;
тФИО_ЛС=ТЗ.ЛС;
тСумма=ТЗ.Сумма;
тиСумма=тиСумма+тСумма;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,0,0);
Таб.ПараметрыСтраницы(1,,,,,,,,,1,,);
Таб.Показать("");
КонецПроцедуры //ВыгрузкаВПСБ