Вход | Регистрация
 

1c ЗУП вопрос по Запросу

1c ЗУП вопрос по Запросу
Я
   Nemirov
 
20.03.20 - 16:39
Представил не весь запрос, а основное. В "Перем ХарактерыЗарплаты" и "Перем ХарактерыАванса" добавляю перечисления что бы разделить аванс от зарплаты Аванс = 1 зарплата = 0
При выгрузке в файл не срабатывает в запросе соответсвенно колонка пустая. Если с перечислениями не получается, может быть кто подскажет как сделать прям в запросе прописать условие что то типа когда аванс = 1 когда зарплата = 0
без всяких перечислений. Понимаю глупый вопрос студент не судите строго. Если нужен будет весь запрос могу прислать, а так основное что бы глаза не разбегались  
        ......
        |    ВЫБОР
    |        КОГДА ВедомостиНаВыплатуЗарплаты.СпособВыплаты В (&ХарактерыАванса)
    |        ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК ХарактерВыплаты,
        .......
///////////////////////
Перем ХарактерыЗарплаты;
Перем ХарактерыАванса;

Процедура ПриОткрытии()
    
    Флажок1 = Истина;
    Флажок2 = Истина;
    Флажок3 = Истина;
    Флажок4 = Истина;
    НазначениеПеречислений();
    
КонецПроцедуры


&НаСервереБезКонтекста
Процедура НазначениеПеречислений()
    
    ХарактерыЗарплаты = Новый СписокЗначений;
    ХарактерыЗарплаты.Добавить(Перечисления.ХарактерВыплатыЗарплаты.Зарплата);
    
    ХарактерыАванса = Новый СписокЗначений;
    ХарактерыАванса.Добавить(Перечисления.ХарактерВыплатыЗарплаты.Аванс);

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

&НаКлиенте
Процедура Выгрузить(Команда)
    СозданиеФайлаДляВыгрузки();
КонецПроцедуры

    &НаСервере
Процедура СозданиеФайлаДляВыгрузки()

    ИмяФайла="zp"+Формат(Период,"ДФ=yyyyMM")+".dbf";
    ПутьКФайлуОбмена = ПолучитьИмяФайла("C:\ПробникОбр", ИмяФайла);
    ip="192.168.16.20";
    port = 21;
    login = "ZP";
    pass = "zp4512";
    Если сзДок.Количество()=0 Тогда
    Текст = "ru = ""Необходимо заполнить таблицу документов !""; en = "" Please select document !""";
    Сообщить(Текст);
    
    Возврат;
    //ИначеЕсли Не ПроверитьСуществованиеКаталога(КаталогВыгр) Тогда
    //    Текст = "ru = ""Каталог не существует, выберите другой !""; en = ""Select an existing folder !""";
    //    Предупреждение(НСтр(Текст), 20);
    //    Возврат;
    КонецЕсли;
    
    ДБ = Новый Xbase;
    ДБ.Кодировка = КодировкаXBase.ANSI;
    ДБ.поля.Добавить("METKA","S",1,);
    ДБ.Поля.Добавить("KOD","S",10,);
    ДБ.Поля.Добавить("FIO","S",80,);
    ДБ.Поля.Добавить("BANK","S",100,3);
    ДБ.Поля.Добавить("SUMMA","N",15,2);
    ДБ.Поля.Добавить("AVANS","N",10,0);
    //ФайлИПутьВыгрузки = КаталогВыгр+"zp"+Формат(ПериодРегистрации,"ДФ=yyyyMM")+".dbf";
    ДБ.СоздатьФайл(ПутьКФайлуОбмена,);
    ДБ.АвтоСохранение =1;
    
    // создаем СЗ из помеченных эл-тов СЗ формы
    ///////////////////////////////////////////заполняем зарплату
    сзДокВыгр = сзДок.Скопировать();
    СчК = сзДокВыгр.Количество();
    Для СчН = 1 По СчК Цикл
        Если Не сзДокВыгр[СчК-СчН].Пометка Тогда
            Если НЕ ТипЗнч(сзДокВыгр[СчК-СчН]) = Тип("ДокументСсылка.ВедомостиНаВыплатуЗарплаты") Тогда
                сзДокВыгр.Удалить(СчК-СчН);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    //*****************************-----Заполнение файла для выгрузки-----**********************************************
    
    
    //***********----Заполнение зарплаты (метка в данных файла "N")----*******************
    Запрос = Новый Запрос;
    Запрос.Текст =     
    
    "ВЫБРАТЬ
    |    ВедомостиНаВыплатуЗарплаты.Сотрудники КАК ФИО,
    |    ВедомостиНаВыплатуЗарплаты.Сумма КАК Сумма,
    |    ВЫБОР
    |        КОГДА ВедомостиНаВыплатуЗарплаты.СпособВыплаты В (&ХарактерыАванса)
    |        ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК ХарактерВыплаты,
    |    ВедомостиНаВыплатуЗарплаты.МестоВыплаты.Ссылка КАК БАНК,
    |    ВедомостиНаВыплатуЗарплаты.МестоВыплаты.Код КАК КодФЛ
    |ИЗ
    |    ЖурналДокументов.ВедомостиНаВыплатуЗарплаты КАК ВедомостиНаВыплатуЗарплаты
    |ГДЕ
    |    ВедомостиНаВыплатуЗарплаты.Ссылка В(&ВыбДокументы)";
    
    Запрос.УстановитьПараметр("ВыбДокументы", сзДокВыгр);
//    Запрос.УстановитьПараметр("ХарактерыЗарплаты", ХарактерыЗарплаты);
    Запрос.УстановитьПараметр("ХарактерыАванса", ХарактерыАванса);
    тзРезультат = Запрос.Выполнить().Выгрузить();
    //тзРезультат.Свернуть("ФИО,ХарактерВыплаты,","Сумма");          
    тзРезультат.Свернуть("КодФЛ,ФИО,ХарактерВыплаты,БАНК","Сумма");
    тзРезультат.Сортировать("ФИО,ХарактерВыплаты");                  
    тзРезультат.Сортировать("ФИО,КодФЛ,ХарактерВыплаты");
    Для Каждого стрТЗ Из тзРезультат Цикл
        Если СокрЛП(стрТЗ.БАНК) <> "" Тогда
            ДБ.Добавить();
            ДБ.METKA = "N";
            ДБ.KOD = стрТЗ.КодФЛ;
            ДБ.FIO = стрТЗ.ФИО;
            ДБ.SUMMA = стрТЗ.Сумма;
            ДБ.AVANS = стрТЗ.ХарактерВыплаты;
            ДБ.BANK = стрТЗ.БАНК;
            ДБ.Записать();
        КонецЕсли;
    КонецЦикла;
    //******************************---*******************************************
КонецПроцедуры
   Nemirov
 
1 - 20.03.20 - 16:41
Перем ХарактерыЗарплаты;
Перем ХарактерыАванса;
#Область События


// Процедура - обработчик события "ПриОткрытии" поля ввода периода .

// 
&НаКлиенте
Процедура ПриОткрытии()
    
    Флажок1 = Истина;
    Флажок2 = Истина;
    Флажок3 = Истина;
    Флажок4 = Истина;
    НазначениеПеречислений();
    
КонецПроцедуры 

//    Процедура - обработчик события "ПриИзменении" поля ввода периода.

//    Из общих модулей берется процедура где представление периода приводится к нужному виду, а именно "дата как месяц".
//

 &НаКлиенте
Процедура ПериодРегистрацииПриИзменении(Элемент)
    
    ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтаФорма, "Период", "Месяц", Модифицированность); 

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

// Процедура - обработчик события "ПериодРегистрацииНачалоВыбора" поля ввода периода.

//
// 

&НаКлиенте
Процедура ПериодРегистрацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
        ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма,ЭтаФорма, "Период", "Месяц", Модифицированность);
    КонецПроцедуры
    
// Процедура - обработчик события "ПериодРегистрацииРегулирование" поля ввода периода.

//
//

&НаКлиенте
Процедура ПериодРегистрацииРегулирование(Элемент, Направление, СтандартнаяОбработка)
    ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтаФорма, "Период", "Месяц", Направление, Модифицированность);
КонецПроцедуры

// Процедура - обработчик события "ПериодРегистрацииАвтоПодбор" поля ввода периода.

//
//

&НаКлиенте
Процедура ПериодРегистрацииАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

// Процедура - обработчик события "ПериодРегистрацииОкончаниеВводаТекста" поля ввода периода.

//
//

&НаКлиенте
Процедура ПериодРегистрацииОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
    ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

#КонецОбласти

&НаСервереБезКонтекста
Процедура НазначениеПеречислений()
    
    ХарактерыЗарплаты = Новый СписокЗначений;
    ХарактерыЗарплаты.Добавить(Перечисления.ХарактерВыплатыЗарплаты.Зарплата);
    
    ХарактерыАванса = Новый СписокЗначений;
    ХарактерыАванса.Добавить(Перечисления.ХарактерВыплатыЗарплаты.Аванс);

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

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

        //                РежимДиалогаВопрос.ОКОтмена);

        //Если Ответ = КодВозвратаДиалога.ОК Тогда

        //    СоздатьКаталог(ИмяКаталога);

        //    Возврат Истина;

        //Иначе

        Возврат Ложь;
        //КонецЕсли;

    КонецЕсли;
КонецФункции

&НаСервере
Функция ПолучитьИмяФайла(ИмяКаталога, ИмяФайла) Экспорт
    
    Если Не ПустаяСтрока(ИмяФайла) Тогда
        
        Возврат ИмяКаталога + ?(Прав(ИмяКаталога, 1) = "\", "", "\") + ИмяФайла;    
        
    Иначе
        
        Возврат ИмяКаталога;
        
    КонецЕсли;
    
КонецФункции

&НаСервере
Процедура СозданиеФайлаДляВыгрузки()
        
    ИмяФайла="zp"+Формат(Период,"ДФ=yyyyMM")+".dbf";
    ПутьКФайлуОбмена = ПолучитьИмяФайла("C:\ПробникОбр", ИмяФайла);
    ip="192.168.16.20";
    port = 21;
    login = "ZP";
    pass = "zp4512";
    Если сзДок.Количество()=0 Тогда
    Текст = "ru = ""Необходимо заполнить таблицу документов !""; en = "" Please select document !""";
    Сообщить(Текст);
    
    Возврат;
    //ИначеЕсли Не ПроверитьСуществованиеКаталога(КаталогВыгр) Тогда

    //    Текст = "ru = ""Каталог не существует, выберите другой !""; en = ""Select an existing folder !""";

    //    Предупреждение(НСтр(Текст), 20);

    //    Возврат;

    КонецЕсли;
    
    ДБ = Новый Xbase;
    ДБ.Кодировка = КодировкаXBase.ANSI;
    ДБ.поля.Добавить("METKA","S",1,);
    ДБ.Поля.Добавить("KOD","S",10,);
    ДБ.Поля.Добавить("FIO","S",80,);
    ДБ.Поля.Добавить("BANK","S",100,3);
    ДБ.Поля.Добавить("SUMMA","N",15,2);
    ДБ.Поля.Добавить("AVANS","N",10,0);
    //ФайлИПутьВыгрузки = КаталогВыгр+"zp"+Формат(ПериодРегистрации,"ДФ=yyyyMM")+".dbf";

    ДБ.СоздатьФайл(ПутьКФайлуОбмена,);
    ДБ.АвтоСохранение =1;
    
    // создаем СЗ из помеченных эл-тов СЗ формы

    ///////////////////////////////////////////заполняем зарплату

    сзДокВыгр = сзДок.Скопировать();
    СчК = сзДокВыгр.Количество();
    Для СчН = 1 По СчК Цикл
        Если Не сзДокВыгр[СчК-СчН].Пометка Тогда
            Если НЕ ТипЗнч(сзДокВыгр[СчК-СчН]) = Тип("ДокументСсылка.ВедомостиНаВыплатуЗарплаты") Тогда
                сзДокВыгр.Удалить(СчК-СчН);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    //*****************************-----Заполнение файла для выгрузки-----**********************************************

    
    
    //***********----Заполнение зарплаты (метка в данных файла "N")----*******************

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

    Запрос.УстановитьПараметр("ХарактерыАванса", ХарактерыАванса);
    тзРезультат = Запрос.Выполнить().Выгрузить();
    //тзРезультат.Свернуть("ФИО,ХарактерВыплаты,","Сумма");           

    тзРезультат.Свернуть("КодФЛ,ФИО,ХарактерВыплаты,БАНК","Сумма");
    тзРезультат.Сортировать("ФИО,ХарактерВыплаты");                   
    тзРезультат.Сортировать("ФИО,КодФЛ,ХарактерВыплаты");
    Для Каждого стрТЗ Из тзРезультат Цикл
        Если СокрЛП(стрТЗ.БАНК) <> "" Тогда
            ДБ.Добавить();
            ДБ.METKA = "N";
            ДБ.KOD = стрТЗ.КодФЛ;
            ДБ.FIO = стрТЗ.ФИО;
            ДБ.SUMMA = стрТЗ.Сумма;
            ДБ.AVANS = стрТЗ.ХарактерВыплаты;
            ДБ.BANK = стрТЗ.БАНК;
            ДБ.Записать();
        КонецЕсли;
    КонецЦикла;
    //******************************---*******************************************

    
    
    //******************----заполняем отпуск ---(метка в данных файла "О")----**********************************

    сзДокВыгр.Очистить();
    сзДокВыгр = сзДок.Скопировать();
    СчК = сзДокВыгр.Количество();
    Для СчН = 1 По СчК Цикл
        Если Не сзДокВыгр[СчК-СчН].Пометка Тогда
            Если НЕ ТипЗнч(сзДокВыгр[СчК-СчН]) = Тип("ДокументСсылка.НачислениеОтпускаРаботникамОрганизаций") Тогда
                сзДокВыгр.Удалить(СчК-СчН);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    Отпуск.ФизическоеЛицо.Код КАК КодФЛ,
    |    Отпуск.ФизическоеЛицо.Наименование КАК ФИО,
    |    Отпуск.Начисления.(
    |        СУММА(Результат)
    |    ) КАК СУММА
    |ИЗ
    |    Документ.Отпуск КАК Отпуск
    |ГДЕ
    |    Отпуск.Ссылка В(&ВыбДокументы)";
    Запрос.УстановитьПараметр("ВыбДокументы", сзДокВыгр);
    тзРезультат = Запрос.Выполнить().Выгрузить();
    
    Для Каждого стрТЗ Из тзРезультат Цикл
        СуммаВыплаты = 0;
        Для Каждого Строка Из стрТЗ.Сумма Цикл
            СуммаВыплаты = СуммаВыплаты + Строка.Результат;
        КонецЦикла;    
        ДБ.Добавить();
        ДБ.METKA = "O";
        ДБ.KOD = стрТЗ.КодФЛ;
        ДБ.FIO = стрТЗ.ФИО;
        ДБ.SUMMA = СуммаВыплаты;
        ДБ.Записать();
    КонецЦикла;
    //*******************************----******************************************

    
    //********************----заполняем больничный----(метка данных файла "В")----********************************

    сзДокВыгр.Очистить();
    сзДокВыгр = сзДок.Скопировать();
    СчК = сзДокВыгр.Количество();
    Для СчН = 1 По СчК Цикл
        Если Не сзДокВыгр[СчК-СчН].Пометка Тогда 
            Если НЕ ТипЗнч(сзДокВыгр[СчК-СчН]) = Тип("ДокументСсылка.БольничныйЛист") Тогда
                сзДокВыгр.Удалить(СчК-СчН);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    БольничныйЛист.ФизическоеЛицо.Код КАК КодФЛ,
    |    БольничныйЛист.ФизическоеЛицо.Наименование КАК ФИО,
    |    БольничныйЛист.Начисления.(
    |        СУММА(Результат) 
    |    ) КАК СУММА
    |ИЗ
    |    Документ.БольничныйЛист КАК БольничныйЛист
    |ГДЕ
    |    БольничныйЛист.Ссылка В(&ВыбДокументы)";
    Запрос.УстановитьПараметр("ВыбДокументы", сзДокВыгр);
    тзРезультат = Запрос.Выполнить().Выгрузить();
    Для Каждого стрТЗ Из тзРезультат Цикл
        СуммаВыплаты = 0;
        Для Каждого Строка Из стрТЗ.Сумма Цикл
            СуммаВыплаты = СуммаВыплаты + Строка.Результат;
        КонецЦикла;    
        ДБ.Добавить();
        ДБ.METKA = "B";
        ДБ.KOD = стрТЗ.КодФЛ;
        ДБ.FIO = стрТЗ.ФИО;
        ДБ.SUMMA = СуммаВыплаты;
           ДБ.Записать();
    КонецЦикла;
    //*************************----********************************

    
    
    //**********************----Начисление удержаний--(метка в данных файла "U")----*******************

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

    Запрос.УстановитьПараметр("ВыбДокументы", сзДокВыгр);
    тзРезультат = Запрос.Выполнить().Выгрузить();
    //тзРезультат.Свернуть("КодФЛ,ФИО,","Сумма");

    //тзРезультат.Сортировать("ФИО,КодФЛ");

    
    Для Каждого стрТЗ Из тзРезультат Цикл
        //СуммаВыплаты = 0;

        //Для Каждого Строка Из стрТЗ.Сумма Цикл

        //    СуммаВыплаты = СуммаВыплаты + Строка.Результат;

        //КонецЦикла;    

        Если НЕ стрТЗ.Результат = 0 Тогда
            ДБ.Добавить();
            ДБ.METKA = "U";
            ДБ.KOD = стрТЗ.КодФЛ;
            ДБ.FIO = стрТЗ.ФИО;
            ДБ.SUMMA = стрТЗ.Результат;
            ДБ.Записать();
        КонецЕсли;
    КонецЦикла;

//*******************************************************************************    

ДБ.Записать();
    ДБ.ЗакрытьФайл();
    //Если ОтправкаFTP(ПутьКФайлуОбмена, IP, port, login, pass, ИмяФайла) = 1 Тогда

    //    Сообщить("Файлы отправленны. Ошибок нет.");

    //КонецЕсли;

    //12.05.2015

    ОтправитьСтаж();
    //12.05.2015

    Текст = "ru = ""Выгрузка завершена""; en = ""Job's done !""";
    Сообщить(Текст);



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

&НаКлиенте
Процедура Выгрузить(Команда)
    СозданиеФайлаДляВыгрузки();
КонецПроцедуры

&НаСервере
Процедура РелоадНажатие()
    
        сзДок.Очистить();
        Если Флажок1 Тогда  //зарплата

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

            |
            |УПОРЯДОЧИТЬ ПО
            |    ВедомостиНаВыплатуЗарплаты.Дата,
            |    ВедомостиНаВыплатуЗарплаты.Номер";

        Запрос.УстановитьПараметр("ХарактерыЗарплаты", ХарактерыЗарплаты);
        Запрос.УстановитьПараметр("ХарактерыАванса", ХарактерыАванса);
        Запрос.УстановитьПараметр("ПериодВыгрузки", Период);
        //Запрос.УстановитьПараметр("СпособВыплаты", Перечисления.СпособыВыплатыЗарплаты.ЧерезБанк);

        Результат = Запрос.Выполнить();
        
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            сзДок.Добавить(Выборка.ДокВыплаты,,Истина)
        КонецЦикла;
        КонецЕсли;
    
    
        Если Флажок2 Тогда  //отпускные

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

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

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

        Запрос.УстановитьПараметр("ПериодВыгрузки", Период);
    
        Результат = Запрос.Выполнить();
        
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            сзДок.Добавить(Выборка.Удержания,,Истина)
        КонецЦикла;
    КонецЕсли;    
 

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

&НаКлиенте
Процедура Релоад(Команда)
    РелоадНажатие();
КонецПроцедуры

&НаСервере
Функция ОтправкаFTP(ИмяФайла, IP, port, login, pass, Имя)
    
    FTP = Новый FTPСоединение(IP, port, login, pass, , Истина); 
    FTP.УстановитьТекущийКаталог("zp"); 
    FTP.Записать(ИмяФайла, Имя); 
    Возврат 1;
    
КонецФункции

//12.05.2015

&НаСервере
Процедура ОтправитьСтаж() 
ИмяФайла="st"+Формат(Период,"ДФ=yyyyMM")+".dbf";
    ПутьКФайлуОбмена = ПолучитьИмяФайла("C:\ПробникОбр", ИмяФайла);
    ip="192.168.16.20";
    port = 21;
    login = "ZP";
    pass = "zp4512";
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
     "ВЫБРАТЬ
     |    ТекущиеКадровыеДанныеСотрудников.Сотрудник.Ссылка КАК Ссылка,
     |    ТекущиеКадровыеДанныеСотрудников.Сотрудник.Код КАК Код,
     |    ТекущиеКадровыеДанныеСотрудников.Сотрудник.Наименование КАК ФИО,
     |    ТекущиеКадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
     |    ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения
     |ИЗ
     |    РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников";
    
    Результат = Запрос.Выполнить();        
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    ДБ = Новый Xbase;
    ДБ.Кодировка = КодировкаXBase.ANSI;
    ДБ.Поля.Добавить("KOD","S",10,);      //код сотрудника

    ДБ.Поля.Добавить("FIO","S",80,);      //фио сотрудника

    ДБ.Поля.Добавить("PRIEM","D");        //дата приема на работу

    ДБ.Поля.Добавить("UVOL","D");          //дата увольнения

    ДБ.Поля.Добавить("STAG","N",1,0);      //стаж

    ДБ.СоздатьФайл(ПутьКФайлуОбмена,);
    ДБ.АвтоСохранение =1;
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если НЕ ВыборкаДетальныеЗаписи.Ссылка.ЭтоГруппа Тогда
            Если (ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДатаУвольнения)) ИЛИ (НЕ ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДатаПриема)) Тогда
                Продолжить;
            КонецЕсли;    
            ДБ.Добавить();
            ДБ.KOD = ВыборкаДетальныеЗаписи.Код;
            ДБ.FIO = ВыборкаДетальныеЗаписи.ФИО;
            ДБ.PRIEM = ВыборкаДетальныеЗаписи.ДатаПриема;
            ДБ.UVOL = ВыборкаДетальныеЗаписи.ДатаУвольнения;
            Стаж = Цел(((ТекущаяДата() - ВыборкаДетальныеЗаписи.ДатаПриема)/(24*60*60)+1)/365); 
            Если Стаж > 3 Тогда
                Стаж = 3;
            КонецЕсли;    
            ДБ.STAG = Стаж;
        КонецЕсли;
    КонецЦикла;
    ДБ.Записать();
    ДБ.ЗакрытьФайл();                                                                                                                                      
    
    //Если ОтправкаFTP(ПутьКФайлуОбмена, IP, port, login, pass, ИмяФайла) = 1 Тогда

    //    Сообщить("Файлы со стажем сотрудников отправленны. Ошибок нет.");

    //КонецЕсли;

    
КонецПроцедуры
   SadrArt
 
2 - 20.03.20 - 17:51
(0) "Представил не весь код"... и далее километр кода

не надо параметры оборачивать в список значений;

не надо переменные описывать, по сути, с одним препоцессором, присваивать с другим, а устанавливать в параметры с третьим, по факту в параметры у тебя попадает Неопределено, и запрос выдает "0";

не надо в твоем случае вообще использовать параметры, а надо, или в самом тексте запроса прописать сравнение на ЗНАЧЕНИЕ(), или выводить в результат запроса СпособВыплаты и сравнивать с перечислением при обработке результата

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.