Имя: Пароль:
1C
1C 7.7
v7: Не показывается нужный вид начислений
0 kobzon
 
05.04.13
12:40
Если делаю так:
//*******************************************
Процедура Сформировать()
  РегЗарплата = СоздатьОбъект("Регистр.Зарплата");
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
РегЗарплата.ВыбратьДвижения(ДатаНач, ДатаКон);
Сумма = 0;
Пока РегЗарплата.ПолучитьДвижение()=1 Цикл  
   
   Период =  РегЗарплата.ПериодНачисления;
   Цех = РегЗарплата.Цех;
   Сотрудник = РегЗарплата.ФИО;
   Вид = РегЗарплата.ВидНачисления;
   Сумма = РегЗарплата.Сумма;

Таб.ВывестиСекцию("Строка");
КонецЦикла;  
Таб.Показать("Сформировать", "");
КонецПроцедуры
//**********************************
То показываются все виды начислений по регистру.

А если так:

//*******************************************
Процедура Сформировать()
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Сотрудник = Регистр.Зарплата.ФИО;
   |ВидНачисления = Регистр.Зарплата.ВидНачисления;
   |Сумма = Регистр.Зарплата.Сумма;
   |Функция Начислено = Приход(Сумма);
   |Функция ОтработаноЧасов = Приход(Часы);
   |Группировка Сотрудник без групп все ВошедшиеВЗапрос;
   |Группировка ВидНачисления без групп все ВошедшиеВЗапрос;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;    
    Пока Запрос.Группировка("Сотрудник") = 1 Цикл
       Сотр = Запрос.Сотрудник;
       Вид = Запрос.ВидНачисления;
       Сумма = Запрос.Сумма;
       Сообщить(Сотр);  
       Сообщить(Сумма);
       Сообщить(Вид);
    КонецЦикла    
КонецПроцедуры
//*********************************
То выводятся ВидНачисления только одного вида: Начислено по тарифу. То есть из документа табель. А авансы не выводятся((
Как сделать чтобы в запрос все виды начислений попадали и выводились?
1 Cthulhu
 
05.04.13
12:42
не показываются те, для которых нет ненулевых значений функций в разрезе указанных группировок.
2 kobzon
 
05.04.13
12:45
(1) А что сделать чтобы показывалось?
3 kobzon
 
05.04.13
13:13
Вапще все выглядит так:

//**********************************************************
Перем Док;

Процедура Сформировать()
   Перем Запрос, ТекстЗапроса;
   
   ВыбНачПериода = ВыбПериодНачисления.ДатаНачалаПериода;
   ВыбКонПериода = ВыбПериодНачисления.ДатаОкончанияПериода;
   
   //Сообщить("" + ВыбНачПериода + " - " + ВыбКонПериода);
                     
   ДатаТА = ПолучитьДатуТА();
   Если ВыбКонПериода > ДатаТА Тогда
        Если Вопрос("Дата окончания выбранного периода - " + ВыбКонПериода
        + " лежит позднее точки актуальности итогов - " + ДатаТА
        + ". Формирование позднее точки актуальности невозможно. Сформировать отчет до точки актуальности?", 4) = 7 Тогда
            Возврат;
        Иначе
            ВыбКонПериода = ДатаТА;
            ВыбНачПериода = НачМесяца(ВыбКонПериода);
        КонецЕсли;
   КонецЕсли;        
   
   ВыбЦех = Подразделение;
   
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Сотрудник = Регистр.Зарплата.ФИО;
   |Цех = Регистр.Зарплата.Цех;
   |ВидРаботы = Регистр.Зарплата.ВидРаботы;
   |ВидНачисления = Регистр.Зарплата.ВидНачисления;
   |ПериодНачисления = Регистр.Зарплата.ПериодНачисления;
   |Сумма = Регистр.Зарплата.Сумма;
   |Часы = Регистр.Зарплата.Часы;
   |Функция Начислено = Приход(Сумма);
   |Функция ОтработаноЧасов = Приход(Часы);
   |Группировка Сотрудник без групп все ВошедшиеВЗапрос;
   |Группировка ВидНачисления без групп все ВошедшиеВЗапрос;
   |Условие(Сотрудник.Подразделение.Получить(ВыбНачПериода) = ВыбЦех);
   |Условие(ПериодНачисления = ВыбПериодНачисления);
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;
                   

   
   ТаблЗапроса = СоздатьОбъект("ТаблицаЗначений");
   Запрос.Выгрузить(ТаблЗапроса);
   
   ТаблЗапроса.УдалитьСтроку(1);
   
   ТаблЗапроса.Сортировать("Сотрудник+, ВидНачисления+");
   
   //ТаблЗапроса.ВыбратьСтроку();
   
   ПечРасчетныйПериод = ПериодСтр(ВыбНачПериода, ВыбКонПериода);    
   
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("РасчетныйЛисток");
   
   ТекСотрудник = ПолучитьПустоеЗначение("Справочник.Сотрудники");
   ПечОтработаноЧасов = 0;
   ПечНачислено = 0;
   ПечВыданАванс = 0;
   ПечПремииИПоощрения = 0;
   ПечШтрафыИВзыскания = 0;
   ПечКВыдаче = 0;
   
   СчетчикВыведено = 0;
               
   ТаблЗапроса.ВыбратьСтроки();
   Пока ТаблЗапроса.ПолучитьСтроку() = 1 Цикл
       Если НЕ (ТекСотрудник = ТаблЗапроса.Сотрудник) Тогда
           Сообщить(Регистр.Зарплата.ВидНачисления);            
           ПечФИО = ТекСотрудник.Наименование;
           ПечТабельныйНомер = Число(ТекСотрудник.Код);
           
           ПечКВыдаче = ПечНачислено - ПечВыданАванс + ПечПремииИПоощрения + ПечШтрафыИВзыскания;
           
           Если ПустоеЗначение(ТекСотрудник) = 0 Тогда
               Таб.ВывестиСекцию("Основная");
               СчетчикВыведено = СчетчикВыведено + 1;
               Если СчетчикВыведено = 6 Тогда
                   Таб.НоваяСтраница();
                   СчетчикВыведено = 0;
               КонецЕсли;
           КонецЕсли;
           
           
           //Обнуляем после вывода предыдущего
           ПечОтработаноЧасов = 0;
           ПечНачислено = 0;
           ПечВыданАванс = 0;
           ПечПремииИПоощрения = 0;
           ПечШтрафыИВзыскания = 0;
           ПечКВыдаче = 0;
           //Изменим сотрудника
           ТекСотрудник = ТаблЗапроса.Сотрудник;
           Если ПустоеЗначение(ТаблЗапроса.ВидНачисления) = 1 Тогда //Если вид начисления путой, то - это итоговая строка
               ПечОтработаноЧасов = ТаблЗапроса.ОтработаноЧасов;
               Продолжить; //Итоговая строка дальше не нужна, пропускаем
           КонецЕсли;
       КонецЕсли;
       
       Если (ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.ПоТарифу)
       ИЛИ (ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.ПоОкладу) Тогда
           ПечНачислено = ТаблЗапроса.Начислено;
       ИначеЕсли ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Премия Тогда
           ПечПремииИПоощрения = ТаблЗапроса.Начислено;
       ИначеЕсли ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Аванс Тогда
           ПечВыданАванс = ТаблЗапроса.Начислено;
       ИначеЕсли ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Штраф Тогда
           ПечШтрафыИВзыскания = ТаблЗапроса.Начислено;
       КонецЕсли;
       
   КонецЦикла;
   
   Таб.ТолькоПросмотр(1);
   Таб.Опции(0, 0);
   Таб.ПараметрыСтраницы(1, , , 2, 2, 2, 2, 0, 0, 1);
   Таб.Показать("Расчетные листки");
КонецПроцедуры
               
                             
//-----------------------------------------------------------------------------------
//
Процедура ПриОткрытии()
   ВыбПериодНачисления.ВыборГруппы(0);
КонецПроцедуры //ПриОткрытии()

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

Не выводится Перечисление.ВидыНачисленийЗарплаты.Аванс Тогда
           ПечВыданАванс = ТаблЗапроса.Начислено;

Что не так?
4 kobzon
 
07.04.13
14:57
Народ ну как сделать чтобы в запрос выданный аванс попадал?
5 Voronve
 
07.04.13
15:17
(3) Закомментируй
   |Условие(Сотрудник.Подразделение.Получить(ВыбНачПериода) = ВыбЦех);

Подывысь на результат
6 kobzon
 
07.04.13
15:20
Я понял что дело в цехе.. У меня документ зарплата почему то не записывает в регистр Цех. Цех остается пустым.
7 kobzon
 
07.04.13
15:23
(5) Закоментировал, все то же самое(
8 Voronve
 
07.04.13
15:26
(7) Тогда второе услови убери и период с запросы выкини - у тебя идет льтрация по ВыбЦех/ВыбПериодНачисления/ВыбНачПериода-ВыбКонПериода. Не пролазит нужный тебе вид расчета через этот фильтр
9 kobzon
 
07.04.13
15:33
(8) Неа, все так же.. Щас еще отладчиком пройдусь.
10 kobzon
 
07.04.13
15:44
ТаблЗапроса.ВидНачисления =
Не видит он этого начисления((
11 kobzon
 
07.04.13
22:11
Пять раз перечитал (1) и пришел к выводу, что нужно добавить строчку в запрос))
|Функция Выдано = Расход(Сумма);
И прировнять
ИначеЕсли ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Аванс Тогда
           ПечВыданАванс = ТаблЗапроса.Выдано;
12 kobzon
 
07.04.13
23:34
А кто скажет почему если делать так:
ИначеЕсли (ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Штраф) ИЛИ
        (ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Регистрация)
       Тогда
           ПечШтрафыИВзыскания = ТаблЗапроса.Начислено;

То выводятся только штрафы? То есть выводится что-то одно из этого.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.