Внешние печатные формы МХ-1 и МХ-3 для конфигурации БП




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

38 Comments

  1. CheBurator

    мх1 мх3 — это ж вроде по ответ.хранению?

    Reply
  2. poppy

    > мх1 мх3 — это ж вроде по ответ.хранению?

    Точно

    Reply
  3. molot

    Чет непонятно мне…

    1. Как документом «Перемещение товаров» можно вообще сделать оприходование на 002 / списание на хранение?

    2. У меня не заполняется табл. часть., а некоторые реквизиты — им вообще неоткуда будет взяться…

    Reply
  4. poppy

    > 1. Как документом «Перемещение товаров» можно вообще сделать оприходование на 002 / списание на хранение?

    ??? Поясни. Ты пытаешься сделать проводки Дт 002 Кт 41?

    > 2. У меня не заполняется табл. часть.,

    Табличная часть заполняется на основании проводок. Поэтому, документ должен быть проведен.

    > а некоторые реквизиты — им вообще неоткуда будет взяться…

    К сожалению, без изменения типовой конфигурации, этим реквизитам неоткуда взяться. Селяви. 🙁

    Reply
  5. molot

    1. Не… 002 — он вообще збалансовый и корреспонденции там не катит. Поэтому я просто хотел бы сделать проводки по Дт 002, без Кт.

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

    Reply
  6. CheBurator

    вот собственно мой топик и был, что вроде ОХ — и при чем здесь перемещение?

    Reply
  7. poppy

    > 1. Не… 002 — он вообще збалансовый и корреспонденции там не катит. Поэтому я просто хотел бы сделать проводки по Дт 002, без Кт.

    Счет 002 называется «Товарно-материальные ценности, принятые на ответственное

    хранение». Он используется в учете фирмы-хранителя.

    Обсуждаемые печатные формы предназначены для фирмы-поклажедателя. Клиент, который их заказывал, хотел видеть продукцию (товары) отданные на ОХ отдельно от отстальной продукции (товаров). Для этого были созданы субсчета 43.01 (41.01.1). Документом «ПеремещениеТМЦ» создавались проводки Дт 43.01 Кт 43.

    > 2. А какие проводки ты берешь? И почему бы не привязаться к реквизитам?

    Среди реквизитов документа «Перемещение…» нет суммы (стоимости ТМЦ), но в проводках она есть…

    Reply
  8. molot

    Принял. Не, не нать… Слега не универсально. Если не сложно — привяжи к операции БУ, к проводкам по Дт счета 002, и сделай от имени другой стороны. Или пердусмотри оба варианта (по объекту метаданных — владельцу обработки). Тогда будет востребовано. Или код открой. А так вообще — спасибо.

    Reply
  9. poppy

    Есть у меня решение для фирмы-хранителя. Но оно реализовано на настроенной типовой конфигурации. Такое решения пока не готова выкладывать здесь.

    Есть мысль, как реализовать учет фирмы-хранителя в рамках типовой конфигурации, но такое решение никто не заказывает. 🙁

    Reply
  10. Andrekaa

    извиняюсь че то не понял. Не могу их подцепить 🙁 и модуль объекта пустой

    Reply
  11. poppy

    (10)

    МенюСервисВнешние печатные формы\r

    Создаешь новый элемент справочника. Заполняешь его. В документе появляется новая печатная форма.

    Стукни в асю. Помогу.

    Reply
  12. kauksi

    Все хорошо, но вот модуль обработки ваша гениальность почему то прикрутить забыла…

    а жаль, ведь для УТ придется писать самому…

    Reply
  13. chiffu

    Что то не качается фаил((( Пишет:

    Не удается открыть этот узел Интернета. Узел недоступен или не найден.

    А эти формы прям позарез нужны… Помогите пожалуйста!!!!!!!!

    Reply
  14. Abadonna

    (13) Все качается… инет свой проверь… ты зарегистрированный, значит доступ есть….

    Reply
  15. Abadonna

    (13) Кстати, г-н инкогнито, а как тебе помочь, если ты свое мыло засекретил?

    Наверное, очень крутое, не дай бог шпиёны узнают 😉

    Reply
  16. 666Oleg666

    Для 8.1 такие формы есть???

    Reply
  17. poppy

    (16)

    Теперь есть и для 8.1

    Reply
  18. Daniar

    Почему то очень медленно выполняются.

    Reply
  19. poppy

    (18)

    Печатная форма для БП 1.6 (8.1) обновлена. Скачивайте, сравнивайте, плюсуйте рейтинг.

    Reply
  20. tverdynina

    Вы говорите, что это от имени поклажедателя. А я хранитель. Что мне надо изменить и где?

    Reply
  21. poppy

    (20)

    > Вы говорите, что это от имени поклажедателя. А я хранитель.

    > Что мне надо изменить и где?

    Хм… Может перестать быть хранителем и стать поклажедателем? 😉

    Ты об этом?

    Reply
  22. saturday

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

    Reply
  23. saturday

    провела документ, потом его заново открыла и табличная часть заполнилась, название организации проще добавить. спасибо за обработку!!!

    Reply
  24. elena777

    Спасибо, простая понятная обработка.

    Reply
  25. Acserg

    Спасибо!

    Reply
  26. poppy

    Файлы обновлены.

    Печатные формы можно подключать к документам ПоступлениеТоваровУслуг и ВозвратТоваровПоставщику. В этом случае документы формируются от имени фирмы-хранителя.

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

    Аватарчик красивше, чем у меня 😳

    Reply
  28. poppy

    (27) 😀

    Reply
  29. glavbuhvlg

    Спасибо! У меня БП 8.2 — мне подсказали что и как открыть, чтобы всё работало. Всё работает! Плохо, что не подбирает Наименование, ОКПО организации-хранителя и ответственных лиц (сдал). НО ЭТО МЕЛОЧИ! СПАСИБО БОЛЬШОЕ!

    Reply
  30. wander

    А появилась реализация этих форм для фирмы-хранителя?

    Reply
  31. MaxS

    Исходный текст модуля отсутствует. Это Вы так шутите над нами? Зачем тогда это выкладывать?

    Reply
  32. kosoy

    Спосибо, правда использовал только макет печатной формы, но все равно сократило время.

    Reply
  33. wad_str

    Вещь удобная, но к моему случаю не привязалась, зато печ форма- то что надо! Спасибо!

    Reply
  34. petrovaUL

    и мне нужна печатная форма, спасибо.

    Reply
  35. Maks22

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

    Reply
  36. antowka

    Спасибо за печатную форму)

    Reply
  37. farg066

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

    Reply
  38. AnyaIT

    Спасибо, это как раз то что я искала! чуть-чуть доработала под нас и все заработало!!!

    Reply

Leave a Comment

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