Аттестация "1С:Специалист" > Аттестация "1С:Специалист" ЗУП
ЗИКГУ. Билет 2.1
whoame:
Приветствую всех! В общем, прошу советов и критики по поводу решения, ибо осознаю, что оно, как минимум, сыроватое. Задача про посещение спортивного зала госслужащими и получении ими в результате материальной выгоды.
Мое решение:
В режиме 1С Предприятия создал начисление Материальная выгода с посещений спортзала, Код "МВ", назначение начисления - "Доход в натуральной форме", код дохода - 2520.
Создал оборотный РН ПосещениеСпортзала:
Измерения: Сотрудник, Подразделение (для разбивки мат. выгоды в отчете в разрезе подразделений);
Ресурс: КоличествоДней;
Создал документ ПосещениеСпортзала:
Реквизиты: ПериодПосещения, ВидРасчета (для выбора созданного в режиме 1С Предприятия Начисления)
ТЧ: Посещение: Реквизиты: Сотрудник (спр. Сотрудники), День1...День11 (Булево).
Документ делает движения в следующие регистры накопления: РНПосещенияСпортзала, НачисленияУдержанияПоСотрудникам, СведенияОДоходахНДФЛ, РасчетыНалогоплательщиковСБюджетомПоНДФЛ, ЗарплатаКВыплате, ВзаиморасчетыССотрудниками, а также в регистр расчета Начисления.
Код модуля объекта:
--- Код: ---Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.РНПосещенияСпортзала.Записывать = Истина;
Движения.РНПосещенияСпортзала.Очистить();
Движения.НачисленияУдержанияПоСотрудникам.Записывать = Истина;
Движения.НачисленияУдержанияПоСотрудникам.Очистить();
Движения.СведенияОДоходахНДФЛ.Записывать = Истина;
Движения.СведенияОДоходахНДФЛ.Очистить();
Движения.РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Записывать=Истина;
Движения.РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Очистить();
Движения.ЗарплатаКВыплате.Записывать = Истина;
Движения.ЗарплатаКВыплате.Очистить();
Движения.ВзаиморасчетыССотрудниками.Записывать = Истина;
Движения.ВзаиморасчетыССотрудниками.Очистить();
Движения.Начисления.Записывать = Истина;
Движения.Начисления.Очистить();
НачалоМесяца = НачалоМесяца(ПериодПосещения);
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПосещениеСпортзалаПосещение.Ссылка КАК Ссылка,
| ПосещениеСпортзалаПосещение.Сотрудник КАК Сотрудник,
| ПосещениеСпортзалаПосещение.День1 КАК День1,
| ПосещениеСпортзалаПосещение.День2 КАК День2,
| ПосещениеСпортзалаПосещение.День3 КАК День3,
| ПосещениеСпортзалаПосещение.День4 КАК День4,
| ПосещениеСпортзалаПосещение.День5 КАК День5,
| ПосещениеСпортзалаПосещение.День6 КАК День6,
| ПосещениеСпортзалаПосещение.День7 КАК День7,
| ПосещениеСпортзалаПосещение.День8 КАК День8,
| ПосещениеСпортзалаПосещение.День9 КАК День9,
| ПосещениеСпортзалаПосещение.День10 КАК День10,
| ПосещениеСпортзалаПосещение.День11 КАК День11
|ПОМЕСТИТЬ Вт_Общ
|ИЗ
| Документ.ПосещениеСпортзала.Посещение КАК ПосещениеСпортзалаПосещение
|ГДЕ
| ПосещениеСпортзалаПосещение.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Вт_Общ.Ссылка КАК Ссылка,
| Вт_Общ.Сотрудник КАК Сотрудник,
| Вт_Общ.День1 КАК ДниПосещения
|ПОМЕСТИТЬ ВТ_Посещение
|ИЗ
| Вт_Общ КАК Вт_Общ
|ГДЕ
| Вт_Общ.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День2
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День3
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День4
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День5
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День6
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День7
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День8
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День9
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День10
|ИЗ
| Вт_Общ КАК Вт_Общ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Вт_Общ.Ссылка,
| Вт_Общ.Сотрудник,
| Вт_Общ.День11
|ИЗ
| Вт_Общ КАК Вт_Общ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Посещение.Ссылка КАК Ссылка,
| ВТ_Посещение.Сотрудник КАК Сотрудник,
| ВТ_Посещение.ДниПосещения КАК ДниПосещения,
| КОЛИЧЕСТВО(ВТ_Посещение.ДниПосещения) КАК КоличествоДней
|ПОМЕСТИТЬ ВТ_ВТ
|ИЗ
| ВТ_Посещение КАК ВТ_Посещение
|ГДЕ
| ВТ_Посещение.Ссылка = &Ссылка
| И ВТ_Посещение.ДниПосещения = ИСТИНА
|
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(ВТ_Посещение.Ссылка.ПериодПосещения, ДЕНЬ),
| ВТ_Посещение.Ссылка,
| ВТ_Посещение.Сотрудник,
| ВТ_Посещение.ДниПосещения
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ВТ.Ссылка КАК Ссылка,
| ВТ_ВТ.Сотрудник КАК Сотрудник,
| СтоимостьПосещенияСпортзалаСрезПоследних.Стоимость КАК РыночнаяСтоимость,
| ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев < 12
| ТОГДА 85
| ИНАЧЕ ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев МЕЖДУ 12 И 24
| ТОГДА 75
| ИНАЧЕ ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев МЕЖДУ 24 И 48
| ТОГДА 65
| ИНАЧЕ ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев >= 48
| ТОГДА 55
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК ЛьготныйПроцент,
| ВТ_ВТ.КоличествоДней КАК КоличествоДней,
| КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение
|ИЗ
| РегистрСведений.СтажиФизическихЛиц.СрезПоследних(&Период, ) КАК СтажиФизическихЛицСрезПоследних
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ВТ КАК ВТ_ВТ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Период, ) КАК КадроваяИсторияСотрудниковСрезПоследних
| ПО (КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ВТ_ВТ.Сотрудник)
| ПО СтажиФизическихЛицСрезПоследних.ФизическоеЛицо = ВТ_ВТ.Сотрудник.ФизическоеЛицо,
| РегистрСведений.СтоимостьПосещенияСпортзала.СрезПоследних(&Период, ) КАК СтоимостьПосещенияСпортзалаСрезПоследних
|
|СГРУППИРОВАТЬ ПО
| ВТ_ВТ.Ссылка,
| ВТ_ВТ.Сотрудник,
| СтоимостьПосещенияСпортзалаСрезПоследних.Стоимость,
| ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев < 12
| ТОГДА 85
| ИНАЧЕ ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев МЕЖДУ 12 И 24
| ТОГДА 75
| ИНАЧЕ ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев МЕЖДУ 24 И 48
| ТОГДА 65
| ИНАЧЕ ВЫБОР
| КОГДА СтажиФизическихЛицСрезПоследних.РазмерМесяцев >= 48
| ТОГДА 55
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ,
| ВТ_ВТ.ДниПосещения,
| ВТ_ВТ.КоличествоДней,
| КадроваяИсторияСотрудниковСрезПоследних.Подразделение";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Период", КонецМесяца(ПериодПосещения));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() цикл
//Мой регистр
Движение = движения.РНПосещенияСпортзала.Добавить();
Движение.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движение.КоличествоПосещений = ВыборкаДетальныеЗаписи.КоличествоДней;
Движение.Период = ПериодПосещения;
Движение.Подразделение = ВыборкаДетальныеЗаписи.Подразделение;
//РН НачисленияУдержания
Движ = Движения.НачисленияУдержанияПоСотрудникам.Добавить();
Движ.Период = ПериодПосещения;
Движ.Организация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ.ФизическоеЛицо = ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо;
Движ.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движ.НачислениеУдержание = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Материальная выгода с посещений спортзала");
движ.Сумма = (ВыборкаДетальныеЗаписи.РыночнаяСтоимость*ВыборкаДетальныеЗаписи.КоличествоДней)- (ВыборкаДетальныеЗаписи.РыночнаяСтоимость * ВыборкаДетальныеЗаписи.ЛьготныйПроцент/100 * ВыборкаДетальныеЗаписи.КоличествоДней);
Движ.ГруппаНачисленияУдержанияВыплаты = перечисления.ГруппыНачисленияУдержанияВыплаты.Справочно;
Движ.ПериодДействия = ПериодПосещения;
Движ1 = Движения.НачисленияУдержанияПоСотрудникам.Добавить();
Движ1.Период = ПериодПосещения;
Движ1.Организация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ1.ФизическоеЛицо = ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо;
Движ1.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движ1.НачислениеУдержание = Перечисления.ВидыОсобыхНачисленийИУдержаний.НДФЛ;
движ1.Сумма = Окр((((ВыборкаДетальныеЗаписи.РыночнаяСтоимость*ВыборкаДетальныеЗаписи.КоличествоДней)- (ВыборкаДетальныеЗаписи.РыночнаяСтоимость * ВыборкаДетальныеЗаписи.ЛьготныйПроцент/100 * ВыборкаДетальныеЗаписи.КоличествоДней))*0.13), 0);
Движ1.ГруппаНачисленияУдержанияВыплаты = перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано;
Движ1.ПериодДействия = ПериодПосещения;
//РН УчетДоходовДляНДФЛ
Движ2 = Движения.СведенияОДоходахНДФЛ.Добавить();
Движ2.Период = КонецМесяца(ПериодПосещения);
Движ2.ДатаПолученияДохода = ПериодПосещения;
Движ2.ФизическоеЛицо = ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо;
Движ2.КодДохода = ВидРасчета.КодДоходаНДФЛ;
Движ2.СуммаДохода = (ВыборкаДетальныеЗаписи.РыночнаяСтоимость*ВыборкаДетальныеЗаписи.КоличествоДней)- (ВыборкаДетальныеЗаписи.РыночнаяСтоимость * ВыборкаДетальныеЗаписи.ЛьготныйПроцент/100 * ВыборкаДетальныеЗаписи.КоличествоДней);
Движ2.Организация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ2.Начисление = ВидРасчета;
Движ2.КатегорияДохода = ВидРасчета.КатегорияДохода;
Движ2.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движ2.ГоловнаяОрганизация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ2.ДоходМежрасчетногоПериода = Истина;
Движ2.ДатаПолученияДоходаФиксирована = Истина;
Движ2.МесяцНалоговогоПериода = ПериодПосещения;
Движ2.НеУчитыватьДоходВ6НДФЛ = Истина;
//РН Расчеты с бюджетом по ндфл
Движ3 = Движения.РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Добавить();
Движ3.Период = КонецМесяца(ПериодПосещения);
Движ3.ГоловнаяОрганизация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ3.ФизическоеЛицо = ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо;
Движ3.МесяцНалоговогоПериода = ПериодПосещения;
Движ3.КатегорияДохода = видрасчета.КатегорияДохода;
Движ3.Организация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ3.Сумма = Окр((((ВыборкаДетальныеЗаписи.РыночнаяСтоимость*ВыборкаДетальныеЗаписи.КоличествоДней)- (ВыборкаДетальныеЗаписи.РыночнаяСтоимость * ВыборкаДетальныеЗаписи.ЛьготныйПроцент/100 * ВыборкаДетальныеЗаписи.КоличествоДней))*0.13), 0);
Движ3.РасчетМежрасчетногоПериода = Истина;
Движ3.УчитыватьВыплаченныйДоходВ6НДФЛ = ложь;
Движ3.ДатаПолученияДоходаФиксирована = Истина;
Движ3.СтавкаНалогообложенияРезидента = перечисления.НДФЛСтавкиНалогообложенияРезидента.Ставка13;
//РН Зарплата к выплате
Движ4 = Движения.ЗарплатаКВыплате.Добавить();
Движ4.Период = НачалоМесяца(ПериодПосещения);
Движ4.Организация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ4.ФизическоеЛицо = ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо;
Движ4.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движ4.ПериодВзаиморасчетов = НачалоМесяца(ПериодПосещения);
Движ4.СуммаКВыплате = (-1) * Окр((((ВыборкаДетальныеЗаписи.РыночнаяСтоимость*ВыборкаДетальныеЗаписи.КоличествоДней)- (ВыборкаДетальныеЗаписи.РыночнаяСтоимость * ВыборкаДетальныеЗаписи.ЛьготныйПроцент/100 * ВыборкаДетальныеЗаписи.КоличествоДней))*0.13), 0);
//РН Взаиморасчеты с сотрудниками
Движ5 = Движения.ВзаиморасчетыССотрудниками.Добавить();
Движ5.Период = НачалоМесяца(ПериодПосещения);
Движ5.Организация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ5.ФизическоеЛицо = ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо;
Движ5.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движ5.СуммаВзаиморасчетов = (-1) * Окр((((ВыборкаДетальныеЗаписи.РыночнаяСтоимость*ВыборкаДетальныеЗаписи.КоличествоДней)- (ВыборкаДетальныеЗаписи.РыночнаяСтоимость * ВыборкаДетальныеЗаписи.ЛьготныйПроцент/100 * ВыборкаДетальныеЗаписи.КоличествоДней))*0.13), 0);
Движ5.ГруппаНачисленияУдержанияВыплаты = перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано;
//РР Начисления
Движ6 = Движения.Начисления.Добавить();
Движ6.ПериодРегистрации = НачалоМесяца(ПериодПосещения);
Движ6.ВидРасчета = ВидРасчета;
Движ6.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движ6.ФизическоеЛицо = ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо;
Движ6.ГоловнаяОрганизация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ6.Результат = (ВыборкаДетальныеЗаписи.РыночнаяСтоимость*ВыборкаДетальныеЗаписи.КоличествоДней)- (ВыборкаДетальныеЗаписи.РыночнаяСтоимость * ВыборкаДетальныеЗаписи.ЛьготныйПроцент/100 * ВыборкаДетальныеЗаписи.КоличествоДней);
Движ6.Организация = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнаяОрганизация;
Движ6.Месяц = НачалоМесяца(ПериодПосещения);
Движ6.ГоловнойСотрудник = ВыборкаДетальныеЗаписи.Сотрудник.ГоловнойСотрудник;
Движ6.ПериодДействияНачало = ПериодПосещения;
Движ6.ПериодДействияКонец = КонецМесяца(ПериодПосещения);
Движ6.БазовыйПериодНачало = Дата;
Движ6.БазовыйПериодКонец = КонецМесяца(Дата);
КонецЦикла;
КонецПроцедуры
--- Конец кода ---
Код Отчета выглядит следующим образом:
--- Код: ---ВЫБРАТЬ
РНПосещенияСпортзалаОбороты.Подразделение КАК Подразделение,
РНПосещенияСпортзалаОбороты.Сотрудник КАК Работник,
РНПосещенияСпортзалаОбороты.Период КАК Период,
РНПосещенияСпортзалаОбороты.КоличествоПосещенийОборот КАК ПосещенийСпортзала,
РНПосещенияСпортзалаОбороты.Сотрудник.ГоловнаяОрганизация КАК Учреждение
ПОМЕСТИТЬ ВТ_Посещения
ИЗ
РегистрНакопления.РНПосещенияСпортзала.Обороты(&НачалоПериода, КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Месяц, ) КАК РНПосещенияСпортзалаОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОсновныеНачисления.ПериодДействия КАК ПериодДействия,
ОсновныеНачисления.Сотрудник КАК Сотрудник,
ОсновныеНачисления.Результат КАК Результат
ПОМЕСТИТЬ ВТ_Начисления
ИЗ
РегистрРасчета.Начисления КАК ОсновныеНачисления
ГДЕ
ОсновныеНачисления.ВидРасчета.Код = "МВ"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Посещения.Работник КАК Работник,
ВТ_Посещения.Подразделение КАК Подразделение,
ВТ_Посещения.ПосещенийСпортзала КАК ПосещенийСпортзала,
ВТ_Посещения.Период КАК Период,
ВТ_Начисления.Результат КАК МатериальнаяВыгода,
ВТ_Посещения.Работник.ГоловнаяОрганизация КАК Учреждение
ИЗ
ВТ_Посещения КАК ВТ_Посещения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Начисления КАК ВТ_Начисления
ПО ВТ_Посещения.Работник = ВТ_Начисления.Сотрудник
И ВТ_Посещения.Период = ВТ_Начисления.ПериодДействия
--- Конец кода ---
Очень интересует вопрос по поводу "жесткой" привязки зависимости процента льготы от стажа (см. запрос в модуле документа). Можно ли это сделать менее варварским способом или подобное решение имеет право на жизнь в реалиях сдачи экзамена?
LaSkReN:
Добрый день, а где вы взяли билеты для ЗИКГУ ред 3?
whoame:
Приветствую. Приобретали сборник задач. Издание от 2017 года (свежее месяца три-четыре назад не было).
LaSkReN:
сборник для збу 1.0?
whoame:
В глаза не видел сборника для 1.0, поэтому утверждать не буду. А так - задачи 1 в 1 с теми, которые были выложены здесь для ЗГУ (точного раздела, где они находятся подсказать не могу).
Навигация
Перейти к полной версии