Главная » 1С Предприятие » НАДЕЖНОСТ Ь  ПРОГРАМ М

0

Мы  рассмотрим  один аспект  надежности  вероятность  получения  ожидаемого  результата.  Ниже мы  обсудим ряд  мероприятий, позволяющих  повысить эту вероятность  и, следовательно, надежность вычислений.

8.2.1.  ПРОВЕРКА ДАННЫХ

В любой  задаче  мы  планируем  получить некоторый результат.  Так, нажав  на  иконку , размещенную в  диалоге формы списка ЖЗ  Зарплата_2, мы  рассчитываем получить ведомость перечислении в банк  для выбранного  сотрудника или подразделения.

Видимых препятствий  для  получения  такого   результата   нет,  и  если  нет  ошибок в расчетах  и  коде,  формирующем ведомость, то будет верен и документ. В то же время в  программу, выводящую ведомость, можно  добавить функцию,  проверяющую, точно  ли  подсчитан  размер   перечисляемой  в  банк  суммы.  Ошибка,  как  мы  уже  отмечали (разд.  7.10.1), может  возникнуть, когда  после  отмены  ручной  правки  какой-либо запи­

си,  имеющей  зависимые ВР, выполнен  ее перерасчет (иконка  панели  инструментов

ЖЗ), при  этом  атрибут Рассчитана  зависимых ВР  остается  равным  единице,  а  пользо­

ватель  забывает   выполнить   их   перерасчет.   (Напомним,   что   ВР   ВБанк_2   зависит от всех иных ВР.)

Код такой  проверочной функции прост:

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

// если перечисления верны, и отличное от нуля число в противном случае

// При ошибке функция выдает соответствующее предупреждение  функция СовпадениеПеречислений(сотр, перечислено)

// перечислено = Целая часть(Начальное сальдо + Все начисления Все удержания)  перем ВР, банк;

банк = перечислено;

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

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

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

банк = банк результат;

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

конецЕсли;

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

возврат Цел(банк);               //                  Берем  целую  часть результата  конецФункции // СовпадениеПеречислений

Тогда  приведенная  в  разд.   7.17.3   процедура  СтрокаВТекст,  добавляющая  строку в  ведомость перечислений в  банк, примет следующий вид:

// Добавляет в ведомость строку под номером ном и корректирует значение переменной всего

процедура СтрокаВТекст(сотр, текст, ном, всего)

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

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

если видРасч = ВидРасчета.ВБанк_2 тогда всего = всего + Результат;

// Форматируем  данные в соответствии  с заголовком табличной части ведомости текст.ДобавитьСтроку(Формат(ном, "С5") + ":" +

Формат(Объект.Наименование, "С27") + ":" + Формат(Объект.Код, "С9") + ":" + Формат(Результат, "410.2") + ": " + Формат(Объект.Код, "С9"));

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

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

// Добавляем вызов проверяющей функции СовпадениеПеречислений если  СовпадениеПеречислений(сотр,  Результат) о 0 тогда

Сообщить("Ошибка  в размере  перечислений сотрудника " + сотр.Наименование);  Предупреждение("Ошибка в размере  перечислений сотрудника " +

РазделительСтрок + сотр.Наименование); конецЕсли;

конецПроцедуры // СтрокаВТекст

Такой  подход,  правда, тоже  имеет недостаток. Ведь  если  изменится  алгоритм  расчета  перечислений  в   банк, то  код  придется  менять   в  двух  местах:   в  ВР  ВБанк_2  и в вышеприведенной  функции СовпадениеПеречислений.  Дублирования кода, впрочем, можно  избежать, если разместить  его в  глобальном  модуле.

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

По теме:

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