Завязка истории про переход одной дистрибьюторской конторы с УТ 10.3 на УТ 11




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

24 Comments

  1. rusmil

    А комментарий такой… Пусть начальство готовится к увеличению шатата программистов. Все признаки на лицо.

    Если посчитать как по нумерологии:

    УТ 10 достаточно 1 + 0 = 1 программиста

    УТ 11 минимум 1 + 1 = 2 программиста

    Если посчитать по двоичной системе:

    УТ 10 — 2 программиста

    УТ 11 — 5 программистов

    Если основываться на опыте, работы точно прибавится.

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

    Reply
  2. HAMMER_59

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

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

    С торговлей как-то проще, многие все еще на семерочной сидят и в ус не дуют, сейчас 1С придумала обмен через Enterprise data, так и вовсе один раз сделал обмен, и это очень надолго.

    Reply
  3. rusmil
    «один раз сделал обмен, и это очень надолго»

    Боюсь огорчить не очень надолго. Форматы EnterpriseData клепают постоянно, и гарантируют поддержку в течение трех лет. Вот перечень:

    Номер версии Дата выпуска

    1.0 EnterpriseData_1_0_4.zip 21.11.2014

    1.1 EnterpriseData_1_1_4.zip 21.11.2014

    1.2 EnterpriseData_1_2_3.zip 15.04.2016

    1.3 EnterpriseData_1_3_8.zip 21.02.2017

    1.4 EnterpriseData_1_4_4.zip 21.02.2017

    1.5 EnterpriseData_1_5_2.zip 30.06.2017

    Форматы 1.0 и 1.1 уже не поддерживаются.

    Reply
  4. Идальго

    Я читал не каждое слово, но уловил, что вы с 10.3 хотите перейти из-за того, что там всего 16Гб оперативки (т.е. мало). Хм, дак ут11 этого на один зубок. Короче так себе повод. Про устарелось тоже спорно, ведь если подумать, то вам самим нужно оценить целесообразность использования новейшей и инновационной ут11, которая раза в два минимум дороже в поддержке, сложнее, массивнее. Вот вы просите вам посоветовать — я советую конечно переходить на ут11, это интересно и весело всегда, а ещё пишите о результатах.

    Reply
  5. Rustig

    (0) переходите на УНФ, не надо УТ 11.

    Reply
  6. Rustig
    Я читал не каждое слово, но уловил, что вы с 10.3 хотите перейти

    я тоже так

    Reply
  7. Ibrogim

    С точки зрения специалиста, конечно нужно внедрять УТ11, это строчка в резюме, новый опыт, выход из зоны комфорта, новые статьи на ИС

    С точки зрения бизнеса. Держаться за работающую и легко дорабатываемую УТ10

    Reply
  8. 1c.pro.fun

    (4) Про оперативку это самовнушение Алексея… он ищет хоть какие-то плюсы от внедрения УТ11 в данной конкретной конторе: тонкий клиент, экономия ОЗУ из-за отсутствия терминальных сессий на сервере

    (5) Алексею не приходится в данном случае выбирать, как и Карлену… в этом вопросе повлиять на ход повествования не Вы Рустем, ни я не в силах 🙂

    (7) Про выход из зоны комфорта точно подмечено 🙂 Картинка к статье как раз красочно иллюстрирует это 🙂

    Reply
  9. sergathome

    Прикольная причина, кстати. Неочевидная. Феодализмом попахивает… ;))

    Reply
  10. starik-2005

    (1)

    УТ 11 — 5 программистов

    11 в двоичной системе = 3 в десятичной. Где тут 5?

    А вообще, УТ 11 — это другое, не такое, как УТ 10 — клиент-серверное, глубокое, продуманное, непростое и т.д, и т.п. решение))) Пилил его, переработанное и дополненное до неузнаваемости, ядерное нутро три года без продыху отвлекаясь на 2-ю бухню. Было очень интересно.

    Reply
  11. genayo

    А кто и зачем удаляет комменты?

    Reply
  12. 1c.pro.fun

    (10) Именно так. Вы точно прочли «каждое слово» 😉

    (12) Да да я тоже заметил… для полноты картины могу сказать что genayo писал «про трэш и угар» и о том что его нужно больше на инфостарте.

    Reply
  13. rusmil

    (11) Точно, поторопился. Правильно 3. Но уже не смогу изменить комментарий. 30 минут прошло. Может модераторы подправят?

    Reply
  14. Il

    получится почти как в анекдоте: … вот тогда и поймешь, что такое автоматизация, но будет поздно!

    Reply
  15. 1c-intelligence

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

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

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

    3. Тире не стоит заменять дефисами;

    4. Следите за повторением слов в предложении. Например:

    «Его босс Карлен и сам этого не хотел, однако разговоры об этом были и раньше»

    Обычно так получается, когда написал половину предложения, отвлекся, вернулся и дописал.

    5. Определитесь со стилем текста от автора. Например, есть такой кусочек:

    «Прикол в том, что заводил…»

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

    Еще кусочки: «Ежу же понятно,», «ставят в пример другим дистрибам«.

    6. «безусловно, надо… она же, как». Троеточие в данном случае, вроде бы, означает конец предложения. Значит, следующее должно начинаться с большой буквы.

    7. Постоянно создается впечатление, что повествование ведет черт знает кто. То ли это мысли Алексея, то ли мысли автора, то ли есть еще какой-то персонаж, еще не представившийся.

    В середине текста написано «Ну ведь и похвалить то можно Алексея, все же первый раз в жизни на линухе Астерикс подымал». Вроде, сам Алексей так думать не может.

    Я бы как-то отделил мысли Алексея от мыслей автора. Это несложно, но текст станет понятнее.

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

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

    Reply
  16. pbabincev

    (5)

    Обоснуйте, пожалуйста…

    Мне правда хотелось бы это понимать 🙂

    Reply
  17. Rustig
    Обоснуйте, пожалуйста…

    Мне правда хотелось бы это понимать 🙂

    Если бы обосновать можно было в трех предложениях, то ни у кого не было бы вопросов, и УТ 11 не было бы на свете по этим причинам. Как раз наоборот, есть УТ 11 и УНФ. А поэтому придется решать на месте исходя из сложившихся обстоятельств.

    Обе предназначены для разных типов бизнеса. УТ 10.3 больше похожа на УНФ, чем на УТ 11. Поэтому переходить с УТ 10.3 стоит на УНФ, чем на УТ 11.

    Reply
  18. serega_sun

    Мы собираемся переходить с сильно переписанной под себя УТ 10.3 на «УТ и ВСК». И уже много чего там переписали. (не я)

    Мне еще предстоит «раскуривать» всё это счастье. Кто-нибудь может поделиться опытом. В общих чертах.

    Reply
  19. HameleonA

    Очень сложно читается текст, еле осилил.

    Плюсы у УТ 11 есть, это конечно же «тонкий клиент», больше возможностей работы с торговым оборудованием, возможность вносить изменения не снимая с поддержки (расширения) и т.д. Плюсы однозначно есть и они не малые. НО есть и минусы. Особенно нужно учитывать переход с 10 версии. На памяти нет ни одного клиента с типовой ут10.3, доработок всегда у всех очень много, и вот стоимость такого перехода «Карлену» возможно обойдется очень дорого, к переходу же скорее всего нужно будет добавить и обновление парка компьютеров, так как 11 требовательнее к железу в разы. Так что «хорошее выйдет», но не сразу))

    Reply
  20. oleg-x

    У нас руководство хочет обнулить базу, начать так сказать с чистого листа.

    И есть два варианта, поставить последнюю УТ10.3 и перенести все доработки и работать в привычной среде.

    Или перейти на УТ 11.4.

    Сейчас изучаем УТ 11.4 и решаем, а надо ли оно нам.

    Reply
  21. Terve!R

    (21) ну это смотря чем торговать. Есть такие товары, что только в новых конфигурациях учет вести можно. Во-первых, взять ту же маркировку — ГИСМ не за горами, пара месяцев осталась до сигарет, полгода до обуви, а там и другое заставят через систему маркировки вести. У нас вот ВЕТИС работает, в 10.3 этого нет, а УТ 11.4 умеет из коробки. Во-вторых, мы бы , например, не смогли бы жить без связки Партнер-Контрагент, без механизма соглашений с клиентами, без гибкой системы скидок и серийного учета, без синхронизации с БП 3.0. Чуть было не внедрили ячеистую систему склада, но пока отказались.

    Reply
  22. oleg-x

    (22) Ну нас это все сильно не пугает, работаем с Меркурием и просто сами написали интеграцию. С БП 3 аналогично, просто написаны свои правила обмена.

    Тут вопрос, а на сколько сильно нужна нам эта УТ 11, дописывать её все равно придется, а вот есть ли там, что то такое принципиально новое, без чего мы жить не можем и просто до этого не понимали всей прелести новой конфигурации 🙂

    Reply
  23. GreenDragon

    (4) 16 Гб оперативки на терминальном сервере, если я правильно понял посыл автора. Или вы думаете, что у них терминальный сервер и сервер 1С на одном сервере крутятся? Может ещё и sql в этой куче со всеми барахтается, и попутно все с правами админа?

    Reply
  24. Идальго

    (24) А я не знаю что тут думать. Можт на одном серваке всё, а может и разнесено по разным. Бывает всякое. Мне честно говоря без разницы =) Советуя, я хотел предварительно напомнить, что УТ11 жрёт больше ресурсов чем УТ10.3 )))

    Reply

Leave a Comment

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