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

22.11.13

Разработка - Математика и алгоритмы

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

Скачать файлы

Наименование Файл Версия Размер
Распределение сумм по таблице значений (3.1.4.1)
.epf 20,05Kb
1299
.epf 20,05Kb 1299 Скачать
ОбработкаТабличнойЧастиТовары для УПП 1.2
.1231240790 54,73Kb
191
.1231240790 54,73Kb 191 Скачать
ОбработкаТабличнойЧастиТовары для БП 1.6
.1232111211 38,70Kb
201
.1232111211 38,70Kb 201 Скачать
ОбработкаТабличнойЧастиТовары для УТ 10.3
.1226181377 51,84Kb
342
.1226181377 51,84Kb 342 Скачать
ГрупповаяОбработкаМнЧДокументов для Комплексной 4.2
.1236084208 34,54Kb
96
.1236084208 34,54Kb 96 Скачать
ГрупповаяОбработкаМнЧДокументов для ТиС 9.2
.1226328763 24,56Kb
263
.1226328763 24,56Kb 263 Скачать
Только качественный контент

 

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

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

 

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


Вариант 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

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1753    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4415    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7458    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7854    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4444    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8833    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7798    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. seermak 665 31.10.08 16:05 Сейчас в теме
у меня есть что-то подобное ( при расчете сумм выслуги дается определенная сумма на организацию и надо ее всем распределить, ключая проценты снижения, и разные коэффициенты в зависимости от стажа работы). если интересно могу поделиться
61. Synoecium 778 26.11.13 06:43 Сейчас в теме
Нашел ошибку в реализации способа 4 с помощью одного запроса (4_3). Если ввести 2 строки с одинаковым весом и попытаться распределить 1 копейку этим способом, то в обеих строках будет стоять по 1 копейке.
Исправил, заменив строку 382 в модуле объекта:
СУММА(1) КАК НомерСтрокиОкругления
на
КОЛИЧЕСТВО(ВременнаяТаблицаРасчетов1.ВеличинаОтклонения) КАК НомерСтрокиОкругления

П.С. Ваша обработка очень помогла)
2. Shaman100M 1150 01.11.08 16:22 Сейчас в теме
у меня тоже, правда для семерки, третий вариант.
http://infostart.ru/profile/8196/projects/840/
3. alexk-is 6533 03.11.08 16:06 Сейчас в теме
Добавил еще один вариант. Назвал условно "Статистический". Методика распределения направлена на снижение средней ошибки округления, путем корректировки строк с наибольшей ошибкой (отклонением) при округлении.
Вариант реализации с запросом работает эффективно только при большом количестве строк (более нескольких десятков тысяч).
58. ildarovich 7850 22.11.13 17:03 Сейчас в теме
(3) Тоже считаю лучшим вариант 4 (как я его понял по словесному описанию). Однако обоснование кажется не совсем точным. При использовании этого варианта достигается не "снижение средней ошибки округления", а минимизация максимальной ошибки округления. С точки зрения средней ошибки все варианты равноценны.
60. alexk-is 6533 22.11.13 18:10 Сейчас в теме
(58) Это уже больше похоже на игры словами: "Кто точнее выразит мысль и сделает при этом меньше опечаток".

Мне больше всего нравится обоснование из поста (33)
В (36) тоже занятная картинка. Можно ли ее тоже считать обоснованием?
4. Трактор 1246 04.11.08 22:07 Сейчас в теме
Прикольно. Плюс за постановку вопроса.
5. alexk-is 6533 09.11.08 01:17 Сейчас в теме
Добавил пример использования в УТ на базе типовой обработки из версии 10.3.6.8. В обработке ОбработкаТабличнойЧастиТовары изменил процедуру РаспределитьСуммуПоКолонке.
Для использования можно заменить или процедуру РаспределитьСуммуПоКолонке, или целиком обработку ОбработкаТабличнойЧастиТовары.
6. alexk-is 6533 10.11.08 18:03 Сейчас в теме
Добавил пример использования в ТиС на базе типовой обработки из версии 7.70.954. В обработке ГрупповаяОбработкаМнЧДокументов изменил функцию РаспределитьСуммуПоКолонке и обработку константы РозничныйТипЦен в процедуре ПересчитатьСтрокуТаблицы.
Для использования можно заменить или процедуру РаспределитьСуммуПоКолонке, или целиком обработку ГрупповаяОбработкаМнЧДокументов.
7. alexk-is 6533 06.01.09 14:25 Сейчас в теме
Добавил пример использования в УПП на базе типовой обработки из версии 1.2.9.1. В обработке ОбработкаТабличнойЧастиТовары изменил процедуру РаспределитьСуммуПоКолонке.
Для использования можно заменить целиком обработку ОбработкаТабличнойЧастиТовары или только процедуру РаспределитьСуммуПоКолонке.
8. alexk-is 6533 16.01.09 16:13 Сейчас в теме
Добавил пример использования в БП на базе типовой обработки из версии 1.6.11.7. В обработке ОбработкаТабличнойЧастиТовары изменил процедуру РаспределитьСуммуПоКолонке.
Для использования можно заменить целиком обработку ОбработкаТабличнойЧастиТовары или только процедуру РаспределитьСуммуПоКолонке.
9. Сафик 20.02.09 12:28 Сейчас в теме
а можно получить подробную инструкцию добавления отчета для ТиС 9.2? Я не прогаммист и поэтому тяжеловато, а очень нужно :-(
10. alexk-is 6533 20.02.09 13:16 Сейчас в теме
(9) Это не отчет, а обработка...
1. Проверить соответствие версии конфигурации и обработки. 7.70.954
2. Скачать с сайта обработку и сохранить, например, на рабочий стол
3. Запустить 1С:Предприятие 7.7 в режиме "Конфигуратор" и выбрать соответствующую базу
4. Сделать архивную копию. В меню "Администрирование" - "Сохранить данные..." указать имя файла архива, например: db_20090220-1512.zip
5. Открыть конфигурацию. В меню "Конфигурация" - "Открыть конфигурацию"
6. В дереве конфигурации выделить строку "Обработки" - "ГрупповаяОбработкаМнЧДокументов"
7. В меню "Действия" - "Внешний отчет(обработка)" - "Заменить на внешний отчет(обработку)..." и указать имя скаченного файла на рабочем столе
8. Сохранить конфигурацию. В меню "Файл" - "Сохранить"
9. Закрыть конфигуратор и запустить базу в режиме 1С:Предприятия
10. Проверить работу обработки в документе реализация с заполненными строками. Нажать кнопку "Действия..." - "Изменить спецификацию". Сменить режим работы "Установить ставку НДС" на "Установить сумму по суммам". Ввести сумму. Нажать "Выполнить". Проверить результат
11. alexk-is 6533 20.02.09 13:24 Сейчас в теме
+10 Не "Установить сумму по суммам", а "Распределить сумму по суммам" - опечатался...
12. Сафик 20.02.09 13:35 Сейчас в теме
спасибо, все получилось
13. Shaman100M 1150 20.02.09 14:59 Сейчас в теме
14. LS 16.04.09 20:49 Сейчас в теме
В качестве примера, думаю, пригодится, спасибо!
15. alexk-is 6533 19.08.09 11:08 Сейчас в теме
Добавил распределение одним пакетным запросом для четвертого варианта.
16. RayCon 784 28.10.10 02:10 Сейчас в теме
Столько копий на эту тему сломано! Молодец, что взялся за решение проблемы!

Вот только остался открытым вопрос: а как правильно? :D
Было бы идеально, если ещё были бы даны рекомендации по применению каждого метода и озвучены ограничения на применение. И особенно важно осветить проблему не просто с точки зрения математики, а спроецировать математику на бухгалтерию и разобрать примеры с учётом сумм НДС.
19. alexk-is 6533 03.11.10 16:22 Сейчас в теме
(16) С НДС шутки плохи. Суммы по НДС должны быть такими, как в строках счет-фактур. Любое отклонение - налоговое преступление.

Данное исследование проводилось для коммунальных служб. Всё остальное просто развитие темы.
20. RayCon 784 03.11.10 22:49 Сейчас в теме
(19) Ну, так никто и не говорит о преступлении. :)
Речь идёт совсем о другом.

Поставщик оплатил продавцу некую сумму А, в т.ч. НДС=А*18/118. Продавец делает отгрузку из нескольких товарных позиций. Задача такова: каким образом рассчитать в накладной налогооблагаемую базу по НДС и сам НДС, чтобы итоговая сумма отгрузки без НДС была равна значению А*100/118, итоговая сумма НДС - значению А*18/118, а итоговая сумма, включая НДС, - значению А? При этом, естественно, по каждой строке сумма НДС должна составлять положенные по законодательству 18% от налогооблагаемой базы.

Поэтому вопрос о практическом применении предлагаемых алгоритмов можно рассматривать в следующей трактовке: какой из предложенных алгоритмов позволяет "размазать" округления по описанной выше матрице таким образом, чтобы решить поставленную задачу?
17. Worst 3 03.11.10 14:26 Сейчас в теме
Особенно интересно когда перегружаешь валютные документы в рублевые или наоборот...Спасибо автору за классификацию! Если бы еще бухгалтера могли понять это в своей массе! а то может случиться непонятка.
18. Worst 3 03.11.10 15:34 Сейчас в теме
Кстати у В Юровицкого - сподвижника Жириновского есть любопытная книженция по этой проблеме. Не то чтобы я с ним соглашаюсь, но там четко обозначается масштаб проблемы и подходы к решению.
21. nika14 18.10.11 16:44 Сейчас в теме
Здоровенская обработка!
22. пользователь 27.01.12 14:18
Сообщение было скрыто модератором.
...
23. svbel85 56 06.02.12 15:26 Сейчас в теме
полезный пример , спасибо
24. пользователь 18.02.12 13:38
Сообщение было скрыто модератором.
...
25. Кошки рулят 22.03.12 15:20 Сейчас в теме
Я всегда при распределении делаю так:
СуммаДляРаспределения=1000;
ВсегоБаза=Табл.Итог("База");
Табл.ВыбратьСтроки();
Пока Табл.ПолучитьСтроку() = 1 Цикл
БазаПоСтроке=Табл.База;
РаспределеноПоСтроке=Окр(БазаПоСтроке*СуммаДляРаспределения/ВсегоБаза,2,1);

ВсегоБаза=ВсегоБаза-БазаПоСтроке;
СуммаДляРаспределения=СуммаДляРаспределения-РаспределеноПоСтроке;
КонецЦикла;

В результате никогда не остается никаких хвостов требующих каких-то еще повторных распределений да еще к тому же каких-то "честных". Что я делаю не правильно?
Обработку качать и смотреть западло, но судя по описанию - фуфло галимое.
Hexed; OksDallas; +2 5 Ответить
26. alexk-is 6533 22.03.12 16:18 Сейчас в теме
(25)
> Я всегда при распределении делаю так:
Это почти вариант 3. Только без сортировки, а значит с большей погрешностью.

> В результате никогда не остается никаких хвостов требующих каких-то еще повторных распределений да еще к тому же каких-то "честных". Что я делаю не правильно?
Не берусь судить. Может быть дорогу переходите в неположенном месте?

> Обработку качать и смотреть западло
Разьве кто-то кого-то заставляет?

> но судя по описанию - фуфло галимое.
Ну, что же еще можно было ожидать от того, кто за два года не написал ни одного позитивного комментария и сам ничего так и не опубликовал...
freeek; DEG156; +2 Ответить
27. Кошки рулят 22.03.12 17:25 Сейчас в теме
(26) Не знаю что там в почти третьем варианте, да, собственно, и знать не хочу.
Мой вариант не требует никакой сортировки и не дает никаких погрешностей.
А если какие-то третьи варианты их дают, значит это фуфловые варианты и тратить время на эту обработку - это значит не уважать себя ...
28. Altair777 644 22.03.12 18:36 Сейчас в теме
(26)
Ну, что же еще можно было ожидать от того...

Верное замечание :) Тем более, что человек просто не понимает значения слова погрешность.
Метод, описанный в 25, не дает хвостов просто потому что он не может дать. Вся сумма будет распределена, но их погрешности могут быть большими.

А ведь даже самый лучший и "честный" метод может иметь непозволительные результаты.
Простой пример: распределить 3 коп на 2 строки, в каждой из которых по 1 коп. Точность - 1 коп.
29. Кошки рулят 22.03.12 18:53 Сейчас в теме
(28) Altair777, Сдается мне, что это ты не понимаешь значение слова "погрешность". Понятие погрешность в данном контексте вообще бессмысленно.
Автор этой глупой обработки жонглирует какими-то псевдонаучными понятиями, а толпа лохов внимает изобретателю свинтопрульного аппарата ...
30. Altair777 644 22.03.12 19:14 Сейчас в теме
(29) Кошки рулят,
Понятие погрешность в данном контексте вообще бессмысленно.

я же говорил - не понимаешь :)))
freeek; bulpi; +2 Ответить
31. пользователь 22.03.12 19:25
Сообщение было скрыто модератором.
...
32. пользователь 22.03.12 19:42
Сообщение было скрыто модератором.
...
33. alexk-is 6533 23.03.12 00:37 Сейчас в теме
(29) Про погрешность. Считаем по строкам сумму отклонений от "идеальной", т.е. максимально математически точную:
БазаПоСтроке * СуммаДляРаспределения / ВсегоБаза
На 3000 строк раскидываем 10 рублей

Вариант 1. Сумма отклонений: 2,20999953732376972592242046022
Вариант 2. Сумма отклонений: 1,2641759109412526656930230297
Вариант 3. Сумма отклонений: 0,63393937726647997736821462216
Вариант 4. Сумма отклонений: 0,3776659164007059985008264175
Ваш вариант. Сумма отклонений: 2,73341800769621530044471409828

Вариант 5 дает с 10 рублей 2.73 рубля отлонений от "идеальной".
Да, конечно, во всех 5 вариантах распределяютя все 10 рублей до копеечки. Но поделить-то можно по разному - поровну, по чесному или просто свалить всё на одну строку.
SagittariusA; bulpi; RickyTickyTok; freeek; Felicia; akor77; SirYozha; +7 Ответить
34. Кошки рулят 23.03.12 02:41 Сейчас в теме
(33) (33) Бред сивой кабылы в ясную лунную ночь ...
35. alexk-is 6533 23.03.12 07:18 Сейчас в теме
(34) Серьёзный аргумент. А я уж было подумал, что претензии действительно серьёзные и придется что-то долго и нудно объяснять. А так просто смотрим картинку и считаем по строке 3043 для варианта 5.
БазаПоСтроке * СуммаДляРаспределения / ВсегоБаза
Расчет по варианту 5:
2 * 10 / 4754944.94 = 0.01
Расчет по формуле в табло 1С:
2 * 10 / 4754944.94 = 0.000004206147547946159813998
Отклонение по строке 3043 для варианта 5
0.01 - 0.000004206147547946159813998 = 0.009995793852452053840186002

Замечу, что только вариант 1 и вариант 5 дают столь неожиданные результаты. Разумеется, что ничего этого не будет при распределении больших сумм всего по нескольким строкам.
Здесь уместнее говорить о накапливаемой погрешности при округлении. В вариантах 1 и 5 этот момент не учтен.
Прикрепленные файлы:
45. nickVZ 10 23.03.12 17:45 Сейчас в теме
(35) вообще-то, правильный аргумент, но не раскрытый.
Рассмотрим алгоритм в (25). Предположим, мы его запсочили в некую функцию, на входе в которую первым аргументом включаем сумму распределяемую, вторым - список с "весами". На выходе имеем список с распределенными суммами.
Как следует из (26), это и есть "вариант 3". "Предварительная сортировка" есть предварительная сортировка, никак не относящаяся к алгориту, а только определяющая список, как таковой.
Смотрим недостатки этой функции. Во-первых, и это существенно, нужны еще параметры: точность округления раз, и направление округления, два. Это когда надо заранее оговорить: 0.5 - это 1.0 или 0.0?
Во вторых, что много существеннее, надо предусмотреть деление на 0. Увы нам, но "база" из +1 и -1 обеспечит нам если не голубой экран, то неприятное сообщение точно :)
И вот тут, чтоб построить правильный алгоритм, надо представить данные "геометрически". Ну, как на каком-то графике. После этого понимаем, что нужны еще две манипуляции: сдвиг осей графика так, чтоб все точки оказались в правой верхней четверти, и, после распределения, вертание осей взад ;)
Приятного размышления :D
48. alexk-is 6533 23.03.12 19:23 Сейчас в теме
(45) Нужно как-то уже определяться.
Сначала приводите для примера не очень удачную реализацию (25). Потом хаете её, при этом утверждая, что автор варианта 5 хоть и груб, но во всем абсолютно прав. А потом описываете схему работы варианта 3 как желаемую. Хотя вариант 3 уже работает у меня по этой схеме лет этак 20.

И вообще, почему привязались к варианту 3? Все варианты (1,2,3) приведены в публикации только для того, чтобы можно было сравнить результаты их работы с вариантом 4. Именно варианту 4 в основном и посвящена эта публикация.

Если что-то и обсуждать, так это вариант 4. (самый "честный")
49. nickVZ 10 23.03.12 21:35 Сейчас в теме
(48) Ну, если определятся, так давайте определятся. Вначале избавимся от слов-паразитов: "честный", "справедливый". Осетрина бывает или единственной свежести, или протухшей, калькулятор либо работающий, либо сломанный. Так что говорить о разработке конкретно готов при описании ее в профессиональных, однозначных терминах.
В (45) я хотел всего лишь показать, что задача распределения по списку, и задача составления списка (частный случай: сортировка) - это совершенно разные процедуры. Не надо их совмещать в один модуль. Комбинировать - да. В подавляющем большинстве - да. Но речь-то о распределении, нет?
В разговор встрял только потому, что заметил демагогию в (28).
О чем искренне сожалею. Не о том, что заметил, а о том, что встрял.
Приятной беседы.
50. alexk-is 6533 23.03.12 21:59 Сейчас в теме
(49) Да, речь о распределении.
Интересно как можно разделить распределение по списку и составление списка для варианта 4?
51. Altair777 644 26.03.12 14:08 Сейчас в теме
(49) nickVZ, и в чем же демагогия?
36. alexk-is 6533 23.03.12 09:12 Сейчас в теме
(28) Честно говоря из объяснения так и не понял за что минус?
Приведенный пример с распределением 3 копеек, наверное, не совсем корректен. При одинаковых базах распределения не важно куда будет отнесена копейка, лишь бы не потерялась.

Интереснее получается результат, когда базы распределения почти одинаковые.
Прикрепленные файлы:
37. Altair777 644 23.03.12 12:01 Сейчас в теме
(36) про какой минус ты говоришь?
Одинаковые базы я взял просто для примера, что бы кошкам легче было считать :)
38. alexk-is 6533 23.03.12 12:38 Сейчас в теме
(37) Какой минус? Обыкновенный. Точнее так, для меня это второй "обыкновенный" минус.

22.03.2012 19:29:13
Новый голос за "Честное распределение суммы по таблице значений (3.1.4.1)" от пользователя Altair777.
Оценка: -1


Как про тот минус не смог добиться ответа, так и про этот тоже не могу понять "за что"?
Тоже не нравится публикация? Тоже считаешь её "Бредом сивой кабылы в ясную лунную ночь"?
39. Altair777 644 23.03.12 14:09 Сейчас в теме
(38) извини! Я промахнулся :)
уже исправил, причем дважды
40. alexk-is 6533 23.03.12 14:22 Сейчас в теме
(39) А-а-а-а, ну, тогда ладно...
41. Altair777 644 23.03.12 14:32 Сейчас в теме
(40) а какой еще тот минус?
42. alexk-is 6533 23.03.12 14:51 Сейчас в теме
(41) Вот тут http://infostart.ru/public/66680/
Спросил в личку, молчит. Так я и не узнал, чем плохо поздравлять красавиц с 8 марта?
43. Altair777 644 23.03.12 14:53 Сейчас в теме
(42) я уже подумал что ты про какой-то мой минус сказал
44. nickVZ 10 23.03.12 17:10 Сейчас в теме
А ведь даже самый лучший и "честный" метод может иметь непозволительные результаты.
Простой пример: распределить 3 коп на 2 строки, в каждой из которых по 1 коп. Точность - 1 коп.

Блестяще. А что "позволительно"? Применить "полторы копейки"? Здесь вариантов просто нет: 2+1. И если объекты распределения равнозначны, то иного и не будет. А перестановка объектов местами не имеет никакого отношения к алгоритму, ибо алгоритм не следит, на какой объект вы глядите более ласково.
Некорректными примерами доказывать корректность своих убеждений? Как НТВ?
P.S. Нет, меня не радует резкость персонажа "Кошки рулят". Но хоть какой бы не был этот персонаж отрицательным - он прав: для распределения числа по списку мало одного "веса", чтоб претендовать на "справедливость". Надо еще иметь параметры для сортировки списка. Коэффициент "все равны, а этот равнее на ххх.ххх".
46. Altair777 644 23.03.12 18:03 Сейчас в теме
(44) nickVZ,
Коэффициент "все равны, а этот равнее на ххх.ххх".

ха-ха-ха :) у меня этот лозунг в профиле записан
Все животные равны, но некоторые равнее других
© Джордж Оруэлл "Скотный двор"


Кошки вообще ничего не говорили (тем более, кошки вообще говорить не умеют :) ) по поводу веса и справедливости. В том алгоритме - кто первый встал, того и тапочки.
А пример с 3 копейки как раз и утверждает, что справедливого на 100% алгоритма не может существовать. Там так и написано.
47. alexk-is 6533 23.03.12 18:37 Сейчас в теме
(46) Начнем с того, что с самого начала "честный" было написано в кавычках, т.е. уже 3,5 года.

По поводу "В том алгоритме - кто первый встал, того и тапочки".
А вот и нет. По варианту в (25) на больших массивах информации погрешность может активно накапливаться и "тапки" будут розданы самым неожиданным образом. См. картинку в (35)
52. dyh 4 25.04.12 09:25 Сейчас в теме
Скачал, вставил все варианты в печатную, предупредил о бессмысленности таких перераспределений, т.к. правильная сумма важнее, дал ссылок на статьи... Зато бух теперь играется - каким же вариантом получатся одинаковые суммы для равноценной номенклатуры? )) Как показывает практика, универсального рецепта нет. (

PS Пересчет из уе в руб при печати счетов на оплату.
53. пользователь 27.06.12 11:55
Сообщение было скрыто модератором.
...
54. ZLENKO 398 18.07.12 15:50 Сейчас в теме
А если в базе распределения будут не только положительные суммы а и отрицательные - алгоритмы корректно будут работать ?
55. alexk-is 6533 18.07.12 16:02 Сейчас в теме
56. Miha.L 06.12.12 17:55 Сейчас в теме
Варианты "честного" распределения суммы по таблице значений
Это от того, что последняя копейка все равно не ляжет правильно, или как ?
А вообще, интересная разработка.
Автор - молодец. Мой +
57. Synoecium 778 22.11.13 09:09 Сейчас в теме
Тема интересная, подход основательный, конечно плюс за такую работу.
Вот только что за куча файлов доступна для скачки, какой из них нужный?
59. alexk-is 6533 22.11.13 17:45 Сейчас в теме
(57) Куда-то делись названия файлов. Исправил.
62. endym 214 02.12.13 16:46 Сейчас в теме
Соглашусь что проблема не новая;)
Как обстоят дела с сверх малыми суммами?;)
ставится ли минимальное значение 0,01 или вообще 0?

З.Ы. распределение через коэффициент доли суммы строки из общей суммы, плюс нахождение наибольшего значения суммы (для уменьшения погрешности исчисления) для добавления последней распределенной по модулю копейки.
63. alexk-is 6533 02.12.13 17:09 Сейчас в теме
(62) А если взять, да попробовать, то как? Получилось?
64. jsmith 04.12.13 12:04 Сейчас в теме
65. tailer2 18.08.15 18:22 Сейчас в теме
Оптимальность распределения - вещь в себе, однозначно :)
Ибо куда ни кинь, значение будет отличаться от округленного вычисленного по формуле.

Единственно возможный критерий - незаметность.

Ошибку округления нельзя устранить, ее можно только спрятать. Поэтому критерий - незаметность.

А незаметность достигается в цикле по единицам округления (копейкам).
Каждую копейку - отдельно по критерию незаметности на каждом шаге распределения.

А этого в одном запросе не достигнешь по той простой причине, что неизвестно количество копеек.

Значит, на сколько копеек надо поправить итог, столько раз пробегаем строки таблицы.

Вся фишка в том, чтобы найти, куда сунуть очередную копейку, за один проход.
66. qwerty45 5 02.01.19 15:05 Сейчас в теме
Здравствуйте! Хочу подключить обработку к УТ 10,3. В Реквизитах в поле ДокументОбъект добавил ЧекККМ. Обработка сохранена в базу, на документе ЧекККМ добавлена кнопка для запуска обработки. При нажатии получаю : "Не задан документ для обработки..." Что не доделано?
Оставьте свое сообщение