База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить алгоритм контроля итогов по сотрудникам и организации в 1С? › Ответ в теме: Как исправить алгоритм контроля итогов по сотрудникам и организации в 1С?
Вот улучшенный и более читаемый вариант твоей процедуры с небольшими доработками:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
&НаКлиенте Процедура ТВСЗ_КонтрольИтоговПоСотрудникамИОрганизации() ЕстьОшибка = Ложь; ТекстПредупреждения = Новый Массив; ТекстПредупреждения.Добавить("Найдено расхождение оценочных обязательств по сотрудникам с общими суммами по организации"); ИменаСверяемыхИтогов = НовыйИменаСверяемыхИтогов(); Для Каждого ИмяРеквизита Из ИменаСверяемыхИтогов Цикл ИтогСумма = Объект.ОценочныеОбязательства.Итог(ИмяРеквизита.Ключ); ИтогСуммаПоСотрудникам = Объект.ОценочныеОбязательстваПоСотрудникам.Итог(ИмяРеквизита.Ключ); Разница = ИтогСумма - ИтогСуммаПоСотрудникам; // Сравниваем с учетом небольшой погрешности для чисел с плавающей точкой Если Абс(Разница) > 0.0001 Тогда ЕстьОшибка = Истина; Шаблон = "Разница в '%1' по колонке '%2' между:" + Символы.ПС + "'%3' (по организации) и '%4' (по сотрудникам)"; ТекстПредупреждения.Добавить(СтрШаблон(Шаблон, Формат(Разница, "ЧГ=15; ЧД=2"), ИмяРеквизита.Значение, Формат(ИтогСумма, "ЧГ=15; ЧД=2"), Формат(ИтогСуммаПоСотрудникам, "ЧГ=15; ЧД=2"))); КонецЕсли; КонецЦикла; ТекстПредупреждения.Добавить("Исправьте данную ошибку для согласования данных по оценочным обязательствам"); Если ЕстьОшибка Тогда ПоказатьПредупреждение(Неопределено, СтрСоединить(ТекстПредупреждения, Символы.ПС), , "Внимание: ошибка контроля итогов"); КонецЕсли; КонецПроцедуры |
Что улучшено:
— Добавлена проверка с учетом погрешности (0.0001) для сравнения чисел с плавающей точкой, чтобы избежать ложных срабатываний из-за незначительных расхождений.
— Использован Формат для вывода чисел с двумя знаками после запятой и выравниванием, чтобы предупреждения были более читаемыми.
— Убраны лишние переносы строк в шаблоне, заменены на Символы.ПС для корректного переноса.
— Немного улучшена читаемость кода (отступы, пробелы).
Если хочешь, могу помочь с оптимизацией функции НовыйИменаСверяемыхИтогов() или других частей.