Склад Гильдии Геймеров.




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

63 Comments

  1. cushe

    😀 😀 😀 спс поржал, особо не понял что за игра.

    Reply
  2. Altair777

    (0) Цель? Смысл?

    Reply
  3. support

    😀

    Только для каждого игрока надо будет купить лицензию 1С 🙁

    Reply
  4. IgorXml

    (3) Это не для каждого. Для оружейника и для гостя.

    Сейчас на одной л. работаю 🙂

    Reply
  5. IgorXml

    (2) 1. Для меня — интесно. Я кодер по Бухии. Надоело чужие ошибки править.

    2. Для Игроков. Начинающим — легче качаться. Заканчивающим — вернуть хоть какие деньги. Для Го-ов престиж гильдии.

    Reply
  6. IgorXml

    (5) Сори за русский 🙁 : интесно — интересно, Го-ов — Глав.гильдий.

    Reply
  7. coder1cv8

    Класс! ))) Вот сфера не охваченная учетом на 1С! ))

    Reply
  8. IgorXml

    (1) Картинки из RF-online.

    Reply
  9. Паладин

    Да уж, до этого надо было додуматься… учет для онлайн игры… онлайн игры вообще нужно запретить…

    Reply
  10. IgorXml

    (9) 1С сам их продаёт: GAMES.1C.RU

    Reply
  11. lazy

    Онлайн игры, в которых при смерти теряется опыт — от лукавого!

    За идею и реализацию — плюс!

    Reply
  12. IgorXml

    (9) Играют чаще подростки и люди ущербные. А владильцы и админы игр не всегда порядочно себя ведут.

    Reply
  13. support

    Уже данную конфигурацию пиарят

    http://intranet.moy.su/forum/11-18-8

    Reply
  14. IgorXml

    (14) 😀 🙂

    Бухи на работе не дают мастерить. Работать заставляют на них. На выходных только и могу что-то делать.

    Reply
  15. Franchiser

    круто

    Reply
  16. Altair777

    (12) Я бы так категорично не говорил 🙂

    Сам когда-то играл в Линейку. Поначалу было прикольно и интересно.

    Но потом на хайлевелах (80/80/60/нобл) стало просто скучно. Одно развлечение — на осаду сходить.

    Короче, забросил и не жалею…

    Reply
  17. Serjik78

    (16) На каком сервере играли? 😉

    Reply
  18. Altair777
  19. Serjik78

    (18) Эх, а я на Франце…

    Reply
  20. KnightAlone

    не совсем понял суть обработки, хотя в MMORPG играю давненько. да и заморачиваться покупкой лицензий и установкой 1с-ки врят ли кто в гильдии будет.

    Reply
  21. Altair777

    (19) Настоящие задроты играют на руоффе 🙂

    Reply
  22. IgorXml

    (20) Это конфигурация, а не обработка. У нас в гильдии уже работает. И есть предложения от ГИ.

    Нормальная гильдия геймеров — это не предприятие, это самостоятельное государство!

    Приношу свои извинения перед игроками за (12). Не аккуратно сказано было.

    Reply
  23. Serjik78

    (21) Я ушел еще до РуОффа 😉 Играл с открытия Франца, задротил почти 2 года… 80 лвл на бишопе брал 5.5 мес 😀 😀 😀

    Reply
  24. Altair777

    (23) тогда уже не на бише, а на кардинале 🙂

    P.S. Автор, это ничего что офф-топ?… В Ленте поднимаем 😉

    Reply
  25. IgorXml

    (24) Я тока рад. 🙂

    Reply
  26. Serjik78

    (24) Бишоп мне лично звучит приятнее 😉 Вдобавок запомнилось, когда до окончания Олимпиады 3 дня, в клане было 9 ноблов, единственных на сервере. Так была очередность кто качает бишопа, 24/7 😀

    А Кардинал — это уже 20% до конца. Хотя Salvation — штука классная 😉 Ну и party-celestial 🙂 Бишоп — он в сердце навсегда :{} В первую очередь потому что на low-level ты нахрен никому не нужен и тут самый большой труд 😉 (Это на РуОффе уже куча плюшек появилось когда бишоп соло запросто), а так бегаешь на undead-ах качаешься, 3 мин эксп, 10 мин на попе регенишь 😀

    (25) Благодарствую, а то ностальгия нахлынула 😉

    Reply
  27. Altair777

    > Так была очередность кто качает бишопа, 24/7

    Да… без биша нигде нельзя, ни на осаде, ни на варе 🙂

    А биша качать просто — с гладом в ФОГ на пару суток 😉

    Reply
  28. Hammery

    Я скачал файл, а что мне с ним делать?

    Reply
  29. IgorXml

    (28) Это *.cf. Установить 8.2 платформу. Установить Веб-сервер. Заполнять данными. Если об этом.

    Эсли посмотреть, я тогда выложу с демо данными.

    Reply
  30. Flashback1979SE

    Докатились, ёкарныбабай 😮

    Reply
  31. Flashback1979SE

    Сурры вам само-то будут. 8)

    Reply
  32. Altair777

    (30), (31) Переведите, пожалуйста 🙂

    Reply
  33. IgorXml

    (32) Это клиенты пошли. 🙂 Клиент всегда прав!!!

    Reply
  34. Altair777

    (33) И куда они пошли?

    «Поручик Ржевский, молчать!» © 🙂

    Reply
  35. Flashback1979SE

    Есть фильм «Суррогаты», вот и тут можно провести аналогию, народ рубиться в игрулины и в добавок учет в 1С ведут:-) Отчетность каждый квартал, расхождение план-факта бюджетов… и т.п. Скоро совсем два пальца на правой руке отваляться, остануться только три: большой указательный и средний, чтобы мышку удобно было держать:-)

    😀 😀 😀 😮

    Reply
  36. Altair777

    (35) Ха! У нормальных геймеров все пальцы заюзаны 🙂

    Reply
  37. Flashback1979SE

    Заюзаны в усмерть:-) уже волосы и мозоли кастомизировались на пальцах.

    Reply
  38. IgorXml

    (35) Вот устав обычной гильдии: Устав Гильдии

    Учет ведут никак мальчишки лет 15-17.

    Reply
  39. Altair777

    (38) Конечно, мальчишки… нубы… 🙂

    > В ГИ SolariS принимаются игроки уровня 45+

    Если говорить об Л2, то в топ-кланы принимаются минимум:

    3-ья профа (76+), саб, нобл

    Reply
  40. IgorXml

    (39) В РФ-онлайн был макс лвл 55. Мальчишки нубы это другой вопрос.

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

    Reply
  41. Altair777

    (40) а в Линейке макс.левел 78/80 (в зависимости от версии)

    зато мобы могут быть и побольше…. 🙂

    Так что 76 из 80 все равно побольше, чем 45/55

    А в чем суть РФ-онлайн? Что-это такое?

    Reply
  42. IgorXml

    (44) Из Википедии: http://ru.wikipedia.org/wiki/RF_Online

    Reply
  43. ilia_m

    RF умирает, там сейчас остаются те кому жалко вложенных в игру средств, и те кто наживается

    Reply
  44. IgorXml

    (43) Это не важно. Гильдийный учет и магазин на другой игре нужен будет. Кстати, признаюсь, что в моей конфигурации здесь выложенной, толком, ничего этого и нет. Регистры не работают. Один отчет для примера по рег. свед. и всё.

    Но как аттестованный спец. по 77 и 8.1 обещаю всё это сделать, как должно быть в ближайшее время. У меня уже есть предложения от других гильдий о сотрудничестве и наш ГЛ уже пишет договор.

    🙂

    Reply
  45. Altair777

    (44) ммм…. И каким боком его можно задействовать в той же Линейке? 🙂

    Reply
  46. IgorXml

    (45) Я только предполагаю, что учет может помочь игрокам. Не играл достаточно в Линейку. 🙁

    Очень важно устройство самих гильдий. Если устройство демократичное или есть продвинутый диктатор, то это нужно.

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

    В РФ-онлай даже сейчас гильдии организуются в союзы всё более сложной структуры.

    Reply
  47. IgorXml

    Выложил демку — *.dt-ик

    Reply
  48. IgorXml

    Сегодня положил версию 1.2 с отчетами СКД и командами для подсистем Склад и Кадры.

    Reply
  49. IgorXml

    Отредактировал описание. Добавил:

    Конфигурация адаптирована под игру RF-online. В игре дожны быть созданы персонажи-кладовщики, у них д.б. много свободного места для обмена. И должна быть сама возможность обмена.

    Что сделано:

    1. Набор справочников для описания предметной области игры.

    2. Учет ведется на регистрах сведений.

    3. Отчеты построены на СКД.

    4. Для персонажей и игровых предметов есть возможность загружать картинки из самой игры.

    5. Созданы три подсистемы: Склад, Кадры и Магазин.

    6. Разделение пользователей на две группы: гильдяне и покупатели. Покупателям доступен только магазин. Т.е. только те предметы, которые могут продаваться.

    Reply
  50. IgorXml

    Расшифровка в СКД интересно получилась. Может кому пригодиться. Вот пример:

    &НаСервере
    Функция ПолучитьURLСхемы()
    ОсновнаяСхемаКомпоновкиДанных=Отчеты.ПоПредметам.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);
    URLСхемы = ПоместитьВоВременноеХранилище(ОсновнаяСхемаКомпоновкиДанных);
    Возврат URLСхемы;
    КонецФункции
    
    &НаКлиенте
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    URLСхемы=ПолучитьURLСхемы();
    ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
    Обработка=Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,ИсточникДоступныхНастроек);
    Результат=Неопределено;
    Параметр=Неопределено;
    ДоступныеДействия = Новый Массив;
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
    Обработка.ВыбратьДействие(Расшифровка,Результат,Параметр,ДоступныеДействия,);
    П =    Новый Структура(«Ключ», Параметр);
    Форма = ПолучитьФорму(«Справочник.Предметы.ФормаОбъекта», П);
    Форма.Открыть();
    ПриОткрытии(ложь);
    КонецПроцедуры
    
    

    Показать

    Reply
  51. IgorXml

    Добавил обработку «ИзменениеПароляПользователяИБ» в подсистеме Служебные.

    Reply
  52. IgorXml

    Расшифровка в СКД проще сделал. И нет теперь лишнего окна в Веб-клиенте: http://www.forum.mista.ru/topic.php?id=444240

    &НаСервере
    Функция ПолучениеЗначенияРасшифровки(Расшифровка, Адрес)
    Возврат ПолучитьИзВременногоХранилища(Адрес).Элементы[Расшифровка].ПолучитьПоля()[1].Значение;
    КонецФункции
    
    &НаКлиенте
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    Значение  = ПолучениеЗначенияРасшифровки(Расшифровка, ЭтаФорма.ДанныеРасшифровки);
    П =    Новый Структура(«Ключ», Значение);
    Форма = ПолучитьФорму(«Справочник.Предметы.ФормаОбъекта», П,);
    Форма.Открыть();
    ПриОткрытии(ложь);
    КонецПроцедуры 

    Показать

    Reply
  53. IgorXml

    С Рождеством Христовым 😀 !

    В редакции 1.5 поправил рег. сведений и отчеты к ним.

    Reply
  54. IgorXml

    В редакции 1.9:

    1. Отразил более детально логику игры РФ-онлайн в учете для справочников и регистров «Предметов» и «Персонажей».

    2. Внес множество картинок. Что немного нагрузило базу — 1.7мб.

    3. Увеличил количество ролей. Отчеты СКД более интересные: с готовыми вариантами и с диаграммами. Это после посещения курса: ЭФФЕКТИВНАЯ РАБОТА В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ 8.2»

    Reply
  55. IgorXml

    Пробное описание на видео: Видео

    Будет ещё.

    Reply
  56. IgorXml

    Для плохо знакомых с 1С есть подробное описание с видео: http://free-lance.ucoz.ru/publ/sklad_gildii/2

    Reply
  57. zarazax

    Сама конфигурация вряд ли буит иметь ценность, но внутри много интересных примеров работы. Автору респект. 🙂

    Reply
  58. AlecoZAV

    Респект за примеры, конфа братишке геймеру понравилась) может будет использовать

    Reply
  59. vitaminich

    Хорошее подспорье начинающему работать с управляемыми формами.

    Reply
  60. bolush

    Играя в он-лайн игру, заметил что игроки теряют деньги, время и здоровье часто впустую.

    1. Теперь начинающим игрокам будет легче качаться. Они могут получить одежду и оружие из гильдии от старых игроков.

    2. Старые игроки могут продать или сдать в аренду свои вещи. Передача имущества регистрируется в базе и там же храниться картинка сделки-обмена.

    3. Глава гильдии может вести кадровый учет и сбор налогов. Что даст огромное преимущество перед другими гильдиями, которые без 1С и без учета.

    СПАСИБОООООООООООООООООО

    Reply
  61. ИльяЕвгеньевич

    (9) Паладин,

    сказал паладин))

    Reply
  62. KroVladS

    плюс за оригинальность

    Reply
  63. RainyAugust22

    оригинально:)

    Reply

Leave a Comment

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