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

0

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

Вывод РЛ будем осуществлять в  специально созданную  в  форме  списка ЖЗ табли­

цу, которой дадим имя РЛ (рис. 7.79).

Рис. 7.79. Образец для расчетного листка

Из  образца видно,  что  для  вывода нам  понадобятся переменные окл,  мес,  ВР, рез, часы,   начУд,   нач,   уд,   вып,   вБанк,  сальдоНач  и   сальдоКон.  Их   смысл   разъясняет рис. 7.79.

Алгоритм  получения РЛ  следующий:

1.               Вывести заголовок РЛ и заголовок таблицы начислений.

2.                Сформировать  списки тЗначНач  и тЗначУд  с начислениями и удержаниями сотрудника, попутно вычисляя значения переменных нач, уд, вып, вБанк, сальдоНач и сальдоКон.

3.                Вывести заголовок таблицы начислений, а затем, используя таблицу тЗначНач, и сами начисления.

4.                Вывести заголовок таблицы удержаний, а затем, используя таблицу тЗначУд,  и сами удержания.

5.                Вывести итоговую часть  РЛ.

Этот  алгоритм  реализует процедура  ЛистокСотрудника, вызываемая  из  процедуры ПечатьРЛ. После  программ на рис. 7.80 приведен пример сформированного РЛ.

процедура СоздатьТЗнач(тЗнач) далее     //   Вспомогательные процедуры формирования РЛ процедура НовСтрокаВТЗнач(тЗнач, мес) далее

процедура ВыводНачУд(табл, тЗнач, начУд)  далее

// Процедура ЛистокСотрудника  формирует РЛ одного сотрудника

// Поскольку процедура присутствует в модуле формы списка ЖЗ,

// то все методы ЖР вызываются без префикса

процедура ЛистокСотрудника(Объект, табл, тЗначНач, тЗначУд) перем нач, уд, вып, вБанк, сальдоНач, сальдоКон, мес;

// Инициализация переменных

нач = 0; уд = 0; вып = 0; вБанк = 0; сальдоНач = 0; сальдоКон = 0;

// Помним, что Оклад это периодический реквизит справочника Сотрудники_2 окл = Объект.Оклад.Получить(КонецТекущегоПериода());

// При выводе применяем  заданные по умолчанию параметры таблицы;

// для их изменения следует обратиться к методу Опции

// Выводим секцию Заголовок

табл.ВывестиСекцию("Заголовок");

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

пока  ПолучитьЗапись( ) = 1 цикл

мес = ДатаМесяц(ДатаНачала);

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

// Добавляем  в тЗначНач номер месяца,  ВидРасч, Результат и  ВсегоЧасов НовСтрокаВТЗнач(тЗначНач, мес);

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

уд = уд + Результат;

// Добавляем  в тЗначУд  номер месяца, ВидРасч, Результат и ВсегоЧасов НовСтрокаВТЗнач(тЗначУд, мес);

иначеЕсли  ВидРасч = ВидРасчета.НачСальдо_2  тогда сальдоНач = Результат;

иначе                                 //                      Вид расчета ВБанк_2

вБанк = Результат; конецЕсли;

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

вып = сальдоНач + нач уд;                 //           Полагается  к выплате

В       сальдоКон = вып вБанк;                     //            Сальдо на конец месяца ВыводНачУд(табл, тЗначНач,  1);              //Вывод              начислений ВыводНачУд(табл, тЗначУд,  2);               //Вывод               удержаний табл.ВывестиСекцию("Пусто");              //               Пустая строка в РЛ сальдоНач  = Формат(сальдоНач,’ "4-10.2");

табл.ВывестиСекцию("сНач");              //          Выводим сальдо на начало месяца

вып = Формат(вып, "4-10.2");                  //          Форматируем данные нач = Формат(нач, "4-10.2");

уд =  Формат(уд,  "4-10.2");

вБанк = Формат(вБанк, "Ч-10.2"); табл.ВывестиСекцию("Итог");

сальдоКон = Формат(сальдоКон, "4-10.2");

табл.ВывестиСекцию("сКон");              //          Вывод сальдо на конец  месяца

// Запрещаем  редактирование результирующей таблицы табл.ТолькоПросмотр(1);

// В методе  Показать задаем  пустой  заголовок  окна  с результирующей таблицей табл.Показать("");

конецПроцедуры // ЛистокСотрудника

процедура  ПечатьРЛ()

перем  сотр, сЗначСотр, ин, табл, тЗначНач, тЗначУд;

// тЗначНач, тЗначУд  таблицы  значений  для  начислений  и удержаний сотрудника  ОчиститьОкноСообщений();

СоздатьТЗнач(тЗначНач); СоздатьТЗ нач(тЗ начУ д);

табл  = СоздатьОбъект("Таблица");

// Свяжем  переменную табл с таблицей  РЛ, содержащей макет  расчетного листка табл.ИсходнаяТаблица("РЛ");

если кто =  1 тогда                          //                 РЛ выбранного сотрудника

Состояние("Формируем расчетный  листок сотрудника " + Объект.Наименование); ЛистокСотрудника(Объект, табл, тЗначНач, тЗначУд);

// Вывод РЛ сотрудников выбранного подразделения

// Используя метод  ЖР  ВыбратьПоЗначению, занесем (без повторов) значение

// атрибута Объект расчетов  выбранного подразделения в  список сЗначСотр

иначе

Состояние("Формируем список сотрудников подразделения " + Обьект.Родитель);

// Код процедуры СоздатьСЗнач см.  в предшествующем разделе СоздатьСЗнач(сЗначСотр);     //   Формируем  список сотрудников  подразделения для ин = 1 по сЗначСотр.РазмерСписка() цикл

сотр = сЗначСотр.ПолучитьЗначение(ин);

Состояние("Формируем расчетный листок сотрудника  " + сотр.Наименование); ЛистокСотрудника(сотр, табл, тЗначНач,  тЗначУд);

// Подготовка таблиц значений для РЛ следующего сотрудника тЗначНач.УдалитьСтроки();

тЗначУд.УдалитьСтроки();

конецЦикла; // для

// Поправляем закладку отбора УстановитьОтбор("Родитель",  сотр.Родитель);

конецЕсли;

конецПроцедуры // ПечатьРЛ

// Создает таблицу значений с четырьмя столбцами процедура  СоздатьТЗнач(тЗнач)

// Таблица значений  для  начислений (удержаний) сотрудника  тЗнач = СоздатьОбъект("ТаблицаЗначений");

// Формируем  столбцы таблицы значений. Опуская имена необязательных параметров,

// сохраняем разделяющие их запятые тЗнач.НоваяКолонка("Месяц", "Число",,, , 2); тЗнач.НоваяКолонка("ВидРасчета",  "ВидРасчета",,,,); тЗнач.НоваяКолонка("Сумма", "Строка",,,,  10); тЗнач.НоваяКолонка("Часы", "Строка",,,, 3);

конецПроцедуры // СоздатьТЗнач

// Добавляем  в таблицу значений  номер месяца, ВР, Результат и ВсегоЧасов процедура НовСтрокаВТЗнач(тЗнач, мес)

тЗнач.НоваяСтрока();            //                   Добавляем новую строку

// Определяем,  используя атрибут идентификатор столбца, ячейки новой строки тЗнач.Месяц = мес;

тЗнач.ВидРасчета =  ВидРасч;

// Форматируем данные

тЗнач.Сумма = Формат(Результат,  "Ч-10.2"); тЗнач.Часы = Формат(ВсегоЧасов, "Ч-3.0");

конецПроцедуры // НовСтрокаВТЗнач

// Выводит  в РЛ, если начУд = 1, таблицу с начислениями или с удержаниями, если начУд = 2

процедура ВыводНачУд(табл, тЗнач,  начУд)

// Выводим секцию табЗаг  с заголовком для таблицы начислений (удержаний) табл.ВывестиСекцию("табЗаг");

тЗнач.ВыбратьСтроки( );

пока тЗнач.ПолучитьСтроку() = 1 цикл мес = тЗнач.Месяц;

ВР = тЗнач.ВидРасчета; рез = тЗнач.Сумма;

часы  = тЗнач.Часы; табл.ВывестиСекцию("Расчет");

конецЦикла; // пока конецПроцедуры // ВыводНачУд

Предприятие АО ТриТ

Расчетный листок

Подразделение 03 Цех; Безверхний Игорь Петрович Табельный номер 301; Оклад 3100 руб.

Начисления

Мес.

Вид начисления

Сумма

Часы

12

12

12

1

12

Оклад

Премия суммой

Премия коэффициентом Премия коэффициентом Премия 1234

3100.00

700.00

1650.00

1650.00

3550.00

165

165

165

Удержания

Мес.

Видудержания

Сумма

Часы

12

НДФЛ

1384.50

-

Остаток прошлого месяца                                                0.20

Начислено                                                               10650.00

Удержано                                                                  1384.50

Полагается к выплате:                                               9265.70

Перечислено в банк                                                   9265.00

Остаток на конец месяца                                                 0.70

Рис. 7.80. Расчетный листок Безверхнего И. П.

Замечание.   Формат  "Ч-10.2",  употребленный  во   встроенной  функции   Формат, обеспечит  вывод ненулевого  значения  на поле  длиной в  10 символов  с двумя знаками после  десятичной  точки. Если первый параметр функции Формат равен нулю, то вместо нуля  согласно формату "Ч-10.2"  будет выводиться символ -.

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

По теме:

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