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




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

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