"Приходный ордер М-4" для авансового отчета 1С: 8.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='\

47 Comments

  1. Asmir

    Внешняя печатная форма «Приходный ордер М-4» для авансового отчета

    Перейти к публикации

    Reply
  2. Diamond

    Для какой конфигурации печатная форма? в УПП не работает

    Reply
  3. cs25

    В БП тоже не работает …

    Reply
  4. Asmir

    Печатная форма берется из конфигурации 1с:Бух 8.1 редакция 1.6.9.4.

    При подклюении не надо указывать файл печатной формы. У меня стандартная конфигурация и все работает. Для УПП могу доработать, еще не проверял.

    Reply
  5. Asmir

    Добавил для УПП.

    Перенес макет из общих макетов во внешний макет М_4.

    Reply
  6. LindА

    Супер! То что было давно нужно!

    Reply
  7. cs25

    Вот теперь работает ! Плюс !

    Reply
  8. RPV

    Было бы неплохо в поле «сдал» добавить Фамилию и инициалы подотчетника.

    Reply
  9. gutentag

    Спасибо, оч.нужная вещь!

    Reply
  10. rounder

    Спасибо, отличная доработка!!!

    Reply
  11. Lenux

    Очень нужная вещь для работы!

    Но для БП 1.6.13.3. не работает, пишет следующее:

    «Не удалось сформировать внешнюю печатную форму!

    Метод объекта не обнаружен (КурсДокумента)»

    Reply
  12. Егор

    У меня БП 1.6.12.4 и пишет то же самое. Пожалуйста! Сделайте что-нибудь. Такая удобная вещь…

    Reply
  13. Кибирева Светлана

    У меня БП 1.6.13.3, очень хочется чтоб вы сделали такую нужную вещь

    Reply
  14. Asmir

    В БУХ8.1 версии 1.6.12 и позже поменялись общие обработки поэтому я скоро выложу новую печ форму.

    Reply
  15. Кибирева Светлана

    Очень ждем! Спасибо!!!

    Reply
  16. nestoric

    Спасибо, плюсую

    Reply
  17. rolixe

    Для БП не качается, останавливается на 84%

    Перезалейте пожалуйста!

    Reply
  18. Asmir

    Я добавил печ фому М4 для авансового отчета Бух8.1 ред 1.6.12 и позже

    Reply
  19. rolixe

    Дайте пожалуйста обработку для БП запакованную в архиве!!!

    Reply
  20. vitaliy-79

    Спасибо! то что надо

    Reply
  21. Егор

    Замечательно! Есть ведь умнички! Спасибо!

    Reply
  22. Lorri

    Спасибо огромное! Очень нужная вещь! Успеха в дальнейшей работе!

    Reply
  23. Amelena

    А есть такая же печ форма для АО в управлении торговлей 8

    Reply
  24. cheri

    Огромная благодарность! Всё отлично работает! Плюсую

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

    Удивительная эйфория от изврата в учете. СКЛАДСКОЙ (первичный) документ, на ОСНОВАНИИ которого (в числе прочих) делается БУХГАЛТЕРСКИЙ (вторичный) авансовый отчет становится доступным позже. Получается, что учет первичен, хозяйственная деятельность вторична. И вообще бухгалтерия всех главнее (а то и единственна).

    Reply
  26. AndreStah

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

    Reply
  27. СМУ

    Все классно!

    Reply
  28. witch

    Скачала эту обработку открываю в 1с и она не открывается в чем проблема может быть?(

    Reply
  29. Erne100

    2 witch

    Потому что это не обработка, а внешняя печ. форма.

    Подключите её, и она будет доступна в документе.

    Reply
  30. savant

    А можно скрины добавить?

    Reply
  31. spotap810

    Баааальшое спасибо. Работает под Бухгалтерией Автономного Учреждения 2.0.7.4 (если закрыть пару строчек в модуле 😉 )

    Reply
  32. Tatyana_M

    Извините, может кто подскажет я не поняла, что делать если пишет: Не удалось сформировать внешнюю печатную форму!

    Метод объекта не обнаружен (КурсДокумента)

    Подскажите, очень надо!!

    Reply
  33. Tatyana_M

    Скачала нужную версию — все пошло Огромное спасибо за то что вы есть!!! 😀

    Reply
  34. Rus_Tiger

    На упп 8.1 версия релиза 1.2.29.1 не идет… 😥

    Reply
  35. Юна

    Пожалуйста!Помогите!как ее использовать??ничего не получается!не открывается документ!объясните на пальцах,подалуйста!

    Reply
  36. 364140230

    Скачал, использовал пока не перешли на 8.2, все работает, спасибо)

    Reply
  37. vas5780

    Спасибо, сберегло массу времени, плюсую.

    Reply
  38. Art79

    Скажите, в Бухгалтерии 8.2 будет работать?

    Reply
  39. Tolson

    Привязал к КА, правда пришлось немного допилить

    Reply
  40. ulas

    Все работает.

    Reply
  41. Elena_Q

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

    Reply
  42. Nrk

    У меня такой вопрос, в шапке в колонке Поставщик, выводится один поставщик? или весь список?

    Reply
  43. kkk

    классаная штука. спасибо

    Reply
  44. Fadeeva_E

    Есть ли такая же обработка для Бух 8.2 или может быть эту кто-то подправлял?

    Reply
  45. aallaa

    (43) Fadeeva_E,

    Я не програмист, но по моему обработки от 8.1 работают и на 8.2.

    В конфигураторе открыть файл обработки и на вопрос «Конвертировать обработку?» ответить «Да»

    Reply
  46. bluntschi

    очень круто!! спасибо за проделанную работу, в КА тоже работает, если «склад» на «СкладОрдер» поменять)

    Reply
  47. msv23

    Спасибо. Помогли.

    Reply

Leave a Comment

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