Контроль проводок в бухгалтерии.

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

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

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

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

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


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

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

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

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

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

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


Источник http://warenic.narod.ru/

Комментарии

1
  • Хранитель_врат
    Я в свое время заводил справочник СубконтоПоУмолчанию в контексте пользователя - оч удобная вещь.

    И кстати проблема ежиков отпала полностью