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

22.11.13

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

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

 

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

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

 

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


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

34

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

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

19.10.2023    5738    user1959478    50    

35

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

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    2267    maksa2005    8    

24

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

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

1 стартмани

09.06.2023    9018    7    SpaceOfMyHead    17    

60

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

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    3540    RustIG    7    

25

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

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

23.11.2022    2631    gzharkoj    14    

24

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

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

1 стартмани

21.03.2022    8421    7    kalyaka    11    

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

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

Мне больше всего нравится обоснование из поста (33)
В (36) тоже занятная картинка. Можно ли ее тоже считать обоснованием?
4. Трактор 1249 04.11.08 22:07 Сейчас в теме
Прикольно. Плюс за постановку вопроса.
5. alexk-is 6540 09.11.08 01:17 Сейчас в теме
Добавил пример использования в УТ на базе типовой обработки из версии 10.3.6.8. В обработке ОбработкаТабличнойЧастиТовары изменил процедуру РаспределитьСуммуПоКолонке.
Для использования можно заменить или процедуру РаспределитьСуммуПоКолонке, или целиком обработку ОбработкаТабличнойЧастиТовары.
6. alexk-is 6540 10.11.08 18:03 Сейчас в теме
Добавил пример использования в ТиС на базе типовой обработки из версии 7.70.954. В обработке ГрупповаяОбработкаМнЧДокументов изменил функцию РаспределитьСуммуПоКолонке и обработку константы РозничныйТипЦен в процедуре ПересчитатьСтрокуТаблицы.
Для использования можно заменить или процедуру РаспределитьСуммуПоКолонке, или целиком обработку ГрупповаяОбработкаМнЧДокументов.
7. alexk-is 6540 06.01.09 14:25 Сейчас в теме
Добавил пример использования в УПП на базе типовой обработки из версии 1.2.9.1. В обработке ОбработкаТабличнойЧастиТовары изменил процедуру РаспределитьСуммуПоКолонке.
Для использования можно заменить целиком обработку ОбработкаТабличнойЧастиТовары или только процедуру РаспределитьСуммуПоКолонке.
8. alexk-is 6540 16.01.09 16:13 Сейчас в теме
Добавил пример использования в БП на базе типовой обработки из версии 1.6.11.7. В обработке ОбработкаТабличнойЧастиТовары изменил процедуру РаспределитьСуммуПоКолонке.
Для использования можно заменить целиком обработку ОбработкаТабличнойЧастиТовары или только процедуру РаспределитьСуммуПоКолонке.
9. Сафик 20.02.09 12:28 Сейчас в теме
а можно получить подробную инструкцию добавления отчета для ТиС 9.2? Я не прогаммист и поэтому тяжеловато, а очень нужно :-(
10. alexk-is 6540 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 6540 20.02.09 13:24 Сейчас в теме
+10 Не "Установить сумму по суммам", а "Распределить сумму по суммам" - опечатался...
12. Сафик 20.02.09 13:35 Сейчас в теме
спасибо, все получилось
13. Shaman100M 1151 20.02.09 14:59 Сейчас в теме
14. LS 16.04.09 20:49 Сейчас в теме
В качестве примера, думаю, пригодится, спасибо!
15. alexk-is 6540 19.08.09 11:08 Сейчас в теме
Добавил распределение одним пакетным запросом для четвертого варианта.
16. RayCon 786 28.10.10 02:10 Сейчас в теме
Столько копий на эту тему сломано! Молодец, что взялся за решение проблемы!

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

Данное исследование проводилось для коммунальных служб. Всё остальное просто развитие темы.
20. RayCon 786 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 59 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 6540 22.03.12 16:18 Сейчас в теме
(25)
> Я всегда при распределении делаю так:
Это почти вариант 3. Только без сортировки, а значит с большей погрешностью.

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

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

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

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

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

я же говорил - не понимаешь :)))
freeek; bulpi; +2 Ответить
31. пользователь 22.03.12 19:25
Сообщение было скрыто модератором.
...
32. пользователь 22.03.12 19:42
Сообщение было скрыто модератором.
...
33. alexk-is 6540 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 6540 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 6540 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 6540 23.03.12 21:59 Сейчас в теме
(49) Да, речь о распределении.
Интересно как можно разделить распределение по списку и составление списка для варианта 4?
51. Altair777 645 26.03.12 14:08 Сейчас в теме
(49) nickVZ, и в чем же демагогия?
36. alexk-is 6540 23.03.12 09:12 Сейчас в теме
(28) Честно говоря из объяснения так и не понял за что минус?
Приведенный пример с распределением 3 копеек, наверное, не совсем корректен. При одинаковых базах распределения не важно куда будет отнесена копейка, лишь бы не потерялась.

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

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


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

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

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


Кошки вообще ничего не говорили (тем более, кошки вообще говорить не умеют :) ) по поводу веса и справедливости. В том алгоритме - кто первый встал, того и тапочки.
А пример с 3 копейки как раз и утверждает, что справедливого на 100% алгоритма не может существовать. Там так и написано.
47. alexk-is 6540 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 6540 18.07.12 16:02 Сейчас в теме
56. Miha.L 06.12.12 17:55 Сейчас в теме
Варианты "честного" распределения суммы по таблице значений
Это от того, что последняя копейка все равно не ляжет правильно, или как ?
А вообще, интересная разработка.
Автор - молодец. Мой +
57. Synoecium 782 22.11.13 09:09 Сейчас в теме
Тема интересная, подход основательный, конечно плюс за такую работу.
Вот только что за куча файлов доступна для скачки, какой из них нужный?
59. alexk-is 6540 22.11.13 17:45 Сейчас в теме
(57) Куда-то делись названия файлов. Исправил.
62. endym 215 02.12.13 16:46 Сейчас в теме
Соглашусь что проблема не новая;)
Как обстоят дела с сверх малыми суммами?;)
ставится ли минимальное значение 0,01 или вообще 0?

З.Ы. распределение через коэффициент доли суммы строки из общей суммы, плюс нахождение наибольшего значения суммы (для уменьшения погрешности исчисления) для добавления последней распределенной по модулю копейки.
63. alexk-is 6540 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. В Реквизитах в поле ДокументОбъект добавил ЧекККМ. Обработка сохранена в базу, на документе ЧекККМ добавлена кнопка для запуска обработки. При нажатии получаю : "Не задан документ для обработки..." Что не доделано?
Оставьте свое сообщение