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




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

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 не будет опубликован. Обязательные поля помечены *