gifts2017

Многосторонние взаимозачеты – часть 2.

Опубликовал Sergej Mashkov (samashkov) в раздел Управление - Теория учета

За опубликованием моей статьи «Многосторонние взаимозачеты – заблуждения и порядок осуществления расчетов» http://infostart.ru/public/85656/ последовала оживленная дискуссия, в результате которой автор решил опубликовать вторую часть статьи, в которой дать ответы на вопросы, заданные автору во время обсуждения

Многосторонние взаимозачеты – часть 2.

МАШКОВ Сергей Алексеевич

От автора.

За опубликованием моей статьи «Многосторонние взаимозачеты – заблуждения и порядок осуществления расчетов» http://infostart.ru/public/85656/ последовала оживленная дискуссия, в основном сводящаяся к обсуждению, возможно ли алгоритмизировать предложенный автором метод, насколько это сложно, и какова вероятность того, что если создать на основе идеи автора программный продукт, то он будет иметь коммерческий успех на рынке программного обеспечения. Результат этой дискуссии, насколько понял автор, таков:

(1) предложенный автором метод, по - видимому, поддается алгоритмизации,

(2) разработка отдельных блоков алгоритма для некоторых членов сообщества программистов 1С представляют определенные трудности,

(3) совсем не очевидно, что если программный продукт на основе идеи автора будет создан, то каждый предприниматель, каждая компания пожелают его приобрести. Более того, высказываются сомнения в том, что вообще этот программный продукт будет востребован на рынке программного обеспечения.

Кроме того, в своих комментариях некоторые читатели высказывали суждения и утверждения, которые автор считает ошибочными. Эти высказанные ошибочные положения, по мнению автора, обусловлены с одной стороны тем, что некоторые читатели недостаточно внимательно читали текст статьи так сказать «по диагонали»; с другой стороны – некоторые положения и допущения, которые автор считал очевидными, само собой разумеющимися, для некоторых читателей не являлись таковыми; с третьей стороны, возможно, некоторые важные для понимания моменты автором в статье были изложены недостаточно подробно.

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

 Односвязные и многосвязные множества участников многостороннего взаимозачета.

Автор приносит извинения перед теми читателями – бухгалтерами, многих из которых вероятно отпугивают такие математические термины, как множество, подмножество, граф, односвязный граф, многосвязный граф и т.д. Как вы сможете убедиться, если пересилите себя и продолжите чтение, ничего особо сложного в этой премудрости нет. В то же время я прошу прощения и у программистов, которым многое (а может быть даже все) из того, о чем будет речь идти ниже, хорошо знакомо.

Так как статья предназначена и для программистов, и для не программистов (даже в основном для не программистов, а для бухгалтеров, экономистов, топ – менеджеров, предпринимателей), то работу алгоритма, я буду объяснять на числовом примере. Для тех программистов, которые захотят реализовать этот алгоритм на 1С, этот числовой пример может явиться отладочными данными.

Пусть некоторое количество лиц (юридических или физических – для рассмотрения работы алгоритма неважно) решили провести многосторонний взаимозачет своих дебиторских и кредиторских задолженностей друг другу. Они собрались все вместе, и каждый представил список своих дебиторских и кредиторских задолженностей. Все числовые данные в этом примере произвольные. На основе этих данных был составлен общий список всех участников многостороннего взаимозачета и составлена таблица задолженностей – кто кому и сколько должен. Пусть оказалось, что общее количество участников – 22 (А1, А2, А3, … А22), а общее количество задолженностей – 26. Эти задолженности представлены в таблице 1.

Табл. 1

Дебитор

Кредитор

Задолженность

1

А1

А6

301

2

А2

А21

302

3

А3

А19

303

4

А4

А17

304

5

А4

А22

305

6

А5

А12

306

7

А5

А16

307

8

А6

А10

308

9

А7

А13

309

10

А8

А17

310

11

А8

А20

311

12

А9

А18

312

13

А9

А5

313

14

А9

А21

314

15

А10

А1

315

16

А11

А7

316

17

А11

А15

317

18

А14

А16

318

19

А15

А22

319

20

А16

А9

320

21

А19

А11

321

22

А19

А13

322

23

А20

А4

323

24

А20

А7

324

25

А20

А15

325

26

А21

А5

326

Итак, имеется множество участников многостороннего взаимозачета в количестве 22-х участников. Кроме того, имеется множество задолженностей в количестве 26. Все эти 26 задолженностей являются дебиторскими для участников, фигурирующих в колонке под наименованием «Дебиторы» и эти же 26 задолженностей являются кредиторскими, для участников, наименования которых приведены в колонке озаглавленной «Кредиторы».

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

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

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

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

Алгоритм разложения произвольного множества участников на односвязные подмножества

Итак, даны два множества - множество участников (А1, А2, А3, … А22) и множество задолженностей этих участников друг другу, представленных в таблице 1.

Нахождение 1-го односвязного подмножества

Шаг 1.

Начинаем формировать первое односвязное подмножество участников и соответствующее ему первое односвязное подмножество задолженностей. Для этого выделим 1-ю строку таблицы 1 и сформируем первое односвязное подмножество участников, состоящее пока только из 2-х элементов (А1 и А6). Первая строка соответствующего односвязного подмножества задолженностей состоит пока из одной задолженности, из одного элемента – строки 1 таблицы 2. Из таблицы 1 вычеркиваем строку 1, в смысле не удаляем, чтобы номера строк у оставшейся части таблицы не сбились, а зачеркиваем, или каким-либо другим образом отмечаем, что эта строка уже использована.

Табл.2

Дебитор

Кредитор

Задолженность

1

А1

А6

301

 Шаг 2.

Просматриваем в цикле все остальные строки таблицы 1, начиная со строки 2 и по 26, с целью нахождения такого элемента множества задолженностей, в котором или дебитор, или кредитор совпадает с элементом А1. Такой элемент нашелся. Это строка 15, в которой дебитор – А10, кредитор – А1. Добавляем элемент А10 в первое односвязное подмножество участников, которое теперь стало состоять из 3-х элементов (А1, А6 и А10). Соответственно, строку 15 таблицы 1 добавляем в таблицу 2, получая таблицу 3, и вычеркиваем эту строку 15 из таблицы 1.

В таблицах 2, 3 и всех последующих в первой колонке с наименованием «№» указан не номер по порядку в этой таблице, а номер строки в таблице 1, откуда была перемещена данная строка и помещена в эту таблицу.

Табл.3

Дебитор

Кредитор

Задолженность

1

А1

А6

301

15

А10

А1

315

Шаг 3.

После того, как в таблице 1 мы более не нашли среди не вычеркнутых строк ни одной задолженности, в которой или дебитором или кредитором был бы элемент А1, мы ищем опять  в цикле такую задолженность, в которой или дебитором или кредитором был бы следующий элемент нашего формируемого односвязного подмножества - элемент А6. Такая задолженность находится. Это строка 8 таблицы 1. Новых элементов в подмножество участников эта найденная задолженность не добавляет, поэтому эту строку 8 таблицы 1 добавляем в таблицу 3, получая таблицу 4, и вычеркиваем эту строку 8 из таблицы 1.

Табл.4

Дебитор

Кредитор

Задолженность

1

А1

А6

301

15

А10

А1

315

8

А6

А10

308

Шаг 4.

Так как среди не вычеркнутых строк таблицы 1 мы больше не нашли задолженности, дебитором или кредитором которой был бы участник А6, то выбираем для сравнения следующего участника нашего первого односвязного подмножества, а именно участника А10. Ищем опять  в цикле среди не вычеркнутых строк таблицы 1 такую задолженность, в которой или дебитором или кредитором был бы элемент А10. Таковой задолженности не находится.

Следовательно, один цикл окончен. Все. Одно односвязное подмножество участников найдено. Оно состоит из 3-х участников (А1, А6 и А10) и эти участники имеют друг по отношению к другу 3 задолженности, представленные в таблице 4.

Нахождение 2-го односвязного множества

Так как в таблице 1 еще не все строки вычеркнуты, то продолжаем поиск следующего (второго) односвязного подмножества участников и соответствующего им подмножества задолженностей.

Шаг 1*.

Начинаем формировать второе односвязное подмножество участников и соответствующее ему второе односвязное подмножество задолженностей. Для этого выделим 1-ю еще не вычеркнутую строку таблицы 1 – это будет строка номер 2 - и сформируем второе односвязное подмножество участников, состоящее пока только из 2-х элементов (А2 и А21). Первая строка соответствующего второго односвязного подмножества задолженностей состоит пока из одной задолженности, одного элемента – строки 2 таблицы 5. Из таблицы 1 вычеркиваем строку 2.

Табл. 5

Дебитор

Кредитор

Задолженность

2

А2

А21

302

Шаг 2*.

Просматриваем в цикле все остальные строки таблицы 1, начиная со строки 3 и по 26, пропуская зачеркнутые строки, с целью нахождения такого элемента множества задолженностей, в котором или дебитор, или кредитор совпадает с элементом А2. Таких элементов не нашлось.

Шаг 3*.

После того, как в таблице 1 мы более не нашли среди не вычеркнутых строк ни одной задолженности, в которой или дебитором или кредитором был бы элемент А2, мы ищем опять  в цикле такую задолженность, в которой или дебитором или кредитором был бы следующий элемент формируемого второго односвязного подмножества – участник А21. Таких задолженностей нашлось две. Это строка 14 и строка 26 таблицы 1. Эти найденные 2 задолженности добавили во второе односвязное подмножество участников два новых элемента – участников А9 и А5. Так что теперь, на этом этапе второе односвязное подмножество участников состоит уже из 4-х участников (А2, А21, А9 и А5). Во второе подмножество задолженностей – в таблицу 5 - добавляем эти две найденные строки, получая таблицу 6. Не забываем вычеркнуть из таблицы 1 эти две найденные строки 14 и 26.

Табл. 6

Дебитор

Кредитор

Задолженность

1

А2

А21

302

14

А9

А21

314

26

А21

А5

326

Шаг 4*.

После того, как в таблице 1 мы более не нашли среди не вычеркнутых строк ни одной задолженности, в которой или дебитором или кредитором был бы элемент А21, мы ищем опять  в цикле такую задолженность, в которой или дебитором или кредитором был бы следующий элемент этого нашего второго односвязного подмножества - элемент А9. Таких задолженностей нашлось три. Это строки 12, 13 и 20 таблицы 1. Строка 12 добавила во второе односвязное подмножество участников новый элемент – участника А18, а строка 20 добавила во второе односвязное подмножество участников новый элемент – участника А16. Так что теперь, на этом этапе второе односвязное подмножество участников состоит уже из 6-и участников (А2, А21, А9, А5, А18 и А16). Во второе подмножество задолженностей - добавляем эти три найденные строки, получая таблицу 7. Вычеркиваем из таблицы 1 эти три найденные строки 12, 13 и 20.

Табл. 7

Дебитор

Кредитор

Задолженность

1

А2

А21

302

14

А9

А21

314

26

А21

А5

326

12

А9

А18

312

13

А9

А5

313

20

А16

А9

320

Шаг 5*.

После того, как в таблице 1 мы более не нашли среди не вычеркнутых строк ни одной задолженности, в которой или дебитором или кредитором был бы элемент А9, мы ищем среди не вычеркнутых строк табл.1  такую задолженность, в которой или дебитором или кредитором был бы следующий элемент этого нашего второго односвязного подмножества - элемент А5. Нашлась всего две таких задолженностей – это строка 6 и строка 7 таблицы 1. Строка 6 добавила во второе односвязное подмножество участников новый элемент – участника А12, а строка 7 не добавила во второе односвязное подмножество участников новых элементов. Так что теперь, на этом этапе второе односвязное подмножество участников состоит уже из 7-х участников (А2, А21, А9, А5, А18, А16 и А12). Во второе односвязное подмножество задолженностей - добавляем эти две найденные строки, получая таблицу 8. Вычеркиваем из таблицы 1 эти две найденные строки 6 и 7.

Табл. 8

Дебитор

Кредитор

Задолженность

1

А2

А21

302

14

А9

А21

314

26

А21

А5

326

12

А9

А18

312

13

А9

А5

313

20

А16

А9

320

6

А5

А12

306

7

А5

А16

307

Шаг 6*.

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

Шаг 7*.

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

Ищем среди не вычеркнутых строк таблицы 1 задолженность, у которой или дебитором или кредитором был бы следующий еще не испытанный элемент второго односвязного подмножества - элемент А16. Нашелся всего один такой элемент – строка 18. Эта Строка 18 добавила во второе односвязное подмножество участников новый элемент – участника А14. Так что теперь на этом этапе второе односвязное подмножество участников состоит уже из 8-и участников (А2, А21, А9, А5, А18, А16, А12 и А14). Эти 8 участников связаны между собой 9-ю дебиторскими (и соответственно 9-ю кредиторскими) задолженностями, представленными в таблице 9.

Табл. 9

Дебитор

Кредитор

Задолженность

 2

А2

А21

302

14

А9

А21

314

26

А21

А5

326

12

А9

А18

312

13

А9

А5

313

20

А16

А9

320

6

А5

А12

306

7

А5

А16

307

18

А14

А16

318

Продолжая в том же духе, мы ищем среди не вычеркнутых строк таблицы 1 задолженность, у которой или дебитором или кредитором были бы следующие еще не испытанные элементы второго односвязного подмножества – элемент А12, а затем элемент А14. Таковых элементов более не нашлось.

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

Нахождение 3-го односвязного множества

Так как в таблице 1 у нас остались еще не вычеркнутые строки, то продолжаем выделять третье односвязное подмножество из первоначального множества участников многостороннего взаимозачета.

Шаг 1**.

Начинаем формировать третье односвязное подмножество участников и соответствующее ему третье односвязное подмножество задолженностей. Для этого выделим 1-ю еще не вычеркнутую строку таблицы 1 – это будет строка номер 3 - и сформируем второе односвязное подмножество участников, состоящее пока только из 2-х элементов (А3 и А19). Первая строка соответствующего второго односвязного подмножества задолженностей состоит пока из одной задолженности, из одного  элемента – строки 3 таблицы 10. Из таблицы 1 вычеркиваем строку 3.

Табл. 10

Дебитор

Кредитор

Задолженность

3

А3

А19

303

Шаг 2**.

Надеюсь, работа алгоритма уже достаточно ясна, и можно не описывать во всех подробностях дальнейшие действия. В результате, все те участники, которые фигурируют в оставшихся не вычеркнутыми строках таблицы 1, составляют 3-е односвязное подмножество участников многостороннего взаимозачета, а еще не вычеркнутые к шагу 1** строки таблицы 1 представляют задолженности этих участников.

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

В каждом из односвязных подмножеств можно произвести многосторонний взаимозачет согласно методике, описанной в части 1.

Определение окончательных задолженностей

Первое односвязное подмножество.

Для первого односвязного подмножества, состоящего из 3-х участников (А1, А6 и А10), задолженности которого представлены таблицей 4, получаем единственное решение - один кредитор – участник А1 с кредиторской задолженностью в сумме 14 и  два дебитора – участники А6 и А10, каждый из которых имеет дебиторскую задолженность по 7 денежных единиц. Это решение представлено в табл. 11.

Табл. 11

Дебитор

Кредитор

Задолженность

 

А6

А1

7

 

А10

А1

7

Второе односвязное подмножество.

Для второго односвязного подмножества, состоящего из 8-и участников (А2, А21, А9, А5, А18, А16, А12 и А14), задолженности которого представлены таблицей 9, в результате проведенного взаимозачета получаем 3-х дебиторов (А2, А9 и А14) и 5 кредиторов (А21, А5, А12, А16 и А18), задолженности которых представлены в таблице 12

Табл. 12

Дебитор

Кредитор

Задолженность

 

А2

Р

302

 

А9

Р

619

 

А14

Р

318

 

А21

Р

-290

 

А5

Р

-26

 

А16

Р

-305

 

А18

Р

-312

 

А12

Р

-306

В данном случае решение вопроса о том, какой дебитор сколько должен какому кредитору, не однозначно. Среди множества возможных решений всегда можно высказать суждения, в силу которых одно решение кто-то может считать по каким-то соображениям предпочтительнее другого. Для рассматриваемого примера одно из возможных решений может быть, например, таким, как представлено в табл. 13

Табл. 13

Дебитор

Кредитор

Задолженность

 

А2

А21

290

 

А2

А5

12

 

А9

А5

14

 

А9

А16

305

 

А9

А12

300

 

А14

А12

6

 

А14

А18

312

 

Общий экономический эффект от многостороннего взаимозачета

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

Пример 1.

Возьмем для примера простейший 3-х сторонний взаимозачет: я – тебе, ты – ему, а он – мне.  В жизни этот случай мне представляется даже более распространенным, чем двухсторонний взаимозачет: ты – мне, я – тебе. Пусть «А» должен «В», «В»  должен «С», а «С» должен «А», причем каждый должник должен своему кредитору по  100 денежных единиц. У них две возможности: либо ждать, пока кто-то из них не накопит эти 100 денежных единиц, которые он отдаст своему кредитору, тот – своему и в итоге эти 100 денежных единиц вернутся к своему первоначальному хозяину, либо собраться втроем, сесть за стол переговоров и осуществить 3-х сторонний взаимозачет с подписанием всех необходимых документов. В данном случае суммы задолженностей одинаковы и никто никому ничего не должен. Очевидно, что в этом случае многосторонний взаимозачет проводить целесообразно, и он даст существенный экономический эффект.

Введем численную меру для экономического  эффекта. Рассчитаем суммарную дебиторскую (или кредиторскую) задолженность всех участников взаимозачета друг другу до проведения взаимозачета и после. В данном случае эти суммы равны 300 и 0. Определим разность между суммарной дебиторской  (или кредиторской) задолженностью до и после проведения взаимозачета, т.е. на сколько уменьшилась суммарная дебиторская (или кредиторская) задолженность участников взаимозачета. Отношение этой разности к первоначальной суммарной дебиторской (или кредиторской) задолженности и будем называть экономическим эффектом (ЭФ).

Для рассматриваемого примера  ЭФ = 100%.

Пример 2.

Для рассмотренного выше первого односвязного подмножества, состоящего из 3-х участников (А1, А6 и А10), задолженности которых представлены таблицей 4, суммарная дебиторская задолженность до проведения взаимозачета равна 924, а после проведения взаимозачета она равна 14. Экономический эффект равен

ЭФ = (924-14)/924*100% = 98,48%

Следовательно, проведение многостороннего взаимозачета для этих участников целесообразно.

Пример 3.

Рассмотрим опять трех участников, но теперь уже пусть их задолженности друг другу представлены таблицей  14

Табл. 14

Дебитор

Кредитор

Задолженность

 

А

В

1

 

В

С

10

 

С

А

100

Суммарная дебиторская (или кредиторская) задолженность всех трех участников друг другу до проведения взаимозачета равна 111, а после 99. Следовательно экономический эффект от многостороннего взаимозачета, проведенного между этими участниками будет равен

ЭФ = (111 – 99)/111*100%= 10,82%

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

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

Пример 4.

Суммарная дебиторская задолженность до проведения многостороннего взаимозачета равна 2818. Напомню, что после проведения многостороннего взаимозачета у каждого из участников останется или только дебиторская или только кредиторская задолженность, равная разности его суммарной дебиторской и кредиторской задолженностей всем остальным участникам взаимозачета.

Табл. 15

Участник

 

Задолженность

 

А2

 

302 = 302

 

А21

 

-302-314+326= - 290

 

А9

 

314+312+313-320= 619

 

А5

 

-326-313+306+307= -26

 

А18

 

-312

 

А16

 

320-307-318= -305

 

А12

 

-306

 

А14

 

318

 Нетрудно видеть, что суммарная дебиторская (или кредиторская) задолженность после  проведения многостороннего взаимозачета будет равна 1239. Экономический эффект от проведения многостороннего взаимозачета для этих участников будет равен

ЭФ = (2818 – 1239)/2818*100% = 56,03%

 

Экономический эффект от многостороннего взаимозачета

для каждого отдельного участника

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

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

Для рассмотренного выше примера 1, где все три участника имели равные задолженности по 100 денежных единиц, экономический эффект для каждого участника равен также по 100%.

Для рассмотренного выше примера 2, для которого задолженности участников представлены таблицей 4, экономический эффект для каждого участника представлен в таблице 16

Табл. 16

Участник

Задолженность

Дебиторская до

Задолженность

Кредиторская до

Задолженность

 после

Экономич.

Эффект

1

А1

 301

-315

-14

95.56%

15

А10

 315

-308

7

97,78%

8

А6

308

-301

7

97,73%

Для рассмотренного выше примера 4, задолженности участников которых представлены таблицей 4, экономический эффект для каждого участника представлен в таблице 17

Табл. 17

Участник

Задолженность

Дебиторская до

Задолженность

Кредиторская до

Задолженность

 после

Экономич.

Эффект

 

А2

302

0

302

0%

 

А21

326

616

-290

52,92%

 

А9

939

320

619

34,08%

 

А5

615

639

-26

95,93%

 

А18

0

312

-312

0%

 

А16

320

625

-305

51,20%

 

А12

0

306

-306

0%

 

А14

318

318

318

0%

 

Как видно из таблицы 17, участники А2, А12, А14 и А18 от взаимозачета ничего не выиграли. Какая у них была задолженность до проведения многостороннего взаимозачета, такая и осталась. Разве, что, может быть изменится контрагент, смотря по тому, какое из возможных решений выберут участники в качестве окончательного.

Конец 2-й части статьи Машкова С.А.

 

 

 

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Ожерельев (Поручик) 31.05.11 22:19
Интересно Вас почитать, редкость такие работы.

>>>> в основном для не программистов, а для бухгалтеров, экономистов, топ – менеджеров, предпринимателей

Не, в основном именно и прежде всего для программистов, потому что бухгалтера, экономисты, тем более топ – менеджеры, предприниматели эти работы не читают. Им некогда или банально не до того
2. Игорь Исхаков (Ish_2) 01.06.11 08:50
Если отвлечься от "уколобого" программисткого взгляда, то с "общеалгоритмических" позиций вполне здравый подход к задаче разбиения графа на односвязные.
Теперь взглянем на задачу многосторонних взаиморасчетов в целом.
Вначале мы должны ОБЯЗАТЕЛЬНО разбить граф взиморасчетов на односвязные (2 часть статьи) и лишь затем для каждого полученного подграфа получить таблицу распределения (1 часть статьи).

При разбиении графа на односвязные мы пробегаем и исследуем Каждую связь (каждую строку таблицы долгов), затем при получении таблицы распределения мы еще раз пробегаем каждую связь.

Теперь вопрос :
возможно ли получить таблицу распределения за один проход (пробегание) таблицы долгов ?
3. Александр Рытов (Арчибальд) 01.06.11 09:21
1) предложенный автором метод, по - видимому, поддается алгоритмизации,
Если есть метод - это уже означает, что он поддается алгоритмизации.
2) разработка отдельных блоков алгоритма для некоторых членов сообщества программистов 1С представляют определенные трудности,
Совершенно непонятно, откуда такой вывод. Вроде бы никто не пожаловался.
3) совсем не очевидно, что если программный продукт на основе идеи автора будет создан, то каждый предприниматель, каждая компания пожелают его приобрести. Более того, высказываются сомнения в том, что вообще этот программный продукт будет востребован на рынке программного обеспечения
Написание такого продукта - всего лишь вопрос представления ЛПР (лицу, принимающему решения) альтернативных распределений в наглядном виде. Алгоритмы анализа таблицы задолженностей, в том числе, разбиения на односвязные подтаблицы и поиска циклов, реализованы, и даже опубликованы на Инфостарте. Например, здесь http://infostart.ru/public/78032/ .

(2) За один проход легко разбить таблицу на односвязные подтаблицы. А вот при построении конечных таблиц связность может увеличиться (рис 2 в статье http://infostart.ru/public/85804/ ), так что одним проходом все равно не обойтись.
4. Александр Рытов (Арчибальд) 01.06.11 09:26
(1) Эт' точно. Бухи/менеджеры этого не читают. А хотелось бы.
5. Михаил Ражиков (tango) 01.06.11 09:34
оне по ходу ничего не читают
6. Wumka (wumka) 01.06.11 10:21
(1)(4)(5)
"эт' точно". бухи даже читать-то не умеют...
7. Александр Рытов (Арчибальд) 01.06.11 10:25
8. Ийон Тихий (cool.vlad4) 01.06.11 10:27
Глупости, основанные на стереотипах. Встречал не так много бухгалтеров и все периодически почитывали всякие акты, отчеты, законодательство и т.п. (0) Спасибо Вам за статью, по поводу чтения по диагонали, - мне приходится каждый день читать тонну литературы, в которой надо разбиратся, и я просто не успеваю, добавляю в закладки и читаю в метро или на выходных. Честно я Вашу первую статью еще не успел разобрать. Но обязательно постараюсь.
9. Wumka (wumka) 01.06.11 10:37
(7)
Арчи, вспомнилось высказывание одной учёной дамы на заседании учредителей банка (тоже сплошь сильно многомудрых мужей со степенями, в т.ч. и экономических наук), действиями которых банк благополучно приплыл к банкротству: "зачем в ликвидкомисии банковские работники? неужели, имея степень доктора математических наук, я не справлюсь с каким-то бухучётом?!"

Справляйтесь, господа. С бухучётом уже справились. Вместо бухучёта - сплошная отчётность и сонм программистов-разработчиков, придумывающих что бы такое ещё выдумать.
10. Михаил Ражиков (tango) 01.06.11 10:56
(9) "онм программистов-разработчиков, придумывающих что бы такое ещё"
не-а. 1снеги - вполне себе рыночная профессия. мы удовлетворяем потребность работодателя. и не мы эту потребность создаем.
mctsimco; +1 Ответить
11. Сергей (ildarovich) 01.06.11 10:58
- Здесь рыбы нет!
- И здесь рыбы нет!
- Здесь тоже рыбы нет!
- А кто говорит?
- Директор катка!

А если серьезно, то на мой взгляд, автор сильно заблуждается сам (вполне себе добросовестно) и в результате существенно дезоориентирует читателей.

Во-первых (математика), понятие "односвязности" множеств относится совсем к другой области математики (к топологии).
Использование совпадающего по написанию термина, имеющего совсем другой математический смысл привносит путаницу.
Более правильный термин - связные (сильносвязные) компоненты.
Тот очевидный алгоритм, который приводится в статье, как раз и является алгоритмом разбиения множества (вершин графа) на связные (сильносвязные) компоненты.

Во-вторых (физика), автор рассматривает задачу в статике. Как будто на протяжении времени оформления многостороннего взаимозачета состояние расчетов не меняется.
В реальной жизни в день одной организацией могут проводится тысячи сделок (сколько накладных выписываются в базе за день?).
Где в этом случае взять время на оформление хотя бы трехсторонних взаимозачетов? Вместо ускорения получим торможение.

В-третьих(медицина), процесс взаимоотношения с каждым контрагентом достаточно интимен. Превращение этих отношений в "групповуху" вредит качеству отношений.

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

В-пятых (методы оптимизации), если заменить деньги на наличные или на кирпичи, (чтобы придать задаче хоть какой-либо смысл), то задача превращается в оптимизационную "транспортную" задачу:
Имеется N производителей (дебиторов), M потребителей (кредиторов), для каждого производителя определен выпуск (дебиторская задолженность), а для потребителя - потребность (кредиторская задолжность),
а определить требуется оптимальный план перевозок - схему взаиморасчетов. Правда, целевая функция может отличаться от классической (если минимизировать не стоимость перевозок, а количество рейсов).
Тогда потребуется всего лишь применить не линейное, а динамическре программирование. То есть ничего изобретать не надо - методы решения известны.

В-шестых (политика), предложение автора не рыночное, так как снижается свобода и децентрализация субъектов экономической деятельности.
Если экстраполировать предложения автора и заставить вместо простой оплаты производить взаимозачеты между миллионами контрагентов, получим схему, в которой один останется супер-контрагент (государство?).

В общем, наверное, нужно свыкнуться с мыслью, что с распространением информационных технологий и экономических свобод область деятельности изобретателей перпетум-мобилле расширится на другие сферы.
Так что умение критически мыслить нам еще пригодится!
bobaG; Spartan; vkr; hogik; mctsimco; afk; vlk_led; Арчибальд; tango; support; cool.vlad4; +11 Ответить 2
12. Александр Рытов (Арчибальд) 01.06.11 11:03
(9) Там были таки доктора экономических наук, а не математических. Когда же за экономику берутся математики, получается что-то типа http://infostart.ru/public/82207/
13. Александр Рытов (Арчибальд) 01.06.11 11:15
(11) Коснусь во-первых и в-пятых.
"Во-первых" - это все же придирка. Коль скоро существует топология графов, к графам можно применять топологические термины. Другое дело, что о графах автор не упоминает, но они сами напрашиваются.
"В-пятых" поставлена и в самом деле задача оптимизации. У меня в http://infostart.ru/public/85804/ описано, как эта задача сводится к задаче логистики. А эта задача - чатный случай транспортной при условии фиксированной цены каждой перевозки.
14. Игорь Исхаков (Ish_2) 01.06.11 21:42
Во-первых (математика), понятие "односвязности" множеств относится совсем к другой области математики (к топологии).
Использование совпадающего по написанию термина, имеющего совсем другой математический смысл привносит путаницу.
Более правильный термин - связные (сильносвязные) компоненты.
Тот очевидный алгоритм, который приводится в статье, как раз и является алгоритмом разбиения множества (вершин графа) на связные (сильносвязные) компоненты.


Когда люди упоминают "математику" на ИС - это всегда звучит солидно. Ты смотри-ка, грамотный...
Термин "односвязный граф" вполне корректен . Достачно в гуле найти определения.
15. Александр Капустин (kapustinag) 01.06.11 22:29
(11)Продолжая (13), коснусь во-вторых, в-четвертых и в шестых.
"Во-вторых" - неправильное возражение. Сделки оформляются тысячами ежедневно, и состояние взаиморасчетов каждого с каждым постоянно меняется. Но это совершенно не мешает проведению обычных взаимозачетов, не помешает и проведению многосторонних взаимозачетов. Потому что при этом рассматривается состояние взаиморасчетов на какую-то (согласованную участниками) дату в прошлом. То есть реальная задача - именно статическая. Конечно, чем больше участников, тем сложнее задача.

"В-четвертых" - да, конечно, экономический эффект в учебниках определяется по-другому. То, что во второй части статьи С.А.Машкова озаглавлено "экономический эффект", возможно, надо назвать по-другому. Может быть, просто "эффективность". Может быть, еще как-то. Экономического эффекта в каноническом понимании тут может вообще не быть. Но я считаю, что попытка посчитать эффективность - это в любом случае лучше, чем полное отсутствие анализа результатов.

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

Вообще, хотелось бы добавить, что считаю бессмысленными и ненужными - в рамках первоначальной темы С.А.Машкова - заботы некоторых участников дискуссии о скорости работы алгоритма и о том, сможет ли он справиться с миллионом контрагентов или с десятком миллионов задолженностей за сколько-то там секунд. Такие задачи не возникнут никогда. Если кто-нибудь когда-нибудь захочет устроить многосторонний взаимозачет с 5-10-20-50-100 контрагентами - уже счастье! И если (случайно) в этот момент им в руки попадет ПО оптимизации многосторонних взаимозачетов, и оно будет считать-вычислять не 1 секунду, а 20, или 60 - разве это будет воспринято как недостаток? Высокие договаривающиеся стороны даже сигару выкурить не успеют.
А общетеоретического интереса в супер-тщательной оптимизации по этой задаче быть не может, так как - уже отмечено многими выше - это обычная задача оптимизации, а по всем известным типам задач оптимизации уже разработаны и реализованы быстрые алгоритмы. И реализованы они на специально предназначенных для таких расчетов языках программирования, с которыми 1С не конкурирует по скорости исполнения кода.
Spartan; vkr; +2 Ответить 2
16. Игорь Исхаков (Ish_2) 01.06.11 23:00
(15) Согласен. Миллион контрагентов - был явный перехлест в полемике. Требование суперскорости тоже лишнее.
Для меня задача больше эстетическая.
Первоначальный алгоритм Машкова смотрится элегантно и превосходно решается без строчки кодинга , т.е. "всё в одном запросе" .
И вдруг на тебе - требование односвязности исходного графа делает алгоритм более сложным и затратным, появляется кодинг, циклы, перебор ...!
Не трагедия , конечно, но ... некрасиво.
Впрочем , думаю можно оформить весь алгоритм без потери эффективности в виде пакета запросов.
И порядок этапов алгоритма при программной реализации будет совсем другим нежели у автора.
Правда, это уже другой вопрос.
17. Сергей (ildarovich) 02.06.11 01:11
(14) Да, определение односвязного графа есть. Но в том же определении сказано, что односвязность и связность - одно и тоже. Поэтому нет смысла использовать термин "односвязность", чтобы не путать читателей, которые вслед за автором будут ошибочно полагать, что двусвязный граф - это граф, содержащий две компоненты связности, тогда как это - уже совсем не так! (двусвязный граф - это связный граф без шарниров). Кроме того, встречается и другое определение односвязного графа -
граф односвязный, т. е. для любой пары вершин существует единственный путь по рёбрам, их связывающий (при этом всегда считаем, что никакой путь не проходит дважды по одному ребру). Связный граф является односвязным тогда и только тогда, когда он не содержит замкнутых путей
У этого определения - совсем другой смысл! Так что смысл моего замечания - привнесение путаницы данными определениями.

По-прежнему считаю, что многосторонние взаимозачеты - "палка о шести концах".
18. Сергей (ildarovich) 02.06.11 02:08
(15)Вынужден объясниться
Потому что при этом рассматривается состояние взаиморасчетов на какую-то (согласованную участниками) дату в прошлом. То есть реальная задача - именно статическая.

- какую-то дату? - а какую? - ее ведь тоже можно выбирать, фиксировать! - это делает задачу динамической!
Кроме того, получив за время оформления сделки новую информацию о состоянии взаиморасчетов - неужели Вы откажетесь ее учесть? - тогда управление будет запаздывать!
Может быть, просто "эффективность". Может быть, еще как-то. Экономического эффекта в каноническом понимании тут может вообще не быть.

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

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