Главная » 1С Предприятие » ВИДЫ  РАСЧЕТОВ ДОКУМЕНТА ТАБЕЛЬ

0

7.7.1.   ВИД  РАСЧЕТА ОКЛАД_2

Выполним  всю цепочку задания свойств ВР  Оклад_2, включающую также  и написание кода процедуры  получения результата.

Предварительно, однако,  нам  потребуется  создать   группу  ВР  ВсеНачисления_2, в которую мы будем включать расчеты-начисления, облагаемые НДФЛ.

Войдем  к конфигурацию, добавим группу  ВР  ВсеНачисления_2  (рис. 7.53),  включив в нее указанные  на рис. 7.54 ВР.

Рис.  7.56.  Теперь  ВР Оклад_2  является  самовытесняющимся

Допише м  в  модуль  ВР  следующий код:

процедура ПровестиРасчет()                     //              Процедура  модуля ВР Оклад_2

// Процедура выполняется при проведении расчета с ВР Оклад_2 перем  всегоЧасовПоКалендарю, нтп, ктп;

// На случай непредусмотренной ошибки

если ПустоеЗначение(Объект.Календарь) = 1 тогда

Сообщить("Сотрудник " + СокрП(Объект.Наименование) + " не имеет календаря."); возврат;

конецЕсли;

нтп  = НачалоТекущегоПериода(); ктп = КонецТекущегоПериода();

всегоЧасовПоКалендарю =  Объект.Календарь.Часов(нтп,  ктп); если всегоЧасовПоКалендарю > 0 тогда

результат = Объект.Оклад.Получить(ктп) * всегоЧасов / всегоЧасовПоКалендарю;    иначе                                   //                     На случай  непредусмотренной ошибки

Сообщить("В календаре сотрудника " + СокрП(Объект.Наименование) + " нет рабочих дней.");

конецЕсли;

конецПроцедуры // ПровестиРасчет

Замечания:

\i.     Значение   периодического  реквизита Оклад,  возвращается   методом  справочника Получить.  Простое использование Объект.Оклад даст нулевой  результат

2.    Весь код, если бы не проверки, можно  было  бы разместить в одном  операторе:

результат = Объект.Оклад.Получить(КонецТекущегоПериода()) * всегоЧасов / Объект.Календарь.Часов(НачалоТекущегоПериода(),  КонецТекущегоПериода());

ВР  НДФЛ_2  также   сделаем   самовытесняющимся.  Ранее   этот  ВР  мы  включили в группу   ВР   ВсеУдержания_2,  которую   употребили   при   оценке   начального  сальдо.  Нам  же для  расчета  налога  понадобится  группа  ВР  ВсеНачисления_2.   Ее  присутствие сократит  код  процедуры вычисления результата:

процедура ПровестиРасчет()                 //           Процедура модуля  ВР НДФЛ_2

// Процедура выполняется при проведении расчета с ВР НДФЛ_2 перем жз, нтп, ктп, налог;

жз  =  СоздатьОбъект("ЖурналРасчетов.Зарплата_2"); нтп  = жз.НачалоТекущегоПериода();

ктп = жз.КонецТекущегоПериода(); налог = 0; жз.ВыбратьПериодПоОбъекту(Объект,  нтп);  пока жз.ПолучитьЗапись() = 1 цикл

если жз.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления_2) =  1 тогда

налог = налог + жз.результат; конецЕсли;

конецЦикла; // пока

// Константа СтавкаНалога является периодической

результат  = налог  * Константа.СтавкаНалога.Получить(ктп) /100;  КонецПроцедуры // ПровестиРасчет

Замечание.  Будет  неверным  вместо  метода жз.ВыбратьПериодПоОбъекту(Объект,  нтп); использовать  метод жз.ВыбратьЗаписиПоОбъекту(Объект, нтп,  ктп);

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

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

процедура Выполнить()                     //             Связана с кнопкой Пуск обработки Проба Константа.СтавкаНалога.Установить(ТекущаяДата(), 13);

конецПроцедуры // Выполнить

7.7.2.   ВИД РАСЧЕТА ВБАНК_2

Самовытесняющийся ВР ВБанк_2 оценивается следующей процедурой: процедура ПровестиРасчет()                 //                   Процедура модуля  ВР ВБанк_2

// Процедура выполняется при проведении расчета с ВР ВБанк_2

// Формула расчета:

// банк = Целая часть(Начальное сальдо + Все начисления Все удержания)  перем жз, нтп, ВР, банк;

жз = СоздатьОбъект("ЖурналРасчетов.Зарплата_2"); нтп  = жз.НачалоТекущегоПериода();

банк = 0;

// См. замечание относительно метода ВыбратьЗаписиПоОбъекту в предыдущем разделе  жз.ВыбратьПериодПоОбъекту(Объект,  нтп);

пока жз.ПолучитьЗапись() = 1 цикл ВР = жз.ВидРасч;

если (ВР.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления_2) = 1) или (ВР = ВидРасчета.НачСальдо_2) тогда

банк = банк + жз.результат;

иначеЕсли ВР.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания_2) = 1  тогда банк = банк жз.результат;

конецЕсли; конецЦикла;//пока

результат  = Цел(банк);      //         Для записи в ЖЗ берем  целую часть результата конецПроцедуры // ПровестиРасчет

7.9.   ПРЕМИИ

Источник: Бартеньев О. В. 1С:Предприятие:  программирование для  всех.  Базовые объекты и расчеты на одной дискете. М.: Диалог-МИФИ, 2005. 464 с.

По теме:

  • Комментарии