Групповая печать, обработка документов, справочников с возможностью выбора печатной формы (Обычное приложение)




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

94 Comments

  1. MrXaN

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

    Reply
  2. sttt

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

    Reply
  3. MrXaN

    (2)

    как видимо работает только в Бухе

    Reply
  4. Seregalink

    Написано что работает в Бух и Торговле, а если в ЗУПе открыть будет работать?

    Reply
  5. sttt

    (4)(3) не проверял в ЗУПе, возможно, что и там работает ) в УТ проверил все работает

    Reply
  6. NtS

    предложение — добавить выбор принтера, т.к. отправляет на последний принтер, который использовался в базе, если принтеров больше одного, то уже крайне неудобно

    Reply
  7. artmicro

    А внешние печатные формы учитываются?

    Reply
  8. sttt

    (6) хорошо, заявка принята :0)

    (7) также и внешние печатает

    Reply
  9. Юлек я

    Ура, так долго ждала такую обработку!! Спасибо автору!!

    Reply
  10. sttt

    (9) Юлек я,

    Очень приятно, что столько эмоций вызывает это творение :0) еще бы на плюсик жмакнули

    Reply
  11. Fox87

    Плюс автору за обработку!

    Reply
  12. olgashakirova

    Спасибо автору

    Reply
  13. sttt

    Произошла досадная ошибка!!! Вчера обнаружил, что ранее загруженная обработка была абсолютно не рабочей и ведь никто не сказал!!! ))

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

    Reply
  14. sttt

    ввел ошибочный адрес видеокаста забираем тут

    Reply
  15. marku

    Вот если бы еще сделать пакетную печать.

    То есть комплектами печатать, например: ТОРГ12, АКТ и Счет Фактура, потом следующий документ и так далее

    Reply
  16. sttt

    (15) marku, подумаю над этим

    Reply
  17. dagovich

    Попробовал на Комплексная автоматизация, редакция 1.1 (1.1.13.1) печать не пошла при печати выдает ошибку:

    {Форма.Форма.Форма(163)}: Слишком много фактических параметров

    Объект.Печать(СтрокаКнопки.Имя, 1, НаПринтер, НаПринтер);

    Полез поковыряюсь внутрях!

    Reply
  18. dagovich

    И насколько я разобрался, во всем этом Вы так же не решили проблему указания конкретного принтера для встроенных печатных форм. Интересно это вообще решабильно…

    Reply
  19. sttt

    (17) dagovich, в ошибке видно, что в модуле документа конфигурации Комплексная автоматизация в функции Печать(…) используется другое количество параметров, скинте заголовок функции «Функция Печать(Параметр1, …» посмотрю что можно сделать

    Reply
  20. aleg

    Пришлось немного доработать, чтобы заработала на моей конфе, но однозначно автору — плюс. Для отдела оформления документации очень удобная штука оказалась. Выбирают документы и растусовывают их по разным принтерам (в одном — бланки строгой отчетности, в другом — обычная бумага). Конечно, сразу немного повозникали, что слишком много настроек, но потом оценили все преимущества.

    Reply
  21. sttt

    (20) aleg, спасибо ;0) настройки можно сохранять http://sttt.fatal.ru/opt.PNG красным обвел

    Reply
  22. dagovich

    (19) Я уже и сам сделал. Прощения конечно что влез. Убрал в строке

    Объект.Печать(СтрокаКнопки.Имя, 1, НаПринтер, НаПринтер);

    четвертый параметр «НаПринтер». Не знаю как в других конфах в КА у метода «Печать» у всех объектов три параметра: «Имя Макета»,Кол-во экзамп.,НаПринтер

    После этого все заработало. Спасибо большое за обработку. Полезная очень.

    Reply
  23. sttt

    (22) dagovich, «Убрал в строке четвертый параметр «НаПринтер»» — вот и отлично :0) постараюсь в следующей версии сделать чтобы и в КА работало

    Reply
  24. СергейКа

    Чем функционально отличается от http://infostart.ru/public/19846/ ?

    Reply
  25. sttt

    (24) СергейКа, есть возможность параллельной печати на разных принтерах (время печати сокращается) и выбора печатной формы для выбранных видов документов перед групповой печати. позже и пакетная печать появится, не до этого пока

    Reply
  26. Фред

    Попробовал на 1с:Предприятии 8.2, БП 2.0 Принтеров немного (один), но все работает , как и задумывалось!

    В принципе, мне пока потребовалась только групповая печать, но остальное тоже посмотрел. Отбор по периоду немного не понравился, лучше бы если привязывался к рабочей дате (периоду)…Но это так, мелочь. Возможно при больших объемах и ассортименте обрабатываемых документов так удобнее. Ну и дорога ложка к обеду.Через месяц уже не так востребована будет. Ведь до конца года уйма времени!! Это 2012 неожиданно наступил, а 2013, он заранее предупредит!…))

    Одним словом, спасибо!

    Reply
  27. ГБУ

    Попробовал на 1с:Предприятии 8.2, БП 2.0 Принтеров немного (один), но все работает , как и задумывалось!

    В принципе, мне пока потребовалась только групповая печать, но остальное тоже посмотрел. Отбор по периоду немного не понравился, лучше бы если привязывался к рабочей дате (периоду)…Но это так, мелочь. Возможно при больших объемах и ассортименте обрабатываемых документов так удобнее. Ну и дорога ложка к обеду.Через месяц уже не так востребована будет. Ведь до конца года уйма времени!! Это 2012 неожиданно наступил, а 2013, он заранее предупредит!…))

    Одним словом, спасибо!

    Reply
  28. aleg

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

    Reply
  29. sttt

    (28) aleg, спасибо

    Reply
  30. materiy_boec

    Буду тестировать. Спасибо

    Reply
  31. sttt

    (30) materiy_boec, жду отзывов)))

    Reply
  32. Gasilin

    Ошибка при выборе печати справочника Сотрудники:

    {Форма.Форма.Форма(1127)}: Поле объекта не обнаружено (СотрудникиОрганизаций)

    ДокументОбъект = Документы[ВидДокумента].СоздатьДокумент();

    Reply
  33. Gasilin

    При выборе справочника не выдает на странице «Обработка» выдает только доступные команды «Пометка удаления» и «Родитель».

    Reply
  34. IDija

    Если уж пишите что для 8.2 то стоило бы указать что на обычных формах.

    Кто-нибудь встречал групповую печать на управляемых формах? Желательно для УНФ.

    За ссылку буду благодарен!

    Reply
  35. sttt

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

    Reply
  36. IDija

    (35) Это понятно. Нужно под определенный случай переделать, в виде обработки

    Reply
  37. sttt

    (36) что за случай?

    Reply
  38. СуперСтар

    УТ ред. 10.3.21.1 (8.2.16.368)

    Попробовать печатать в окно документы Реализация ТиУ. Ничего не печатает. Не вывел в окно ни одной из предусмотренных форм — либо ошибка либо ничего.

    ?

    Reply
  39. sttt

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

    Reply
  40. sttt

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

    Reply
  41. gull22

    Проверено на КА 1.1.30.2. В поле выбора для счета-фактуры выданного допускает только формы 84, 575, 283. Нет формы 1137.

    Если выбрать предварительный просмотр перед печатью, то сообщение [B]Печать недоступна!Изменился набор реквизитов[/B. В результате ничего не выводит

    Reply
  42. Yureckaya

    (35) вообще, бывает, что нужна. Пример, касательно БП: в конце некоторого периода бухи формируют пакет документов — счет, акт, счет-фактура. В БП 2.0 это можно сделать, а в 3.0 и УНФ — ни разу. Можно однотипные вывести, да, а вот разные — нет. А в этом и смысл.

    Reply
  43. sttt

    (42) Yureckaya, не совсем однотипные, есть списки по нескольким видам документов. нужно посмотреть, помню, что список открывало с несколькими видами документов и причем можно было пакетную печать осуществлять. правда, это было на УТ))) посмотрю в БП, может действительно реализовать такую обработку и для управляемых форм

    Reply
  44. Hellgga

    Спс большое!

    А пакетная, правда, будет?

    Reply
  45. sttt

    (44) Hellgga, под обычное приложение нет. Пора на управляемые переходить)

    хотя, если будет предложение сделать за оплату, то готов обсудить

    Reply
  46. Hellgga

    Добрый день.

    М.б. я что-то не понимаю (юзверь, одним словом) — меня на этот вопрос подвиг Ваш ответ на (42)… Про БП 2.0

    С уважением,

    Ольга

    Reply
  47. sttt

    (46) Hellgga, это мы обсуждали конфигурации на управляемых формах, такие как УТ10, 11, БП3, УНФ. Надо подумать, может и сделать…) стимула особого конечно нет…))) если бы кто профинансировал…

    Reply
  48. Hellgga

    🙂 см. в личке

    Reply
  49. reboot

    Выдает ошибку : {Форма.Форма.Форма(160)}: Значение не является значением объектного типа (ИмяПринтера)

    ТабДокумент.ИмяПринтера = ИмяПринтера;

    Конфигурация УПП 1.3.40

    Reply
  50. sttt

    (49) reboot, по какой то причине:

    ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Объект.Ссылка, Расшифровка);

    не возвращает Табличный документ, необходимо посмотреть, что есть в Расшифровка, а лучше смотреть ДеревоМакетовПечати в строке 144. У вас последняя версия обработки? Эту ситуацию переделывал, вроде как месяц или пару назад. Менял в модуле формы Форма, в процедуре ПечатьДокументов, стр 205, старый вариант за комментировал, если поменять местами, может заработает. Жду результатов

    Reply
  51. Ламия

    Прям хочется попробовать вашу обработку, похожа на то, что нужно.

    Reply
  52. Ламия

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

    Reply
  53. sttt

    (52) Ламия, (52) Ламия, Охотно выслушаю пожелания

    Reply
  54. Гость

    Подскажите, можно ли настроить обработку, чтобы на один лист А4 печаталось 2 документа — разных, имеется в виду(для экономии бумаги, естественно)? Спасибо.

    Reply
  55. sttt

    (54) В Параметры страницы не пробовали в разделе Экземпляров на страницу выбрать 2?

    Reply
  56. gull22

    Попробовал открыть в КА 1.1.33.1, платформа 8.2.18.109

    Ругается

    Ошибка при выполнении файловой операции ‘D:GroupPrint.epf’

    по причине:

    Неверный формат хранилища данных

    Reply
  57. gull22

    Скачал повторно все ОК

    Reply
  58. Hellgga

    Я выбираю нужные формы для печати, задаю разные принтеры, но перед печатью каждый раз выскакивает окно Печать со списком принтеров и надо оттуда выбирать принтер, иначе не печатает… Задала 10 документов и 10 раз выскочило это окно 🙁

    Может, это потому, что у нас сеть?

    Reply
  59. sttt

    (58) Hellgga, интересно)) не тестировал в сети. так понимаю, это системное окно, выбор принтера появляется?

    Reply
  60. Hellgga

    (59) Да, оно. И получается, чтобы что-то напечатать, надо по новой уже в нём выбирать принтер на каждый док, указанный в таблице обработки. 🙁

    Reply
  61. sttt

    (60) Hellgga, хорошо, в ближайшее время, попробую воспроизвести ситуацию и поправить

    Reply
  62. МимохожийОднако

    Иногда требуется для разных клиентов печатать разный комплект документов. Было бы неплохо добавить количество экземпляров определенной формы и где-нибудь хранить эту настройку по каждому контрагенту.

    Reply
  63. sttt

    (62) МимохожийОднако, как время появится сделаю)

    Reply
  64. undo

    МимохожийОднако, поддерживаю, нужная штука указание количества экземпляров печати.

    Reply
  65. mirupakovki

    Добрый день. В БП 8.3 работает?

    Reply
  66. sttt

    (65) mirupakovki, день добрый, работать не будет, надо делать. Если интересно, тогда пишите на почту: st2009st (собака) qip (точка) ru

    Reply
  67. Hasper

    При выборе документа выдает (Белорусская кофигурация)

    Метод объекта не обнаружен (ПолучитьСтруктуруПечатныхФорм)

    СтруктураВнутреннихПечатныхФорм = ДокументОбъект.ПолучитьСтруктуруПечатныхФорм();

    Подскажи куда копать ?

    Reply
  68. Hasper

    Вот моя конфигурация.. в личку писать не могу сори) ни как не зачислят перевод(( https://yadi.sk/d/vM0nkEqNW

    Reply
  69. Hasper

    p.s. пробовал писать на st2009st (собака) qip (точка) ru ((

    Reply
  70. Bukaska

    (68) Hasper, скорее всего оно для российских конфигураций..

    Reply
  71. sttt

    (68) Hasper, на выходных посмотрю

    Reply
  72. Светлый ум

    При выборе одного принтера — не печатает на него, печатает на принтер по умолчанию.

    Reply
  73. kornasto

    1С:Предприятие 8.2.12.75, конф.Альфа-Авто 4.1.01.10 при открытии выдаёт ошибку:

    {Форма.Форма.Форма(154,11)}: Процедура или функция с указанным именем уже определена (НапечататьДокумент)

    Процедура <<?>>НапечататьДокумент(Объект, НаПринтер, ИмяПринтера, ТабДокументБуфер, КоличествоЭкземпляров, ПараметрыДокумента) // 2: ТекстКнопки,

    {Форма.Форма.Форма(236,91)}: Слишком много фактических параметров (НапечататьДокумент)

    НапечататьДокумент(Объект, НаПринтер, ИмяПринтера, ТабДокумент, КоличествоЭкземпляров, <<?>>ПараметрыДокумента); // 2: ТекстКнопки,

    Reply
  74. sttt

    (73) kornasto, уберите лишний параметр и будет работать. найдите и посмотрите сколько параметров у этой процедуры в вашей конфигурации

    Reply
  75. sttt

    (73) kornasto, либо за 1000р сделаю сам, кинете на qiwi кошелек и сделаю красиво

    Reply
  76. b-dm

    {Форма.Форма.Форма(177)}: Значение не является значением объектного типа (ИмяПринтера)

    ТабДокумент.ИмяПринтера = ИмяПринтера;

    не печатает.

    Reply
  77. b-dm

    Название принтера:

    HP LaserJet P3011/P3015 PCL6

    Reply
  78. sttt

    (77) b-dm, какая конфигурация?

    Reply
  79. Uplifted

    Добрый день! Подскажите, пожалуйста, а эта обработка не сохраняет на диск в формате pdf? Ранее я скачивала нужную обработку, но она не работала в КА, вчера нашла эту, решила, что это доработка той, но, кажется, ошиблась, скачала, а нужной функции нет-(((. Задача одним кликом сохранить пакет документов (например, все аванс. отчеты за период в формате pdf, для последующей распечатки в другом месте и выбранные страницы).

    Reply
  80. sttt

    (79) Uplifted, Как вариант, можно поставить doPdf (Виртуальный принтер) при печати указать в настройках куда сохранять PDF файлы. Какая версия платформы и конфигурации используется?

    Reply
  81. Uplifted

    (80) Доброй ночи! Ответила в ЛС

    Reply
  82. newtype

    Здравствуйте.Скачал Вашу обработку GroupPrint.epf 21.03.2013.Сейчас попробовал её применить для печати доп. печ. форм справочника Сотрудники в ЗУП (2.5.91.1).Выбрать доп. форму удается, но при попытке печати получаю сообщение-Печать недоступна! Изменился набор реквизитов. Что можно в ней доделать ?

    Reply
  83. infokaz

    Здравствуйте!

    Нажимаю печать, выходит сообщение: «Значение не является значением объекта типа(ИмяПринтера)

    нажимаю подробно, выходит следующее сообщение:

    {Форма.Форма.Форма(177)}: Значение не является значением объектного типа (ИмяПринтера)

    ТабДокумент.ИмяПринтера = ИмяПринтера;

    Есть возможность исправить эту ошибку?

    Спасибо.

    Reply
  84. Eleet

    Присоединяюсь к infokaz,ошибка таже,если используется ВПФ,обычное формы печатает нормально,конфигурация КА релиз 1.1.70.2,платформа 8.3.8.1675

    Reply
  85. sttt

    (83) infokaz, какая конфигурация?

    (84) Eleet что есть ВПФ?

    Reply
  86. lars-net

    (78) УПП

    Reply
  87. sttt

    (86) какая версия УПП?

    Reply
  88. moonchild1

    ВПФ — внешняя печатная форма, да ошибка таже(Значение не является значением объекта типа(ИмяПринтера)),происходит,как я заметил только при печати внешних форм КА 1.1.83.2 (8.3.9.2170).

    Reply
  89. Maranet

    Добрый день! Обработка в УТ 10.3 на 8.1 работает?

    Reply
  90. sttt

    Вроде должна — это обычные формы

    Reply
  91. user661378_79637559655

    (90) доброго дня ! скажите, есть возможность скачать эту обработку сейчас в 2019 году?

    спасибо и сколько она стоит сейчас, при условии что 4ка вроде как уже снята с обслуживания

    Reply
  92. sttt

    Корректировка

    Reply
  93. sttt

    (91) если вам нужна помощь для внедрения, тогда можно обсудить план работ и заключить ГПХ, не обязательно касаемо обсуждаемой обработки

    Reply
  94. sttt

    (91) Я не вижу никаких проблем, обработка доступна для скачивания.

    Стоит она 1 «стартмани» (https://infostart.ru/about/startmoney/), если нет стартмани тогда абонемент необходимо купить https://infostart.ru/about/service/premium/

    Reply

Leave a Comment

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