Акт на списание материалов в БП 8.1-8.2




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

20 Comments

  1. annak2980

    Добавьте, пожалуйста, скриншоты:

    1)формы настроек (отчета, обработки, документа — из текста статьи не понятно что за объект);

    2)Печатной формы, если она присутствует в данной разработке.

    Reply
  2. svtpesh

    А где нужно ввести членов комиссии? Форма не формируется, пишет, что не указан ни один член комиссии.

    Reply
  3. e1004

    Открывайте обработку как внешюю обработку. не надо ее явно привязывать к документу списание материалов

    Reply
  4. Svetlana.g

    Спасибо за обработку ❗

    Reply
  5. Charmion

    Хорошая вещь!

    Reply
  6. AndrejNMU

    Спасибо обработка работает в Бух1.6 ,а в Бух 2.0 ругается

    Ошибка при вызове метода контекста (Выполнить): {(48, 48)}: Поле не найдено «ТребованиеНакладнаяМатериалыЗаказчика.Ссылка.ПодразделениеОрганизации»

    ТребованиеНакладнаяМатериалыЗаказчика.Ссылка.<<?>>ПодразделениеОрганизации КАК Подразделение,

    🙁

    если можно доработай для Бух2.0

    Reply
  7. e1004

    )) Бух 2.0 еще даже не ставил. Ничего не могу сказать пока.

    Reply
  8. Ira123

    Спасибо. Работает и на БП 2.0

    Reply
  9. 7502063

    Обработка замечательная в 1С:Предприятие Бухгалтерия предприятия, редакция 1.6 работала без вопросов

    Но перешли на редакцию 2.0 — ЗАСАДА

    Регистрируемая печатная форма акта списания предназначена для использования в конфигурации

    «Бухгалтерия предприятия», редакция 1.6.

    ПОМОГИТЕ!!!!!!!!!

    К хорошему так быстро привыкаешь, теперь без обрабатки, как без рук 😥

    Reply
  10. pycxakep

    Господа, подскажите пытаюсь открыть скачанный файл конфигуратором 8.2, пишет ошибка открытия файла, файл целиком не скачался или просто под 8.2 не заточено?

    Reply
  11. pycxakep

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

    Reply
  12. e1004

    Под 8.2 завтра залью. не помню какую то мелочь исправил в начале года и работает. Есть кстати решение Акта списания по Подотчетнику за период и по подразделению за период.

    Reply
  13. mary73

    Обработку устанавливала и на бухгалтерию 2.0. ПРактически ничего не подправляла, все работает. Бухи довольны.

    Reply
  14. ulas

    Спасибо за обработку, только печатную форму нужно немного доработать

    Reply
  15. OleGazz

    спасибо большое за обработку, вроде бы все как надо.

    Reply
  16. madamonika

    А на основании отчета производства за смену он не может работать?

    Reply
  17. alma-soft

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

    Reply
  18. unelma

    Извините, но я что-то не увидела, где здесь в печатной форме отражено поле «назначение использования»?

    Reply
  19. evg300183

    Добрый деньподскажите для какой конфигурации подходит данная обработка — есть ли выбор членов комиссии или это просто шаблон под который нужно еще дописывать дополнительную форму. Подходит ли для редакции 2.0???

    Reply
  20. Margaritaya

    Спасибо.Все красиво.))

    Reply

Leave a Comment

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