|
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
|
А кто скажет почему если делать так:
ИначеЕсли (ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Штраф) ИЛИ (ТаблЗапроса.ВидНачисления = Перечисление.ВидыНачисленийЗарплаты.Регистрация) Тогда ПечШтрафыИВзыскания = ТаблЗапроса.Начислено; То выводятся только штрафы? То есть выводится что-то одно из этого. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |