ЗиК, "Свод по зарплате" и "Свод проводок" - копеечная разница

Новая тема
"ЗиК, 265, хозрасчетная.
Свод начислений и удержаний - Всего начислено
Свод проводок - Итого начислено в 70-й
Не совпадают! Разница 1-2 копейки. Разница появилась после того, как стали распределять затраты документом "Бухгалтерский и налоговый учет начислений и удержаний", и только по сотрудникам с этим распределением.
Залез в глобальный модуль, процедура "глПолучитьРаспределениеРезультата".

Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
ОшибкаРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Ошибка у "+ЗаписьИзЖурнала.Объект+" на "+ОшибкаРазница);
.............

Выдала много-много. Выходит, что за счет округления распределяемая сумма может оказаться не равной "Итого распределено". Ошибка в плюс или минус, в общем может компенсироваться, а может и нет. Да и вообще, какие могут быть округления - копейку разницы надо кидать на любую статью!

Сделал так (Это в самом конце процедуры глПолучитьРаспределениеРезультата):
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
   КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
ТаблицаБухУчета.ВыбратьСтроки();
Пока ТаблицаБухУчета.ПолучитьСтроку()=1 Цикл
   Если ТаблицаБухУчета.Сумма=0 Тогда
       Продолжить;
КонецЕсли;
Если (ТаблицаБухУчета.Сумма+КосякРазница)<0 Тогда
   Продолжить;
КонецЕсли;
ТаблицаБухУчета.Сумма=ТаблицаБухУчета.Сумма+КосякРазница;
           Прервать;
КонецЦикла;
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
   Сообщить("Все равно косяк у "+ЗаписьИзЖурнала.Объект+" на "+КосякРазница);
КонецЕсли;
КонецЕсли;

Теперь стабильно имею разницу в 1 копейку. И не могу найти, почему.
Может кто сталкивался, подскажите плизз..."
Скорее всего где-то идет округление суммы
либо просто нехватает точности при расчете, короче найти это не получиться помоему
у нас давно на это забили
"Попробуй не через "ВыбратьСтроки()", а так
Для сч=1 По ТаблицаБухУчета.КоличествоСтрок() Цикл
<<...>>
КонецЦикла;

<<...>> - через получить и установить значение."
"Да нет, в ЭТОМ месте теперь все ОК. Я там специально оставил:

Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Все равно косяк у "+ЗаписьИзЖурнала.Объект+" на "+КосякРазница);
КонецЕсли;

Где-то еще копейка набегает. Вот сижу - ищу."
"Ну все, нашол решение:

В функции "глПроводкиЗаПериод" точность полей "Сумма" в таблицах значений "ТаблицаРаспределения", "ТаблицаРаспределенияННП" и "ТаблицаРаспределенияЕСН" сделал 2 знака. Была 10 знаков после запятой.

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

В принципе, после этого все пошло нормально, но дополнительно сделал контроль:

//КонтрольРаспределения
//
//Параметры
// Сумма - распределяемая сумма
// ТабЗн - таблица значений с распределением в поле "Сумма"
//
//Возвращаемое значение.
// Нет
//
//Описание
// Процедура проверяет, равна ли сумма распределенного исходной
// (может получиться в результате округления) и, в случае необходимости, изменяет распределение
// предварительно делается контроль, чтобы изменяемая сумма не стала отрицательной.
//  При разнице больше 0,01 ничего не изменяется (причина отличия - другая)
//
Процедура КонтрольРаспределения(Сумма, ТабЗн)
Перем Разница, Итог;
Если ПустоеЗначение(ТабЗн)=1 Тогда
   Возврат;
КонецЕсли;
Разница=Сумма-ТабЗн.Итог("Сумма");
Разница=Сумма-Итог;
Если (Разница<0.01) И (Разница>-0.01) Тогда
ТабЗн.ВыбратьСтроки();
Пока ТабЗн.ПолучитьСтроку()=1 Цикл
Если (ТабЗн.Сумма+Разница)<0 Тогда
Продолжить;
КонецЕсли;
ТабЗн.Сумма=ТабЗн.Сумма+Разница;
Прервать;
КонецЦикла;
Если Сумма<>ТабЗн.Итог("Сумма") Тогда
   Сообщить("Ошибка округления.","!!!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры

И в конце "глПроводкиЗаПериод" вставил строки

КонтрольРаспределения(Результат, ТаблицаРаспределения);
КонтрольРаспределения(Результат, ТаблицаРаспределенияЕСН);
КонтрольРаспределения(Результат, ТаблицаУчетаНалогаНаПрибыль);

Так что все решаемо!"
Читают тему
(гостей: 1)

Быстрый переход