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

0

На  период  отладки  вам может  понадобиться   процедура  удаления  записей  ЖЗ  текущего  периода.  Ее код  прост:

процедура ОчиститьЖЗ()

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

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

конецЦикла // пока конецПроцедуры // ОчиститьЖЗ

Однако  у  этой   процедуры  есть  особенность:  записи   удаляются  через  одну.   Это объясняется тем, что после  проставления DBF-пометки удаления запись  из ЖЗ  исчезает  и  текущей   становится  следующая  запись.  Далее   вступает  в  действие метод  ПолучитьЗапись,   перемещающий  позицию  ЖЗ   еще   на  одну  запись.  Поэтому  процедуру ОчиститьЖЗ нужно  запускать неоднократно,  что достигается  следующим  кодом:

функция ОчиститьЖЗ(жз, нтп)

перем  флаг;                               //                  Журнал заработной платы флаг = жз.ВыбратьПериод(нтп);

если флаг = 1 тогда

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

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

конецЕсли;

возврат флаг;                            //                 флаг = О, если в ЖЗ нет записей конецФункции // ОчиститьЖЗ

процедура Выполнить()

перем  жз;

//

Журнал  заработной платы

перем  нтп;

//

Начало текущего  периода

перем  флаг;

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

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

пока флаг = 1 цикл

флаг = ОчиститьЖЗ(жз, нтп); конецЦикла // пока

// Вызов формы ЖЗ для просмотра результата

ОткрытьФорму(‘ЖурналРасчетов.Зарплата_2"); конецПроцедуры // Выполнить

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

// Осуществляет  мягкую, то есть без отработки системных действий,

// смену расчетного периода ЖЗ процедура  Выполнить()

если Вопрос("Вернуться к предыдущему расчетному периоду?", "Да+Нет") = "Нет" тогда возврат;

конецЕсли;

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

// Перемещаемся на один период назад

пер = жз.ТекущийПериод( ).ПрибавитьПериод(-1);

// Устанавливаем период пер в качестве текущего, не отрабатывая  системные действия если жз.УстановитьТекущийПериод(пер, 0) 1 тогда

Предупреждение("Готово.");

// Вызов формы ЖЗ для просмотра результата

// После открытия формы, возможно, придется сменить границу просмотра ЖЗ ОткрытьФорму("ЖурналРасчетов.Зарплата_2");

иначе

Предупреждение("Сменить   период не удалось."); конецЕсли;

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

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

По теме:

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