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




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

65 Comments

  1. СергейКа

    Чтой-то видно данная тема никому неинтересна… Значит нет смысла дорабатывать на справочники и документы нескольких типов…

    Reply
  2. ЛюблюТебя

    Печать без предварительного просмотра не работает -все равно выдает сначала просмотр а потом уже надо нажимать печать.

    Reply
  3. СергейКа

    Это если не внешнюю форму выбирать?

    Reply
  4. СергейКа

    +3 для внешних форм не предусмотрена сразу печать. Только с выводом на экран. А надо ли это делать?

    Reply
  5. Erne100

    Стандартная типовая итак печатает любую форму по-умолчанию даже внешнюю

    Reply
  6. СергейКа

    (5) Какая именно печатает внешние?

    Reply
  7. akat65

    У сотрудников ЕСТЬ вн.печ.форма (ИСТОРИЯ) в обработке не видно….

    Можно отбор по спр. и докам сделать по алфавиту…

    Reply
  8. СергейКа

    (7) См ограничение — по справочникам не подключает внешние формы.

    А делать — не делать — говорят что уже есть (5). Смысл тогда «велосипед» дорабатывать?

    Reply
  9. akat65

    Стандартная типовая итак печатает любую форму по-умолчанию (только ДОКИ…)?

    А спр.тоже хочется…

    Reply
  10. СергейКа

    Обработка доработана. Реализован весь функционал.

    Reply
  11. gutentag

    🙂

    Reply
  12. gutentag

    Или надо написать, что обработка только для ЗУП-8.1, т.к. обработка выдает ошибки в Бухгалтерии 1.6 (1.6.15.5): не работает печать документов(предварит.просмотр и прямая) + ошибку при печати внешних форм:

    {Форма.ФормаВыбораВнешнейФормы(17)}: Поле объекта не обнаружено (ПиктограммаФайла_MXL)

    ЭлементыФормы.ДеревоФормы.Колонки.ПредставлениеОбъекта.КартинкиСтрок = БиблиотекаКартинок[«ПиктограммаФайла_MXL»];

    ————

    Пожелание(не обязательное): Было бы еще удобнее, если Обработка была бы с произвольным выбором печатной формы документа(в том числе и «внутренних форм).

    Reply
  13. СергейКа

    (12) Изменил описание.

    Reply
  14. akat65

    Справочники вн.печ.формы обрабатывает ….?

    Reply
  15. СергейКа

    (14) Должон.

    Reply
  16. akat65

    Подключил вн.обработку,

    «История сотрудника (как в ЗиК`е) для ЗУП 2.5 © Armando»

    не видет …

    Reply
  17. СергейКа

    (16) Теперь печатает однозначно, проверил.

    Reply
  18. akat65

    Есть проблемка с обычной печатью доков и справочников…

    Reply
  19. akat65

    +18 извиняюсь только справочники…,

    сотрудники-трудовой договор…

    Reply
  20. СергейКа

    (19) Какая проблемка? Печатает нормально, тоже проверено.

    Reply
  21. akat65

    извиняюсь ,значит проблемка у меня….

    мероприятия орг-ции завел , но не вывел…

    Reply
  22. СергейКа

    (21) Наверное, Вам стоит попытаться яснее выразить свои мысли, так как всё равно непонятно 🙂

    Reply
  23. akat65

    +21 есть в ЗУПе спр. «Мероприятия предприятия»,есть там печ.форма…

    обработка не выводит на печать ….

    Reply
  24. akat65

    +21 можно в отборе выбирать элементы спр.группы…

    Если установить у справочников флажок «обрабатывать ТЧ»,

    то отбор не работает…

    Reply
  25. СергейКа

    (23) Посмотрю как буду на работе.

    (24) НИЧЕГО в типовой обработке не менялось. Были внесены только добавления. Но думаю, что при обработке ТЧ группы справочников не должны отбираться, если у нет ТЧ.

    Reply
  26. akat65

    +24 В типовой обработке ошибки нет ,

    если установлен у справочников флажок «обрабатывать ТЧ»…

    то отбор проходит… ,

    а в обработке выходит ошибка…

    В типовой нельзя выбрать эл.спр.группу в отборе,а иногда

    Reply
  27. kai123

    А внутренние печатные формы (по умолчанию) печатает?

    Reply
  28. kai123

    Все нашел, печатает, Спасибо 🙂

    Reply
  29. СергейКа

    (24) Ошибка исправлена.

    (23) Печатать внутреннюю форму этого справочника не будет, так как данный справочник не включен в общую систему печати, т.е. в модуле данного справочника отсутствует функция «ПолучитьСтруктуруПечатныхФорм()», присутствующая в других справочниках и документах. Если в следующих релизах 1С это поправит, то будет печататься. Пока — увы…

    Reply
  30. akat65

    Отбор с флажком «обрабатывать ТЧ» теперь ОК,

    только, если есть список отобранных элементов с этим флажком…

    вн.печатные формы пусты,а обычная печать не работает.

    И есть проблемка в типовой обработке и у ВАС с изменение родителя у справочников,

    (группа(родитель) для изменения не выбирается)

    Reply
  31. fomenkom

    В 1С8.1 Бух. не печатает внешние формы, только встроенные. 🙁 Как исправить?

    Reply
  32. СергейКа

    (31) Читаем описание «Гарантированно работает в конфигурации ЗУП 2.5.13. В других конфигурациях работа возможна, но не гарантируется. Возможна доработка «под конфигурацию» по требованию

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

    Reply
  33. fomenkom

    Конфигурация:Бухгалтерия предприятия, редакция 1.6 (1.6.20.6). Есть внешняя печатная форма: «Акты за поставщиков» в документе «Поступление товаров и услуг». Она хорошо печатается из самого документа. А из групповой обработки нет. Я подключила вашу обработку, выбираю «печать внешних печатных форм», когда хочу сделать выбор из «списка внешних печатных форм» мне выдается ошибка: {Форма.ФормаВыбораВнешнейФормы(17)}: Поле объекта не обнаружено (ПиктограммаФайла_MXL)

    ЭлементыФормы.ДеревоФормы.Колонки.ПредставлениеОбъекта.КартинкиСтрок = БиблиотекаКартинок[«ПиктограммаФайла_MXL»];

    А если без этого выбора нажимаю на «выполнить», то она выполняется, но печатную форму не выдаёт:Выполняемое действие: Печать документов

    Режим: Печать внешних печатных форм

    ————————————————————

    ————————————————————

    Выполнение обработки завершено

    Reply
  34. СергейКа

    (33) Данная ошибка возникала в конфигурациях не имеющих определенной картинки (см. описание сверху).

    Исправил, проверил в указанной конфигурации. Теперь работает нормально.

    Reply
  35. fomenkom

    Спасибо большое! Теперь всё печатает, единственно не хватает печати внешних форм без предварительного просмотра, при больших объёмах это очень удобно.

    Reply
  36. СергейКа

    (35) Никогда не пользовался. Но добавить не сложно.

    Reply
  37. СергейКа

    (35) Добавил. Только что бы было видно что с просмотром, что без — лучше форму на полный экран разворачивать.

    Reply
  38. fomenkom

    Ура! Всё получилось!!! Безмерно признательна!!! 🙂

    Reply
  39. sasylka

    В УПП редакция 1.3 внутренние формы печатает прекрасно…

    а вот с внешними проблемма 🙁

    Список внешних печатных форм — пустой…

    Reply
  40. СергейКа

    (39) Одно из двух:

    — либо что то не правильно поняли в действии обработки

    — либо нет доступных внешних печатных форм.

    Мне пока не попадалась конфигурация где есть стандартные механизмы, но обработка не работает.

    Reply
  41. sasylka

    печатные формы есть..аж целых две….

    только их не отбирает именно в форму выбора внешних печаных форм

    Reply
  42. СергейКа

    (41) Они зарегистрированы в справочнике внешних печатных форм?

    Они зарегистрированы именно к тому объекту, по которому хотите распечатать?

    У вас есть права на использование этого справочника?

    При открытии формы выбора форм она пустая или всё выбирается но не печатает?

    Reply
  43. sasylka

    да зарегестрированы в справочнике

    именно к справочнику Сотрудники

    Права Полные

    при окрытии форма пустая

    то есть сами печаные формы корректные и прописано все верно (я попробовала в справочнике внешних печатных форм одной из обработок заменть «Умолчательную» все прекрасно распечаталось)…

    вот уж и сама не знаю где загвоздка…весь код пролезла… или я где-то что-то не так делаю или одно из двух 🙂

    Reply
  44. СергейКа

    (43) Можете приложить любую из этих внешних форм?

    Reply
  45. sasylka

    Извиняюсь за задержку

    приложила внешнюю печатную форму

    Reply
  46. СергейКа

    (45) Очень интересно…

    1. Приложенная печатная форма в формате 8.2. Где нибудь обещано что на 8.2 будет работать? 🙂

    Но работать будет, правда только в режиме обычного приложения.

    2. Сконвертировал свою обработку, прицепил вашу форму в справочник внешних печатных форм с авторегистрацией.

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

    Выбрал действие «Печать документов» и параметр «Печать внешних форм (см просмотром)».

    Выбрал саму печатную форму (установил галку в форме выбора).

    Нажал на кнопку «Выполнить» и…

    О чудо! Напечатались договора по всем выбранным сотрудникам.

    Посмотрите порядок действий. Где я что не правильно сделал? 😀

    Reply
  47. sasylka

    Простите может туплю….

    Делаю все как вы описали… еще раз проверила правильно ли стоит автрегистрация в обработке и переподключила…. все адекватно..1с сообщает что обработка содержит параметры авторегистрации и подключает ее к сотрудникам верно…

    но в ваша обработка в форме выбора печатных форм…показывает Пусто… 🙁

    может у меня прав нет?

    или атроегистрация не верна или некорректно цепляется?

    Reply
  48. СергейКа

    (47) Авторегистрация вроде правильная.

    Может быть действительно проблема с правами.

    Какие права сейчас у вас в базе? (все)

    Reply
  49. sasylka

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

    Reply
  50. СергейКа

    (49)

    В общем, Вы меня заинтриговали 😀 Пришлось устанавливать УПП 1.3, поскольку во всех остальных конфигурациях что у меня стоят — обработка работает.

    И… Действительно, именно в этой конфигурации внешние печатные формы отличаются от других типовых.

    Я склонен считать, что разработчики допустили ошибку. Хотя может быть они хотели поменять логику да не доделали?

    В общем приладываю обработку специально для этой редакции. Всё работает. Пользуйтесь.

    В целом универсальную обработку сделаю для 8.2 попозже, ибо с понедельника в отпуске 😉

    Reply
  51. sasylka

    Спасибо ПРЕогромное!!!

    сбылась моя мечта 🙂

    Reply
  52. Hector

    Здравствуйте! Скажите пожалуйста, обрабатывает ли она табличные части документа Операция(бухгалтерский и налоговый учет)? Мне нужно поменять СчетКт. Спасибо.

    Reply
  53. СергейКа

    (52)В плане изменений объектов — полностью типовой функционал. Мной была изменена только печать.

    Табличные части обрабатываются в ней точно.

    Reply
  54. Hector

    Спасибо, что ответили, типовая не обрабатывает Операции (я имею ввиду табличную часть).

    Reply
  55. СергейКа

    (54) Типовая табличные части обрабатывает.

    Какая именно конфигурация?

    Скорее всего, вы подходите не с того края:

    Обычно у этого документа нет собственной табличной части. На форме документа отображаются проводки введенные данным документом.

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

    Reply
  56. Hector

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

    Reply
  57. Hector

    Конфигурация УПП . 1С 8.2

    Reply
  58. СергейКа

    (57) Такая замена (обработка для замены или через универсальную консоль запросов) делается за несколько минут.

    Можете попробовать использовать вот эту обработку http://infostart.ru/public/21123/ , если нужно именно готовое решение.

    Reply
  59. Hector

    СергейКа, огромное спасибо, буду смотреть 🙂

    Reply
  60. AndreyBuka

    Все работает выбираю различные печатные формы внешние, свои. актуально для печати справочников (необходимо было печатать спецуфикации номенклатуры). Спасибо , то что надо допишу сам

    Reply
  61. Tur_gad

    Огромное спасибо разработчику скачал, попробовал, радовался). Вещь нужная холосая и умная)

    Reply
  62. PAAG

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

    Reply
  63. СергейКа

    (62). Если у этих справочников включена поддержка типового механизма, тогда да.

    Reply
  64. b-dm

    Подскажите, как отправить печатную форму сразу на принтер, у меня почему то все время она открывается для просмотра…

    Reply
  65. СергейКа

    (64) Если из внешней печатной формы, то в данной обработке никак. Это просто не предусматривалось сразу.

    Прошу прощения за долгий ответ. Почему то оповещение по почте не приходило.

    Reply

Leave a Comment

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