Решения всех основных билетов для подготовки к Специалист ЗУП

10.10.22

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

Когда готовился к сдаче экзамена на Специалист по ЗУП, в процессе решения задач обнаружил, что просто нет информации в сети. Проверено за три месяца обсуждений и опросов в группе в телеграмме во время подготовки. Успешно сдал с первого раза на 4ку (досадная невнимательность). По новым требованиям 1С все билеты должны решаться В РАСШИРЕНИИ и отчеты в нескольких билетах подключаться как ВНЕШНИЕ! Решал на последней конфигурации в Гуру: 1С:ЗУП 3.1.16.108 (ниже брать нельзя). В публикации приведены ПРИМЕРНЫЕ тексты билетов, встречающиеся на экзамене, на сайте учебного центра 1С этих текстов НЕТ. Всё, что можно скачать - это регламент экзамена и тело условной задачи №1. Воссозданы (по опросам сдающих) все встречающиеся варианты в данный момент со всеми изменениями. В целом, отличия от тех, что встретятся на экзамене в ближайшем будущем, несущественны (другие цифры для расчета, другой состав полей в отчетах).

Скачать файл

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

Наименование По подписке [?] Купить один файл
Решения всех основных билетов для подготовки к Специалист ЗУП
.zip 54,29Mb
93
93 Скачать (3 SM) Купить за 2 450 руб.

Билет №2 (Самый легкий - начинать с него)

РУЧНАЯ НАСТРОЙКА В РЕЖИМЕ 1С:ПРЕДПРИЯТИЕ

  • Сначала надо сделать интерфейс в режиме 1С:Предприятие стандартными методами вручную, заодно и создать Показатели и Начисления, которыми будем оперировать.

Я всегда захожу в (стрелка в правом верхнем углу) Настройка - Настройка начальной страницы и убираю с Начальной страницы с правой колонки: Кабинет сотрудника, Текущие дела и Новости, остаются только Сотрудники и начисления в левой - удобно, ничего не мешается. Также можно зайти в "Настройка панели разделов" и оставить только разделы Кадры, Зарплата, Настройка (больше ничего не надо по экзамену)

 

  • Отключим Штатное расписание (Настройка-Кадровый учет-Настройка штатного расписания)
  • Заполним Производственный календарь (Настройка-Производственные календари-Заполнить по умолчанию)
  • Оплата почасовая и используются тарифные группы - Настройка → Расчет зарплаты → Настройка состава начислений и удержаний - Применение почасовой оплаты
  • Настройка - Расчет зарплаты - Используются тарифные группы (в Настройках появится пункт Тарифные группы и Квалификационные разряды(категории))
  • Появятся новые Начисления: ТРФЧС Оплата по часовому тарифу - его то мы и возьмем, НЕ будем создавать своё базовое

В этом билете не нужны Показатели, потому что Начисления вычисляется по жестко заданной форуме, но используются ВидУчетаВремени

  • Создаем Начисление: Доплата за работу в кислотном цеху (ДРКЦ).
    Формула: ТарифнаяСтавкаЧасовая * ВремяВЧасах * (50/100). Повременная оплата труда, Выполняется: Только если введен вид учета времени. Сразу создаем Вид учета времени - Работа в кислотном цеху (РКЦ) - Основное время - Явка. Учет времени: Дополнительная оплата за уже оплаченное время, Вид времени: Работа в кислотном цеху.
  • Создаем Начисление: Оплата оплачиваемого отгула (ООТГ).
    Формула: ТарифнаяСтавкаЧасовая * 12. Повременная оплата труда, Выполняется: Только если введен вид учета времени. Сразу создаем Вид учета времени - Оплачиваемый отгул (ООТ) - Основное время - Явка. Учет времени: За работу в полную смену в пределах нормы времени, Вид времени: Оплачиваемый отгул.

Под формулой надо проверять "Назначение начисления" - должно быть [Запрашивать].

Тогда при Назначении планового начисления руками в документе мы сразу увидим поле показателя.

  • График "два дня через два" по 12 часов. Идём в Настройки - Графики работы сотрудников. Создаем два графика "Смена 1" и "Смена 2" по циклам произвольной длины и сделаем два по 12 и два пусто и наоборот.
    Пятидневку можно пометить на удаление.
  • Создаем общую тарифную группу "Химическая": Настройки - Тарифные группы и расписываем тарифы, согласно таблице Билета
  • Настройка -> Реквизиты организации: ООО "ХимЛаб", краткое наименование: ХимЛаб
  • Настройка -> Подразделения: Лаборатория
  • Настройка -> Должности: Заведующий лабораторией, Лаборант 1 разряда, Лаборант 2 разряда и связать каждую должность с Тарифной группой и выбрать Разряд (категория)
  • Принимаем на работу Иванова Иван Ивановича (Заведующий лабораторией), Петрова Петра Петровича(Лаборант 2 разряда), Сидорова Сидора Сидоровича (Лаборант 1 разряда) -
    Кадры -> Приемы на работу, переводы, увольнения -> Создать -> Приём на работу списком. Дата везде 01.01.2022. По условиям экзамена не менее, чем 3 работника и не менее 2 расчетных периода
    При выборе должности, выбираем Разряд (категория) и на Вкладке Оплата труда у нас автоматом должны добавиться показатели, с тарифом, соответствующим разряду
    Иванова на график: Смена 1, Петрова и Сидорова на - Смена 2.
  • Для ручного расчета создаем Шаблон ввода исходных данных: Настройка - Шаблоны ввода исходных данных. Создаем шаблон "Ввод данных для расчета зарплаты". Показатели разовые. Виды времени: Оплачиваемый отпуск, Работа в кислотном цеху, Явка. Время вводится отдельным документами на разные даты (для удобства). Дополнительно: в документе используется несколько сотрудников (тоже удобнее).
  • Идем Зарплата - Данные для расчета зарплаты. Создаем на 01.01.2022 (Смена 1) на Иванова 4 часа кислотного и 8 явки и 03.01.2022 (Смена 2) на Петрова 6 часов кислотного и 6 явки и Сидорова Отгул 12 часов.
  • Идем проверять правильность начисления ЗП: Зарплата - Начисление зарплаты и взносов. Заполнить за январь 2022. ЗП должна считаться правильно согласно нашим тарифам. У Иванова часовой тариф, значит за 4 часа он получит 400, соответственно, Сидоров за оплачиваемый отгул 1200, Петров 450.

Ручная часть билета выполнена.

 

 

АВТОМАТИЗАЦИЯ БИЛЕТА

Все вручную созданные документы (назначение и т.п.) отменим и пометим на удаление, чтобы не мешали.

  • Создаем расширение по умолчанию, снимаем флажки Безопасный режим, Защита от опасных действий, открываем окно, крепим окно расширения для удобства на окно Основной конфигурации, чтобы переключать только вкладки (если не соединяется, сделать окно свободным).

Про правилам ЗУП В "типовой" РС "ПараметрыЗарегистрированныхДанныхУчетаВремениСотрудников", в измерение "ДокументОснование" нужно добавить типы наших добавленных документов.

Но так как у нас конфа на замке, мы это сделать не можем.
И не будем, все работает )

  • Создаем подсистему Экзамен (ставим картинку "Активные пользователи"), Подсистемы: Документы, Справочники, РегистрыСведений, РегистрыНакопления, Отчеты.

Добавленные в расширение РНы можно показать в нашей подсистеме. На РН (в расширении) правой кнопкой - Дополнительно-поставить флажок и, перейдя в подсистему, выставить флажок Видимости РН (Открыть командный интерфейс). Тоже самое можно сделать и с РС.

Какова логика действий? Ранее в режиме 1С:Предприятие мы руками создавали документ Данные для расчета зарплаты с типом Ввод данных для расчета зарплаты. Зайдем в него (предварительно снимем пометку об удалении и проведем снова, чтобы увидеть движения).

По кнопке "Еще" - "Движения документа" мы видим, что он делает движения по РН: "Данные оперативного учета рабочего времени сотрудников".

Вот то же самое сделать должны и мы в своем документе.

Наш документ делает движения согласно типового "ДанныеДляРасчетаЗарплаты". Как мы это поняли? мы посмотрели Регистраторы РН Данные оперативного учета рабочего времени сотрудников и обнаружили там подходящий. Так, двигаясь по цепочке от РН до документа, от документа до РС, мы "разматываем" типовую логику работы программы.

  • Создаем (согласно билета) документ "Данные пропускной системы" об отработанных работниками в кислотном цеху периодах времени. Подсистема: Документы. В него же мы будем грузить по кнопке Заполнить данные из текстового файла с пропускной системы.
  • Нам надо затянуть в расширение вышеперечисленный РН и поставить флажки на вкладке Движения.
  • Шапка документа:
  • Организация (Справочник.Организации затягиваем в расширение)

Я всегда у всех Реквизитов ставлю Проверка заполнения: Выдавать ошибку для самоконтроля

  • ВидВремени (Справочник.ВидыИспользованияРабочегоВремени тянем в расширение)
  • Табличная часть: СписокСотрудников
  • Сотрудник (Справочник.Сотрудники тянем в расширение). Также сразу затянуть Реквизиты: ФизическоеЛицо и ГоловнаяОрганизация - обычно они нужны.
  • ДатаВремяВхода (Тип Дата, состав: Дата и время - нам нужны точные данные)
  • ДатаВремяВыхода (Тип Дата, состав: Дата и время)
  •  
  • Идем в модуль объекта документа "ДанныеДляРасчетаЗарплаты", забираем оттуда в наш документ обработку проведения и функцию ДанныеОВремени() и подправляем код (все стандартные строки закомментировал для изучения, что и как надо менять):
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	//НастройкиВида = Справочники.ВидыДокументовВводДанныхДляРасчетаЗарплаты.НастройкиВидаДокумента(ВидДокумента);
		
	// Проведение документа
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
	
	//МенеджерВТ = Новый МенеджерВременныхТаблиц;
	//СоздатьВТВыполненныеРаботыЭтогоДокумента(МенеджерВТ, НастройкиВида);
	
	//ТаблицаЗначенийПоказателей = ЗначенияПоказателей(МенеджерВТ, НастройкиВида);
	//ЗаписатьЗначенияПоказателейРасчетаЗарплаты(ТаблицаЗначенийПоказателей, Движения, Отказ);
	
	ДанныеОВремени = ДанныеОВремени();
	//УчетРабочегоВремени.ПроверитьРегистрируемыеДанныхОВремени(Ссылка, ДанныеОВремени, Отказ, Истина);
	УчетРабочегоВремени.ЗарегистрироватьРабочееВремяСотрудников(Движения, ДанныеОВремени);
	
	Движения_ОтгулыЗаРаботуВКислотномЦеху();
	
КонецПроцедуры


Процедура Движения_ОтгулыЗаРаботуВКислотномЦеху()
	Движения.ОтгулыЗаРаботуВКислотномЦеху.Записывать = Истина;
	// за каждые 4 часа дается один день, но мы и кусочки копим потихоньку
	Для каждого СтрокаТЧ Из СписокСотрудников Цикл
		Движение = Движения.ОтгулыЗаРаботуВКислотномЦеху.ДобавитьПриход();
		Движение.Период = СтрокаТЧ.ДатаВремяВхода;
		Движение.Сотрудник = СтрокаТЧ.Сотрудник;
		Движение.Дней = (СтрокаТЧ.ДатаВремяВыхода - СтрокаТЧ.ДатаВремяВхода) / 3600 / 4;
	КонецЦикла;
КонецПроцедуры


Функция ДанныеОВремени()
	ТаблицаДанных = УчетРабочегоВремениРасширенный.ПустаяТаблицаДляРегистрацииВремени();
	
	Для Каждого СтрокаТабличнойЧасти Из СписокСотрудников Цикл // ДанныеОВремениСводно Цикл
		//Если СтрокаТабличнойЧасти.Дней = 0 И СтрокаТабличнойЧасти.Часов = 0 Тогда
		//	Продолжить;
		//КонецЕсли;
		СтрокаТаблицы = ТаблицаДанных.Добавить();
		СтрокаТаблицы.Дата = НачалоМесяца(Дата); // Период;
		СтрокаТаблицы.Сотрудник = СтрокаТабличнойЧасти.Сотрудник;
		СтрокаТаблицы.ВидВремени = ВидВремени; // СтрокаТабличнойЧасти.ВидВремени;
		СтрокаТаблицы.Дней = 1; // СтрокаТабличнойЧасти.Дней;
		СтрокаТаблицы.Часов = (СтрокаТабличнойЧасти.ДатаВремяВыхода - СтрокаТабличнойЧасти.ДатаВремяВхода) / 3600; // СтрокаТабличнойЧасти.Часов;
		//СтрокаТаблицы.План = Ложь;
		//СтрокаТаблицы.Внутрисменное = Ложь;
		//СтрокаТаблицы.ВЦеломЗаПериод = Истина;
		СтрокаТаблицы.Организация = Организация;
	КонецЦикла;		
	
	Возврат ТаблицаДанных;

	//Для Каждого СтрокаТабличнойЧасти Из ДанныеОВремениДетально Цикл
	//	Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(Период) Цикл
	//		Если СтрокаТабличнойЧасти["Часов" + НомерДня] > 0 Тогда
	//			СтрокаТаблицы = ТаблицаДанных.Добавить();
	//			СтрокаТаблицы.Дата = Дата(Год(Период), Месяц(Период), НомерДня);
	//			СтрокаТаблицы.Сотрудник = СтрокаТабличнойЧасти.Сотрудник;
	//			СтрокаТаблицы.ВидВремени = СтрокаТабличнойЧасти.ВидВремени;
	//			СтрокаТаблицы.Дней = 1;
	//			СтрокаТаблицы.Часов = СтрокаТабличнойЧасти["Часов" + НомерДня];
	//			СтрокаТаблицы.План = Ложь;
	//			СтрокаТаблицы.Внутрисменное = Ложь;
	//			СтрокаТаблицы.ВЦеломЗаПериод = Ложь;
	//			СтрокаТаблицы.Организация = Организация;
	//		КонецЕсли;		
	//	КонецЦикла;	
	//КонецЦикла;
	//
	//ВремяВводитсяЗаМесяц = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидДокумента, "ВремяВводитсяЗаМесяц");
	//Если ВремяВводитсяЗаМесяц = Истина И ДанныеОВремениДетально.Количество() > 0 Тогда
	//	// Если определены детальные данные, то относимся к ним как к данным за весь месяц в целом, 
	//	// поэтому те даты, на которые не введено сведений добавляем выходные.
	//	// 1. Отбираем сотрудников.
	//	Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(ТаблицаДанных, "Сотрудник", Истина);
	//	Для Каждого Сотрудник Из Сотрудники Цикл
	//		// 2. Отбираем строки по сотруднику.
	//		СтрокиПоСотруднику = ТаблицаДанных.НайтиСтроки(Новый Структура("Сотрудник", Сотрудник));
	//		// 3. Выбираем даты, на которые по сотруднику определены данные.
	//		РазличныеДаты = ОбщегоНазначения.ВыгрузитьКолонку(СтрокиПоСотруднику, "Дата", Истина);
	//		// 4. Последовательно обходим все дни месяца и, в том случае, если на конкретную дату нет записи, добавляем выходной.
	//		Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(Период) Цикл
	//			ДатаДня = Дата(Год(Период), Месяц(Период), НомерДня);
	//			Если РазличныеДаты.Найти(ДатаДня) <> Неопределено Тогда
	//				// Данные на эту дату определены.
	//				Продолжить;
	//			КонецЕсли;
	//			СтрокаТаблицы = ТаблицаДанных.Добавить();
	//			СтрокаТаблицы.Дата = ДатаДня;
	//			СтрокаТаблицы.Сотрудник = Сотрудник;
	//			СтрокаТаблицы.ВидВремени = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни");
	//			СтрокаТаблицы.Дней = 1;
	//			СтрокаТаблицы.Часов = 0;
	//			СтрокаТаблицы.План = Ложь;
	//			СтрокаТаблицы.Внутрисменное = Ложь;
	//			СтрокаТаблицы.ВЦеломЗаПериод = Ложь;
	//			СтрокаТаблицы.Организация = Организация;
	//		КонецЦикла;
	//	КонецЦикла;
	//КонецЕсли;
	
КонецФункции

Мы можем руками заполнить ТЧ и рассчитав зарплату, посмотреть, что начисление "Работа в кислотном цеху" правильно считается. По начислению "Оплата оплачиваемого отгула" мы будем создавать другой документ, а пока надо заняться загрузкой и парсингом текстового файла с пропускной системы, которым мы будем заполнять ТЧ.

В январе Иванов (с кодом 0010) работал 1 и 2 числа по своему графику "Смена 1", а Петров(0011) и Сидоров(0012) по своему графику "Смена 2" 3 и 4 января.

В феврале у Иванова рабочие дни 2 и 3 числа, у Петрова и Сидорова 4 и 5. Надо следить, чтобы данные в файле не попадали на выходные дни сотрудников.

0010;01.01.2022 10:00;01.01.2022 10:30
0011;03.01.2022 10:00;03.01.2022 12:30
0012;03.01.2022 10:05;03.01.2022 14:45
0010;02.01.2022 10:05;02.01.2022 14:05
0011;04.01.2022 10:00;04.01.2022 10:30
0012;04.01.2022 10:00;04.01.2022 18:30
0010;02.02.2022 10:00;02.02.2022 18:30
0011;04.02.2022 10:00;04.02.2022 12:30
0012;04.02.2022 10:05;04.02.2022 12:45
0010;03.02.2022 10:05;03.02.2022 17:05
0011;05.02.2022 10:00;05.02.2022 16:30
0012;05.02.2022 10:00;05.02.2022 12:30

Так как в файле используются коды, а нам в ТЧ нужны Сотрудники, надо сопоставить их при загрузке.

Создаем Справочник "ПропускаСотрудников", длину кода на вкладке Данные ограничим 4, создадим реквизит Сотрудник (спр. Сотрудники). Заполним его в режиме Предприятия.

Создаем форму документа, рисуем кнопку Заполнить и пишем код (практически такой же, как и в первом билете):

Пишем без Асинх - Ждать, на экзамене точно не будет 18 версии платформы, а модальность использовать нельзя

&НаКлиенте
Процедура Заполнить(Команда)
	ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
	ПараметрыДиалога.Заголовок = "Выберите ТХТ файл с прибора";
	ПараметрыДиалога.МножественныйВыбор = Ложь;
	ПараметрыДиалога.Фильтр = "Текстовые файлы ТХТ|*.txt";

	НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьПослеЗагрузкиФайла", ЭтотОбъект),,,,ПараметрыДиалога, ЭтотОбъект.УникальныйИдентификатор);
КонецПроцедуры


&НаКлиенте
Процедура ВыполнитьПослеЗагрузкиФайла(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт
	Если ОписаниеПомещенногоФайла <> Неопределено Тогда
		ОбработатьФайлНаСервере(ОписаниеПомещенногоФайла.Адрес);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ОбработатьФайлНаСервере(Адрес)
	
  ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
  ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt"); 
  ДвоичныеДанные.Записать(ИмяВременногоФайла); // файл записан на сервере
  
  ТЗ = Новый ТаблицаЗначений;
  ТЗ.Колонки.Добавить("КодПропуска", ОбщегоНазначения.ОписаниеТипаСтрока(4));
  ТЗ.Колонки.Добавить("ДатаВремяВхода", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.ДатаВремя));
  ТЗ.Колонки.Добавить("ДатаВремяВыхода", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.ДатаВремя));
 
  Чтение = Новый ЧтениеТекста;
  Чтение.Открыть(ИмяВременногоФайла);    
  
  СтрокаИзФайла = Чтение.ПрочитатьСтроку(); // разделитель - перенос строки   
  
  Пока СтрокаИзФайла <> Неопределено Цикл
   	мСтрокаИзФайла = СтрРазделить(СтрокаИзФайла, ";"); 
	  
	НоваяСтрокаТЗ = ТЗ.Добавить();
	НоваяСтрокаТЗ.КодПропуска = мСтрокаИзФайла[0];
	НоваяСтрокаТЗ.ДатаВремяВхода = ОбщегоНазначенияКлиентСервер.СтрокаВДату(мСтрокаИзФайла[1]);
	НоваяСтрокаТЗ.ДатаВремяВыхода = ОбщегоНазначенияКлиентСервер.СтрокаВДату(мСтрокаИзФайла[2]);	
		
  	СтрокаИзФайла = Чтение.ПрочитатьСтроку();
  КонецЦикла;
  
  	// содержимое ТЗ обязательно должно быть помещено во временную таблицу, прежде чем соединяться
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТЗ.КодПропуска КАК КодПропуска,
		|	ТЗ.ДатаВремяВхода КАК ДатаВремяВхода,
		|	ТЗ.ДатаВремяВыхода КАК ДатаВремяВыхода
		|ПОМЕСТИТЬ втТЗ
		|ИЗ
		|	&ТЗ КАК ТЗ
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ПропускаСотрудников.Сотрудник КАК Сотрудник,
		|	втТЗ.ДатаВремяВхода КАК ДатаВремяВхода,
		|	втТЗ.ДатаВремяВыхода КАК ДатаВремяВыхода
		|ИЗ
		|	втТЗ КАК втТЗ
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПропускаСотрудников КАК ПропускаСотрудников
		|		ПО втТЗ.КодПропуска = ПропускаСотрудников.Код";
	
	Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
	Запрос.УстановитьПараметр("ТЗ", ТЗ);	 
	
	Объект.СписокСотрудников.Загрузить(Запрос.Выполнить().Выгрузить());
	
КонецПроцедуры

Нам надо за каждые 4 часа работы в кислотном цеху насчитывать отгул.

Создадим РН "ОтгулыЗаРаботуВКислотномЦеху" с видом Остатки, для хранения дней отгулов.

Измерение: Сотрудник (спр.Сотрудники), ресурс: Дней (Число 5,3 - дни будем копить кусочками)

Документ "Данные пропускной системы" будет делать Приход (выставить Движения), а будущий документ "ОплачиваемыйОтгул" будет делать Расход().

Процедура Движения_ОтгулыЗаРаботуВКислотномЦеху()
	Движения.ОтгулыЗаРаботуВКислотномЦеху.Записывать = Истина;
	// за каждые 4 часа дается один день, но мы и кусочки копим потихоньку
	
	Для каждого СтрокаТЧ Из СписокСотрудников Цикл
		Движение = Движения.ОтгулыЗаРаботуВКислотномЦеху.ДобавитьПриход();
		Движение.Период = СтрокаТЧ.ДатаВремяВхода;
		Движение.Сотрудник = СтрокаТЧ.Сотрудник;
		Движение.Дней = (СтрокаТЧ.ДатаВремяВыхода - СтрокаТЧ.ДатаВремяВхода) / 3600 / 4;
	КонецЦикла;
КонецПроцедуры

Создаем документ "ОплачиваемыйОтгул". В билете написано создать документ "Отгул", но он есть в системе и нам не дадут создать одноименный. Не очень то и хотелось (тем более тот Отгул неоплачиваемый), нам по смыслу подходит наше название

Документ является практически точной копией ранее созданного документа "Данные пропускной системы", но ВидВремени, конечно, будет Оплачиваемый отгул. В остальном код настолько похож, что надо будет просто скопировать его (выкинул комментарии).

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
	
	ДанныеОВремени = ДанныеОВремени();

	УчетРабочегоВремени.ЗарегистрироватьРабочееВремяСотрудников(Движения, ДанныеОВремени);
	
	Движения_ОтгулыЗаРаботуВКислотномЦеху();
	
КонецПроцедуры


Процедура Движения_ОтгулыЗаРаботуВКислотномЦеху()
	Движения.ОтгулыЗаРаботуВКислотномЦеху.Записывать = Истина;
	// расходуем 1 день	
	Для каждого СтрокаТЧ Из СписокСотрудников Цикл
		Движение = Движения.ОтгулыЗаРаботуВКислотномЦеху.ДобавитьРасход();
		Движение.Период = СтрокаТЧ.ДеньОтгула;
		Движение.Сотрудник = СтрокаТЧ.Сотрудник;
		Движение.Дней = 1;
	КонецЦикла;
КонецПроцедуры


Функция ДанныеОВремени()
	ТаблицаДанных = УчетРабочегоВремениРасширенный.ПустаяТаблицаДляРегистрацииВремени();
	
	Для Каждого СтрокаТабличнойЧасти Из СписокСотрудников Цикл // ДанныеОВремениСводно Цикл
		СтрокаТаблицы = ТаблицаДанных.Добавить();
		СтрокаТаблицы.Дата = НачалоМесяца(Дата); // Период;
		СтрокаТаблицы.Сотрудник = СтрокаТабличнойЧасти.Сотрудник;
		СтрокаТаблицы.ВидВремени = ВидВремени; // из шапки ОплачиваемыйОтгул
		СтрокаТаблицы.Дней = 1; // СтрокаТабличнойЧасти.Дней;
		СтрокаТаблицы.Часов = 12; // просто 12 часов
		СтрокаТаблицы.Организация = Организация;
	КонецЦикла;		
	
	Возврат ТаблицаДанных;
 	
КонецФункции

За февраль можно сделать документ "ОплачиваемыйОтгул", расходующий Отгула (надо следить, чтобы на выходные не пришлись). Проверяем всё начисления документами "Начисление зарплаты и взносов" за январь и февраль - всё должно показываться правильно.

 

ДЕЛАЕМ ОТЧЕТ

Проведем все документы, чтобы появились актуальные данные для построения отчета

Отчет какой то совсем простецкий... даже Должность не надо тащить и заполнять

Разберем, какие поля откуда берутся: Создадим отчет "Работа в кислотном цеху", Подсистема - Отчеты.

Отчет строится как обычная линейная группировка. Строчки Сотрудник/Месяц и выбранные поля.

  • Поле Отработано часов в кислотном цеху берем из типового РН ОтработанноеВремяПоСотрудникам (тянем в расширение), а также реквизит Сотрудник, Начисление (для отбора только по нашему Начислению) и ресурс ОплаченоДней (именно Оплачено!)
  • Поля Начислено доплаты и Начислено за отгулы берем из Типового РН НачисленияУдержанияПоСотрудникам, также тянем его в наше расширение, а также закидываем измерения: Сотрудник, НачислениеУдержание (для отбора по НачислениеУдержание (не забыть ВЫРАЗИТЬ)) и ресурс Сумма. Для отбора в виртуальной таблице надо затащить в расширение ПланВидовРасчета.Начисления.
  • Поля Остаток отгулов на анчало периода, Предоставлено отгулов, Остаток отгулов на конец периода - из нашего РН "ОтгулыЗаРаботуВКислотномЦеху" как ОстаткиИОбороты.

Так как у нас НЕТ программного заполнения полей запроса, нет смысла и программно инициализировать отчет.

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

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

в виртуальной таблице ОтгулыЗаРаботуВКислотномЦеху.ОстаткиИОбороты обязательно выберите МетодДополненя = Движения, иначе увидите странные записи конца периода (например: Декабрь, если выберите Период: Год)

По умолчанию МетодДополнения у таблиц ОстаткиИОбороты = ДвиженияИГраницыПериода

ВЫБРАТЬ
	НачисленияУдержанияПоСотрудникамОборотыНадбавка.Период КАК Месяц,
	НачисленияУдержанияПоСотрудникамОборотыНадбавка.Сотрудник КАК Сотрудник,
	НачисленияУдержанияПоСотрудникамОборотыНадбавка.СуммаОборот КАК НачисленоДоплаты
ПОМЕСТИТЬ втНачисленияЗаРаботуВЦеху
ИЗ
	РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(, , Месяц, (ВЫРАЗИТЬ(НачислениеУдержание КАК ПланВидовРасчета.Начисления)) = &ДоплатаЗаРаботуВКислотномЦеху) КАК НачисленияУдержанияПоСотрудникамОборотыНадбавка

ИНДЕКСИРОВАТЬ ПО
	Месяц,
	Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	НачисленияУдержанияПоСотрудникамОборотыОтгулы.Период КАК Месяц,
	НачисленияУдержанияПоСотрудникамОборотыОтгулы.Сотрудник КАК Сотрудник,
	НачисленияУдержанияПоСотрудникамОборотыОтгулы.СуммаОборот КАК НачисленоЗаОтгулы
ПОМЕСТИТЬ втНачисленияЗаОтгулы
ИЗ
	РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(, , Месяц, (ВЫРАЗИТЬ(НачислениеУдержание КАК ПланВидовРасчета.Начисления)) = &ДоплатаЗаОтгулы) КАК НачисленияУдержанияПоСотрудникамОборотыОтгулы

ИНДЕКСИРОВАТЬ ПО
	Месяц,
	Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ОтработанноеВремяПоСотрудникамОбороты.Период КАК Месяц,
	ОтработанноеВремяПоСотрудникамОбороты.Сотрудник КАК Сотрудник,
	ОтработанноеВремяПоСотрудникамОбороты.ОплаченоЧасовОборот КАК ОтработаноЧасовВЦеху
ПОМЕСТИТЬ втОтработано
ИЗ
	РегистрНакопления.ОтработанноеВремяПоСотрудникам.Обороты(, , Месяц, Начисление = &ДоплатаЗаРаботуВКислотномЦеху) КАК ОтработанноеВремяПоСотрудникамОбороты

ИНДЕКСИРОВАТЬ ПО
	Месяц,
	Сотрудник
;

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

ИНДЕКСИРОВАТЬ ПО
	Месяц,
	Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втДнейОтгулов.Месяц КАК Месяц,
	втДнейОтгулов.Сотрудник КАК Работник,
	втДнейОтгулов.ПредоставленоОтгулов КАК ПредоставленоОтгулов,
	втНачисленияЗаОтгулы.НачисленоЗаОтгулы КАК НачисленоЗаОтгулы,
	втНачисленияЗаРаботуВЦеху.НачисленоДоплаты КАК НачисленоДоплаты,
	втОтработано.ОтработаноЧасовВЦеху КАК ОтработаноЧасовВЦеху,
	втДнейОтгулов.ОстатокОтгуловНаНачалоПериода КАК ОстатокОтгуловНаНачалоПериода,
	втДнейОтгулов.ОстатокОтгуловНаКонецПериода КАК ОстатокОтгуловНаКонецПериода
ИЗ
	втДнейОтгулов КАК втДнейОтгулов
		ЛЕВОЕ СОЕДИНЕНИЕ втНачисленияЗаРаботуВЦеху КАК втНачисленияЗаРаботуВЦеху
		ПО втДнейОтгулов.Месяц = втНачисленияЗаРаботуВЦеху.Месяц
			И втДнейОтгулов.Сотрудник = втНачисленияЗаРаботуВЦеху.Сотрудник
		ЛЕВОЕ СОЕДИНЕНИЕ втНачисленияЗаОтгулы КАК втНачисленияЗаОтгулы
		ПО втДнейОтгулов.Месяц = втНачисленияЗаОтгулы.Месяц
			И втДнейОтгулов.Сотрудник = втНачисленияЗаОтгулы.Сотрудник
		ЛЕВОЕ СОЕДИНЕНИЕ втОтработано КАК втОтработано
		ПО втДнейОтгулов.Месяц = втОтработано.Месяц
			И втДнейОтгулов.Сотрудник = втОтработано.Сотрудник

 

Подготовка Экзамен Спец ЗУП Специалист конфигурированию подсистем расчета зарплаты и управления персоналом

См. также

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

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

1800 руб.

11.02.2014    77369    97    15    

191

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

Желаете повысить свой уровень разработки? Не знаете, как оптимизировать работу тяжелых запросов 1С? Или знаете методы оптимизации, но на практике не получаете результат? Тогда эта интерактивная обучающая программа для Вас! Оптимизация запросов прямо в программе 1С:Предприятие 8. Несколько десятков практических заданий, рассматривающих методы оптимизации на практике. От Вас требуются реальные решения - оптимизация представленных запросов. Автоматизированная система оценит Ваш запрос и представит результат проверки.

1800 руб.

06.07.2015    72205    120    9    

132

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

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

10.09.2024    7357    PROSTO-1C    21    

13

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

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

11.06.2024    14554    PROSTO-1C    51    

66

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

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

04.06.2024    9602    anton99    50    

57

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

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

28.05.2024    4445    DmitryOneBit    20    

20

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

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

10 стартмани

07.05.2024    8603    89    user1988637    16    

42

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

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

10 стартмани

08.04.2024    3089    43    user1988637    4    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1147587 17.12.22 18:37 Сейчас в теме
Рафаиль, поздравляю со сдачей.
Решаю второй билет и у меня вопрос. При Начислений з/п у меня количество часов по часовому тарифу выходит меньше, чем по графику. В документе ДанныеПропускнойСистемы функция ДанныеОВремени(): там по каждой строчке создается одна запись в РН: "Данные оперативного учета рабочего времени сотрудников" по виду времени "Работа в кислотном цеху". Может быть нужно добавить туда вторую строку по виду времени Явка ( часов = 12 - колво часов работы в кислотном цеху) ?
6. I_train 03.08.23 15:49 Сейчас в теме
(1) Здравствуйте, согласен, то же столкнулся с такой ошибкой в данном решении, а как вы решили данный вопрос? Если не секрет, уже сами сдали экзамен?
7. Rafaraf 37 03.08.23 15:52 Сейчас в теме
(6) Сам уже давно сдал ) у меня был третий билет. С другой стороны, просто сделайте как пишет автор комментария
2. marina2712 23 27.03.23 08:20 Сейчас в теме
Сколько всего билетов во файле?
3. Rafaraf 37 27.03.23 11:54 Сейчас в теме
(2) всего 6 билетов актуальных на момент сдачи, август 2022 (статистику собирал) разобранных по максимуму
также дополнял всеми встречающимися изменениями. На момент публикации ничего нового на экзамене не появилось.
4. I_train 04.04.23 16:08 Сейчас в теме
(3) Спасибо за решения, жаль только скриншотов с правильно заполненными документами, начислениями и прочим маловато. Хотел узнать, билетов вроде 6, но в вашем файле их 5, билета про колл центр нет, его убрали из экзамена или он будет еще?
5. Rafaraf 37 04.04.23 16:54 Сейчас в теме
погодите, вот структура билетов, как раз 6 билет про колл центр, разве у Вас может быть по другому ?
скриншотов я там навешал в самых сложных местах, чтобы не свалиться в кювет при разборе )
Скриншоты заполненных форм ? уже 52 мегабайта текста, зачем еще очевидное вставлять )
Билеты как мне сообщили, не поменялись. Принимающим тоже надо их изучать - они не могут их часто менять )
курс Логиновой изучить! даст ускорение!
Прикрепленные файлы:
marina2712; I_train; +2 Ответить
8. Bazeltseff_316 26.09.23 12:32 Сейчас в теме
Добрый день!
Большое спасибо Автору за подробный разбор каждого билета! Разрешите порекомендовать: необходимы скрины группировок для отчетов - сижу с билетом про колл-центр и не могу понять, как сделать именно такую группировку. Буду благодарен, если кто-то подскажет. Спасибо!
Прикрепленные файлы:
9. aHreJI 10.12.23 11:45 Сейчас в теме
Вопрос по второму билету. Когда регистрируете отгул сотруднику, то в начислениях ЗП появляется начисление "Оплата оплачиваемого отгула", но так же ему еще и оплачивается этот день как обычная явка.

Т.е. начисление "Оплата оплачиваемого отгула" работает как обычная надбавка сотруднику. Разве это правильно или я что-то не понимаю?
Оставьте свое сообщение