Рабочий стол (версия 2.15) со страницами, прикрепленными формами и элементами оформления




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

67 Comments

  1. WKBAPKA

    вот за это плюс, я уже давно писал про слои, эьто очень удобно 😀

    Reply
  2. WKBAPKA

    молодчина

    Reply
  3. Amali

    Я создала 2 закладки, добавляю на 2-ю закладку значок. По умолчанию созданный значок добавится на 1-ю закладку (если внизу формы не указать 2-ю закладку). Хотелось бы что бы по умолчанию значки добавлялись на ту закладку, из которой была вызвана форма. По поводу оформления кода — звездочки на мой взгляд не самый лучший вид разграничения, особенно в таком количестве. Очень рябит в глазах.

    Reply
  4. Amali

    1 — Если создать значок, удалить его, а потом попробовать создать заново — ошибка! » Уже существует значок «НазваниеЗначка» с теми же реквизитами».

    2 — при открытии значка(какой либо справочник) — «Значение не является значением объектного типа (Гиперссылка)».

    3 — при выборе пункта «Выстроить все значки» в контекстном меню — «Ошибка при вызове метода контекста (Добавить): Недопустимое значение параметра (параметр номер ‘2’) (Не уникальное имя! (Иконка_3))

    «. И все значки на данной странице ПРОПАДАЮТ!!!!

    4 — кнопка отсортировать значки из контекстного меню — делает вообще что то непонятное…(у меня несколько закладок, с несколькими значками).

    Итого: Это я просто открыла посмотреть обработку…. Хочется спросить автор обработки вообще хоть как то «протестил» функционал?

    Reply
  5. rauf

    Спасибо за тестирование. Обработка будет дорабатываться. Разрабатывал и тестировал на простой конфигурации — все работало. Сейчас запустил на типовой — есть проблемы.

    Reply
  6. Душелов

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

    Reply
  7. rauf

    Исправил и обновил.

    Reply
  8. Amali

    Ну все ранее указанные замечания исправлены — молодец! НО…

    1-Если на значке вызвать контекстное меню -> переместить, и на выбранной закладке будет значок в левом верхнем углу, то перемещаемый значок «накроет» его.

    2-Вызвав форму «Закладки» (в поле отображение закладок — пусть по умолчанию проставляется значение «Сверху», так как если пусто, то возникает ошибка и в свойствах КоманднойПанелиФорма убрать галочку «Вспомогательная» и сделать кнопку «ОК» — по умолчанию ….так удобнее — это так пожелания). При перемещении закладок вверх или вниз, принадлежность значков к какой либо закладке сбивается..(((

    3-Я не поняла зачем кнопки «Добавить» и «Добавить еще» на форме «Значок».

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

    Reply
  9. rauf

    (8) Еще раз спасибо за исчерпывающее тестирование, внесу исправления в ближайшее время

    Reply
  10. Amali

    Это еще не исчерпывающее…)))

    Reply
  11. vlsv

    Проблемы возникают если обработку вставить в конфигурацию … не получает имя каталога обработки. Можно сделать немного универсальнее? чтобы каталог с иконками можно было указывать в настройках.

    Reply
  12. rauf

    Внес исправления, добавил иконки в закладки и обновил

    Reply
  13. Amali

    rauf — не подумай, что я придераюсь, но все же….

    1-если я добавляю одну закладку, то она не отображается на экране.

    2-а можно сделать чтобы на каждой закладке можно было изменить обои?

    3-говоря об оформлении я конкретно имела ввиду форму «Значок». Очень хотелось чтобы Поля ввода «Имя», «Тип», «Вид», «Действие», «Объект» были выровнены по левому краю.

    В общем прогресс уже налицо, ошибок намного меньше.

    Reply
  14. Amali

    (13) В пункте 2 я имею ввиду разные обои на разных закладках.

    Reply
  15. rauf

    Замечания приняты (по пункту 1 наверное Ваш вариант лучше, хотя непонятно зачем нужна одна закладка — уже думал об этом). Буду реализовывать

    Reply
  16. Rodegast

    При добавлении иконки возникает ошибка с отсутствующем итератором 😮

    Reply
  17. rauf

    Исправил и обновил

    Reply
  18. vlsv

    Спасибо, еще проблемка список регистра сведений не хочет открываться :(.

    Reply
  19. vlsv

    И еще при создании ярлыка на внутренний отчет то в поле вид не отображает название и не сохраняет его

    Reply
  20. rauf

    По 18. Регистр сведений по всей видимости не имел форм — поправил для этого случая. По 19. Какой длины идентификатор и название этого внутреннего отчета? Было расчитано на 90, увеличил до 200 (не будет изменено для уже сохраненных настроек пользователя). Добавил подсказки для ярлыков. Обновил.

    Reply
  21. vlsv

    Название короткое, у него тоже никакой формы нет. Отчет с формой открывается.

    Reply
  22. vlsv

    Точнее форма у него все же есть, имя отчета: Отчет2

    Reply
  23. rauf

    Разобрался. Создал пустой отчет Отчет1. У него нет синонима — поэтому не определялся вид. Исправил и обновил. Теперь и пустой отчет открывается.

    Reply
  24. vlsv

    Спасибо 🙂

    Reply
  25. User3333

    Спасибо крутая штучка, очень очень понравилась,

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

    Reply
  26. rauf

    К пункту [25] Спасибо за идею — добавил назначение горячих клавиш для значка

    Reply
  27. SHA_MAN

    Спасибо) а на 8,2 можно доработать? не весь функционал сработал при конвертации((

    Reply
  28. SHA_MAN

    Так сори, все на 8.2 работает))

    Reply
  29. vlsv

    а можно еще кроме ярлыков, добавить формы списков (справочники, документы, регистры)?

    Reply
  30. alexsh76

    Однозначно Плюс.

    Сравниваю со своим столом, который, как я понимаю был толчком для создания Вашего. (http://infostart.ru/public/58561/)

    Неплохо переписано. Перемещение гораздо быстрее. Идея с вкладками тоже не плоха. Настройки сделаны удобнее. И даже «О программе» есть 😀

    В общем получился практически готовый коммерческий продукт ;). Буду использовать Ваш. Немного завидую результату. Оправдываюсь только тем что у меня на доведение своего времени нет 🙁

    А слабо для перемещения на панель ActiveX приделать? У меня все лапы не доходят.

    Reply
  31. sppr

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

    Reply
  32. Craig

    Скачал, оценил… +плюс+ Только почему dll файлы содержащие значки он не понимает?!

    Reply
  33. slavabvo

    Подскажи пожалуйста, под 8.2 будешь делать?

    Reply
  34. rauf

    Под 8.2 переходит при обычной конвертации (см.28)

    Reply
  35. cleaner_it

    Если добавлять новую форму, а потом не записывая элемент закрыть форму, то форма будет регулярно выскакивать и надоедать:( Даже если ее после этого записать (типа, горшочек — не вари)

    А так очень хорошо!

    Reply
  36. Altez

    кавай, до визуализации блок-схем алгоритмов допилить бы в отпуске

    (30) «стол был толчком» — Челябинские хроники?)

    Reply
  37. levran

    Впечатлило. Спасибо!

    Reply
  38. chmod660

    1с 8.2 (8.2.11.235)

    {Форма.РабочийСтол.Форма(1499,11)}: Процедура или функция с указанным именем уже определена (ОткрытьФорму)

    Переименование функции помогает.

    Reply
  39. nihip

    Спасибо, добрый человек!!!))))

    Reply
  40. dakinder

    Подскажите пожалйста, как сделать чтобы сама автоматически запускалась?

    Reply
  41. Ish_2

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

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

    Reply
  42. alexsh76

    Ошибка

    Reply
  43. Ish_2

    (42) Всё-таки выбор «Поле картинки» в качестве ярлыка не очень элегантен.

    Гораздо перспективнее и богаче подход в платной разработке где за основу был выбран объект ГрафическаяСхема.

    Но посмотрев код — пришёл в ужас.

    Стало понятно , что дешевле доработать «РабочийСтол» из текущей темы.

    Reply
  44. Amorfus

    Очень понравилось. Пользователи в восторге. Использовал в своей конфе написанной с нуля. Спасибо автору.

    Reply
  45. zog

    Спасибо автору. Всех порадовало)

    slavabvo пишет:

    Подскажи пожалуйста, под 8.2 будешь делать?

    Да, под 8.2 все вроде пашет, не поленись скачай и проверь сам 😉

    Reply
  46. zog

    Спасибо автору. Всех порадовало)

    slavabvo пишет:

    Подскажи пожалуйста, под 8.2 будешь делать?

    Да, под 8.2 все вроде пашет, не поленись скачай и проверь сам 😉

    Reply
  47. Raminus

    Держи плюсик! 🙂

    Reply
  48. margo2007

    Да, под 8.2 все работает.

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

    Reply
  49. margo2007

    В версии 2.12 в разделе об обработке написанно:

    Автозапуск = ВосстановитьЗначение(«РабочийСтол_Автозапуск»);

    Если Автозапуск <> Неопределено Тогда

    Если ВосстановитьЗначение(«РабочийСтол_Автозапуск») Тогда

    Каталог = СтрокаСоединенияИнформационнойБазы();

    Если Найти(Каталог, «File=») = 0 Тогда

    Каталог = КаталогПрограммы();

    Иначе

    Каталог = СтрЗаменить(СтрЗаменить(Каталог, «File=»»», «»), «»»;», «») + «»;

    КонецЕсли;

    ОбработкаРабочийСтол = ВнешниеОбработки.Создать(Каталог + «РабочийСтол.epf»);

    ОбработкаРабочийСтол.ПолучитьФорму().Открыть;

    КонецЕсли;

    КонецЕсли;

    Видимо, после «открыть» скобочки забыли поставить?

    У меня толь ко так заработало : ОбработкаРабочийСтол.ПолучитьФорму().Открыть();

    И то не сразу….

    Reply
  50. AruslanM

    Автору спасибо, всех порадовало.

    Держи плюс и от меня! 🙂

    Reply
  51. vovkakursk

    Супер!!! Спасибо!

    Reply
  52. Yasen

    За разделение по страницам плюс. Используем давно, довольны.

    Reply
  53. NovSL

    Так все таки версия под 8.2 будет? У меня не захотела работать под 8.2.15.257

    Reply
  54. NovSL
    chmod660 пишет:

    1с 8.2 (8.2.11.235)

    {Форма.РабочийСтол.Форма(1499,11)}: Процедура или функция с указанным именем уже определена (ОткрытьФорму)

    Переименование функции помогает.

    Тоже сделал и я для 8.2.15. тестил под УПП. Пользователям понравилось. Единственно, так это долго запускаются внешние обработки типа Универсальный журнал документов. Но в общем намного приятнее кучи панелей и менюшек по стандарту

    Reply
  55. Boroda

    Такой вопрос (с учётом неопытности): в ЗУП уже есть стандартный рабочий стол. Если использовать этот, то он встанет поверх стандартного, параллельно с ним (будет выбор использования) или стандартный надо как-то отключить? И как прилепить данный рабочий стол, как его подключить? Опыта работы в 8-ке мало, поэтому затрудняюсь.

    Reply
  56. margo2007

    (55) Boroda,

    В ЗУП нормальный рабочий стол. Не вижу смысла его менять.

    Это в комплексной он необходим.

    Reply
  57. margo2007

    (54) NovSL,

    У меня 8.2.15 без проблем работает.

    Я даже информер погоды в него вписала.

    Reply
  58. margo2007

    Не хватает элементов оформления: рамочек и т.д….. 🙁

    Reply
  59. margo2007

    (41) Ish_2,

    Очень красиво! Тоже нужны рабочки и т.д….

    Бесплатно эту доработку никак не получить? 🙂

    Reply
  60. Ish_2

    (59) Почему нет ? Не жалко.

    Во вторник прикреплю файл обработки к комментарию.

    НО. На 99.9 % текст обработки автора Rauf. Изменения носят чисто косметический харакиер :

    См. (41)

    1. Возможность расположения текста справа от ярлыка.

    2. Введен новый тип элемента : Надпись.

    3. Элемент «Ярлык» может иметь тип «программный модуль» ,

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

    по дв.щелчку запущен на исполнение.

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

    (в нетиповых приведет к ошибке)

    5. Перед запуском нужно очистить настройки пред.раб стола.

    П.4-5. можно было бы поправить , но как то не сложилось. Рабочий стол стал не нужен в силу других причин.

    Reply
  61. Ish_2

    (59) Давайте адрес. Вышлю.

    Reply
  62. Boroda

    (56) Понятно. Спасибо.

    rauf, было бы неплохо указывать в тексте описания чем, скажем, этот релиз рабочего стола отличается от 26.10.2009 ?

    Reply
  63. Adoms

    Присоединяюсь ко все спасибо — СПАСИБА оч.класная весчь!!!:)

    Reply
  64. galinka1c8

    огромное спасибо за программу. Очень удобно, быстро, а главное доступно для пользователя. Замечательно работает на 8.1. Пользователям обычно нравится встроенные рабочие столы в типовых конфигурациях и многие хотят их видеть оформленными под свои нужды, а на 8.1 такого нет.

    Reply
  65. jiggli

    интересное решение

    Reply
  66. rbw

    (0) Спасибо за обработку. Подскажите порядок сохранения иконок, а то у меня после закрытия/открытия иконка сбрасывается на стандартную. М.б. есть ограничения по размеру иконки или я неправильно сохраняю. Делаю так: выбираю файл иконки, захожу в Настройку раб.стола и ставлю галочку «Закрепить раб.стол», потом еще сохраняю в файл.

    Reply
  67. pafftis

    А на 8.3 для розницы 2.2.2 нет такой штуки??

    Reply

Leave a Comment

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