Включение документации в форматах MS Office в базу 1С




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

46 Comments

  1. Арчибальд

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

    Reply
  2. Expert1C

    а в Гаранте есть инструкция пользователю по заполнению конкретных документов?

    Обычно на крупных проектах один из этапов — написание документации и руководства пользователям. И для доведения этих инструкций до конечных пользователей и используется данный механизм.

    Reply
  3. Арчибальд

    Порядок заполнения документов — это атрибут конкретной конфигурации + элемент документооборота конкретной организации. Т.е. нужен путеводитель по конфигурации, м.б. дополненный некими внутренними приказами/распоряжениями. Однако в описании идет речь несколько о другом, что и вызвало мой коммент.

    Согласен с тем, что документация по проекту не может быть создана на начальном этапе проектирования — это недостижимый идеал. Так что при должном наполнении предлагаемого справочника он, возможно, будет полезен. Но, может, проще завести на панель инструментов пользователя кнопочку, открывающую Вордовскую документацию с примерами, оглавлением, перекрестными ссылками (в т.ч. на тот же Гарант), картинками и проч.?

    Reply
  4. Expert1C

    (3) Вы считаете, что внутренние положения и инструкции не являются нормативно-справочной документаций?

    В предлагаемом решении реализованы и картинки и ссылки (в пределах документа или в интернет), т.о. этот механизм может быть полезен для реализации дополнительной справочной системы в конфигурации.

    Для открытия вордовской доки необходим ворд на машине пользователя, а в данном решении — офис необходим только для добавления.

    Reply
  5. Арчибальд

    (4)ЛОКАЛЬНОЙ нормативно-справочной документацией.

    Заметьте, я ни разу не сказал, что это плохо, бесполезно или что-то в этом роде. Так, порассуждал беззлобно.

    Reply
  6. Expert1C

    (5) а я в свою очередь не говорил о источнике НСИ — партия, правительство или руководство компании — можно использовать для любых целей.

    Заметьте, я также беззлобно отвечал 🙂

    Reply
  7. wirg

    Есть в Консультанте, да еще и обновление, а у тебя есть?

    Reply
  8. Expert1C

    (7) данная разработка демонстрирует методику внедрения документации в базу 1С и не притендует ни на что больше. Это не замена Гаранта или Консультанта.

    Reply
  9. AXoxol

    Полезная идея

    Reply
  10. Qsko

    Отличная вещь для документирования функций, которые дописываются под клиента!

    Сейчас провожу внедрение в конторе, которой в своё время переписывали Управление торговлей. Часть сотрудников поменялось, другая — уже забыла логический смысл изменений. Все только помнят в каком порядке нажимать кнопки, но не помнят зачем и любая нетипичная операция вызывает переполох. А тут — задокументировал и оставил клиенту. Пусть хоть весь штат меняют, база знаний как пользоваться изменениями останется.

    Reply
  11. GSoft

    а можно ли такое сделать для семерки?

    Reply
  12. Expert1C

    да

    Reply
  13. Expert1C

    (11) только документы внутри базы хранить не получится, только в отдельных таблицах и обращаться напрямую. или еще какой изврат придумать можно.

    Reply
  14. GSoft

    а каков принцип, а то дома нет 8ки под руками

    Reply
  15. Expert1C

    (14)внимательно читаем описание, там все написано

    Reply
  16. GSoft

    прочитал, прочитал еще раз, попробовал вникнуть — не получилось)))

    Reply
  17. Expert1C

    (16) при добавлении документ конвертируется в формат mht (веб-архив), и его можно показывать в браузере (в т.ч. в окне 1С)

    Reply
  18. GSoft

    два вопроса:

    1. чем конвертируются

    2. как можно прикрутить к 7ке, она же кажется по умолчанию не может работать как браузер

    Reply
  19. Expert1C

    1) конвертируется при помощи офиса (через СОМ)

    2) FormEx

    Reply
  20. Арчибальд

    (18) 2: см. посты 3 и 4. И поизвращаться с базой доков — устроить несколько точек входа.

    Reply
  21. Expert1C

    (20) Я продемострировал всего лишь идею — как включать документацию в базу, причем редактируя ее в привычном редакторе, с картинками и пр. т.е. отсутствуют недостатки присущие использованию html для тех же целей.

    Что это за документация — это уже не принципиально в рамках данной публикации.

    Reply
  22. Арчибальд

    (21)А я и не возражаю. Спросили про семерку, я ответил, в т.ч. Вашим постом. Можно на семерке, но требуется некий изврат + Офис у юзера.

    Reply
  23. Expert1C

    (22) FormEx — уже можно считать штатной возможностью 🙂

    Офис у пользователей — НЕ требуется, требуется только для добавления документов

    Reply
  24. Арчибальд

    (23)И с этим согласен. Пару раз встречал Формекс в коробочных поставках конфигураций.

    Вот еще идейка — добавить механизм создания пользователских закладок с личными комментариями/памятками.

    Reply
  25. Арчибальд

    По результатам полемики — плюс

    Reply
  26. coder1cv8

    Спасибо.

    Reply
  27. artem666

    а устроить поиск по этой базе возможно???

    Reply
  28. Expert1C

    (27) Теоретически можно все, а практически — за отдельную плату

    Reply
  29. fgremlin

    Не взирая на ненужную полемику +. По заголовку сразу понял о чем речь — потому как очень нужная штука! По свободе буду курить для семерки!

    Reply
  30. Expert1C

    (30) т.е. делаем коробку и продавать будем?

    Reply
  31. Expert1C

    (33) это почему??? вот я никогда за бесплатно работать не хочу

    Reply
  32. Expert1C

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

    разработок «для себя» — у меня мизерное количество. я лучше на роликах покатаюсь, вместо того чтобы сидеть за компом.

    Reply
  33. logarifm

    А я таки плюсану…

    Reply
  34. Душелов

    А если еще добавить индексацию текста для поиска… 😉

    Reply
  35. Expert1C

    (40) см. (27), (28)

    Reply
  36. Душелов

    (41) А если и за деньги, то на какой технологии будет осовано?

    Reply
  37. Expert1C

    (42) когда будет заплачено, тогда и придумаю.

    Reply
  38. ost.a

    вот бы внешнюю обработку такую…

    Reply
  39. WKBAPKA

    а почему в базе хранить нельзя… есть же хранилище значений, если конвертировать в mht, ну а потом запихивать в регистр сведений в поле ХранилищеЗначений?

    Reply
  40. WKBAPKA

    сорри, не дочитал, писали про 7.7.

    Reply
  41. edn2003

    Попытался использовать. При записи элемента справочника нормативно-справочных документов выдается сообщение: Поле объекта не обнаружено (ПривязкаДокументовНСИ). Где же регистр сведений ПривязкаДокументовНСИ? Или предполагается, что его надо самому доделать?

    Reply
  42. Expert1C

    (47) спасибо за сообщение.

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

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

    Reply
  43. Dasty

    Хорошая вещь. Спасибо.

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

    Reply
  44. Expert1C

    (49) не наблюдал такого поведения

    Reply
  45. eli1984

    Обработка полезна.

    Reply
  46. demart-omsk

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

    Reply

Leave a Comment

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