Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Формирование формы АДВ-6-2 суммы уплаты не идут на копейки (http://forums.kuban.ru/f1040/formirovanie_formy_adv-6-2_summy_uplaty_ne_idut_na_kopejki-2542033.html)

Gorr 26.04.2012 16:52

Формирование формы АДВ-6-2 суммы уплаты не идут на копейки
 
При печати пачки АДВ-6-2 суммы перечисленного разнятся на копейки с тем что было зарегистрировано документами "РасчетыПоСтраховымВзносам"
Что не так?

victuan 26.04.2012 17:18

Несовершенный алгоритм распределения уплат по сотрудникам в типовых конфигурациях. Он основан на общих коэффициентах.
Подробнее здесь: [url]http://infostart.ru/catalog/88231/[/url]
"[em]Вторая особенность механизма ЗИК. Как было показано ранее, ЗИК распределяет оплату на застрахованных по общим коэффициентам: (ОплаченоВсегоПред / НачисленоВсегоЗаПред) и (ОплаченоВсегоЗаТек / НачисленоВсего). Т.к. результат расчетов приходится округлять до двух знаков после запятой (до копеек), то это неизбежно приводит к тому, что образуются ошибки округления при расчетах. Их два рода:
1) Сумма "Оплачено всего по организации" не совпадет с суммой распределенных оплат по сотрудникам. Это расхождение может составить всего несколько копеек, а может достигнуть и рублей.
Пример. Пусть имеется 1000 работников, каждому начислено взносов по 100 рублю, итого начислено по организации - 100 000 руб. Пусть организация оплатила на всю организацию 99 995 руб. Как штатный механизм распределит эту сумму по сотрудникам? Очевидно, каждому достанется 100 * (99 995 / 100 000) = 99.995 руб., округляем до копеек и получаем на каждого сотрудника 100.00 руб. Итого суммарно по сотрудникам 100 000 руб., но ведь к уплате было дано 99 995 руб.![/em]"

Gorr 26.04.2012 22:13

да видел я как там делается, но это же неверно. зачем так сделали в 1С. какими высшими материями руководсововались при разработке алгоритма?

victuan 27.04.2012 04:55

2-Gorr >Расскажи, как надо было. Хочу послушать высшие материи из твоих уст.

Gorr 27.04.2012 09:53

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

ТабИсчисленоВзносов.ВыбратьСтроки();
Пока ТабИсчисленоВзносов.ПолучитьСтроку()=1 Цикл

КоэффициентСтраховая = 0;
КоэффициентНакопительная = 0;

ДатаПериода = ТабИсчисленоВзносов.ОтчетныйПериод;
НомСтроки = "";
Если ТабУплатыВзносов.НайтиЗначение(ДатаПериода,НомСтроки,"ОтчетныйПериод")=1 Тогда
КоэффициентСтраховая = ТабУплатыВзносов.ПолучитьЗначение(НомСтроки,"КоэффициентСтраховая");
КоэффициентНакопительная = ТабУплатыВзносов.ПолучитьЗначение(НомСтроки,"КоэффициентНакопительная");
КонецЕсли;

ТабИсчисленоВзносов.Ключ = ПолучитьКлючСотрудника(ТабИсчисленоВзносов.Сотрудник,ТабИсчисленоВзносов.КатегорияЗЛ);
ТабИсчисленоВзносов.УплаченоСтраховая = ОКР(ТабИсчисленоВзносов.ИсчисленоСтраховая * КоэффициентСтраховая,2);
ТабИсчисленоВзносов.УплаченоНакопительная = ОКР(ТабИсчисленоВзносов.ИсчисленоНакопительная * КоэффициентНакопительная,2);

Если ДатаПериода<>ТекущийОтченыйПериод Тогда
ТабИсчисленоВзносов.ИсчисленоСтраховая = 0;
ТабИсчисленоВзносов.ИсчисленоНакопительная = 0;
КонецЕсли;

//+
если (ТабИсчисленоВзносов.НомерСтроки = ТабИсчисленоВзносов.КоличествоСтрок()) тогда
ТабИсчисленоВзносов.УплаченоСтраховая = ОсталосьРаспределитьСтраховая;
ТабИсчисленоВзносов.УплаченоНакопительная = ОсталосьРаспределитьНакопительная;
конецесли;
ОсталосьРаспределитьСтраховая = ОсталосьРаспределитьСтраховая - ТабИсчисленоВзносов.УплаченоСтраховая;
ОсталосьРаспределитьНакопительная = ОсталосьРаспределитьНакопительная - ТабИсчисленоВзносов.УплаченоНакопительная;
//->

КонецЦикла;

По поводу взаиморасчетов можно было бы и новый журнал расчетов в конфигурацию добавить. Но решений может быть несколько. Промежуточную информацию хранить все таки нужно.

Gorr 27.04.2012 09:56

+В любом случае это дело 1С. Разве не 1С взяла на себя ответственность за разработку и реализацию алгоритмов.

Ткачик 27.04.2012 09:56

(4) "за счет корректировки копеек на последнем сотруднике в списке" - а если общей уплаты по последнему не хватает на корректировку?

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

Gorr 27.04.2012 09:58

(6) это уже детали реализации

Gorr 27.04.2012 10:16

+7
То, что 1С деньги нехилые и с простых пользователей, а сейчас еще и с партнеров дерет и при этом продолжает работать как всегда, когда-нибудь уже заставит людей задуматься...

victuan 27.04.2012 18:36

деццкий сад...


Текущее время: 14:57. Часовой пояс GMT +3.