Имя: Пароль:
1C
1С v8
пополнение пластиковых карт
,
0 3463
 
21.08.13
08:31
Доброе утро!делаю выгрузку з\п из ЗУП 2.5 для пополнения пластиковых карт в формате xml.все вроде как надо сделала,выдает ошибки.на данный момент такая
{ВнешняяОбработка.ВыгрузкаЗПвВяткаБанк.МодульОбъекта(136)}: Преобразование значения к типу Число не может быть выполнено
                Ном = Ном + 1;
хотя до этого ном я к нулю приравнивала,то есть он должен к нулю прибавлять 1. подскажите где не права

Функция ПолучитьЛицевойСчет(ФизЛицо, Организация, Банк) Экспорт

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

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

    Если Выборка.Следующий() Тогда
        Возврат Выборка.НомерЛицевогоСчета;
    Иначе
        Возврат Неопределено;
    КонецЕсли;

КонецФункции

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

        ЗапросПоДок = Новый Запрос;

        ЗапросПоДок.Текст =
        "ВЫБРАТЬ
        |    ЗарплатаКВыплатеОрганизаций.Дата КАК Дата,
        |    ЗарплатаКВыплатеОрганизаций.Организация КАК Организация,
        |    ЗарплатаКВыплатеОрганизаций.Банк КАК Банк
        |ИЗ
        |    Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
        |ГДЕ
        |    ЗарплатаКВыплатеОрганизаций.Ссылка = &СсылкаНаОбъект";

        ЗапросПоДок.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);

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

    КонецЕсли;    

    
    Текст = Новый ТекстовыйДокумент;
    Текст.ДобавитьСтроку("paycrum;1;1251;59;2;80##70#;"+Формат(ВыбДата, "ДЛФ=Д")+";"+НомерОтправки+";810;;Зачисление зарплаты;");
    
    Для каждого Ведомость ИЗ Ведомости Цикл
        
        ЗапросПоВедомости = Новый Запрос;
        ЗапросПоВедомости.Текст =
        "ВЫБРАТЬ
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо.Наименование КАК Наименование,
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Сумма + ЗарплатаКВыплатеОрганизацийЗарплата.КомпенсацияЗаЗадержкуЗарплаты КАК Сумма,
        |    ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
        |    ЗаявкаНаОткрытиеСчетов.РаботникиОрганизации.(
        |        НомерЛицевогоСчета
        |    )
        |ИЗ
        |    Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации
        |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаОткрытиеСчетов КАК ЗаявкаНаОткрытиеСчетов
        |            ПО ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета = ЗаявкаНаОткрытиеСчетов.РаботникиОрганизации.НомерЛицевогоСчета
        |        ПО (ЛицевыеСчетаРаботниковОрганизации.ФизЛицо = ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо)
        |            И (ЛицевыеСчетаРаботниковОрганизации.Организация = &Организация)
        |            И (ЛицевыеСчетаРаботниковОрганизации.Банк = &Банк)
        |ГДЕ
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка = &Ссылка
        |    И ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета = &Банк";
        
        
        ЗапросПоВедомости.УстановитьПараметр("Ссылка", Ведомость);
        ЗапросПоВедомости.УстановитьПараметр("Организация", Платеж.Организация);
        ЗапросПоВедомости.УстановитьПараметр("Банк", Платеж.Банк);
        
        ВыборкаФизЛиц = ЗапросПоВедомости.Выполнить().Выбрать();
        
        
        Пока ВыборкаФизЛиц.Следующий() Цикл
            
            Ном = 0;
            НаборЗаписей = РегистрыСведений.ЛицевыеСчетаРаботниковОрганизации.СоздатьНаборЗаписей();
            
            Для Каждого СтрокаТЧ Из ТЧ Цикл
                НаборЗаписей.Отбор.Организация.Значение = СсылкаНаОбъект.Организация;
                НаборЗаписей.Отбор.Организация.Использование = Истина;
                НаборЗаписей.Отбор.Банк.Значение = СсылкаНаОбъект.Банк;
                НаборЗаписей.Отбор.Банк.Использование = Истина;
                НаборЗаписей.Отбор.ФизЛицо.Значение = СтрокаТЧ.Физлицо;
                НаборЗаписей.Отбор.ФизЛицо.Использование = Истина;
                НаборЗаписей.Отбор.НомерЛицевогоСчета.Значение = ПолучитьЛицевойСчет(ВыборкаФизЛиц.ФизЛицо, ВыборкаФизЛиц.Организация, ВыборкаФизЛиц.Банк);
                НаборЗаписей.Отбор.НомерЛицевогоСчета.Использование = Истина;
                НаборЗаписей.Прочитать();
                Если НаборЗаписей.Количество() = 0 Тогда
                    Сообщить("Сотруднику "+СтрокаТЧ.Физлицо.Наименование+" не задан лицевой счет. Данные по нему выгружены не будут.");
                    Продолжить;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        КонецЦикла;
                
                
                //НомЛиц = РегистрыСведений.ЛицевыеСчетаРаботниковОрганизации.ПолучитьФормуСписка();
                //Ном.Выбрать();
                
                Ном = Ном + 1;
                //ФИО = СокрЛП(СтрокаТЧ.Физлицо.Наименование);
                ВремСтрока = СокрЛП(СтрокаТЧ.Физлицо.Наименование);
                Фамилия = Сред(ВремСтрока,1,Найти(ВремСтрока," ")-1);
                ВремСтрока = СокрЛП(Сред(ВремСтрока,Найти(ВремСтрока," ")));
                Имя = Сред(ВремСтрока,1,Найти(ВремСтрока," ")-1);
                Отчество = СокрЛП(Сред(ВремСтрока,Найти(ВремСтрока," ")));
                ФИО = Фамилия+" "+Имя+" "+Отчество; //из-за лишних пробелов
                
                Текст.ДобавитьСтроку(НаборЗаписей.Получить().НомерЛицевогоСчета+";"+ФИО+";"+Формат(СтрокаТЧ.Сумма+СтрокаТЧ.КомпенсацияЗаЗадержкуЗарплаты,"ЧГ=0; ЧДЦ=2; ЧРД='.'"));
            //КонецЦикла;
            Текст.ДобавитьСтроку("summary;"+Ном+";"+Формат(ТЧ.Итог("Сумма")+ТЧ.Итог("КомпенсацияЗаЗадержкуЗарплаты"),"ЧГ=0; ЧДЦ=2; ЧРД='.'"));
            ПолноеИмяФайла = КаталогДляФайла+"\p"+ПрефиксОрганизации+"-"+Формат(ТЧ.Итог("Сумма")+ТЧ.Итог("КомпенсацияЗаЗадержкуЗарплаты"),"ЧГ=0; ЧДЦ=2; ЧРД='.'")+"."+ДеньГода(ВыбДата);
            Текст.Записать(ПолноеИмяФайла);
            
            Сообщить("Выгрузка успешно завершена. Созданный файл: "+ПолноеИмяФайла);
        КонецПроцедуры
1 butterbean
 
21.08.13
08:34
у тебя ном = ном + 1; вызывается после циклов
2 Rie
 
21.08.13
08:34
(0) Если цикл не выполнится ни разу - то Ном будет Неопределено, а не 0.
3 RomaH
 
naïve
21.08.13
08:35
А отладка что показывает?

        Пока ВыборкаФизЛиц.Следующий() Цикл
            
            Ном = 0;
нахрена в цикле?
ничего что условия входа в цик может не выполнятся ни разу?
4 Defender aka LINN
 
21.08.13
08:35
(0) "то есть он должен" - он никому ничего не должен. А если 1С говорит, что в переменной не число - ей надо верить.
5 zak555
 
21.08.13
08:36
зачем реквизит физлицо у лиц счета ?
6 Defender aka LINN
 
21.08.13
08:37
И, кстати, как вообще связаны тема и (0)?
7 3463
 
21.08.13
08:38
далжно в xml файле отражаться номер счета и ФИО владельца счета
8 3463
 
21.08.13
08:39
в смысле как,выгрузка в формате xml для зарплатного проекта
9 Defender aka LINN
 
21.08.13
08:41
(7) Я от души поздравляю XML-файл, но как это связано с (0)?
10 3463
 
21.08.13
08:45
ну короче спасибо за советы
11 Lama12
 
21.08.13
08:48
(10) Ну вытащи из цикла Ном = 0;
:)
12 Стерва-бух
 
21.08.13
08:48
(9) ну переименуй тему, чего прицепился то к девушке?
13 3463
 
21.08.13
08:54
вытащила,ошибка такая теперь
{ВнешняяОбработка.ВыгрузкаЗПвВяткаБанк.МодульОбъекта(142)}: Значение не является значением объектного типа (Физлицо)
                ВремСтрока = СокрЛП(СтрокаТЧ.Физлицо.Наименование);
14 butterbean
 
21.08.13
08:59
(13) тебе надо наоборот, все в цикл запихнуть... плохо ты еще копипастишь
15 3463
 
21.08.13
09:08
запихнула,все равно на это же ругается..(
{ВнешняяОбработка.ВыгрузкаЗПвВяткаБанк.МодульОбъекта(142)}: Значение не является значением объектного типа (Физлицо)
                ВремСтрока = СокрЛП(СтрокаТЧ.Физлицо.Наименование);
16 ДенисЧ
 
21.08.13
09:09
Телепатирую...
В табличной части нет реквизита ФизЛицо...
17 Стерва-бух
 
21.08.13
09:20
может я чего то не понимаю...
1 вопрос: но в ЗУП вроде были выгрузки в банк готовые?
2 вопрос: в ведомости на выплату ЗП если поставить "способ выплаты" - банк и нажать "заполнить" - в ведомость попадают только те сотры, у которых заполнен лицевой счет. нифага это тогда проверять?
3. и чего вы прицепились к Ном, если строка "Ном = Ном + 1;" вообще вне всяких циклов... или я совсем ничего не помню?
18 3463
 
21.08.13
09:27
выгрузка выглядеть вот так должна,сказали писать,я пишу
paycrum;1;1251;59;2;80##70#;09.09.2008;1;810;;Зачисление зарплаты;
40817810000000000001;Бабкин Геннадий Иванович;12.00
40817810000000000002;Гурчева Татьяна Михайловна;569.00
summary;2;581.00