Пример решения расчетной задачи с табелем (для 1С:Специалист)

25.01.18

Разработка - Подготовка к аттестации

Условие задачи собрано из нескольких экзаменационных задач и служит общим примером решения.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример решения расчетной задачи с табелем (для 1С:Специалист).:
.dt 216,11Kb ver:1.0
8
8 Скачать (1 SM) Купить за 1 850 руб.

Условие задачи:

Начисление зарплаты сотрудникам предприятия осуществляется ежемесячно. Каждый сотрудник может работать одновременно в нескольких подразделениях компании, то есть совместительство допускается. 

Все сотрудники работают по пятидневному графику работы, однако, в решении необходимо предусмотреть возможность работы по нескольким различным графикам.

Количество фактически отработанных часов вводится в систему с помощью документа "Табель". Документ должен заполняться еженедельно на весь список сотрудников компании. Для каждого сотрудника каждый отработанный день недели отмечается флажком в табличной части документа.

Сотрудники предприятия получают оплату пропорционально отработанному времени в днях. Дневная ставка рассчитывается как начальное значение оклада, деленное на количество рабочих дней в том же периоде, что и фактически отработанные дни. Первоначальное значение оклада может изменяться не чаще, чем один раз в день, но берется на начало расчетного периода. В информационной базе необходимо хранить историю его изменения. 

Сотруднику может быть введен больничный задним числом, в качестве базы выступит сумма начислений за три предыдущих месяца, деленная на количество дней по графику. Дополнительно, каждому сотруднику компании может быть начислена премия в виде процента от суммы окладов всех сотрудников его подразделения за текущий месяц. Процент премии в течение периода не меняется и задается в документе "Начисление зарплаты". 

Ввод всех начислений происходит документом "Начисление зарплаты". Документ в расчетном периоде может быть один.

Решение:

1. Создадим документ "Табель". По условию табель заполняется на каждую отдельную неделю.

Реквизиты:

ДатаНачала (Дата)

ДатаОкончания (Дата)

 

Табличная часть: СписокСотрудников

Сотрудник (СправочникСсылка.ФизическиеЛица)

Подразделение (СправочникСсылка.Подразделения)

Д1, Д2 ... Д7 (всего 7 реквизитов с типом Булево)

 

В реквизитах Д1,Д2...Д7 будем определять фактически отработанные дни сотрудником, если Истина - сотрудник данный день отработал, если Ложь - то нет.

 

Код в модуле Формы:

&НаКлиенте
Процедура ДатаНачалаПриИзменении(Элемент)	
	 Объект.ДатаОкончания = Объект.ДатаНачала + 6*86400;  //конец недели заполним автоматически	
КонецПроцедуры

&НаКлиенте
Процедура СписокСотрудниковСотрудникПриИзменении(Элемент) 	
	ТекущаяСтрока = Элементы.СписокСотрудников.ТекущиеДанные;
	ТекущаяСтрока.Д1 = Истина;
	ТекущаяСтрока.Д2 = Истина;
	ТекущаяСтрока.Д3 = Истина;
	ТекущаяСтрока.Д4 = Истина;
	ТекущаяСтрока.Д5 = Истина;
	ТекущаяСтрока.Д6 = Ложь;
	ТекущаяСтрока.Д7 = Ложь;	
КонецПроцедуры

Документ выполняет движения в оборотный регистр накопления "ЗначениеТабеля".

Измерения:

Сотрудник (СправочникСсылка.ФизическиеЛица)

Подразделение (СправочникСсылка.Подразделения)

Ресурсы:

Отработано (Число (1,0))

 

Код в модуле объекта документа "Табель":

Процедура ОбработкаПроведения(Отказ, РежимПроведения) 	
	Движения.ЗначениеТабеля.Записывать = Истина;
	Для Каждого ТекСтрокаСписокСотрудников Из СписокСотрудников Цикл				
		ЗаписываемаяДата = ДатаНачала;
		Для Счетчик = 1 По 7 Цикл
			Движение = Движения.ЗначениеТабеля.Добавить(); 
			Движение.Период = НачалоДня(ЗаписываемаяДата);
			ЗаписываемаяДата = ЗаписываемаяДата + 86400;
			Движение.Сотрудник = ТекСтрокаСписокСотрудников.Сотрудник;
			Движение.Подразделение = ТекСтрокаСписокСотрудников.Подразделение;
			Движение.Отработано = Число(ТекСтрокаСписокСотрудников["Д"+Строка(Счетчик)]);
    	        КонецЦикла; 		
	КонецЦикла;     	
КонецПроцедуры

 

2. Заполним график работы: Регистр сведений "ГрафикиРаботы".

Измерения:

Дата (Дата)

ГрафикРаботы (СправочникСсылка.ГрафикРаботы)

Ресурсы:

Значение (Число (1,0))

 

Добавляем измерение "ГрафикРаботы", поскольку, по условию указано, что необходимо предусмотреть возможность работы по нескольким различным графикам.

Значение будет равно единице или нулю (работал/не работал), так как оклад определяется по дням. В качестве значения также можно задать часы, например, 8. А в расчетах затем все равно рассматривать день как рабочий или не рабочий.

 

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

Например, размер оклада сотрудника - 18 750. В январе (2015) количество рабочих дней - 15, это задается в графике работы. А табелем регистрируется количество фактически отработанных дней сотрудником.

Дневная ставка рассчитывается как начальное значение оклада, деленное на количество рабочих дней в том же периоде, что и фактически отработанные дни.

Означает: 18 750 / 15 = 1250 - размер дневной ставки. По табелю же определяем фактически отработанное время, если количество дней составит также 15, то сотрудник в результате получит полный размер оклада 18 750.

Предположим, сотрудник отработал 12 дней, 3 дня он отсутствовал по невыясненной причине.

(18 750 / 15) * 12 = 15 000 рублей получит сотрудник в конце месяца.

 

3. Заполним План видов расчета. ОсновныеНачисления:

Использует период действия: Истина.

Зависимость от базы: Зависит по периоду действия.

Базовые планы видов расчета: Основные и дополнительные начисления. (Для больничного, в качестве базы выступает сумма всех начислений сотрудника за 3 предыдущих месяца. В качестве данных начислений выступает Оклад, Премия и предыдущие Больничные, поэтому делить мы будем не на фактически отработанные дни сотрудником из табеля, а на количество дней по графику). 

Добавим предопределенные начисления: Оклад (для Оклада на закладке Вытесняющие укажите Больничный), Больничный (Базовые: Оклад, Больничный, Премия (Премия - Дополнительное начисление)).

На закладке Ведущие подразумеваются те начисления, перерасчет которых должен влекти за собой перерасчет и Больничного, рассчитанного на основании данных начислений. То есть, если вы рассчитали Оклад. Далее на основании Оклада рассчитали Больничный и провели документ. То, после внесения корректировок в Оклад, необходимо перерасчитать и Больничный.

Если вы заполните закладку Ведущие, то затем с помощью механизмов перерасчетов, система будет сигнализировать вам о необходимости перерасчета Больничного. Но в данной задаче эти механизмы не используются.

 

4. Заполним План видов расчета: ДополнительныеНачисления:

Использует период действия: Истина.

Зависимость от базы: Зависит по периоду действия.

Базовые планы видов расчета: Основные начисления.

Предопределенное начисление: Премия, его базовое начисление - Оклад.

 

5. Заполним регистр расчета: ОсновныеНачисления.

 

 

6. Заполним регистр расчета: ДополнительныеНачисления.

 

7. Документ "Начисление зарплаты".

 


Процедура ОбработкаПроведения(Отказ, Режим)
	
	Движения.ОсновныеНачисления.Очистить();
	Для Каждого ТекСтрокаОсновныеНачисления Из ОсновныеНачисления Цикл
		Движение = Движения.ОсновныеНачисления.Добавить();
		Движение.Сторно = Ложь;
		Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
		Движение.ПериодДействияНачало = ТекСтрокаОсновныеНачисления.ДатаНачала;
		Движение.ПериодДействияКонец = ТекСтрокаОсновныеНачисления.ДатаОкончания; 		
		Если ТекСтрокаОсновныеНачисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Больничный Тогда				Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(ТекСтрокаОсновныеНачисления.ДатаНачала,-3));
			Движение.БазовыйПериодКонец = КонецМесяца(ДобавитьМесяц(ТекСтрокаОсновныеНачисления.ДатаНачала,-1));			
		КонецЕсли;	 		
		Движение.ПериодРегистрации = НачалоМесяца(Дата);
		Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
		Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение;
		Движение.ГрафикРаботы = ТекСтрокаОсновныеНачисления.ГрафикРаботы;
	КонецЦикла;

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

 

8. Общий модуль "Расчеты".

 

Процедура Рассчитать(Регистратор) Экспорт
	
	НаборЗаписейОН = РегистрыРасчета.ОсновныеНачисления.СоздатьНаборЗаписей();
	НаборЗаписейОН.Отбор.Регистратор.Установить(Регистратор);
	НаборЗаписейОН.Прочитать(); 
	ТЗ_НаборЗаписейОН = НаборЗаписейОН.Выгрузить();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТЗ_НаборЗаписейОН.НомерСтроки,
	|	ТЗ_НаборЗаписейОН.ПериодДействия,
	|	ТЗ_НаборЗаписейОН.Регистратор,
	|	ТЗ_НаборЗаписейОН.Подразделение,
	|	ТЗ_НаборЗаписейОН.Сотрудник,
	|	ТЗ_НаборЗаписейОН.БазовыйПериодНачало,
	|	ТЗ_НаборЗаписейОН.БазовыйПериодКонец,
	|	ТЗ_НаборЗаписейОН.ВидРасчета,
	|	ТЗ_НаборЗаписейОН.ГрафикРаботы,
	|	ТЗ_НаборЗаписейОН.НормаДней,
	|	ТЗ_НаборЗаписейОН.ОтработаноДней,
	|	ТЗ_НаборЗаписейОН.ПериодДействияНачало,
	|	ТЗ_НаборЗаписейОН.ПериодДействияКонец,
	|	ТЗ_НаборЗаписейОН.ПериодРегистрации,
	|	ТЗ_НаборЗаписейОН.Результат,
	|	ТЗ_НаборЗаписейОН.Размер,
	|	ТЗ_НаборЗаписейОН.Сторно,
	|	ТЗ_НаборЗаписейОН.Активность
	|ПОМЕСТИТЬ ВТ_НаборЗаписейОН
	|ИЗ
	|	&ТЗ_НаборЗаписейОН КАК ТЗ_НаборЗаписейОН
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_НаборЗаписейОН.Сотрудник КАК Сотрудник,
	|	ВТ_НаборЗаписейОН.Подразделение,
	|	СУММА(ЗначениеТабеляОбороты.ОтработаноОборот) КАК ОтработаноДней,
	|	ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия КАК НормаДней,
	|	ОсновныеНачисленияДанныеГрафика.НомерСтроки
	|ПОМЕСТИТЬ ВТ_ОтработаноНорма
	|ИЗ
	|	РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
	|			Регистратор = &Регистратор
	|				И ВидРасчета = &ВидРасчетаОклад) КАК ОсновныеНачисленияДанныеГрафика
	|		ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗначениеТабеля.Обороты(&НачалоПериода, &ОкончаниеПериода, Запись, ) КАК ЗначениеТабеляОбороты
	|		ПО (ВЫБОР
	|				КОГДА ЗначениеТабеляОбороты.Период МЕЖДУ ОсновныеНачисленияДанныеГрафика.ПериодДействияНачало И ОсновныеНачисленияДанныеГрафика.ПериодДействияКонец
	|						И ЗначениеТабеляОбороты.Сотрудник = ОсновныеНачисленияДанныеГрафика.Сотрудник
	|						И ЗначениеТабеляОбороты.Подразделение = ОсновныеНачисленияДанныеГрафика.Подразделение
	|					ТОГДА ИСТИНА
	|				ИНАЧЕ ЛОЖЬ
	|			КОНЕЦ)
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НаборЗаписейОН КАК ВТ_НаборЗаписейОН
	|		ПО (ВТ_НаборЗаписейОН.НомерСтроки = ОсновныеНачисленияДанныеГрафика.НомерСтроки)
	|
	|СГРУППИРОВАТЬ ПО
	|	ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия,
	|	ВТ_НаборЗаписейОН.Сотрудник,
	|	ОсновныеНачисленияДанныеГрафика.НомерСтроки,
	|	ВТ_НаборЗаписейОН.Подразделение
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СведенияОСотрудникахСрезПоследних.Сотрудник,
	|	СведенияОСотрудникахСрезПоследних.Подразделение,
	|	СведенияОСотрудникахСрезПоследних.Оклад
	|ПОМЕСТИТЬ ВТ_Оклады
	|ИЗ
	|	РегистрСведений.СведенияОСотрудниках.СрезПоследних(
	|			&ПериодДляПолученияОклада,
	|			(Сотрудник, Подразделение) В
	|				(ВЫБРАТЬ
	|					ВТ_НаборЗаписейОН.Сотрудник,
	|					ВТ_НаборЗаписейОН.Подразделение
	|				ИЗ
	|					ВТ_НаборЗаписейОН КАК ВТ_НаборЗаписейОН)) КАК СведенияОСотрудникахСрезПоследних
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_НаборЗаписейОН.НомерСтроки КАК НомерСтроки,
	|	ВТ_НаборЗаписейОН.Подразделение КАК Подразделение,
	|	ВТ_НаборЗаписейОН.Сотрудник КАК Сотрудник,
	|	ВТ_НаборЗаписейОН.ПериодДействия,
	|	ВТ_НаборЗаписейОН.Регистратор,
	|	ВТ_ОтработаноНорма.ОтработаноДней КАК ОтработаноДней,
	|	ВТ_НаборЗаписейОН.БазовыйПериодНачало,
	|	ВТ_НаборЗаписейОН.БазовыйПериодКонец,
	|	ВТ_НаборЗаписейОН.ВидРасчета,
	|	ВТ_НаборЗаписейОН.ГрафикРаботы,
	|	ВЫБОР
	|		КОГДА НЕ ВТ_НаборЗаписейОН.Сторно
	|			ТОГДА ВТ_ОтработаноНорма.ОтработаноДней * ВТ_Оклады.Оклад / ВТ_ОтработаноНорма.НормаДней
	|		ИНАЧЕ -1 * ВТ_ОтработаноНорма.ОтработаноДней * ВТ_Оклады.Оклад / ВТ_ОтработаноНорма.НормаДней
	|	КОНЕЦ КАК Результат,
	|	ВТ_НаборЗаписейОН.ПериодДействияНачало,
	|	ВТ_НаборЗаписейОН.ПериодДействияКонец,
	|	ВТ_НаборЗаписейОН.ПериодРегистрации,
	|	ВТ_НаборЗаписейОН.Сторно,
	|	ВТ_НаборЗаписейОН.Активность,
	|	ВЫБОР
	|		КОГДА НЕ ВТ_НаборЗаписейОН.Сторно
	|			ТОГДА ВТ_Оклады.Оклад
	|		ИНАЧЕ ВТ_НаборЗаписейОН.Размер
	|	КОНЕЦ КАК Размер,
	|	ВЫБОР
	|		КОГДА НЕ ВТ_НаборЗаписейОН.Сторно
	|			ТОГДА ВТ_ОтработаноНорма.НормаДней
	|		ИНАЧЕ ВТ_НаборЗаписейОН.НормаДней
	|	КОНЕЦ КАК НормаДней
	|ИЗ
	|	ВТ_НаборЗаписейОН КАК ВТ_НаборЗаписейОН
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтработаноНорма КАК ВТ_ОтработаноНорма
	|			ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Оклады КАК ВТ_Оклады
	|			ПО ВТ_ОтработаноНорма.Сотрудник = ВТ_Оклады.Сотрудник
	|				И ВТ_ОтработаноНорма.Подразделение = ВТ_Оклады.Подразделение
	|		ПО ВТ_НаборЗаписейОН.НомерСтроки = ВТ_ОтработаноНорма.НомерСтроки
	|ГДЕ
	|	ВТ_НаборЗаписейОН.ВидРасчета = &ВидРасчетаОклад
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ВТ_НаборЗаписейОН.НомерСтроки,
	|	ВТ_НаборЗаписейОН.Подразделение,
	|	ВТ_НаборЗаписейОН.Сотрудник,
	|	ВТ_НаборЗаписейОН.ПериодДействия,
	|	ВТ_НаборЗаписейОН.Регистратор,
	|	ВТ_НаборЗаписейОН.ОтработаноДней,
	|	ВТ_НаборЗаписейОН.БазовыйПериодНачало,
	|	ВТ_НаборЗаписейОН.БазовыйПериодКонец,
	|	ВТ_НаборЗаписейОН.ВидРасчета,
	|	ВТ_НаборЗаписейОН.ГрафикРаботы,
	|	(ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.РезультатБаза, 0) + ЕСТЬNULL(ОсновныеНачисленияБазаДополнительныеНачисления.РезультатБаза, 0)) / ОсновныеНачисленияБазаОсновныеНачисления.НормаДнейБаза,
	|	ВТ_НаборЗаписейОН.ПериодДействияНачало,
	|	ВТ_НаборЗаписейОН.ПериодДействияКонец,
	|	ВТ_НаборЗаписейОН.ПериодРегистрации,
	|	ВТ_НаборЗаписейОН.Сторно,
	|	ВТ_НаборЗаписейОН.Активность,
	|	ВТ_НаборЗаписейОН.Размер,
	|	ВТ_НаборЗаписейОН.НормаДней
	|ИЗ
	|	ВТ_НаборЗаписейОН КАК ВТ_НаборЗаписейОН
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(
	|				&Измерения,
	|				&Измерения,
	|				,
	|				Регистратор = &Регистратор
	|					И (Сотрудник, Подразделение) В
	|						(ВЫБРАТЬ
	|							ВТ_НаборЗаписейОН.Сотрудник,
	|							ВТ_НаборЗаписейОН.Подразделение
	|						ИЗ
	|							ВТ_НаборЗаписейОН КАК ВТ_НаборЗаписейОН)) КАК ОсновныеНачисленияБазаОсновныеНачисления
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаДополнительныеНачисления(
	|					&Измерения,
	|					&Измерения,
	|					,
	|					Регистратор = &Регистратор
	|						И (Сотрудник, Подразделение) В
	|							(ВЫБРАТЬ
	|								ВТ_НаборЗаписейОН.Сотрудник,
	|								ВТ_НаборЗаписейОН.Подразделение
	|							ИЗ
	|								ВТ_НаборЗаписейОН КАК ВТ_НаборЗаписейОН)) КАК ОсновныеНачисленияБазаДополнительныеНачисления
	|			ПО ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки = ОсновныеНачисленияБазаДополнительныеНачисления.НомерСтроки
	|		ПО ВТ_НаборЗаписейОН.НомерСтроки = ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки
	|ГДЕ
	|	ВТ_НаборЗаписейОН.ВидРасчета = &ВидРасчетаБольничный";
	
	//будем считать, что позже чем спустя 2 месяца больничный сотрудник не принесет
	//по желанию период можно расширить
	Запрос.УстановитьПараметр("НачалоПериода",  ДобавитьМесяц(Регистратор.Дата,-2));
	Запрос.УстановитьПараметр("ОкончаниеПериода", КонецМесяца(Регистратор.Дата));
	Запрос.УстановитьПараметр("ПериодДляПолученияОклада",НачалоМесяца(Регистратор.Дата));
	Запрос.УстановитьПараметр("Регистратор", Регистратор);	
	Запрос.УстановитьПараметр("ВидРасчетаОклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад);	
	Запрос.УстановитьПараметр("ВидРасчетаБольничный", ПланыВидовРасчета.ОсновныеНачисления.Больничный);	
	Запрос.УстановитьПараметр("ТЗ_НаборЗаписейОН", ТЗ_НаборЗаписейОН);	
	Измерения = Новый Массив;
	Измерения.Добавить("Сотрудник");
	Измерения.Добавить("Подразделение");				
	Запрос.УстановитьПараметр("Измерения", Измерения);
	НаборЗаписейОН.Загрузить(Запрос.Выполнить().Выгрузить());
	НаборЗаписейОН.Записать();
	
	
	НаборЗаписейДН = РегистрыРасчета.ДополнительныеНачисления.СоздатьНаборЗаписей();
	НаборЗаписейДН.Отбор.Регистратор.Установить(Регистратор);
	НаборЗаписейДН.Прочитать();
	ТЗ_НаборЗаписейДН = НаборЗаписейДН.Выгрузить();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТЗ_НаборЗаписейДН.НомерСтроки,
	|	ТЗ_НаборЗаписейДН.Регистратор,
	|	ТЗ_НаборЗаписейДН.ПериодРегистрации,
	|	ТЗ_НаборЗаписейДН.ПериодДействия,
	|	ТЗ_НаборЗаписейДН.Сотрудник,
	|	ТЗ_НаборЗаписейДН.Подразделение,
	|	ТЗ_НаборЗаписейДН.ВидРасчета,
	|	ТЗ_НаборЗаписейДН.ПериодДействияНачало,
	|	ТЗ_НаборЗаписейДН.ПериодДействияКонец,
	|	ТЗ_НаборЗаписейДН.БазовыйПериодНачало,
	|	ТЗ_НаборЗаписейДН.БазовыйПериодКонец,
	|	ТЗ_НаборЗаписейДН.РазмерПроцента,
	|	ТЗ_НаборЗаписейДН.Результат,
	|	ТЗ_НаборЗаписейДН.Сумма,
	|	ТЗ_НаборЗаписейДН.Активность,
	|	ТЗ_НаборЗаписейДН.Сторно
	|ПОМЕСТИТЬ ВТ_НаборЗаписейДН
	|ИЗ
	|	&ТЗ_НаборЗаписейДН КАК ТЗ_НаборЗаписейДН
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_НаборЗаписейДН.НомерСтроки,
	|	ДополнительныеНачисленияБазаОсновныеНачисления.РезультатБаза КАК Сумма,
	|	ВТ_НаборЗаписейДН.Регистратор,
	|	ВТ_НаборЗаписейДН.ПериодРегистрации,
	|	ВТ_НаборЗаписейДН.ПериодДействия,
	|	ВТ_НаборЗаписейДН.Сотрудник,
	|	ВТ_НаборЗаписейДН.Подразделение,
	|	ВТ_НаборЗаписейДН.ВидРасчета,
	|	ВТ_НаборЗаписейДН.ПериодДействияНачало,
	|	ВТ_НаборЗаписейДН.ПериодДействияКонец,
	|	ВТ_НаборЗаписейДН.БазовыйПериодНачало,
	|	ВТ_НаборЗаписейДН.БазовыйПериодКонец,
	|	ВТ_НаборЗаписейДН.РазмерПроцента,
	|	ВТ_НаборЗаписейДН.Активность,
	|	ВТ_НаборЗаписейДН.Сторно,
	|	ДополнительныеНачисленияБазаОсновныеНачисления.РезультатБаза * ВТ_НаборЗаписейДН.РазмерПроцента / 100 КАК Результат
	|ИЗ
	|	ВТ_НаборЗаписейДН КАК ВТ_НаборЗаписейДН
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(&Подразделение, &Подразделение, , Регистратор = &Регистратор) КАК ДополнительныеНачисленияБазаОсновныеНачисления
	|		ПО ВТ_НаборЗаписейДН.НомерСтроки = ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки";
		
	// отбор необходимо выполнить только по Подразделению (по условию задачи)	
	Подразделение = Новый Массив;
	Подразделение.Добавить("Подразделение");
	Запрос.УстановитьПараметр("Подразделение", Подразделение);
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	Запрос.УстановитьПараметр("ТЗ_НаборЗаписейДН", ТЗ_НаборЗаписейДН);	
	НаборЗаписейДН.Загрузить(Запрос.Выполнить().Выгрузить());
	НаборЗаписейДН.Записать();

КонецПроцедуры

 

Результат работы:

 

Решение расчетной задачи 1С Специалист Расчетная задача 1С Специалист

См. также

Подготовка к аттестации Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обучающая программа 1С Online представляет собой интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Тренажер запросов подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    76990    95    15    

189

Подготовка к аттестации Программист Стажер Бесплатно (free)

Меня зовут Татьяна, в 1С-разработке я уже семь лет, а в этом году официально стала junior-специалистом. Рассказываю, как всё происходило.

10.09.2024    7111    PROSTO-1C    21    

13

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Я Олег, разработчик 1С. Расскажу, как сдавал на сертификат Специалиста, в чём ошибся и что стоит учесть.

11.06.2024    14081    PROSTO-1C    51    

66

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Хочу поделиться своей историей планирования обучения, подготовки к экзамену и сдачи непосредственно экзамена. Надеюсь, что это будет полезно и откинет все вопросы об экзамене.

04.06.2024    9313    anton99    50    

57

Подготовка к аттестации Стажер Конфигурации 1cv8 Фармацевтика, аптеки Россия Управленческий учет Бесплатно (free)

Краткий рассказ о выборе 1С как основного языка программирования для дипломной работы в университете, и само приложение к диплому.

28.05.2024    4337    DmitryOneBit    20    

20

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Абонемент ($m)

В публикации предоставлено решения 7 билетов из сборника 2022 года . Решения выполнены по пунктам и подробно, каждый БП описан и решен по условиям задач. Благодаря данному решению к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

07.05.2024    8371    83    user1988637    16    

42

Подготовка к аттестации Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Абонемент ($m)

В публикации представлены только решения тех заданий, который попадаются на экзамене 1С:СК управленческого учета ERP. Благодаря данным решениям к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

08.04.2024    2970    39    user1988637    4    

15

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Готовилась три месяца, сдала с первого раза. Делюсь опытом, лайфхаками и ресурсами, по которым учила материал.

14.03.2024    18105    PROSTO-1C    47    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1745 26.01.18 02:48 Сейчас в теме
Код в модуле объекта документа "Табель":
Зачем записывать нулевое значение отработанных дней?
2. user1290824 18.10.19 11:09 Сейчас в теме
Зачем получать набор записей, если можно получить их запросом напрямую
3. perepetulichka 909 18.10.19 11:50 Сейчас в теме
(2) запрос в студию! Мы здесь для этого :)
Оставьте свое сообщение