Распределенные базы данных




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

31 Comments

  1. ЗАК

    Как то странно расписаны плюсы и минусы топологий … в вики и то лучше описание топологий идет 😉

    Reply
  2. fikuz@mail.ru

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

    Reply
  3. mastakw

    Нет самого главного — механизма реализации обмена применительно к тематике сайта.

    Выбор механизма значит важнее !!!

    Reply
  4. awk

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

    Reply
  5. awk

    (2) Спасибо, но ни слова Периферия1, ни Перефирия1 в словаре нет. Остальное учту на будущее.

    Reply
  6. awk

    (1) ТОПОЛО’ГИЯ, и, мн. нет, ж. [от греч. topos — место и logos — учение] (мат.).

    Часть геометрии, исследующая качественные свойства фигур (т. е. не зависящие от таких понятий, как длина, величина углов, прямолинейность и т. п.). Странно — потому что речь идет о построении принципа обмена, а не сети.

    Reply
  7. mastakw

    (4) Так ка собственно тема о 1С — именно разные ограничения механизмов недают реализовывать разные топологии и накладывают дополнительные плюсы/минусы.

    Если тема получит продолжение — то да.

    Иначе это просто ниочем. 1С штука предметная.

    Reply
  8. Valet

    Заголовок не соответствует содержанию.

    О распределенных базах меньше чем в ЖКК.

    А механизмы обмена применительно к распределенным базам не раскрыты.

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

    Общие фразы ни о чем, большинство из которых спорны.

    Минус:Информация проходит через неконтролируемую территорию

    Банковские структуры, почему то не боятся работать через интернет.

    Reply
  9. awk

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

    (8)

    1. Статья — это примерно 10% заголовка (я с вами согласен надо другой придумать).

    2. Убирать не надо, а то ведь и не догадаются 🙂

    3. Причем здесь страх? Минус этот не очевиден, но есть. Во первых вы не контролируете доступность — следовательно не можете её гарантировать. Во вторых вы не контролируете защиту информации.

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

    Reply
  10. mastakw

    Рассматривать организацию распределения баз без рассмотрения методов и свойств — не полезно.

    Так как эти методы и свойства накладывают кучу ограничений.

    Reply
  11. awk

    (10) Укажите ограничение и я его обойду (вероятность 90%)..

    Reply
  12. mastakw

    (11)

    применение только УРБД и схема кольцо

    Reply
  13. awk

    (12) Применение только УРБД — это не ограничение методов и свойств 1С 7.7 (я угадал версию?). Это административное ограничение.

    Reply
  14. awk

    (12) http://www.pb.ru/ru/manager/po/

    3. Обмен данными в любом направлении

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

    Reply
  15. mastakw

    (13)

    Административное — это потому что через меню администрирование ? 🙂

    Это ограничение встроенной методики.

    Считаю что рассматривать топологии без методик и средств реализации — неполезно !

    Reply
  16. mastakw

    (14)

    УРБД это не МОД !

    Reply
  17. awk

    (15)(16)

    1.

    АДМИНИСТРАТИ’ВНЫЙ, ая, ое (офиц.).

    1. Прил. к администрация. А. отдел исполкома. Административные органы. || Относящийся к системе управления, к органам администрации. Административная единица. А. центр. 2. Производимый распоряжением органов исполнительной власти. Административное взыскание. Выселение в административном порядке. 3. Необходимый для администратора, администраторский. Административные способности.

    2. Куда простите встроенной? Язык 1С то же встроен (если мы об одном и том же месте) и причем включен во все поставки (в отличии от УРБД).

    3. Топология обмена как раз и предполагает абстрагирование от методик и средств реализации. Рассмотрение методик и реализаций противоречит определению топологии.

    4. Я прекрасно знаю оба инструмента. И что, что УРБД не МОД? От этого на западе солнце встанет?

    5. Я понимаю, что еще Ленин использовал метод опровержения позиции оппонента, гиперболизацией его слов, до абсурда. Но при этом он не выподал из контекста разговора. Так что мы говорили об ограничениях 1С (7), а не об ограничениях знаний программистов 1С или желаний (распоряжений) каких-либо субъектов.

    Reply
  18. mastakw

    (17)

    «..Я прекрасно знаю оба инструмента. И что, что УРБД не МОД..»

    вот об этом стоит.

    а разбирать двигатель через выхлопную трубу — не стоит.

    Reply
  19. awk

    (18) Может тогда и репликацию средствами MSSQL рассмотреть? Я её то же реализовывал. А еще «Конвертация данных» есть, и т.д. И тема станет бесконечной. Просто мы смотрим с разных позиций. Я с точки зрения менеджера, а вы с точки зрения программиста. Я не говорю, что не правильна ваша точка зрения. Просто, она неприемлема на первоначальном этапе проектирования. Изначально надо ответить на вопрос, «Для чего делать?», потом на вопрос «Что делать?», а вопрос «Как делать?» — должен появляться последним. На вопрос «Как» нельзя ответить, пока мы не знаем «Что надо», а вопрос «Что надо?» с предпосылкой «что бы было» — бессмысленный.

    Reply
  20. mastakw

    (19)

    «Может тогда и репликацию средствами MSSQL рассмотреть» — именно, и будет вам плюсище от пользователей.

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

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

    Reply
  21. rebuzx

    Странная статья!

    И причем тут топологии!

    Структура УРБД может быть такова, что ни одна топология под неё не подлезет. Например когда Периферия может быть ещё и центром для других периферий, а те в свою очередь центрами для других. И при этом везде свои ограничения передачи данных. Тут уже квадратиками и разноцветными кружочками не отделаешься.

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

    Не советую начинающим разобрать эту статью!!!

    Reply
  22. rebuzx

    Странная статья!

    И причем тут топологии!

    Структура УРБД может быть такова, что ни одна топология под неё не подлезет. Например когда Периферия может быть ещё и центром для других периферий, а те в свою очередь центрами для других. И при этом везде свои ограничения передачи данных. Тут уже квадратиками и разноцветными кружочками не отделаешься.

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

    Не советую начинающим разобирать эту статью!!!

    Reply
  23. rebuzx

    Странная статья!

    И причем тут топологии!

    Структура УРБД может быть такова, что ни одна топология под неё не подлезет. Например когда Периферия может быть ещё и центром для других периферий, а те в свою очередь центрами для других. И при этом везде свои ограничения передачи данных. Тут уже квадратиками и разноцветными кружочками не отделаешься.

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

    Не советую начинающим разбирать эту статью!!!

    Reply
  24. rebuzx

    СОРИ ЗА ПОВТОРЕНИЯ!!! 😳

    Reply
  25. awk

    (23)

    1. УРБД (если мы применяем это выражение к 1С) — имеет четкое определение. И оно не реализует то, о чем вы говорите.

    2. Топология, которую вы описали имеет ряд названий (гирлянда, снежинка, дерево). Данные топологии являются лишь частным случаем смешанной топологии.

    3. Квадратики и кружочки — это всего-навсего способ графического отображения информации. И рисовать их придется ОБЯЗАТЕЛЬНО (если вы будете делать что-то серьезное). Я сам ненавидел блок-схемы, пока не начал писать код за деньги.

    3. Про то как передавать файлы, надо думать до того как их плодить. Пример: Вы делаете выгрузку в xml (планы обмена, КД и т.д.). Теперь давайте передадим эти файлы. И тут оказывается (гипотетически, но реально), что вы в месте где недоступен высокоскоростной канал связи. А xml — это формат, который не экономит на объемах (у меня генерировались файлы, размером более 100 Мб). Теоретически можно оптимизировать… И тут вы встаете перед делемой. Либо, сказать заказчику, что обмен нереален, либо переписывать все заново. В обоих случаях вам придется иметь неприятный разговор с заказчиком. При описании транспортов вначале (в том числе их технических характеристик), вы можете сгладить разговор и за оба варианта получить деньги. Если вы это вначале не предусмотрели — то рискуете не получить денег за работу (я бы не заплатил).

    Reply
  26. awk

    (22) Топологии при том, что начинается разработка именно с них. А точнее подбора топологии, под задачи заказчика.

    Reply
  27. rebuzx

    (25) Каша!

    1. УРБД как её не определяй и есть УРБД и рисовать вы её будете в точном соответсвии со структурой удалённых филиалов (организаций, подразделений). И она не определяется топологией (звезда снежинка и т.д.), она оределеяется структурой предприятия (организации, подразделения), а там может получиться структура любой сложности! Не нужно УРБД, сравнивать с локальными сетями, где круг топологий чётко определён.

    2. Согласен блок-схема обязательна. (Вот только как вы её назовёте «Структура УРБД на предприятии N составлена по топологии СНЕЖИНКА») 😀

    4. А тут ничего ненадо думать и плодить ничего не надо. Вопрос только в том, как срочно необходим обмен данными? Если нет интернета, то есть CD + экспресс почта или обычная Почта России. Если вообще ничего нет, то здравый смысл сразу Вам подскажет нужен ли там УРБД.

    И вообще, разговор об УРБД заходит только после полного обследования предприятия, бизнес процессов, его структуры. На этот момент Вы уже будете знать где что есть, а где нету.

    Reply
  28. awk

    (27)

    1. УРБД — это (в контексте 1С) компонента для седьмой версии.

    2. Если честно, то какая разница что между чем и как связано… Сеть она и есть сеть… Неважно что это за сеть… Это и есть смысл топологии…

    3. Как назвать — это вопрос маркетинга…

    4. Полное обследование??? Обследовать можно бесконечно (особенно когда это делают как рекомендует 1С)… Мне больше нравится подход SAP/R3 (все что вам нужно есть в SAP/R3, чего там нет вам не нужно). Я не говорю что обследовать не надо, но в 90% случаев все бизнес-процессы стандартны. Когда говорят, о бизнес-процессах специфичных для фирмы, в 90% случаев это:

    50% стандартные бизнес-процессы которые изобрели заново

    25% это бизнес-процессы которые позволяют воровать у хозяев.

    25% неправильные бизнес-процессы, созданные по незнанию предметной области.

    5. Здравый смысл не всегда есть у заказчика. Какой здравый смысл оправдает воровство 5000$ при обороте 50 000$ в месяц (пиратское ПО)? Или покупку ПО просто потому, что оно есть у всех?

    Reply
  29. bolush
  30. EarlyBird

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

    О каком плюсе тут можно говорить?

    Это просто ё…аный стыд!

    Лень и нежелание реагировать на конструктивную критику — автору позор.

    Автор! Батенька!

    ПерифЕрия.

    ПерифЕрия!

    ПерифЕрия!

    Reply
  31. awk

    (30) EarlyBird,

    Лень и нежелание реагировать на конструктивную критику — автору позор.

    Позор, позор. Ну дык — минусуй. -5 статья снята с публикации. Я сейчас то же минус влеплю… Чьерт… Сайт не дал… Говорит я автор статьи…

    Reply

Leave a Comment

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