ЗУП 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 Сейчас в теме
Ребят, ну неужели никто не может помочь???
Использую сейчас метод присоединить, но все равно не так выводит...
У меня есть вертикальные области. первая часть статичная, вывожу сразу, затем идет часть начислений, ее нужно выводить по количеству начислений, затем снова статичная часть. как в середину моей таблицы добавить еще столбик начисления?
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)