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

0

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

7.4.1.1.      ПРОЦЕДУРЫ,       УПРАВЛЯЮЩИЕ   ЭЛЕМЕНТАМИ  ДИАЛОГА

// ктоСтар значение элемента кто до установления значения закл = О перем ктоСтар;

перем  нтп;                               //                   Начало текущего периода

перем тДок;                            //                  Текущий документ

// Объект  с разновидностью типа Справочник.ХозОпДляВР перем  хозОп;

процедура ПоЦехам() далее

// Процедура нужна, чтобы  правильно реагировать на переключения флажка закл

процедура  ЗначКтоСтар() ктоСтар = кто;

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

процедура ПриЗакрытии()

//

Предопределенная процедура

перем значОтбора;

//

Текущее значение отбора при закл = 1

перем  реж, значРеж;               //          Представление:  списком  или по одному объекту

// Сохраняем на диске значения  переменных диалога закл,  кто и иных установок

// для следующего сеанса работы СохранитьЗначение("ЗакладкиВЗарплате", закл); СохранитьЗначение("КтоВЗарплате", кто); СохранитьЗначение("ЗначениеОтбора",  Объект.Родитель);

// Представление: список или один сотрудник

ПолучитьПредставление(реж, значРеж); СохранитьЗначение("РежимПредставления", реж); СохранитьЗначение("ЗначениеПредставления", значРеж);

конецПроцедуры // ПриЗакрытии

процедура ПриОткрытии()               //         Предопределенная процедура перем  реж, значРеж;

// Восстанавливаем с диска значения  переменных диалога закл  и кто

// для текущего сеанса работы

закл = ВосстановитьЗначение("ЗакладкиВЗарплате");

если ТипЗначения(закл) = 0 тогда    //  Если значение  переменной закл  не восстановлено  закл = 1;

кто= 1;

иначе

кто = ВосстановитьЗначение("КтоВЗарплате"); конецЕсли;

ктоСтар = кто;

ПоЦехам();

если закл = 1 тогда

значОтбора = ВосстановитьЗначение("ЗначениеОтбора"); ЗакладкиОтбора("Родитель", значОтбора);

конецЕсли;

реж = ВосстановитьЗначение("РежимПредставления"); значРеж = ВосстановитьЗначение("ЗначениеПредставления"); если реж = 1 тогда

УстановитьПредставление(1);

иначе

УстановитьПредставление(реж, значРеж); конецЕсли;

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

// Включает/отключает режим вывода по цехам.  Если закл = 0, то устанавливает

// кто = 1 и делает недоступными радиокнопки группы Режим расчета процедура ПоЦехам()

если закл = 1 тогда                //         Если используются закладки отбора  ЗакладкиОтбора("Родитель");

кто = ктоСтар;

Форма.Кто. Доступность(1); Форма.Кто2.Доступность(1);

иначе ЗакладкиОтбора(""); кто = 1;

Форма.Кто.Доступность(0);

Форма.Кто2.Доступность(0); конецЕсли;

конецПроцедуры // ПоЦехам()

7.4.1.2.    ВЫБОР  ВИДА     РАСЧЕТА      ДЛЯ  ВВОДА    В  ЖУРНАЛ  ЗАРПЛАТЫ

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

процедура НачСальдо() далее процедура  ВводРасчета()

перем значПер, флаг, докВид;

значПер = "ВР_2";

// Вид ВР выбирается из диалога, представленного на рис. 7.25

флаг = ВвестиПеречисление(значПер, "Выберите виды расчетов для ввода");

// Если нажали OK, Enter или дважды ударили мышью  по выбранному значению если флаг = 1 тогда

докВид = значПер.Идентификатор();

если докВид = "НачСальдо" тогда

НачСальдо();               //                   Ввод начального сальдо жз = 0;

иначе                                   //                     Табель  или Премия

// Расчеты вводятся документом ОткрытьФорму(" Документ." + докВид);

конецЕсли; иначе

Предупреждение("Ничего не выбрано.");  возврат;

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

Рис. 7.25. Диалог для выбора вида документа

7.4.1.3.     ВВОД  НАЧАЛЬНОГО    САЛЬДО

Выполняется, если  кто = 1, для выбранного  в  справочнике  Сотрудники_2  сотрудника либо для  выбранного   подразделения.  Если  сотрудник  уже  имеет в  текущем  расчетном   периоде  расчет  в   ВР  НачСальдо_2,  то  при  повторном  вводе меняется  лишь результат расчета.

Выбранное подразделение возвращается методом  модуля  формы ЖР ПолучитьОтбор.

процедура одинСотр(сотр) далее функция ЕстьВЖЗ(сотр) далее

// Заполняет ЖЗ расчетами с ВР НачСадьдо_2 процедура  НачСальдо()

перем  док, грОт, подр;                     //            подр значение отбора  перем сСотр_2, флаг;

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

док  =  СоздатьОбъект("Документ.НачПериода_2"); если док.НайтиПоНомеру(1) = 0 тогда

Предупреждение("Нельзя ввести начальное сальдо. Нет документа НачПериода_2 №1");  возврат;

конецЕсли;

тДок = док.ТекущийДокумент();

// Определяемся относительно хозяйственной операции для ВР НачСальдо_2 хозОп  = СоздатьОбъект("Справочник.ХозОпДляВР");

// Ищем простым перебором в справочнике ХозОпДляВР вид расчета НачСальдо_2 хозОп.ВыбратьЭлементы();

флаг = 0;

пока хозОп.ПолучитьЭлемент() = 1 цикл

если хозОп.ВР = ВидРасчета.НачСальдо_2 тогда флаг= 1;

прервать; конецЕсли;

конецЦикла; // пока если флаг = 0 тогда

Предупреждение("Хозяйственная операция для ВР Начальное сальдо не найдена"); возврат;

конецЕсли;

// Начало месяца для одного сотрудника. Разрешим множественные выбор если кто = 1 тогда

ОткрытьПодбор("Справочник.Сотрудники_2", "ФормаСписка",, 1); иначеЕсли закл = 1 тогда                  //           Используем закладки отбора

// При первом использовании ЖЗ закладки отбора в нем не отображаются,

// даже если закл = 1; в этом случае начальное сальдо вводится для всех сотрудников

ПолучитьОтбор(грОт, подр);     //   подр значение  отбора; имеет тип  Справочник  сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2"); сСотр_2.ИспользоватьРодителя(подр);

сСотр_2.ВыбратьЭлементы();

пока сСотр_2.ПолучитьЭлемент() = 1 цикл если сСотр_2.ЭтоГруппа() = 0 тогда

// Ввод начального  сальдо для одного сотрудника одинСотр(сСотр_2.ТекущийЭлемент());

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

УстановитьПредставление(1);            //       Отображаем записи по всем объектам

// Если в ЖЗ нет записей, тогда подр имеет пустое значение; вводятся все

// сотрудники и для  отображения закладок отбора  вызываем процедуру ПоЦехам если ПустоеЗначение(подр) = 1 тогда

ПоЦехам(); конецЕсли; Форма.Обновить();

конецЕсли; конецПроцедуры // НачСальдо

процедура ОбработкаПодбора(сотр,  конт)

одинСотр(сотр);

//

Начальное  сальдо для одного сотрудника

если  закл = 0 тогда

закл  = 1;

//

Показываем закладки отбора

ПоЦехам();

конецЕсли;

УстановитьПредставление(2,  сотр);            //       Отображаем записи по одному объекту  конецПроцедуры // ОбработкаПодбора

процедура  одинСотр(сотр)

// Если расчет с ВР НачСальдо_2  объект уже имеет, то обновляем только результат если  ЕстьВЖЗ(сотр)  = 0 тогда

// Добавляем  расчет  с ВР НачСальдо_2 для выбранного сотрудника  Новая();

УстановитьРеквизит("Документ",  тДок); УстановитьРеквизит("РодительскийДокумент",  тДок); УстановитьРеквизит("Объект",  сотр); УстановитьРеквизит("ВидРасч",  ВидРасчета.НачСальдо_2); УстановитьРеквизит("хрзОп",  хозОп.ХозОП); УстановитьРеквизит("ДатаНачала",  нтп); УстановитьРеквизит("ДатаОкончания", нтп);

иначе                               //                   Делаем  расчет  нефиксированным

// Журнал позиционирован функцией ЕстьВЖЗ на нужной записи

// Подготовка к обновлению результата

ОсвободитьЗапись();          //      Делаем  запись  нефиксированной конецЕсли;

Записать( );                        //                Не забываем записать новые значения реквизитов

// Обращаемся к предопределенной процедуре ПровестиРасчет ВР НачСальдо_2

// Метод  ВыполнитьРасчет должен быть  расположен после  вызова метода Записать ВыполнитьРасчет( );                 //          или Рассчитать()

ФиксироватьЗапись(); конецПроцедуры // одинСотр

// Вернет  1, если начальное сальдо для выбранного  объекта  уже введено,

// или О-в противном случае функция ЕстьВЖЗ(сотр)

если ВыбратьПериодПоОбъекту(сотр) = 1 тогда

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

если ВидРасч = ВидРасчета.НачСальдо_2 тогда возврат 1;

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

конецЕсли; возврат 0;

конецФункции // ЕстьВЖЗ

Замечания:

1.      Процедуры  РасчетЗП,  ПечатьРЛ  и   ВедомостьБанк  будут  рассмотрены  после завершения разработки программ ввода в ЖЗ  всех ВР.

2.       В ЖЗ  сотрудники сортируются так же, как и в справочнике-объекте.

5.     Расчеты не  должны  вводиться для  уволенных  или  еще  не  приступивших к  работе сотрудников,  записи  о которых, однако, есть  в  справочнике  Сотрудники_2.  Проблема   решается  просто,  если   есть   соответствующие   приказы   с   датами   приема и увольнения сотрудника.

4.        Записи  ЖЗ, в  которых   неверно  определены  атрибуты, например  в  атрибут  Документ  занесено пустое  значение  типа Документ,  сопровождаются в ЖЗ  иконкой  Такие записи из ЖЗ  нужно  изъять. Интерактивно  это можно  выполнить, применив

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

5.        Встроенная  процедура СохранитьЗначение записывает на диск (в  файл  1CV7.CFG) заданное  вторым параметром значение.  Встроенная функция  ВосстановитьЗначение  выполняет обратное действие. Если  восстанавливается  значение  реквизита формы типа СписокЗначений, то  функция  вызывается  как  процедура, возвращая результат  в  свой второй параметр, например:

ВоостановитьЗначение("СписокПодразделений", сПодр);

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

По теме:

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