Акт списания ТМЦ для 1С:БП 8.х




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

63 Comments

  1. cs25

    Понравилась epf-ка. Плюсую, а рейтинга не хватает …

    Reply
  2. CheBurator

    ну, насколько я себе представляю — акт составлен в слишком уж «произвольной форме»…; _) В шапке — согласен? «комиссия в стоставе пепечисление», в в подписях я бы сделал

    Председатель комиссии

    Члены комиссии

    ..комиссия не может быть без председателя…

    Reply
  3. azernot

    Ну, особо требовательные чебурашки могут перед должностью одного из членов комиссии указать «Председатель комисиии», «Секретарь комиссии», «Член комиссии» и т.п. Поле там неограниченное.

    Reply
  4. irina171

    в 8.1 не работает

    Reply
  5. azernot

    Сделал для редакции 1.6

    Reply
  6. popa

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

    Reply
  7. garmin

    никак немогу запустить в 8.1 пишет:

    {Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(188)}: Ошибка при вызове метода контекста (Создать): Ошибка загрузки документа.

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

    Reply
  8. garmin

    Обработка запускается в 8.1. Что делать? Очень нужно для работы!

    Reply
  9. azernot

    Акт списания ТМЦ (БП ред. 1.6) — для 8.1

    Reply
  10. garmin

    Нашел для 8.1. Спасибо. Отличная разработка и главное нужная! Авторы одназаначно плюс.

    Reply
  11. БухТаша

    Огромное спасибо!

    Reply
  12. PicaSSo

    хм…. я а помню у автора была такая же обработка но для формирования формы 0504230 или у него было право на скачку её с проф клуба, если не тяжело, можешь выложить?

    Reply
  13. azernot

    http://1c.proclub.ru/modules/mydownloads/personal.php?cid=141&lid=8142

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

    Reply
  14. PicaSSo

    блин, там-то я её и находил, но вот права на скачку у меня нету 🙁 и пароль от профклуба я потерял и восстановить не могу 🙁 не могбы ты её скинуть на почту или в личку…. плз…

    Reply
  15. mov68

    Спасибо, просто, но нужно

    Reply
  16. alyena_08

    А для 7.7 такой есть? Очень хотелось бы…

    Reply
  17. azernot

    Собственно для 8 делался по просьбе пользователей версии для 7.7

    http://azernot.narod.ru/Files/AktSpis.zip

    Reply
  18. ЮлияТ

    Большое спасибо. простой и ничего лишнего. спасибо за сэкономленное время.

    Reply
  19. cheri

    Огромная благодарность за разработку!

    Reply
  20. фил

    Классно

    Reply
  21. Natalya_K

    Огромное спасибо! Очень пригодилась.

    Reply
  22. theCoder

    А как сделать чтобы в поле НазначениеИспользования подставлялись данные из комментария к документу?

    Reply
  23. azernot

    Я такой возможности не предусматривал..

    Reply
  24. theCoder

    Ну подскажите как это сделать, очень надо

    Reply
  25. azernot

    В функции «Печать()» модуля обработки, необходимо строчку

    ДанныеДляПечати.Вставить(«НазначениеИспользования», НазначениеИспользования);

    заменить на

    ДанныеДляПечати.Вставить(«НазначениеИспользования», СсылкаНаОбъект.Комментарий);

    Reply
  26. Alexsandris

    Отличная разработка! Большое спасибо.

    Reply
  27. Leoway

    Спасибо

    Reply
  28. cheri

    Спасибо огромное за обработку! Плюсую!

    Reply
  29. Abadonna

    Сэкономил мне время, спасибо 😀

    Оно распрекрасно работает и под 8.2 БП ред. 2.0

    Так что (ежели не лень), можешь подправить в модуле:

    Если НЕ (РегламентированнаяОтчетность.ИДКонфигурации() = «БП» и РегламентированнаяОтчетность.РедакцияКонфигурации() = «1.6») Тогда
    
    ОбщегоНазначения.СообщитьОбОшибке(«Регистрируемая печатная форма акта списания предназначена для использования в конфигурации
    |»»Бухгалтерия предприятия»», редакция 1.6.»);
    КонецЕсли;

    Плюс!

    Хм, оказывается, я авансом уже плюсовал. Сие означает: ничего я зря не делаю 😀 😀

    Reply
  30. ctankkina

    Хотелось бы такую форму для 8.2 БП ред. 2.0 форма очень хорошая

    Reply
  31. Abadonna

    (31) Читать не умеете, или до того к халяве привыкли, что даже попросить любого проггера закомментировать строчки из (30) уже сложно?

    (30)Abadonna.Оно распрекрасно работает и под 8.2 БП ред. 2.0
    Reply
  32. gutentag

    ❗ Спасибо за форму для 8.2

    ——-

    Reply
  33. gutentag

    (33) я разобрался 🙂

    Reply
  34. sannyw

    Не могу загрузить «Ошибка загрузки документа. Обработка не может быть прочитана текущей версией программы.» Программа 1С:Предприятие 8.2 (8.2.13.205)… Подскажите что делать? Очень надо

    Reply
  35. cheri

    Спасибо огромное за обработку для БП 8.2 ред 2.0

    Reply
  36. irina0101

    Все-таки не понятно, как работает в 8.2? Я не программист, а бухгалтер. Может быть, кто-то сможет объяснить, как запустить обработку? Выдает: «Ошибка загрузки документа. Обработка не может быть прочитана текущей версией программы.» Версия программы Бухгалтерия предприятия 8.2 (8.2.13.205). Всем спасибо за ответы.

    Reply
  37. 7502063

    Давно пользуюсь Вашей обработкой

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

    но в редакции 2.0 ругается

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

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

    Как ушатать-ПОМОГИТЕ!

    Reply
  38. Olina555

    Неплохой акт, ничего лишнего, рекомендую использовать тем, кому нужен такой первичный документ как АКТ СПИСАНИЯ. Хотя по большому счету достаточно требования-накладной.

    Reply
  39. pantera190

    спасибо!!

    Reply
  40. still_

    Огромное спасибо, настолько нам облегчаете работу. Моей благодарности просто нет предела!

    Reply
  41. program_km

    нужный акт +

    Reply
  42. unl

    Спасибо, очень даже нужный.

    Reply
  43. Dimon_911s

    Спасибо огромное за обработку для БП 8.2 ред 2.0

    Очень нужная.

    Reply
  44. palma74

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

    Reply
  45. Len75

    Спасибо, нужный отчет

    Reply
  46. kea35

    То, что нужно! Спасибо!

    Reply
  47. ukgh

    спасибо отличная вещь!!!!

    Reply
  48. Aydrey

    Большое спасибо. простой и ничего лишнего. спасибо за сэкономленное время.

    Reply
  49. Katerina_S

    Спасибо! очень сэконимили время!

    Reply
  50. kэt

    спасибо за отличную обработку, просто и элегантно )

    до сих пор делала такие акты вручную через танцы с бубнами )))))

    Reply
  51. Nataniel

    Эта самая лучшая обработка которую я скачивала с данного сайта. Большое спасибо разработчику. Единственно, отчет формирует и выводит на печать, но постоянно выбивает какую-то ошибку, которую просто сварачиваешь и дальше работаешь. Это не много раздражает.

    А так просто СУПЕР!

    Reply
  52. qwed557

    уменя в 8.2 бп 2.0 не вставляет членов комиссии, на форме создал всех членов комиссии в документе требование накладная, все равно не выходят, пробывал открывать обработку просто через меню открыть и там вбить членов комиссии все равно не выходят, где поправить нужно?

    З.Ы. закоментил проверку версии БП и убрал подразделение организации(такого реквизта нет в документе) но как сделать чтоб выходили члены комиссии?

    Reply
  53. qwed557

    т.е у меня идет «Комиссия в составе: подтверждает использование для указанных целей следующих материалов:»;

    а внизу вообще ничего . где копать?

    Reply
  54. qwed557

    дико извиняюсь, скачал для 8.1

    Reply
  55. qwed557

    и все таки как сделать в самом документе вкладку комиссия чтоб можно было сразу заполнить и не открывалась форма из обработки а сразу печатался акт?

    Reply
  56. qwed557

    это сообщение можно удалить

    Reply
  57. User8

    скачала. Очень понравилось. Единственное, что поправила у себя — ответственные выбираются из справочника сотрудники и их должность ставится автоматом. а так — супер

    Reply
  58. Coollerok

    спасибо! очень нужная вещь! помогла

    Reply
  59. _n26__

    Спасибо, очень помогли!

    Reply
  60. evg300183

    Скачал — как вызвать доп форму?

    Reply
  61. evg300183

    Обработка не может быть прочитана текущей версией программы — почему?

    Reply
  62. azernot

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

    Reply
  63. Наталья509

    Добрый день! Она только на основании требовании-накладной или отчет пр-ва тоже можно указывать?

    Reply

Leave a Comment

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