Только качественный контент |
Вы, наверное замечали, что при большом количестве строк распределяемая сумма распределяется не "по честному".
В данной обработке приведены несколько методов распределения суммы по таблице значений. При изменении суммы распределения и порядка строк базы можно получать совершенно разные результаты.
Вариант 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 можно использовать следующий порядок действий:
- Проверить соответствие версии конфигурации и обработки. 7.70.954
- Скачать с сайта обработку и сохранить, например, на рабочий стол
- Запустить 1С:Предприятие 7.7 в режиме "Конфигуратор" и выбрать соответствующую базу
- Сделать архивную копию. В меню "Администрирование" - "Сохранить данные..." указать имя файла архива, например: db_20090220-1512.zip
- Открыть конфигурацию. В меню "Конфигурация" - "Открыть конфигурацию"
- В дереве конфигурации выделить строку "Обработки" - "ГрупповаяОбработкаМнЧДокументов"
- В меню "Действия" - "Внешний отчет(обработка)" - "Заменить на внешний отчет(обработку)..." и указать имя скаченного файла на рабочем столе
- Сохранить конфигурацию. В меню "Файл" - "Сохранить"
- Закрыть конфигуратор и запустить базу в режиме 1С:Предприятия
- Проверить работу обработки в документе реализация с заполненными строками. Нажать кнопку "Действия..." - "Изменить спецификацию". Сменить режим работы "Установить ставку НДС" на "Распределить сумму по суммам". Ввести сумму. Нажать "Выполнить". Проверить результат
[03.11.2008] Добавлен вариант 4 (самый "честный"
[09.11.2008] Пример для УТ 8.
[10.11.2008] Пример для ТиС 7.
[06.01.2009] Пример для УПП 8.
[16.01.2009] Пример для БП 8.1