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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *