Взаимозачет из графина




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

47 Comments

  1. Арчибальд

    В http://infostart.ru/public/78737/ и предыдущих статьях обсуждалась реализация работы с графами, представленными ТаблицейЗначений. То есть до логистической задачи добраться легко. Другое дело — как ее решать…

    Reply
  2. Ish_2

    Как ты так клепаешь свои темы ?

    И главное легко и непринужденно…

    Сколько стоит, правда , такая легкость — вопрос другой… скучный и нудный.

    А пока я отдаю должное легкости и непринужденности.

    Reply
  3. Арчибальд

    (2) Я ж по профильному образованию оптимизатор (кафедра общих проблем управления). А с графами недавно мы изрядно поразвлекались. 😉

    Reply
  4. Ish_2

    Статья должна содержать сквозной пример, на котором автор покажет всё своё искусство проведения взиморасчетов.

    Чтобы подчеркнуть преемственность к начальному материалу Машкова :

    структура начальных(входных) данных должна быть такой же, т.е. должна быть определена ТаблицаДолгов с колонками Д-р,К-р,Долг (и лишь потом переход к графу)

    Прозрачность твоего подхода и его отличия от подхода Машкова была бы более четкой если бы в качестве сквозного примера ты выбрал сквозной пример №2 из темы Машкова.

    А у тебя ? Осенило красивом подбором картинок и ты решил поделиться с публикой своими впечатлениями ?

    Дескать , можно и вот так .. ?

    Легко и непринужденно отвечаю : ну, и что ?

    Reply
  5. tango

    Фигня, Ар.

    тут надо инструмент замутить. завлечь и впарить

    Reply
  6. Арчибальд

    (5) Вот именно. Не впаришь это никому.

    Reply
  7. Арчибальд

    (4) Получи разборку

    Reply
  8. tango

    если с конца «слау» подходить — то да, не впаришь

    подходить надо с конца картинки:

    вот такая у тебя, СЭР(А) дебеторка/кредиторка.

    чтоб закрыть — тебе надо столько-то нала

    чтоб столько нала получить — вот такой процент заплатишь банку

    чтоб не платить банку — вот такая шняга

    и вот тут-то выскакивает 1снег весь в белом: шняга, СЭР(А)!

    Reply
  9. Арчибальд

    (8) Сны разума порождают чудовищ 😮

    Reply
  10. tango

    да ладно, Ар, еще никто не жаловался

    Reply
  11. Ish_2

    (9) Ты пойми.

    Для чего мне нужен максимально понятный и преемственный к теме Машкова табличный интерфейс ?

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

    Показать сколько они стоят .

    Ты НЕЧЕСТНО затрудняешь мне задачу.

    Я опровергать твои вымыслы рисованными рисунками, что ли, буду ?

    P.S.

    А графины твои должны разбиты вдрызь , для того чтобы все женщины , которые..боже мой !.. снимают

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

    Reply
  12. tango

    у меня такое впечатление, что Игорь прочитал где-то слово «поллюция»

    Reply
  13. Арчибальд

    (11) И что у тебя за пазухой кроме обхода дерева запросом? «Деревянная» структура взаимных задолженностей (вернее, платежей) давно изучена — еще в 20-е годы прошлого века Перельман выпустил книгу «Занимательная математика», в которой разбираются финансовые пирамиды. Мои же графины небьющиеся как раз потому, что работают с произволдьными структурами.

    А рисунки просто для красивости. Провести строгое доказательство с множеством латинских, греческих и готических символов нетрудно, но не наглядно…

    Reply
  14. Ish_2

    (13) Еще раз.

    Даже не касаясь сути , говорю тебе — статья твоя ни на какую альтернативу статье Машкова не тянет.

    Подробного описания твоего алгоритма не содержит.

    Никаких доказательств тезиса :

    Я хочу показать, что после проведения «обычных» двусторонних взаимозачетов, а также «циклических» взаимозачетов требование (2) становится несущественным.

    в статье мы не находим.

    Если ты считаешь , что представленные картинки — это и есть описание алгоритма и доказательств, то мне очень жаль.

    Упоминание «степени» в конце статьи скорее вредит тебе.

    Reply
  15. Арчибальд

    (14) Статья (первая) Машкова интересна своей экономической частью, что я и отметил плюсиком. А математическая часть там откровенно слабая. Моя статья направлена на прояснение поставленной задачи (сведения ее к известной).

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

    Простейший пример:

    А Б 10

    А В 20

    Г Д 10

    Е Д 20

    Если требовать односвязности, задолженностей 4, и это минимум. Иначе легко получить

    А Д 30

    Г Б 10

    Е В 20

    И внутри холдинга это вполне реально.

    Насчет подробности описания алгоритма — это уж на чей вкус. Если бы речь шла о букваре, я бы согласился с такой претензией. А в дискуссии на уровне ученых степеней — уж пардон. Имеющий глаза, да увидит. Канву доказательства. И может попытаться опровергнуть какое-либо из промежуточных утверждений. Претензию типа «я не понял юмора, значит, не смешно» не принимаю.

    Reply
  16. Ish_2

    (15) Статья № 1 Машкова для взгляд программиста оригинальная и сильная.

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

    Без всяких «семерочных» переборов.

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

    Заметь (обращаю внимание математика , коим ты представляешься!), это было ДОКАЗАНО :

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

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

    Теперь скажи , что доказывать или опровергать в твоей статье ? Набросок , идею ?

    Увиденную тобой «канву доказательств» с картинками ?

    Понимать их можно по-разному.

    Reply
  17. Арчибальд

    (16)

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

    Теперь цитата из статьи

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

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

    Reply
  18. Ish_2

    (17) Так не пойдет. Хочешь предложить мне переливание из пустого в порожнее ?

    Машков лишь после приведенных доказательных примеров признал, что

    Вся моя теория относится к таким множествам участников и их задолженностям, графы которых являются односвязными.

    Далее опубликовал тему с необходимым алгоритмом разбиения графа на односвязные.

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

    Мало того, отказ от требования односвязности графа при такой «групповухе» может привести к анекдотическим последствиям :

    Исходный граф :

    К-р Д-р Долг
    А    В  10
    С    D  10  

    Полученная таблица к распределению :

    А    D  10
    С    B  10  

    Ты хочешь отмахнуться от требования односвязности как от пустяка , а я говорю ,

    что этот пустяк к тебе вернется как дубина.

    Reply
  19. Арчибальд

    (18) Юноша повелся на твое словоблудие. Не думаю, что это может быть предметом гордости.

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

    Что у меня, что у Машкова: Максимум, два. Как правило — один и останется.

    А в 15 посте я привел реальный и конкретный пример двусвязного графа с 4 задолженностями, который по алгоритму Машкова превращается в трехсвязный с тремя задолженностями. И где твои «доказательства»?

    Reply
  20. Ish_2

    (19)

    1. Юноша , без степени , публикует не цветные картинки с наброском идеи , а

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

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

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

    Таким мне видится взрослый подход к анализу и сравнению твоей статьи и Машкова.

    2. «И где твои доказательства ?»

    Мои доказательства неверности алгоритма Машкова сводились только к одному :

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

    Никаких других примеров я не касался и никаких других целей не ставил.

    Это означает, что твой 15 пост к моим доказательствам никакого отношения не имеет.

    P.S. Писал всё ,скрипя зубами : Господи, это же так очевидно, чего я развожу тут.

    Но это ,очевидно — необходимо.

    Ведь и ты ,публикуя свою «канву», был совершенно убежден

    » А чего тут развозить ? По «канве» и так всё понятно, картинок хватит..»

    Reply
  21. Арчибальд

    (20)

    Это означает, что твой 15 пост к моим доказательствам никакого отношения не имеет

    Естественно не имеет, за отсутствием доказательств. У тебя наличествует только утверждение, что алгоритм Машкова дал неверный результат, с которым утверждением сгоряча согласился Машков, не рассматривавший и не обдумывавший многосвязные взаимозачеты. Я же продолжаю утверждать, что при естественных условиях, без которых вообще проблематично организовать многосторонний взаимозачет, результат вполне верен. Твой пример ничего не опровергает, хотя и может показаться несколько неестественным. Я же утверждаю, что и ситуация, в которой кредиторы просто обмениваются своими дебиторами (твой пример), вполне реальна (например, планируется натуральное погашение долгов и встает вопрос минимизации грузоперевозок), и даже встречается в деловом обороте не так уж редко.

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

    Reply
  22. Ish_2

    (21) Придётся еще раз рассмотреть пример , пример вызывающий у тебя возражения.

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

    Исходный граф задолженностей :

    К-р Д-р Долг
    А    В  10
    С    D  10   

    После преобразований строго по статье Машкова с фирмой посредником Р получаем таблицу :

    К-р Д-р Долг
    А    Р  10
    Р    B  10
    С    P  10
    P    D  10
    

    Из этой таблицы в зависимости от способа распределения получим :

    либо Вариант 1

    К-р Д-р Долг
    А    В  10
    С    D  10   

    либо Вариант 2

    А    D  10
    С    B  10  

    либо Вариант 3 и др.

    А    В  5
    А    D  5
    C    B  5
    C    D  5

    Либо множество других вариантов .

    При варианте 3 и др. тебе придется объяснять всем изумленным представителям фирмм А,B,C,D , что в результате нашей оптимизации количество ваших дебиторов(кредиторов) увеличилось (!). Мужчина ты серьезный , допускаю , что тебе это удалось.

    Но критерий распределения долгов, согласованный с фирмами A,B,C,D , может быть таким что «машине придется» выбирать между вариантами 1 и 2. Она выберет вариант случайным для нас образом, т.е. эти варианты для «машины» неразличимы. Если «машина покажет » вариант 2

    А    D  10
    С    B  10 

    То никакой серьезный вид тебе не поможет. Ты можешь сколько угодно «хмурить лоб и щурить глаза»

    предствители фирм A,B,C,D — будут только ржать.

    Что означает этот пример ?

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

    P.S. Заметь , я расписываю всё подробно ,ясно , определенно, чтобы у тебя появился объект для критики .

    Давая тебе возможность критики , я выказываю своё уважение тебе как оппоненту.

    Reply
  23. Арчибальд

    (22) Посмотри мой третий коммент ко второй статье Машкова:

    Написание такого продукта — всего лишь вопрос представления ЛПР (лицу, принимающему решения) альтернативных распределений в наглядном виде.

    Никакого случайного выбора. Вариант 3 — это «справедливое распределение», о котором вообще речь не идет в задаче минимизации количества задолженностей, как и о всяких других специфических вариантах. Остаются варианты 1 и 2, между которыми я (ЛПР) должен выбирать. Между прочим, поскольку я ЛПР, представителям фирм A, B, C, D будет не до смеха. Это мои дочерние компании, и граф их взаимных задолженностей уже по этой причине «односвязен». Все привязаны ко мне.

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

    Reply
  24. Ish_2

    (23) Посмотрел твой пост. Сам твой подход к осмыслению задачи представлется мне глубоко ошибочным.

    Ты кто ?

    Ты — разработчик алгоритма.

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

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

    Что мы получаем ?

    Что в самом начале разработки , игнорируя проверку на односвязность, мы можем получить такой результат , который при определенных условиях нас не устроит (Абстрактные фирмы A,B,C,D — ржут).

    Только вероятность такого события заставляет нас просчитывать такой вариант и вводить проверку на односвязность графа. Не понадобится — очень хорошо ! Понадобится — изменил настройки и вперед !

    Reply
  25. Арчибальд

    (24) Мои шаги 1-3 превращают произвольный исходный граф в набор односвязных «гамаков», не добавляя при этом связей между подграфами. Это и есть наиболее универсальный подход, с масимально широкой областью применения. Этап проверки на односвязность при таком подходе просто не нужен, равно как и условие о том, что имеются «дебитокредиторы». Как потом работать с «гамаками» — выходит за рамки статьи. Участники взаимозачета могут оставаться в рамках первоначальных областях, могут «естественным образом» разбиться на более мелкие группы, однако же никто им не мешает заводить связи, изначально отсутствующие (я привел пример, когда это может потребоваться. Может, конечно и не потребоваться). Ваше с Машковым требование односвязности — это всего лишь необоснованное сужение области применения взаимозачетов.

    Reply
  26. Ish_2

    (25)

    Ваше с Машковым требование односвязности — это всего лишь необоснованное сужение области применения взаимозачетов.

    В рамках алгоритма Машкова требование ПРОВЕРКИ и возможной разбивки на односвязные подграфы необходимо .

    Такая предварительная процедура резко расширяет возможности метода.

    Грубо говоря, нам всё равно какой граф исследовать. Поэтому я не понял о каком сужении ты говоришь.

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

    Я ни слова до сих пор не сказал о содержании твоего подхода. Ни плохого , ни хорошего.

    Лишь возмущался качеством подачи материала, которое не даёт оппоненту возможности всё проверить.

    Ведь ценность или убогость того или иного подхода даёт только сравнение.

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

    Вот так.

    Reply
  27. hogik

    (26)

    «Я ни слова до сих пор не сказал о содержании твоего подхода. Ни плохого , ни хорошего.

    Лишь возмущался качеством подачи материала, которое не даёт оппоненту возможности всё проверить.»(с)

    А «плюс», первым, кто поставил? 🙂

    Reply
  28. Ish_2

    (27) См(2)

    Reply
  29. hogik

    (28)

    Игорь.

    Это рекомендация не читать Ваши комментарии дальше (2) сообщения?

    Извините, я их уже все прочел… 🙂

    Reply
  30. Ish_2

    (29) Если у Вас что-то по существу обсуждаемого вопроса , то милости просим .

    Reply
  31. hogik

    (30)

    Игорь.

    Спасибо за приглашение.

    Но, я не вижу обсуждения — очередная попытка от Ish_2 опустить собеседника до:

    «…превосходно реализуем запросной техникой. Без всяких «семерочных» переборов.»(с)

    Reply
  32. Ish_2

    (31) Дежурный укол. Не более.

    А по делу у Вас что-нибудь есть сказать ?

    Reply
  33. hogik

    (32)

    По делу всё сказано автором данной публикации.

    Reply
  34. Ish_2

    (33) Всё как обычно. Ок.

    Reply
  35. hogik

    (34)

    «Всё как обычно.»(с)

    Игорь, а чего Вы хотели? Я уже не могу долго находиться в позе смотрящего в «замочную скважину»(с). Старческий радикулит не позволяет…

    Reply
  36. Ish_2

    Вообщем , завершаю. Не дал ты мне бросить камень. Не во что.

    Диалоги на уровне «Моя тема — ништяк !» — «Твоя тема — отстой !» быстро утомляют.

    Тебе повезло. Ты остаешься при своих графинах.

    Reply
  37. Арчибальд

    (36) Ну вот… А я теорему Машкова про Д+К-1 доказал. В его ветке.

    Reply
  38. Ish_2

    (37) Ссылку ?

    Reply
  39. Арчибальд
  40. Арчибальд

    + (38) Теперь и здесь (восьмой скрин).

    Reply
  41. samashkov
    Reply
  42. samashkov

    Машков — Арчибальду

    в таблицах 1 и 2 все пробелы пропали и все почему — сместилось влево. Перерисовываю эти таблицы снова.

    Табл. 1

    Дебитор Кредитор Задолженность

    D. . . . . . . . .1

    Е. . . . . . . . .16

    . . . . В. . . . .11

    . . . . С. . . . .6

    Табл. 2

    Дебитор Кредитор Задолженность

    D. . . .С. . . . Х

    D. . . .В. . . .1 – Х

    Е. . . .В. . . .10 + Х

    Е. . . .С. . . .6-Х

    Reply
  43. Арчибальд

    (41) Моя «канва» — это не канва алгоритма, а канва доказательства того, что призвольный граф задолженностей может быть сведен к одной или нескольким совокупностям чистых дебиторов и чистых кредиторов. А далее можно строить уже вырианты решений.

    Исходить будем из того, что все участники согласны на реструктуризацию задолженностей — чтобы не заморочиваться на «односвязность». Т.е. из таблицы задолженностей исключены несогласные (или таблица разбита на подтаблицы, например, по критерию «связности»). Алгоритм выделения подтаблиц, описанный во второй Вашей статье, легко реализуется за один проход исходной таблицы.

    Теперь сам алгоритм «для простого бухгалтера».

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

    Упорядочивая списки кредиторов и дебиторов всеми возможными способами и сопоставляя эти упорядоченные списки (как на 8-м скриншоте) получим все возможные финальные варианты. Их будет не более Д!*К!/2.

    Теперь по поводу предложенной Вами «х — парамертизации» и построения соответствующих графиков. В общем, мысль интересная. Но вот так сразу не приходит на ум, график какой целевой функции строить.

    Reply
  44. Ish_2

    (43),(41) Машкову на заметку.

    Обратите внимание как элегантно выкрутился Арчибальд :

    «Что Вы хотите ? Это же только «канва» , а конкретные решения могут быть различными… «.

    И плавно перешел к другому вопросу.

    И теперь оппоненту для того , чтобы доказать что «канва» совершенно никудышняя нужно

    проанализировать последоватеьно все возможные варианты решений вытекающие из «канвы».

    Определить или их неодназначность или их затратность. Т.е. оппонент превращается

    в предлагающего различные варианты , а автор темы в элеганто и просто их отклоняющего.

    Дескать «канва» предполагала другой вариант.

    Хм.. вычислить это заранее — было нетрудно.

    Поэтому главный смысл выступлений оппонентов должен быть:

    «Канва» против конкретного алгоритма НЕ ТЯНЕТ .

    Набор картинок — не требует анализа.

    Здесь обсуждать нечего.

    Reply
  45. tango

    обратите, как элегантен Ар 🙂

    Reply
  46. Арчибальд

    (44) Еще раз, для особо упертых:

    Моя «канва» — это не канва алгоритма, а канва доказательства …

    Иными словами, канва доказательства существования (множества!) решений, а не канва алгоритма нахождения (одного?) решения. Цитирую оппонента:

    В результате два участника «D» и «Е» имеют не равные нулю дебиторские задолженности и два участника «В» и «С» имеют не равные нулю кредиторские задолженности. В этом случае окончательное решение неоднозначно. Одно из возможных решений можно получить, например, следующим образом…

    А ведь с тремя дебиторами и тремя кредиторами решений аж 18 штук. И в 43 посте предложен внятный алгоритм нахождения исчерпывающего множества решений.

    Так что мягче, зеленое или соленое?

    (45) Это основная проблема Игоря. 😀

    Reply
  47. Ish_2

    (46) Будет алгоритм — поговорим. А на второй круг не пойдём.

    Reply

Leave a Comment

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