1. Zlaya-Ferio 17.04.19 13:42 Сейчас в теме

ЗУП 3.1 Форма 0504402

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

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


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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

Вакансии

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

Работа от Инфостарт
Санкт-Петербург
Временный (на проект)

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

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