Как нарисовать граф на 1С




Принцип обмена данными из 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='\

99 Comments

  1. sick_russian

    Шикарно) буду играться, спасибо)

    Reply
  2. yuraos

    Где учился коллега —

    на математическом или физическом?

    Я окончил ФФ НГУ.

    в любом случая респект и уважение!

    Reply
  3. KroVladS

    где применить пока ещё не понял.

    Но описание шикарное.

    Reply
  4. wunderland

    Снимаю шляпу!!! Коротко и ясно объяснять сложные вещи — это дар Божий.

    Reply
  5. YPermitin

    Супер! Очень интересно сделано.

    Reply
  6. petrov_al

    Это конечно все интересно, но вот в какой предметной области 1С это можно использовать.

    Reply
  7. OVladius

    Просто жесть.

    Reply
  8. ildarovich

    (6) Ну, во-первых, в статье уже говорится о различных вариантах практического применения метода. Например, о возможности построения в виде графа отношений пользователей программы 1С. В качестве связей может быть условия (а) редактирования одного документа, (б) пересылки сообщений друг-другу, (в) направление задач от одного пользователя другому. Схема, представленная в виде графа, может многое прояснять. Также в виде графа удобно представить структуру модулей программы (число строк модуля — размер, ссылок — степень связности), структуру одного модуля, связи объектов информационной базы, связи таблиц СУБД. Это пригодится при анализе конфигураций. В виде графа можно наглядно представить структуру локальной вычислительной сети. Практически везде можно использовать более компактное представление в виде графа иерархии подразделений, номенклатуры, контрагентов. Структура подчиненности документов — также граф. В следующей статье уже обещан пример представления в виде графа остатков и движений по счетам бухгалтерского учета. Кроме того, в виде графа можно наглядно представлять движение и распределение затрат при закрытии месяца. Регистр учета затрат РАУЗ — это фактически готовый граф с вершинами — комбинациями аналитик и дугами — движениями. Последовательности технологических операций (карты маршрутов) — это графы. Везде, где в общении с пользователем сейчас рисуются (возможно, вручную) квадратики или кружочки и линии между ними, фактически используется граф и возможность его автоматического рисования будет наверняка полезной.

    Reply
  9. ildarovich

    (6) И еще…

    В ответ могу спросить: для чего в 1С используются диаграммы и нужны ли они? — Наверное, Вы скажете, что диаграммы нужны для наглядного представления зависимостей. — Тогда рассматривайте данный метод как разновидность диаграммы, которой еще нет в платформе. Только эта диаграмма (нарисованный приведенным способом граф) нужна для наглядного представления не числовых, а реляционных зависимостей.

    Reply
  10. a.b.vorobjev

    Не пробовали натравливать на метаданные конфигураций 1С?

    Reply
  11. tolyan_ekb

    Подскажите. Поиск по графу уже рассматривался в статьях?

    Reply
  12. ildarovich

    (10) Еще не пробовал.

    Reply
  13. Ёпрст

    красиво

    Reply
  14. Ёпрст

    Долго рисует.

    Или это бесконечный процесс и нужно всегда его прерывать самому ?..

    есть ли режим, чтоб сразу нарисовал результат, без «процесса» ?

    Reply
  15. Ёпрст

    а всё, нешел галку.

    Reply
  16. ildarovich

    (15) Там еще есть параметр «порог» — он определяет периметр дрожания вершин, после попадания в который процесс останавливается. Стандартно он 0.01 мм, но можно его увеличить, чтобы процесс заканчивался быстрее. Правда, чем больше порог, тем менее идеальными будут фигуры.

    Reply
  17. Ёпрст

    (16) структуру подчиненности доков, еще не рисовал ей ?

    🙂

    у меня на справочнике..всегда стопорить приходится. Слишком долго.

    Reply
  18. Ёпрст

    и это, надо бы сплиттер в форму воткнуть — а то не все настройки видны на форме, типа уменьшить размер и т.д.

    Reply
  19. Ёпрст

    поставил порог в 1, получил болт:

    Вершины.Загрузить(Запрос.Выполнить().Выгрузить());

    по причине:

    Ошибка выполнения запроса

    по причине:

    Ошибка при выполнении операции над данными:

    Microsoft OLE DB Provider for SQL Server: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.

    HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1

    Reply
  20. ildarovich

    (19) Это означает, что система неустойчива — нужно уменьшать шаг, либо жесткость пружин. Если показ включен, то неустойчивость видна глазами — вершины прыгают туда-сюда с увеличивающейся амплитудой. А что за пример обрабатывается?

    (17) Структуру доков не рисовал пока — хотелось сделать обработку и универсальной и простой, рассмотреть как можно более разнообразные случаи. Основное здесь все же статья и запрос, обработка пока «учебная».

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

    (17) Увеличение порога не помогает?

    (18) Понял, сделаю.

    Reply
  21. Ёпрст

    (20) да любой, даже «сетка» не формируется

    Reply
  22. Ёпрст

    уменьшением количества вершин до 20, спасает

    🙂

    быстро выводит.

    Reply
  23. graphbuh

    Здорово! как хочется иметь что-то свое, родное, на 1С.

    Потому что все эти суперкомпоненты по рисованию не все политики компании переваривают.

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

    Reply
  24. ildarovich

    (21) Нужно уменьшить именно «Шаг» (или Упругость, но у всех ребер). Рисуется и 100 и 200 вершин в сетке. Попробуйте Шаг = 0.05.

    Reply
  25. Andreynikus

    Автор ты крут!

    Мое уважение.

    Reply
  26. frying

    ildarovich, ещё к Вашим выводам добавлю. Изображение графа может сильно зависеть от начального положения вершин. Играясь обработкой получил решение вместо «бус» и «клубка» «восьмерку».

    Reply
  27. ildarovich

    (26) Согласен. Это нелинейная система и у нее есть локальные оптимумы. Но вот точно такая восьмерка как у Вас у меня все же, если подождать, обычно выправлялась. Особенно, если отключен закон Кулона. Можно поставить порог поменьше или вообще 0, чтобы раньше времени не было остановки.

    Встречный вопрос: а почему у Вас вместо вершин-кругов — эллипсы? У меня размер вершин по вертикали и горизонтали одинаков и должны рисоваться именно круги. Вот код:

    Рисунок.Высота = Где[Э].Заряд * Масштаб;
    Рисунок.Ширина = Рисунок.Высота

    Что-то уже меняли в коде? Какая платформа?

    Reply
  28. frying

    У меня всего два раза так получилось, раз из 20-ти. Мне тоже кажется странной, два решения очевидны — «кольцо» или «клубок» и симметричная восьмерка, а вот такая как-то не укладывается. Хотя система уравнений вида 1/x2 — x = с может иметь до трех решений, но с равно 0, поэтому вроде одно должно быть в действительной области. Обработку не менял.

    На примере «бус» из 6 вершин.

    10,15

    15,10

    20,20

    25,15

    20,10

    15,20

    Не исправляется.

    1С:Предприятие 8.3 (8.3.3.687)

    Нашел такой код в обработке:

    Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Прямая Тогда
    
    Рисунок.Верх = Где[Э.Имя1].У * Масштаб;
    Рисунок.Лево = Где[Э.Имя1].Х * Масштаб;
    Рисунок.Высота = (Где[Э.Имя2].У — Где[Э.Имя1].У) * Масштаб;
    Рисунок.Ширина = (Где[Э.Имя2].Х — Где[Э.Имя1].Х) * Масштаб
    
    ИначеЕсли Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Эллипс Тогда
    
    Рисунок.Верх = (Где[Э].У — Где[Э].Заряд / 2) * Масштаб;
    Рисунок.Лево = (Где[Э].Х — Где[Э].Заряд / 2) * Масштаб;
    Рисунок.Высота = Где[Э].Заряд * Масштаб;
    Рисунок.Ширина = Рисунок.Высота
    
    ИначеЕсли Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Текст Тогда
    
    Рисунок.Верх = (Где[Э].У — Где[Э].Заряд / 4) * Масштаб;
    Рисунок.Лево = (Где[Э].Х — Где[Э].Заряд / 4) * Масштаб
    
    КонецЕсли

    Показать

    Reply
  29. frying

    Понял, c не ноль, а начальное приближение, поэтому решение не единственное.

    Reply
  30. ildarovich

    (29) Для борьбы с такими явлениями можно (а) добавить инерцию, (б) подталкивать застрявшие вершины, корректируя их координаты вручную, (в) в конце еще раз но уже слегка «встряхивать» вершины — задавать небольшое случайное отклонение от достигнутых положений. Мне больше нравится способ (в). Он похож на метод «моделированного отжига» в задачах поиска оптимальных решений для многомерных нелинейных критериев оптимальности.

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

    И еще увидел упущение — использовал на кнопках картинки не стандартные, а из конфигурации БП — они у Вас не отображаются — завтра буду поправлять.

    Reply
  31. frying

    (30), у меня есть ещё предложение (г). Попробовать заменить закон Кулона тоже на Гука, считать, что между всеми вершинами, есть пружина, не нулевой длины (чтобы получить в начальный момент её сжатие), например, равно диагонали области, в которую должен поместиться граф. Тогда получатся линейные уравнения. Насколько это будет красиво выглядеть не знаю, просто как идея.

    Reply
  32. aids-ice

    (12) Надо пробовать, вот это будет действительно интересно.

    Reply
  33. ildarovich

    (32) Буду заниматься этим, но не ожидаю слишком многого.

    Во-первых, число вершин в графе метаданных слишком велико: в БП2 только справочников+документов+регистров сведений+ накопления = 360. Пока решил пробовать на Рознице. Там объектов поменьше /160/. То есть нужно все же будет проводить дополнительную оптимизацию метода за счет разбиения вершин на зоны. Во-вторых, здесь уже была такая работа, где граф строился во внешней программе. Там говорилось, что если не фильтровать объекты, то граф слишком запутан и не обладает наглядностью, несмотря на присущую данной модели способность пространственной кластеризации. В третьих, пока не придумал быстрого способа подсчета реально-используемых ссылок для составных типов данных, а хотелось бы наряду с размерами вершин (по количеству объектов) показать и реальную степень связанности.

    Без этого пока получается примерно такая картина… Вроде бы хаос, однако кое-какую структуру уже заметить можно… А еще одна картинка — если оставить только справочники и учесть их размер… Справа виден диск справочника «Номенклатура». Думаю: — А не забыл ли я в статье еще одну научную дисциплину — астрономию?

    Reply
  34. ivanov660

    Да, последние картинки выглядят необычно, но только ничего не понятно. Логичнее всего использовать иерархию в отображении.

    Reply
  35. Rustig

    (0) спасибо за разработку.

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

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

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

    то есть задача — определить координаты вершин — не решена.

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

    Reply
  36. Rustig

    (0) очень красиво 🙂 как вы до такого додумались?

    Reply
  37. ildarovich

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

    Процедура Рассеивание() Экспорт
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    Для Каждого Вершина Из Вершины Цикл
    Вершина.Х = ГСЧ.СлучайноеЧисло(0, Ширина / (0.001 + Масштаб));
    Вершина.У = ГСЧ.СлучайноеЧисло(0, Высота / (0.001 + Масштаб));
    КонецЦикла
    КонецПроцедуры

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

    (36) Сама идея довольно давняя — скучал на каком-то заседании, думая об недописанном отчете с рисунками графов. Новая только реализация на языке запросов 1С, который, как выяснилось, хорошо приспособлен для операций с разреженными матрицами. Кстати, в первой реализации метода на языке системы MatLab было всего 15 строк вместе с выводом!

    Reply
  38. DoctorRoza

    Да уж, впечатляет! 🙂

    Reply
  39. Crush

    Отлично! Не раз закрадывалась мысль представлять зависимости в виде графов, но вспоминать эту часть дискретки было лень. Спасибо!

    Reply
  40. mary61

    Круто, просто и доступно. Возьму на заметку

    Reply
  41. Збянтэжаны Саўка

    круто, жду с нетерпением обещанной статьи о плане счетов

    Reply
  42. Polav

    (6)(8) Кроме того, можно вспомнить о том, что все новое — это хорошо забытое старое. Наберите в поисковике «Граф затрат» — там много информации об использовании графов для учета затрат

    Reply
  43. makcyta.89

    Не расскажешь как в 1с построить схему связей между таблицами данных

    Reply
  44. Evil Beaver

    Потрясающе! Анимированные графы на 1С — в голове не укладывается!

    Reply
  45. sashocq

    Это — супер круто! Обязательно возьму себе на заметку.

    Reply
  46. Новиков

    Снимаю шляпу!

    Reply
  47. galich

    Использовал для вывода подобных диаграмм бесплатную компоненту GraphViz от AT&T.

    Reply
  48. sidka89

    оч круто, надо тоже попробовать!)

    Reply
  49. FractonKireyev

    Круто!

    На первый взгляд — отличный помощник в моделировании бизнес-процессов на предприятиях со сложной организационной структурой (в тот момент, когда надо разобраться кто-кому-что-зачем-когда-…).

    Reply
  50. Ele1234567

    Круто-круто!

    Reply
  51. yalo

    Классная статья

    Reply
  52. alexkon

    Очень интересно!

    Reply
  53. Polav

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

    Reply
  54. ildarovich

    (54) Polav, большое спасибо за ссылку! Искренне поздравляю с успешным завершением большого серьезного труда. Обязательно постараюсь приобрести Вашу книгу.

    Reply
  55. Polav

    (55) И Вам спасибо, что тему использования графов подняли. А то совсем грустно стало с идеями в автоматизации учета.

    Reply
  56. ildarovich

    (56) Polav, получил сегодня, наконец, Вашу книгу, уже бегло просмотрел. Сказать, что это большой труд — ничего не сказать. Труд просто огромный! — Большое спасибо!

    Но вот что заинтересовало: довольно мало работ в списке литературы. Получается, никто в мире этим (подведением математической базы под задачи учета затрат) больше не занимается? — Должны же существовать какие-то научные школы и у нас и за рубежом, направления исследований в этой области. В институте мы проходили модели системной динамики, которые показались мне чем-то похожими на Ваш подход. А Вы с кем-либо контактируете в «научных» кругах? Или ведете исследования в инициативном порядке сами по себе?

    Reply
  57. Polav

    (57) Спасибо за положительную оценку » огромного труда».

    Список литературы действительно короткий. В нем практически только «фундаментальная» литература, где можно увидеть какие-то интересные идеи.

    Можно также посмотреть сайт graphcost.com — тематический портал по теме Графы затрат и Автоматизированная форма учета на основе ООП, уже работает в тестовом режиме

    Reply
  58. Forrest_Gump

    Отличная статья!

    Reply
  59. ZanZiBar

    Спасибо автору)) И вопрос.

    Возможно ли автоматическое задание вершин графа? Что бы была возможность увидеть структуру конфигурации Подобно http://www.mista.ru/dot/amv8.htm Только там необходимо использовать либо дополнительно стороннюю программу, либо подключать внешнюю библиотеку(что весьма проблемно, как показала практика…). Буду благодарен за ответ

    Reply
  60. ildarovich

    (60) ZanZiBar, конечно, возможно. Можно к этой же обработке добавить кнопку «Структура конфигурации» (например, над кнопкой «Номенклатура»). К этой кнопке нужно будет привязать функцию заполнения ребер связей модулей конфигурации. Вот только откуда брать информацию о связи модулей? Я вообще-то хотел такой пример сделать тоже, но тогда не нашел нормальной готовой обработки, которая бы анализировала тексты модулей и строила их связи.

    Reply
  61. buy_sale

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

    Reply
  62. ZanZiBar

    (61) У меня есть файлик обработки который выводит связи в языке DOT. Может поможет?

    Reply
  63. ZanZiBar

    (63)+ По крайней мере информацию о связях выводит))) И с помощью сторонней программы (Graphviz) можно построить граф. Но есть нюанс. В минусах зависимость от сторонней программы. Да и строит она если честно… не «айс». Вершины графа залазят друг на друга просто до ужаса. А настройки не позволяют настроить «упругость» связей.

    Reply
  64. ildarovich

    (63) ZanZiBar, обработку посмотрел. Понял, что вас интересовала именно структура объектов метаданных (а не структура модулей конфигурации, как я подумал вначале). Тогда посмотрите комментарий (33). Там есть рисунок. То есть я уже проводил эксперимент для справочников «Розницы». В целом выглядит недостаточно наглядно, несмотря на то, что упругость можно регулировать. В, общем, хотя я и питал определенные надежды, что граф конфигурации, построенный таким образом, выявит какую-то нужную структуру, эксперимент меня разочаровал. Да и число вершин — объектов конфигурации достаточно велико. Область применимости метода (без оптимизации) — десятки вершин, а не сотни. А заниматься сейчас оптимизацией без надежды в конце концов получить красивую картинку как-то не очень хочется.

    Reply
  65. sikuda

    Автору большая благодарность за проделанную работу.

    Но есть три существенных замечания

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

    2. Для решения такой системы линейных уравнений есть не только простейший метод Эйлера(используемый Вами внутри 1С запроса), но и другие методы http://www.toehelp.ru/theory/informat/lecture14.html

    http://www.uchites.ru/files/nummethod_book_chapter4-1.pdf

    Собственно примеры с методом Рунге-Кутта четвертого порядка(спасибо преподавалелям института, что вдолбили)

    построение через Canvas — http://jsfiddle.net/sikuda/Gab44/

    построение через библиотеку Raphael(можно всунуть в 1С) — http://jsfiddle.net/sikuda/ruLeL/

    3. И как видно в приведенных примерах быстродействие 1С проигрывает, причем существенно.

    Собственно что у Вас, что для Raphael скорость будет определяться отрисовкой.

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

    Reply
  66. Polav

    Несколько слов о применении теории графов в методологии учета — в тестовом режиме заработал сайт Графы затрат (graphcost.com).

    В частности, в статьях на сайте:

    Процессы в Графах затрат

    Кластеры в Графах затрат

    можно посмотреть видеоролики, иллюстрирующие применение интерактивной подсистемы визуализации потоков затрат, представляющей потоки затрат в виде ориентированного графа

    Reply
  67. Makushimo

    (8) ildarovich

    Как, например, в виде графа отобразить схему товародвижения между складами?

    На дугах — количество перемещенного товара

    Скажем, по одной номенклатуре.

    Эта обработка так может?

    Reply
  68. ildarovich

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

    Ну и исходными данными является таблица «Ребра», которая в вашем случае будет содержать три колонки: наименование склада источника (Имя1), наименование склада получателя (Имя2), количество перемещенной номенклатуры (Упругость).

    Кнопку на форму положить и процедуру обработки ее нажатия заполнить по аналогии с уже сделанными процедурами — всего и делов-то.

    Reply
  69. Makushimo

    (69)

    Как именно нужно настроить обработку, чтобы получить отображение в виде дерева такие перемещения:

    А — Б = 10

    Б — В = 15

    В — Г = 25

    Г — А = 50

    Пока что мне обработка выдает один большой круг с буквой Г посередине

    И как обработка нарисует граф со встречными потоками? :

    А — Б = 10

    Б — А = 15

    Reply
  70. ildarovich

    (70) Makushimo, попробуйте все «упругости» поделить на 100 (например). У вас сейчас силы притягивания гораздо больше сил отталкивания и склады сливаются. Встречные движения можно показать либо выражением +10 — 15. Либо разнести тексты по длине дуги (1/3) и (2/3) длины дуги, либо цветом, соответствующим цвету склада, с которого товар уходит. В общем, вариантов масса.

    Reply
  71. Makushimo

    (71)

    не, не работает

    наверное, руки не оттуда растут

    Reply
  72. Denium79

    (8)

    Есть очень важное практическое применение Вашего способа, построение графического дерева спецификаций в виде дерева.

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

    Нет ли у Вас практического примера такой реализации?

    Reply
  73. ildarovich

    (73) Denium79, нет, деревья спецификаций я не строил, но сделать не трудно.

    Какая у вас редакция? Есть ли изменения в метаданных в части спецификаций? Какие в основном спецификации?

    — Если ответите на эти вопросы, могу добавить в обработку из статьи построение дерева спецификации.

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

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

    Reply
  74. Denium79

    (74)

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

    Теперь по теме: у меня УПП 1.3, спецификации только сборочные, изменений в части спецификаций нет.

    Уровни вложенности до 9, в среднем 8-10 позиций в спецификации (от 1 до 20).

    Reply
  75. ildarovich

    (75) Denium79, я добавил пример с построением графа спецификации к обработке.

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

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

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

    Reply
  76. Denium79

    (76) большое спасибо за участие. Я попробовал, сформировать по небольшом узлу. Получилось очень наглядно, буду дальше эксперементировать. Пока что по более менее крупной спецификации сформировать не получается, возможно дело в наименовании (скобки в наименовании). Можно ли каким то образом сформировать граф в виде дерева? Сверху вниз например?

    Reply
  77. headMade

    подскажите случайно не вы где-то на форуме infostart выкладывали список литературы на тему «Математические методы (модели) расчета себестоимости».

    А то я где-то видел в обсуждении какой-то статьи, но сейчас к сожалению найти не могу.

    Reply
  78. ildarovich

    (78) headMade, нет, не делал этого

    Reply
  79. adva

    ildarovich, не силён в теории графов, подскажи пожалуйста, в статье имеется граф, подходящий для языка Дракон ( https://ru.wikipedia.org/wiki/%C4%D0%C0%CA%CE%CD )?

    И пример оттуда же:

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

    Reply
  80. ildarovich

    (80) adva, нет, эта методика вряд-ли подойдет для рисования блок-схем. В блок-схемах блоки располагаются по-другим критериям. Но методов визуализации графов и готовых программ (не на 1С) полным-полно. Можно подобрать и такие, которые подойдут для блок-схем. Наиболее популярным пакетом является опенсорсный пакет GraphViz .

    Reply
  81. davay2000

    ну так когда же Вы явите взору народа обещанный «Граф счетов бухгалтерского учета» или «граф по счетам затрат»?

    Хотя «граф по счетам затрат» не так интересен(по крайней мере лично для меня) как «общая картина»…

    Reply
  82. ildarovich

    (82) davay2000, тут такая история:

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

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

    То есть по-сути получается, что вершины для наглядности нужно располагать вручную, а не автоматически.

    Reply
  83. davay2000

    (83)

    печалько.

    (в этом месте я глубоко зятянулся и…)

    А если сгруппировать активные счета в одну группу, а пассивные в другую(в какую группу определять активно/пассивные — ума не приложу)? Думаю такая группировка могла бы прояснить картинку… а еще есть идея сгруппировать группы счетов по родительским группам(например 101, 111,… в группу 1; 301,311,… в группу 3;…)

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

    Но вот если посмотреть на бухучет со стороны владельца: его будут интересовать оборачиваемость активов(скорость/структура/…) по центрам дохода, структуру затрат он может рассмотреть на графе построенном по затратным счетам (описано тобой выше),

    …если представить «оборот товара» схемой «купи/продай/купи2/продай2/купи3/…»,

    то это соответствует движениям »

    [[ДолгПоставщикам/РасходДС/ПоступлениеТовара] / [ДолгКлиентов/ПоступлениеДС/ОтгрузкаТовара]] /

    [[ДолгПоставщикам2/РасходДС2/ПоступлениеТовара2] / [ДолгКлиентов2/ПоступлениеДС2/ОтгрузкаТовара2]]/

    …»

    итого для графа бух-счетов можно сделать «магнитные центры»:

    слева «ДолгПоставщикам/РасходДС/ПоступлениеТовара»,

    справа «ДолгКлиентов/ПоступлениеДС/ОтгрузкаТовара»,

    сверху «(остальные) активы»,

    снизу «(остальные) пассивы(отдельно для наглядности выделить прибыль акционеров)))».

    На эти магнитные центры автоматически «свернуть» каждый бух-счет(его остатки, обороты — нужно представлять как-то отдельно стрелочками…) Как свернуть? Можно руками(вобщем-то не большой объем работы по первичной настройке). Как автоматом — не знаю… есть идеи?

    разделять циклы оборачиваемости друг от друга можно не по заказам, а по периодам работы. Например неделя1, неделя2,… или помесячно, а лучше по дням… (а можно вообще до движений). Эти циклы очень наглядно можно наложить на временную шкалу и посмотреть как динамически будут расти/уменьшаться — динамически меняющийся во времени граф… пусть даже без движений.

    еще подумал:

    ДолгПоставщикам/ОтгрузкаТовара это сальдо на счетах…

    РасходДС/ПоступлениеДС — это движение и к сожалению остатка нет, но их можно объединить: взять просто «остатки на 3 классе счетов в разрезе целевого использования средств»…

    вообще — как наглядно на динамическом графе отобразить перемещения части средств с одного узла на другой — это еще один вопрос?

    Reply
  84. ildarovich

    (84) davay2000, не хочется забегать вперед: у меня очень давно есть на тему визуализации оборотов хорошая идея. Проблема в том, что для рисования ее на чистом 1С чуть-чуть не хватает графических примитивов. В 1С обещали реализовать в табличном документе поддержку SVG. Когда это сделается (возможно, осенью?) — покажу этот подход.

    Но вообще посмотрите работы Polav. Он толстенную книгу написал на эту тему. Там много информации для размышлений. Ссылки в его комментариях (42), (54), (56), (58) и (67).

    Reply
  85. Polav62

    (84) Небольшой пример работы с Графами предприятий и Графами затрат можно посмотреть в видеоролике:

    Строим Граф затрат в слое бухгалтерского учета

    Там есть и варианты построения подсистем визуализации данных учета

    Reply
  86. ildarovich

    (86) Polav62, большое спасибо, ролик посмотрел — очень интересно!

    Визуализация — сила!

    Подсистема (ЕК — затраты) — уже продается или еще делается?

    Для какой конфигурации?

    Наверное, стоит о ней сюда статью написать.

    Reply
  87. Polav62

    Еще в 2008-2010 годах была сделана.

    Как модуль контроллинга для 1С Бухгалтерия (экспериментировали и в УПП и др.)

    Но, видно тогда время еще не пришло. Да и 1С тогда напряглась, реальные инновации никому не нужны.

    Проблема в том, что в основу заложена теория Графов предприятий (и Графов затрат), а ее нужно изучать

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

    Предлагали разработчикам РАУЗ (она тогда только создавалась) хотя бы визуализацию сделать. Отказались.

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

    Reply
  88. Polav62

    (87) вот еще один видеоролик. Он даже поинтересней будет:

    Строим Граф затрат в слое управленческого учета (У1)

    Reply
  89. Steelvan

    (85)

    …В 1С обещали реализовать в табличном документе поддержку SVG…

    Откуда информация ? Где читать ?

    Reply
  90. Steelvan

    (88) Polav62,

    Как пощупать можно ?

    Reply
  91. Polav62

    (91) Steelvan, пока только в видеороликах.

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

    А пока — специалистов по Графам предприятий нет (и не предвидится) — нет и спроса на решение таких задач.

    Reply
  92. Steelvan

    (92) Polav62,

    Тогда смысл ?

    Посмотрите на мои 22 см ?

    Reply
  93. Steelvan

    Если возможности продать нет, пустите в массы бесплатно.

    Просто жалко вашу работу. Объем проделан и на полку ? Трудно мне понять.

    Reply
  94. Polav62

    (94) Steelvan, здесь не все так просто.

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

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

    Для этого создан проект — сайт graphcost.com + книга Графы затрат. Моделирование в микроэкономике (2014) + модуль ЕК-Затраты

    А то, что продукт на основе теории Графов предприятий пойдет (и не только этот), нет сомнения. Всему свое время.

    Самое интересное, что и сейчас абсолютно все(!) работают с Графами предприятий (двойная запись) и Графами затрат (например — РАУЗ).

    Просто этого НЕ ЗАМЕЧАЮТ. Печалька. Вот когда заметят — тогда все и начнется. Это очень хороший стартап.

    Reply
  95. ildarovich

    (90) Steelvan, 1С, как правило, не публикует информацию о планах. Почитать не получится. Это слухи. Но из надежных источников.

    Reply
  96. ildarovich

    (95) Polav62, купил по случаю вот такую книжку:

    Г.Ф. Чергецкая «Модели объектов бухгалтерского учета»..

    Модели в этой книге — это графы.

    Reply
  97. Polav62

    (97) ну не могут же бесконечно игнорироваться очевидные вещи — в нашем случае, «наличие» графов в бухгалтерском (и любом другом) учете.

    Правда, название книги «немного» не соответствует ее содержанию. Скорее всего, автор увлечена этой темой и предполагает ее развивать в дальнейшем.

    А пока такое название можно рассматривать как аванс на будущие успехи автора.

    Reply
  98. d.zhukov

    Руководство вторую неделю просит отчет по дебиторке сделать… дам им лучше эту обработку, пусть снежинки рисуют..))

    Reply
  99. Polav62

    😉

    — Вот… дали за ударную работу … Микроскоп

    — Для чего он тебе?



    — Луну будем разглядывать!

    (В.Шукшин «Микроскоп»)

    «Снежинки» тоже бывают очень полезны в определенных случаях:

    Граф предприятия — «связанные» объекты учета

    Reply

Leave a Comment

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