Честное распределение суммы по таблице значений (3.1.4.1)


Варианты "честного" распределения суммы по таблице значений (табличной части)
Только качественный контент

Вы, наверное замечали, что при большом количестве строк распределяемая сумма распределяется не "по честному".

В данной обработке приведены несколько методов распределения суммы по таблице значений. При изменении суммы распределения и порядка строк базы можно получать совершенно разные результаты.«Охрана труда» для 1С:Предприятия 8.2

Распределение сумм по таблице значений


Вариант 1. "Стандартный" с отнесением не распределенных сумм на последнюю строку. Чаще всего встречается в программах 1С.

Вариант 2. "По эффективному остатку". Остаток округления распределяется повторно по новому коэффициенту на столько строк сколько осталось копеек. Пока все остатки не распределятся. При этом выбираются строки с наибольшей базой.

Вариант 3. "С пересчетом базы распределения". Строки сортируются по базе распределения. После распределения по строке уточняется база распределения для последующих строк. Работает сравнительно быстро с учетом объема математики.

Вариант 4. "Статистический". Как мне кажется наиболее точный. Остаток округления распределяется на столько строк сколько осталось копеек. При этом выбираются строки с наибольшей погрешностью в округлении. Реализован несколькими способами, в т.ч. с использованием всего одного пакетного запроса.

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

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

Для четвертого варианта есть четыре реализации: по таблице значений, по табличной части и по таблице значений через запросы. 


Примеры использования для типовых конфигураций 1С:Предприятия 8.1

В обработке ОбработкаТабличнойЧастиТовары изменил процедуру РаспределитьСуммуПоКолонке. Исправлены ошибки распределения сумм типовых конфигураций.

  • Пример использования в УТ на базе типовой обработки из версии 10.3.6.8
  • Пример использования в УПП на базе типовой обработки из версии 1.2.21.1
  • Пример использования в БП на базе типовой обработки из версии 1.6.14.4


Примеры использования для типовых конфигураций 1С:Предприятия 7.7

В обработке ГрупповаяОбработкаМнЧДокументов изменил функцию РаспределитьСуммуПоКолонке и обработку константы РозничныйТипЦен в процедуре ПересчитатьСтрокуТаблицы. Работает "правильнее" (исправлены ошибки) и быстрее типовой.

  • Пример использования в ТиС на базе типовой обработки из версии 7.70.954
  • Пример использования в Комплексной на базе типовой обработки из версии 7.70.487

Обработки для ТиС и Комплексной абсолютно одинаковые, поэтому можно использовать любой архив.


Инструкция по установке для 1С:Предприятия 7.7

Для установки обработок в конфигурации 1С:Предприятия 7.7 можно использовать следующий порядок действий:

  1. Проверить соответствие версии конфигурации и обработки. 7.70.954
  2. Скачать с сайта обработку и сохранить, например, на рабочий стол
  3. Запустить 1С:Предприятие 7.7 в режиме "Конфигуратор" и выбрать соответствующую базу
  4. Сделать архивную копию. В меню "Администрирование" - "Сохранить данные..." указать имя файла архива, например: db_20090220-1512.zip
  5. Открыть конфигурацию. В меню "Конфигурация" - "Открыть конфигурацию"
  6. В дереве конфигурации выделить строку "Обработки" - "ГрупповаяОбработкаМнЧДокументов"
  7. В меню "Действия" - "Внешний отчет(обработка)" - "Заменить на внешний отчет(обработку)..." и указать имя скаченного файла на рабочем столе
  8. Сохранить конфигурацию. В меню "Файл" - "Сохранить"
  9. Закрыть конфигуратор и запустить базу в режиме 1С:Предприятия
  10. Проверить работу обработки в документе реализация с заполненными строками. Нажать кнопку "Действия..." - "Изменить спецификацию". Сменить режим работы "Установить ставку НДС" на "Распределить сумму по суммам". Ввести сумму. Нажать "Выполнить". Проверить результат

 

[03.11.2008] Добавлен вариант 4 (самый "честный"
[09.11.2008] Пример для УТ 8.
[10.11.2008] Пример для ТиС 7.
[06.01.2009] Пример для УПП 8.
[16.01.2009] Пример для БП 8.1

Файлы обработки:

-