Формирование и печать документа "Доверенность представителю предприятия"




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

30 Comments

  1. v_id

    На мой вкус для склонения проще использовать ВК, хоть от 1с (NameDecl.dll), хоть лежащую здесь на инфостарте

    Reply
  2. das

    Полностью согласна — просто когда была делала эту обработку (около года назад) еще не знала о NameDecl.dll

    Reply
  3. Abadonna

    > автор мне неизвестен

    Вот она, слава! 😉 Моя это, Света, функция, лежит на проклабе с 2000-го года.

    (1) Тогда просто ВК было мало, не то, что для склонения

    Reply
  4. vasilykushnir

    Свет, посмотри http://infostart.ru/forum/read.php?25,14804,14804,ref=440#msg-14804

    Спецом для тебя «нарисовал»

    Reply
  5. das

    3) Авторство функции уже поправила — спасибо Аркадий — ты делаешь сильные вещи! — Страна должна знать своих героев!

    Reply
  6. Abadonna

    Кажись, это ваще было самое первое, что я написал на языке 1С :)))

    Или второе… В общем, недели через 3 после того, как потаращился на этот язык, как баран на новые ворота 😉

    Reply
  7. das

    4) Василий, спасибо за форму Доверенности (много изюминок в ней, как я уже посмотрела). Только посмотри — в моей обработке доверенность для представителя предприятия не на получения NVW? а для решения юридических вопросов и для курьерских функций.

    Удачи в новом году!

    Reply
  8. vasilykushnir

    Светочка, а ты не поняла намек…. К обработкам хорошо бы скрины выкладывать — не хотелось это возводить в ранг замечания, а просто маленький каприз, но тем не менее необходимый.

    Reply
  9. das

    NVW? — в переводе на разговорный — бухгалтерский ТМЦ (ошиблась с регистром)

    Reply
  10. das

    8) Все поняла — исправлюсь…

    Reply
  11. vasilykushnir

    Обрати внимаение: выбор над таблицей т.н. ТМЦ — можно даже прямо в форму вводить поизвольный текст, или его заготовку. Эта приблуда у нас тоже на все случаи жизни.

    Reply
  12. vasilykushnir

    Бухгалтерскиц ТМЦ — имеешь в виду малоценку?

    Reply
  13. das

    11) Про произвольный текст я поняла, а формы доверенности в этом скрине, к сожелению, нет (может скинешь посмотреть — хотя, я так понимаю, это в конфе)

    Reply
  14. das

    ТМЦ — товарно-материальные ценности.

    Малоценка — как понятие в бухучете сейчас отсутствуе (сие регламентировано Новым планом счетов) ;))

    Reply
  15. vasilykushnir

    (14) Аркадий уже рассказал, что у вас это убрали (и кому оно мешало?…). Печатная форма не очень красивая — данные расположены для впечатывания в стандартный бланк.

    Reply
  16. Olyunchik

    Какая прелесть!!! Как раз сегодня нужна такая доверенность на получение выписки из ЕГРЮЛ!!! Спасибочки!!

    Reply
  17. greenclean

    Очень удобно, спасибо

    Reply
  18. lebelena

    спасибо

    Reply
  19. north

    спасибо, нужная весч..

    Reply
  20. бубух

    спасибо.

    Reply
  21. Аквастайл

    Светлана, а Вы не могла бы такую же доверенность по 8.1 (1.6.9.4) сделать? Очень нужно. Тем более думаю многие уже на 8-ке работают.

    С уважением

    Катерина

    Просто бухгалтер

    Reply
  22. Abadonna

    (21) Катерина, ей разобраться в 8-ке понадобится примерно то же время, что и Вам 😉

    С уважением,

    Аркадий

    Просто программист :)))

    Reply
  23. poppy

    Фигасе, Abadonna постарался…

    В форме выбран «Беляев Евгений Викторович», после склонения получается «Петрову Петру Петровичу». 😉

    Адрес организации в формате ИФНС «,620144,Свердловская,,Екатеринбург,,,,» на печатной форме смотритися как-то некузяво. Лучше «пропустить» его через функцию глПредставлениеАдреса().

    Место выдачи логичнее брать из адреса организации…

    Reply
  24. Abadonna

    (23) А вот не надо про меня 😉 Там что-то другое, уж никак не функция склонения.

    Откуда бы она взяла Петрова? :))))

    Reply
  25. анфиска

    😀

    Reply
  26. KurchataD

    Идея очень хороша. Но, некоторые функции, которые предусмотрены в вашем документе, у меня в конфе отстутствуют, из-за это посмотреть на реализацию идеи не могу. Просьба, либо выложите, если это возможно, пароль к обработке, либо выложите с отркрытым ключем форму.

    Reply
  27. Victor_62

    Страна должна знать своих героев!Очень хорошая обработка и док выводится отлично.

    Reply
  28. 897897

    Обработка ОЧЕНЬ полезная, часто пользуюсь после того, как в налоговой не приняли с обыкновенной М-2 🙁

    Reply
  29. e_kazakova

    Жалко, что такой нет в 8-ке

    Reply
  30. Доня

    Спасибо! Пользуюсь очень давно.

    но с 19.07.13 что-то обновилось, подскажите что?

    Reply

Leave a Comment

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