- МЕНЮ
 - В избранное
Самые важные новости
 
Царьков Валерий
Контроль проводок в бухгалтерии. (30.04.2003)

        Эта тема до боли знакома всем программистам , которые работают непосредственно с бухгалтерией. Кто-то из бухгалтеров что-то не так занес и в отчетах появляются так называемые ежики, т.е. пустые субконто в проводках. Разбираться с этим почему-то приходится программистам (во всяком случае, на них это пытаются повесить бухгалтера: ведь это программа что-то не так посчитала, а они-то ввели все правильно). Тут можно долго ругаться и доказывать кто на самом деле накосячил, но решение проблемы при этом еще отодвинется по времени. Данная статья посвящена профилактике подобных ситуаций.
       

Давайте будем исходить из таких соображений:

Для контроля корректности проводок операции в глобальный модуль помещаем функцию
//******************************************************************************
// Проверяет заполнение всех субконто операции и проводки на соответствие с корректными
// Вызывается из модуля документа и проверяет операцию перед записью
// параметры: Опер - проверяемая операция
// возвращает: 0 - в операции есть ошибки (ее нельзя записывать)
// 1 - ошибок нет

Функция глПроверкаЗаполненияСубконто(Опер)
    Корректна
=1;
    Если ТипЗначениястр(Опер)<>
"Операция" Тогда
       Возврат
1;
    КонецЕсли;
    Если Опер.ВыбратьПроводки()=
0 тогда
       Возврат
1;
    КонецЕсли;
    Пока Опер.ПолучитьПроводку()=
1 Цикл
       // по дебету
       Если Опер.Дебет.Счет.Выбран()=
1 тогда
          Для Ном =
1 По Опер.Дебет.Счет.КоличествоСубконто() Цикл
             Что=Опер.Дебет.Субконто(Ном);
             Если ПустоеЗначение(Что)=
1 тогда
                Корректна=
0;
             КонецЕсли;
          КонецЦикла;
       КонецЕсли;
       // по кредиту
       Если Опер.Кредит.Счет.Выбран()=
1 тогда
          Для Ном =
1 По Опер.Кредит.Счет.КоличествоСубконто() Цикл
             Что=Опер.Кредит.Субконто(Ном);
             Если ПустоеЗначение(Что)=
1 тогда
                Корректна=
0;
             КонецЕсли;
          КонецЦикла;
       КонецЕсли;
       Если Корректна=
0 тогда
          Сообщить(
"Проводка: "+Опер.НомерПроводки()+" - пустое значение субконто
             |"+Опер.ПредставлениеПроводки(2));
          Возврат
0;
       КонецЕсли;
    КонецЦикла;
    Возврат
1;
КонецФункции


//******************************************************************************

        Приведенная выше функция вызывается перед методом Операция.Записать() в модулях документов и обработок, создающих операции.
Если глПроверкаЗаполненияСубконто(Операция)=0 тогда
    Возврат;
КонецЕсли;
Операция.Записать();

Т.е. если заполнены не все субконто, то выходим из процедуры без записи операции.

наверх

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

Значения предполагается трактовать следующим образом: Далее следует фрагмент модуля, который для удобства рекомендуется встроить в предыдущий:
Если Константа.ПроверятьПроводки>0 тогда
    Если Опер.ПроверитьПроводку()=
0 тогда
       Сообщить(
"Проводка: "+Опер.НомерПроводки()+" - не соответствует корректным проводкам
          |"+Опер.ПредставлениеПроводки(2));
       Если Константа.ПроверятьПроводки=
2 тогда
          Возврат
0;
       КонецЕсли;
    КонецЕсли;
КонецЕсли;

наверх

Пример в виде внешней обработки лежит здесь.

Меня цитирует Клерк.Ру!..


Обсудить статью на форуме   всего просмотров: 
Используются технологии uCoz


© Царьков Валерий. 30 апреля 2003