ЗиК, "Свод по зарплате" и "Свод проводок" - копеечная разница
10.04.2006
05:37
#1
"ЗиК, 265, хозрасчетная.
Свод начислений и удержаний - Всего начислено
Свод проводок - Итого начислено в 70-й
Не совпадают! Разница 1-2 копейки. Разница появилась после того, как стали распределять затраты документом "Бухгалтерский и налоговый учет начислений и удержаний", и только по сотрудникам с этим распределением.
Залез в глобальный модуль, процедура "глПолучитьРаспределениеРезультата".
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
ОшибкаРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Ошибка у "+ЗаписьИзЖурнала.Объект+" на "+ОшибкаРазница);
.............
Выдала много-много. Выходит, что за счет округления распределяемая сумма может оказаться не равной "Итого распределено". Ошибка в плюс или минус, в общем может компенсироваться, а может и нет. Да и вообще, какие могут быть округления - копейку разницы надо кидать на любую статью!
Сделал так (Это в самом конце процедуры глПолучитьРаспределениеРезультата):
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
ТаблицаБухУчета.ВыбратьСтроки();
Пока ТаблицаБухУчета.ПолучитьСтроку()=1 Цикл
Если ТаблицаБухУчета.Сумма=0 Тогда
Продолжить;
КонецЕсли;
Если (ТаблицаБухУчета.Сумма+КосякРазница)<0 Тогда
Продолжить;
КонецЕсли;
ТаблицаБухУчета.Сумма=ТаблицаБухУчета.Сумма+КосякРазница;
Прервать;
КонецЦикла;
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Все равно косяк у "+ЗаписьИзЖурнала.Объект+" на "+КосякРазница);
КонецЕсли;
КонецЕсли;
Теперь стабильно имею разницу в 1 копейку. И не могу найти, почему.
Может кто сталкивался, подскажите плизз..."
Свод начислений и удержаний - Всего начислено
Свод проводок - Итого начислено в 70-й
Не совпадают! Разница 1-2 копейки. Разница появилась после того, как стали распределять затраты документом "Бухгалтерский и налоговый учет начислений и удержаний", и только по сотрудникам с этим распределением.
Залез в глобальный модуль, процедура "глПолучитьРаспределениеРезультата".
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
ОшибкаРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Ошибка у "+ЗаписьИзЖурнала.Объект+" на "+ОшибкаРазница);
.............
Выдала много-много. Выходит, что за счет округления распределяемая сумма может оказаться не равной "Итого распределено". Ошибка в плюс или минус, в общем может компенсироваться, а может и нет. Да и вообще, какие могут быть округления - копейку разницы надо кидать на любую статью!
Сделал так (Это в самом конце процедуры глПолучитьРаспределениеРезультата):
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
ТаблицаБухУчета.ВыбратьСтроки();
Пока ТаблицаБухУчета.ПолучитьСтроку()=1 Цикл
Если ТаблицаБухУчета.Сумма=0 Тогда
Продолжить;
КонецЕсли;
Если (ТаблицаБухУчета.Сумма+КосякРазница)<0 Тогда
Продолжить;
КонецЕсли;
ТаблицаБухУчета.Сумма=ТаблицаБухУчета.Сумма+КосякРазница;
Прервать;
КонецЦикла;
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Все равно косяк у "+ЗаписьИзЖурнала.Объект+" на "+КосякРазница);
КонецЕсли;
КонецЕсли;
Теперь стабильно имею разницу в 1 копейку. И не могу найти, почему.
Может кто сталкивался, подскажите плизз..."
10.04.2006
16:46
#2
Скорее всего где-то идет округление суммы
либо просто нехватает точности при расчете, короче найти это не получиться помоему
у нас давно на это забили
либо просто нехватает точности при расчете, короче найти это не получиться помоему
у нас давно на это забили
10.04.2006
20:57
#3
"Попробуй не через "ВыбратьСтроки()", а так
Для сч=1 По ТаблицаБухУчета.КоличествоСтрок() Цикл
<<...>>
КонецЦикла;
<<...>> - через получить и установить значение."
Для сч=1 По ТаблицаБухУчета.КоличествоСтрок() Цикл
<<...>>
КонецЦикла;
<<...>> - через получить и установить значение."
11.04.2006
02:04
#4
"Да нет, в ЭТОМ месте теперь все ОК. Я там специально оставил:
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Все равно косяк у "+ЗаписьИзЖурнала.Объект+" на "+КосякРазница);
КонецЕсли;
Где-то еще копейка набегает. Вот сижу - ищу."
Если Результат<>ТаблицаБухУчета.Итог("Сумма") Тогда
КосякРазница=Результат-ТаблицаБухУчета.Итог("Сумма");
Сообщить("Все равно косяк у "+ЗаписьИзЖурнала.Объект+" на "+КосякРазница);
КонецЕсли;
Где-то еще копейка набегает. Вот сижу - ищу."
12.04.2006
08:22
#5
"Ну все, нашол решение:
В функции "глПроводкиЗаПериод" точность полей "Сумма" в таблицах значений "ТаблицаРаспределения", "ТаблицаРаспределенияННП" и "ТаблицаРаспределенияЕСН" сделал 2 знака. Была 10 знаков после запятой.
Не понятно, зачем в бухгалтерских расчетах точность 10 знаков от зпт. ведь это не промежуточные значения, они выгружаются в бухралтерию, т.е. это суммы проводок!
В принципе, после этого все пошло нормально, но дополнительно сделал контроль:
//КонтрольРаспределения
//
//Параметры
// Сумма - распределяемая сумма
// ТабЗн - таблица значений с распределением в поле "Сумма"
//
//Возвращаемое значение.
// Нет
//
//Описание
// Процедура проверяет, равна ли сумма распределенного исходной
// (может получиться в результате округления) и, в случае необходимости, изменяет распределение
// предварительно делается контроль, чтобы изменяемая сумма не стала отрицательной.
// При разнице больше 0,01 ничего не изменяется (причина отличия - другая)
//
Процедура КонтрольРаспределения(Сумма, ТабЗн)
Перем Разница, Итог;
Если ПустоеЗначение(ТабЗн)=1 Тогда
Возврат;
КонецЕсли;
Разница=Сумма-ТабЗн.Итог("Сумма");
Разница=Сумма-Итог;
Если (Разница<0.01) И (Разница>-0.01) Тогда
ТабЗн.ВыбратьСтроки();
Пока ТабЗн.ПолучитьСтроку()=1 Цикл
Если (ТабЗн.Сумма+Разница)<0 Тогда
Продолжить;
КонецЕсли;
ТабЗн.Сумма=ТабЗн.Сумма+Разница;
Прервать;
КонецЦикла;
Если Сумма<>ТабЗн.Итог("Сумма") Тогда
Сообщить("Ошибка округления.","!!!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
И в конце "глПроводкиЗаПериод" вставил строки
КонтрольРаспределения(Результат, ТаблицаРаспределения);
КонтрольРаспределения(Результат, ТаблицаРаспределенияЕСН);
КонтрольРаспределения(Результат, ТаблицаУчетаНалогаНаПрибыль);
Так что все решаемо!"
В функции "глПроводкиЗаПериод" точность полей "Сумма" в таблицах значений "ТаблицаРаспределения", "ТаблицаРаспределенияННП" и "ТаблицаРаспределенияЕСН" сделал 2 знака. Была 10 знаков после запятой.
Не понятно, зачем в бухгалтерских расчетах точность 10 знаков от зпт. ведь это не промежуточные значения, они выгружаются в бухралтерию, т.е. это суммы проводок!
В принципе, после этого все пошло нормально, но дополнительно сделал контроль:
//КонтрольРаспределения
//
//Параметры
// Сумма - распределяемая сумма
// ТабЗн - таблица значений с распределением в поле "Сумма"
//
//Возвращаемое значение.
// Нет
//
//Описание
// Процедура проверяет, равна ли сумма распределенного исходной
// (может получиться в результате округления) и, в случае необходимости, изменяет распределение
// предварительно делается контроль, чтобы изменяемая сумма не стала отрицательной.
// При разнице больше 0,01 ничего не изменяется (причина отличия - другая)
//
Процедура КонтрольРаспределения(Сумма, ТабЗн)
Перем Разница, Итог;
Если ПустоеЗначение(ТабЗн)=1 Тогда
Возврат;
КонецЕсли;
Разница=Сумма-ТабЗн.Итог("Сумма");
Разница=Сумма-Итог;
Если (Разница<0.01) И (Разница>-0.01) Тогда
ТабЗн.ВыбратьСтроки();
Пока ТабЗн.ПолучитьСтроку()=1 Цикл
Если (ТабЗн.Сумма+Разница)<0 Тогда
Продолжить;
КонецЕсли;
ТабЗн.Сумма=ТабЗн.Сумма+Разница;
Прервать;
КонецЦикла;
Если Сумма<>ТабЗн.Итог("Сумма") Тогда
Сообщить("Ошибка округления.","!!!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
И в конце "глПроводкиЗаПериод" вставил строки
КонтрольРаспределения(Результат, ТаблицаРаспределения);
КонтрольРаспределения(Результат, ТаблицаРаспределенияЕСН);
КонтрольРаспределения(Результат, ТаблицаУчетаНалогаНаПрибыль);
Так что все решаемо!"
Читают тему
(гостей: 1)