ЗУП 3.1 Форма 0504402

1. Zlaya-Ferio 3 17.04.19 13:42 Сейчас в теме
Ребят, натолкните, пожалуйста, на мысль человека с минимальным опытом программирования.
Есть ЗУП 3.1.8.216. Нужна печатная форма 0504402. Но с видами и суммами начислений/удержаний по сотруднику и видами и суммами взносов.
Макет прикрепила. В первой части выводятся с 1 по 5 колонку, во второй только к выплате. Но эту информацию я могу взять из документа, из которого печатаю, а вот как заполнить Начисления и их суммы хоть убей понять не могу.
пишу простой запрос

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


Консоль запросов выводит всю нужную мне информацию, но как ее потом использовать никак не пойму. Результат это что? Таблица? Как вытащить оттуда наименование начисления/удержания и сумму? Пыталась в цикле, что-то типа

Пока Результат.Следующий () Цикл
     Если Результат.Начисление = "НДФЛ" Тогда
	ОбластьДанные.Параметры.НДФЛ = Результат.Начисление;
	ОбластьДанные.Параметры.ЦифраНДФЛ = Результат.Сумма;
	Иначе
	ОбластьДанные.Параметры.Начисление[1] = Результат.Начисление;
	ОбластьДанные.Параметры.ЦифраНачисления[1] = Результат.Сумма;
	КонецЕсли;


Понимаю, что проблема у меня с несоответствием типов, не понимаю где, когда и на какой тип я должна ссылаться. Беда еще, что отладку не запустить ((
Прошу помощи!
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. platonov.e 158 17.04.19 14:08 Сейчас в теме
(1) В результате этого запроса лежит выборка, это не таблица значений. Идти по нее циклом, как в вашем примере.
Выборка.НачислениеУдержание
3. Zlaya-Ferio 3 17.04.19 14:35 Сейчас в теме
(2) Что за Выборка? У Меня Результат = Запрос.Выполнить().Выбрать();
Можно подробнее, пожаааалуйста!
4. platonov.e 158 17.04.19 14:46 Сейчас в теме
5. Zlaya-Ferio 3 17.04.19 14:58 Сейчас в теме
(4) ок, пошла читать еще раз..
6. Zlaya-Ferio 3 17.04.19 15:29 Сейчас в теме
(4) складывается впечатление, что мы об одном и том же.. В вашем примере и в примере по ссылке переменная Выборка, в моем Результат. Получу то же самое, если напишу так

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий () Цикл
Если Выборка.НачислениеУдержание = "НДФЛ" Тогда
ОбластьДанные.Параметры.НДФЛ = Выборка.НачислениеУдержание;
ОбластьДанные.Параметры.ЦифраНДФЛ = Выборка.Сумма;
Иначе
ОбластьДанные.Параметры.Начисление[1] = Выборка.НачислениеУдержание;
ОбластьДанные.Параметры.ЦифраНачисления[1] = Выборка.Сумма;
КонецЕсли;
7. platonov.e 158 17.04.19 15:37 Сейчас в теме
(6) Переменная может называться хоть квазипузлистат, нам важен ее тип.
да ваш цикл верный.
8. Zlaya-Ferio 3 17.04.19 15:45 Сейчас в теме
(7) вот тип как раз непонятен. Вот это не работает
Если Выборка.НачислениеУдержание = "НДФЛ" Тогда

почему? Выборка.НачислениеУдержание.Наименование тоже, но это понятно. Тогда как задать условие?
Ведь НДФл - это удержание и я не могу заполнить этим наименованием Начисление..
9. platonov.e 158 17.04.19 15:55 Сейчас в теме
(8) В РН реквизит НачислениеУдержание имеет тип совсем не строка, и не очень хорошо его сравнивать со строкой. Нужно узнать какой тип и сравнить с ним.
11. Zlaya-Ferio 3 17.04.19 15:56 Сейчас в теме
10. Zlaya-Ferio 3 17.04.19 15:55 Сейчас в теме
(7) И вот это как реализовать?
ОбластьДанные.Параметры.Начисление[Н] = Выборка.НачислениеУдержание; 

Если пишу явно ОбластьДанные.Параметры.Начисление[1], как в примере, тогда моя колонка просто перезаписывается, а если ставлю счетчик типа Н=0, в цикле Н = Н +1 , то ругается, Поле объекта не обнаружено (Начисление). В макете у меня параметры Начислени1, начисление2, Начисление3 и Начисление4. Как Сделать так, чтобы, если находится Начисление, то наименование подставлялось бы в начисление1, если находится еще одно, то наименование в Начисление2 и т.д..
12. platonov.e 158 17.04.19 18:02 Сейчас в теме
(10) нужно в цикле каждый раз получать область и выводить ее после перезаполнения, типа того:
Выборка = Запрос.Выполнить().Выбрать(); 
Пока Выборка.Следующий () Цикл 
ОбластьДанные = Макет.ПолучитьОбласть("МояОбласть");
Если Выборка.НачислениеУдержание = "НДФЛ" Тогда 
ОбластьДанные.Параметры.НДФЛ = Выборка.НачислениеУдержание; 
ОбластьДанные.Параметры.ЦифраНДФЛ = Выборка.Сумма; 
Иначе 
ОбластьДанные.Параметры.Начисление[1] = Выборка.НачислениеУдержание; 
ОбластьДанные.Параметры.ЦифраНачисления[1] = Выборка.Сумма; 
табДок.Вывести(ОбластьДанные);
КонецЕсли;
Показать
13. Zlaya-Ferio 3 18.04.19 09:25 Сейчас в теме
(12) Написала Вот так
Колонка = 0;
Пока Результат.Следующий() Цикл
			ОбластьШапки = Макет.ПолучитьОбласть ("Шапка");
			Если Результат.НачислениеУдержание = НДФЛ Тогда
				ВсегоНДФЛ = ВсегоНДФЛ + Результат.Сумма;
			Иначе
				ОбластьШапки.Параметры.Начисление[Колонка] = Результат.НачислениеУдержание;
				ОбластьДанные.Параметры.ЦифраНачисления[Колонка] = Результат.Сумма;
				//Сч = Сч + Результат.Сумма;
				ТабДок.Вывести(ОбластьШапки);
				
			КонецЕсли;
			ОбластьДанные.Параметры.ЦифраНДФЛ = ВсегоНДФЛ;
			   Колонка = Колонка + 1;
			   ИтогоНДФЛ = ИтогоНДФЛ + ВсегоНДФЛ;
			   
			   //ОбластьПодвал.Параметры.ИтогоНачисление1 = Сч;
		КонецЦикла;
Показать

При этом ошибка
{ВнешняяОбработка.РПВ_0504402.МодульОбъекта(158)}: Получение элемента по индексу для значения не определено
				ОбластьШапки.Параметры.Начисление[Колонка] = Результат.НачислениеУдержание;

Какой параметр в макете должен быть? Неачисление или Начисление 1, 2, 3?
14. platonov.e 158 18.04.19 09:44 Сейчас в теме
ОбластьШапки.Параметры.Начисление = Результат.НачислениеУдержание;
                ОбластьДанные.Параметры.ЦифраНачисления = Результат.Сумма;
15. Zlaya-Ferio 3 18.04.19 09:56 Сейчас в теме
(14) Так просто перезаписывается колонка и все. Поясню. У Сотрудника может быть до 10 начислений различных. Так вот, если я напишу просто ОбластьШапки.Параметры.Начисление, то ячейка будет просто перезаписываться в цикле и выведет последнее найденное значение. Мне же нужно, чтобы при каждом найденном новом значении добавлялась еще одна колонка (в идеале) и заполнялась суммой. Ну хотя бы чтоб в свою ячейку сумма попадала
16. Zlaya-Ferio 3 18.04.19 09:58 Сейчас в теме
Добавила еще одну область на макет, выводит все начисления в одной колонке, а нужно в строчку (((
ОбластьЗаголовка = Макет.ПолучитьОбласть ("Заголовок");
			Если Результат.НачислениеУдержание = НДФЛ Тогда
				ВсегоНДФЛ = ВсегоНДФЛ + Результат.Сумма;
			Иначе
				ОбластьЗаголовка.Параметры.Начисление = Результат.НачислениеУдержание;
				ОбластьДанные.Параметры.ЦифраНачисления = Результат.Сумма;
				//Сч = Сч + Результат.Сумма;
				ТабДок.Вывести(ОбластьЗаголовка);
				
			КонецЕсли;
			ОбластьДанные.Параметры.ЦифраНДФЛ = ВсегоНДФЛ;
			   Колонка = Колонка + 1;
			   ИтогоНДФЛ = ИтогоНДФЛ + ВсегоНДФЛ;
			   
			   //ОбластьПодвал.Параметры.ИтогоНачисление1 = Сч;
		КонецЦикла;
Показать
Прикрепленные файлы:
17. Zlaya-Ferio 3 18.04.19 10:08 Сейчас в теме
Можно ли как-то в моем примере использовать ОбластьЗаголовка.Параметры.Заполнить (Результат.НачислениеУдержание)? Или в этом методе имя Параметра и Результат.НачислениеУдержание должны быть равны? Или как-то Присоединить(). Не могу найти понятный пример (((
18. platonov.e 158 18.04.19 10:20 Сейчас в теме
(17) Покажите макет. Я не очень понимаю
19. Zlaya-Ferio 3 18.04.19 10:24 Сейчас в теме
Сейчас это выглядит так
Прикрепленные файлы:
20. platonov.e 158 18.04.19 10:32 Сейчас в теме
(19) зачем вы тогда в цикле получаете то заголовок, то шапку, если вам нужно получать область Данные?

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


Про колонку я понял что вы хотите, но так точно не получится, попробуйте вот так

ОбластьДанные.Параметры["Начисление"+Строка(Колонка)]=
22. Zlaya-Ferio 3 18.04.19 10:43 Сейчас в теме
(20)
если вам нужно получать область Данные?

Почему данные? Мне же сначала нужно вывести заголовки колонок. А это Область Заголовок, ну или шапка на крайний случай. Если поместить заголовки в ОбластьДанные, тогда они выводятся в цикле Нраз. Но при всем при этом, все равно выводятся почему-то не туда. Область присоединяется уже ниже выведенной области шапки..
23. platonov.e 158 18.04.19 10:45 Сейчас в теме
(22) Вот заголовки колонок выводите ДО цикла. и шапку выводите ДО цикла. А данные уже в цикле.
24. Zlaya-Ferio 3 18.04.19 10:49 Сейчас в теме
(23) а как я выведу заголовки ДО, если наименование этих заголовков ищется в цикле?
25. platonov.e 158 18.04.19 10:53 Сейчас в теме
(24) ууууух вы меня уже раздражаете))))
Заголовки статичны, вам просто нужно вывести эту область
26. Zlaya-Ferio 3 18.04.19 10:58 Сейчас в теме
(25) посмотрите, пожалуйста, на макет... В области Заголовки есть такие параметры как Начисление1, Начисление2 и т.д.. Они НЕ статичны. Они должны заполняться наименованием НачислениеУдержание.

Т.е у одного сотрудника Начисление1 = Оплата по окладу, Начисление2 = Премия Суммой и т.д
у другого сотрудника Начисление1 = Сдельная Оплата, Начисление2 = Отпуск и т.д

Но какие это будут начисления (названия колонок) мы узнаем только тогда, когда в цикле обойдем начисления всех сотрудников, а вот уже после этого будем заполнять цифру денег в нужной ячейке. Были бы они статичны, вопросов не было бы..

Я так понимаю, что сначала нужно обойти все на предмет списка наименований начислений, их вставить в заголовки, а затем еще раз обойти и уже по сотрудникам цифры вставить куда нужно..
27. platonov.e 158 18.04.19 11:01 Сейчас в теме
(26) а вы уверены что их всегда будет не больше 4?
28. Zlaya-Ferio 3 18.04.19 11:08 Сейчас в теме
(27) Нет. Может быть больше. Я так понимаю, что играть нужно с присоединением области, но до этого я еще не дошла ((
29. platonov.e 158 18.04.19 11:11 Сейчас в теме
(28) Да, там можно присоединить. Но я бы советовал выводить их в столбик, так ак по сути вы делаете расчетный листок, а он как раз есть в зуп 3.1. Посмотрите
30. Zlaya-Ferio 3 18.04.19 11:15 Сейчас в теме
(29) в столбик нельзя(( Вид формы регламентирован предприятием
21. Zlaya-Ferio 3 18.04.19 10:40 Сейчас в теме
Выводит, но в столбик ((( Может область Заголовок нужно не так обозначать?

Пока Результат.Следующий() Цикл
			Колонка = 1;
		 	ОбластьЗаголовка = Макет.ПолучитьОбласть ("Заголовок");
			Если Результат.НачислениеУдержание = НДФЛ Тогда
				ВсегоНДФЛ = ВсегоНДФЛ + Результат.Сумма;
			Иначе
				ОбластьЗаголовка.Параметры["Начисление" + Строка(Колонка)] = Результат.НачислениеУдержание;
				ОбластьДанные.Параметры["ЦифраНачисления" + Строка(Колонка)] = Результат.Сумма;
				//Сч = Сч + Результат.Сумма;
				ТабДок.Вывести(ОбластьЗаголовка);
				
			КонецЕсли;
			ОбластьДанные.Параметры.ЦифраНДФЛ = ВсегоНДФЛ;
			   Колонка = Колонка + 1;
			   ИтогоНДФЛ = ИтогоНДФЛ + ВсегоНДФЛ;
			   
			   //ОбластьПодвал.Параметры.ИтогоНачисление1 = Сч;
		КонецЦикла;
Показать
Прикрепленные файлы:
31. Zlaya-Ferio 3 22.04.19 12:36 Сейчас в теме
Ребят, ну неужели никто не может помочь???
Использую сейчас метод присоединить, но все равно не так выводит...
У меня есть вертикальные области. первая часть статичная, вывожу сразу, затем идет часть начислений, ее нужно выводить по количеству начислений, затем снова статичная часть. как в середину моей таблицы добавить еще столбик начисления?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот