Имя: Пароль:
1C
1С v8
Выгрузка бюджетной зарплаты на пластиковые карты сбербанка
0 тоа
 
01.02.12
09:31
Ребят помогите плиз поправить код для выгрузки из Зарплата и кадры бюджетного учреждения 8.2 в дбф


// Сформировать файл выгрузки
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   ДБФ = Новый XBase;
   ДБФ.Кодировка = КодировкаXBase.OEM;
   ДБФ.поля.Добавить("A","S",33);
   ДБФ.поля.Добавить("B","S",30);
   ДБФ.поля.Добавить("C","S",30);
   ДБФ.поля.Добавить("D","S",30);
   ДБФ.поля.Добавить("E","S",30);
   ДБФ.поля.Добавить("F","S",30);
   ДБФ.поля.Добавить("G","S",30);
   ИмяФайла="f"+Формат(НомерОтделения, "ЧЦ=4; ЧВН=; ЧГ=0")+ Формат(НомерВыгрузки, "ЧЦ=2; ЧВН=; ЧГ=0")+".dbf";
   ДБФ.СоздатьФайл(ПутьКФайлу+"\f"+Формат(НомерОтделения, "ЧЦ=4; ЧВН=; ЧГ=0")+ Формат(НомерВыгрузки, "ЧЦ=2; ЧВН=; ЧГ=0")+".dbf",);
   
   //1
   ДБФ.Добавить();
   ДБФ.УстановитьЗначениеПоля("A",СокрЛП(НомерОтделения)+","+СокрЛП(НомерФилиала));
   ДБФ.Записать();
   //2
   ДБФ.Добавить();
   ДБФ.УстановитьЗначениеПоля("A","К платежному поручению №");
   ДБФ.УстановитьЗначениеПоля("B",Строка(НомерПлатежногоПоручения));
   ДБФ.УстановитьЗначениеПоля("C","от");
   ДБФ.УстановитьЗначениеПоля("D",ДатаВыгрузки);
   ДБФ.Записать();
   //3
   ДБФ.Добавить();
   ДБФ.УстановитьЗначениеПоля("A","Зачисление");
   ДБФ.УстановитьЗначениеПоля("B",Зачисление);
   ДБФ.УстановитьЗначениеПоля("C","810");
   ДБФ.Записать();
   //4
   ДБФ.Добавить();
   ДБФ.УстановитьЗначениеПоля("A","ОГРН,НАИМЕНОВАНИЕ,№ БАНК.СЧЕТА");
   ДБФ.УстановитьЗначениеПоля("B",Организация.ОГРН+", "+Организация.Наименование);
   ДБФ.УстановитьЗначениеПоля("C",Организация.ОсновнойБанковскийСчет.НомерСчета);
   ДБФ.Записать();
   //5
   ДБФ.Добавить();
   ДБФ.УстановитьЗначениеПоля("A","ПО ДОГОВОРУ: ");
   ДБФ.УстановитьЗначениеПоля("B",Договор);
   ДБФ.УстановитьЗначениеПоля("C","от ");
   ДБФ.УстановитьЗначениеПоля("D",ДатаДоговора);
   ДБФ.Записать();
   //6
   ДБФ.Добавить();
   ДБФ.УстановитьЗначениеПоля("A","Номер п/п");
   ДБФ.УстановитьЗначениеПоля("B","Номер счета");
   ДБФ.УстановитьЗначениеПоля("C","Фамилия");
   ДБФ.УстановитьЗначениеПоля("D","Имя");
   ДБФ.УстановитьЗначениеПоля("E","Отчество");
   ДБФ.УстановитьЗначениеПоля("F","Сумма");
   ДБФ.УстановитьЗначениеПоля("G","Примечание");
   ДБФ.Записать();


       //ИмяФайлаK = СокрЛП(Строка(ОтделениеБанка))+СокрЛП(НомерДоговора)+СокрЛП(Строка(НомерВыгрузки))+".k"+День(ДатаВыгрузки);
   //ИмяФайлаS = СокрЛП(Строка(ОтделениеБанка))+СокрЛП(НомерДоговора)+СокрЛП(Строка(НомерВыгрузки))+".s"+День(ДатаВыгрузки);
   //ТекстK = Новый ТекстовыйДокумент;
   //ТекстS = Новый ТекстовыйДокумент;

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

   СуммаИтого = 0;
   н = 0;    
   Пока ВыборкаОбщ.Следующий() Цикл
         Выборка = ВыборкаОбщ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

       Пока Выборка.Следующий() Цикл
       н = н +1;
       Если ПустаяСтрока(Выборка.НомерЛицевогоСчета) Тогда
           Сообщить("У сотрудника " + Выборка.ФизЛицо + " не указан лицевой счет", СтатусСообщения.ОченьВажное);
           НеФормироватьФайл = 1;
       КонецЕсли;
       Если Выборка.Сумма = 0 Тогда
           Сообщить("У сотрудника " + Выборка.ФизЛицо + " не указана сумма, перечисляемая на лицевой счет", СтатусСообщения.ОченьВажное);
           НеФормироватьФайл = 1;
       КонецЕсли;
       СуммаИтого = СуммаИтого + Выборка.Сумма;
       ФИО = Выборка.ФизЛицо.Наименование;
       Фамилия  = ОбщегоНазначения.ВыделитьСлово(ФИО);
       Имя      = ОбщегоНазначения.ВыделитьСлово(ФИО);
       Отчество = ОбщегоНазначения.ВыделитьСлово(ФИО);
       
       
       ДБФ.Добавить();
       ДБФ.УстановитьЗначениеПоля("A",н);
       ДБФ.УстановитьЗначениеПоля("B",Выборка.НомерЛицевогоСчета);
       ДБФ.УстановитьЗначениеПоля("C",Фамилия);
       ДБФ.УстановитьЗначениеПоля("D",Имя);
       ДБФ.УстановитьЗначениеПоля("E",Отчество);
       ДБФ.УстановитьЗначениеПоля("F",Формат(Выборка.Сумма,"ЧГ=6 ;ЧРД='.'; ЧДЦ=2"));
       ДБФ.Записать();
       //ТекстS.ДобавитьСтроку(СокрЛП(Строка(н))+"|"+СокрЛП(Строка(ОтделениеБанка))+"|"+СокрЛП(Строка(ФилиалБанка))+"|"+СокрЛП(Фамилия)+"|"+СокрЛП(Имя)+"|"+СокрЛП(Отчество)+"|"+СокрЛП(Строка(Выборка.НомерЛицевогоСчета))+"|"+СокрЛП(Строка(Формат(Выборка.сумма, "ЧЦ=8; ЧДЦ=2"))));
   КонецЦикла;
КонецЦикла;
   
   Если НеФормироватьФайл = 1 тогда
       Сообщить("Файл не сформирован!", СтатусСообщения.ОченьВажное);
   Иначе
       //итог
       ДБФ.Добавить();
       ДБФ.УстановитьЗначениеПоля("B","ИТОГО:");
       ДБФ.УстановитьЗначениеПоля("F",Формат(СуммаИтого,"ЧГ=6 ;ЧРД='.'; ЧДЦ=2"));
       ДБФ.Записать();

       //ТекстS.Записать(СокрЛП(ПутьКФайлу) + ?(Прав(СокрЛП(ПутьКФайлу) , 1) <> "\", "\", "") + ИмяФайлаS);
       //ТекстK.ДобавитьСтроку(""+СокрЛП(Организация.НаименованиеПолное)+"|"+СокрЛП(Строка(НомерДоговора))+"|"+СокрЛП(Строка(ОтделениеБанка))+"|"+СокрЛП(Строка(ФилиалБанка))+"|"+Строка(н)+"|"+СокрЛП(Строка(Формат(СуммаИтого,"ЧЦ=15; ЧДЦ=2"))));
       //ТекстK.Записать(СокрЛП(ПутьКФайлу) + ?(Прав(СокрЛП(ПутьКФайлу) , 1) <> "\", "\", "") + ИмяФайлаK);

       Сообщить("Формирование файла " + ИмяФайла+" завершено", СтатусСообщения.Информация);
       
   КонецЕсли;

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

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

   ФормаСчета.Открыть();

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

Процедура ПриОткрытии()
   НомерВыгрузки = День(ТекущаяДата());

   Зачисление="01";
   //ОтборРегистра = Новый Структура("Настройка, Пользователь", ПланыВидовХарактеристик.НастройкиПользователей.ОсновнаяОрганизация, ПараметрыСеанса.ТекущийПользователь.Ссылка);
   //Организация = РегистрыСведений.НастройкиПользователей.Получить(ОтборРегистра).Значение;
КонецПроцедуры

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

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

КонецПроцедуры
1 БалбесВ1с
 
01.02.12
09:47
А что не работает то?
2 Alex S D
 
01.02.12
09:48
ждем телепатов
3 тоа
 
01.02.12
09:52
(1) при попытке добавить документ для выгрузки появляется ошибка: Поле объекта не обнаружено (СпособВыплаты)если нажать подробно то вот:

{Форма.Форма.Форма(164)}: Поле объекта не обнаружено (СпособВыплаты)
   Если Элемент.Значение.СпособВыплаты = Перечисления.СпособыВыплатыЗарплаты.ЧерезКассу Тогда

Вообще это выгрузка изначально для ЗУП, в ЗУП все без проблем, но нужно для бюджета
4 Diose_1c
 
01.02.12
10:17
Не у верен но возможно поможет :)

http://infostart.ru/public/90192/
5 DmiVo
 
01.02.12
10:37
Посмотри отладчиком
6 тоа
 
01.02.12
15:06
(4) Нет возможности скачать
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.