Обработка для тестирования внешних печатных форм в восьмерке (приложение к статье "Внешние печатные формы в восьмерке")




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

99 Comments

  1. Asmir

    Протестировал свою внешнюю печатную форму. Выдает ошибку

    {ВнешняяОбработка.СписокВбанк(67)}: Преобразование значения к типу Дата не может быть выполнено

    Руководители = ОтветственныеЛицаОрганизаций(Шапка.Организация, КонецДня(Шапка.Дата),);


    Хотя форма у меня работает.

    http://infostart.ru/projects/831/?&p_platform=1&ref=8942

    Reply ↓
  2. German

    Развил тему на пустом месте, что мешает сделать внешнюю печатную фому с диалогом?

    Тоесть запустить диалог и отлаживай сколько хочешь, из диалога так же вызывать Функцию модуля печать.

    Reply ↓
  3. poppy

    > Протестировал свою внешнюю печатную форму. Выдает ошибку

    У меня тоже выдало такую же ошибку. Причиной было то, что я вместо документа «Зарплата к выплате организаций» выбрала документ «Зарплата к выплате». С документом «Зарплата к выплате организаций» ошибок не выдает.

    Или у тебя при дургих условиях выдает ошибку?

    Reply ↓
  4. poppy

    > Развил тему на пустом месте, что мешает сделать внешнюю печатную фому с диалогом?

    Ничего не мешает. Но я выбрала другое решение.

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

    Reply ↓
  5. PowerBoy

    Очень понравилась!

    Большое спасибо.+1

    Reply ↓
  6. Asmir

    >У меня тоже выдало такую же ошибку. Причиной было то, что я вместо документа «Зарплата к выплате организаций» выбрала документ «Зарплата к выплате». С документом «Зарплата к выплате организаций» ошибок не выдает.

    я обшибся

    Reply ↓
  7. на заре начала работы с 1с делал подобную вешь … качнул ради интереса

    вопросы/предложения к автору

    1. почему программа сама не разбирается для какого типа документов служит печатная форма(копаться во всем списке документов не удобно и не корректно)

    2. почему не выводит результат работы печатной формы

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

    Reply ↓
  8. просмотрел исходник вопрос 2 отпал 😉 — задавал не тот тип документа при тестировании (счет фактура полученый/выданый перепутал ;)) … вобшем все упирается в вопрос 1 😉

    Reply ↓
  9. poppy

    > 3. почему бы чуток не доработать что бы тестировала и обычные обработки .

    Я так понимаю, что речь идет об обработках, которые регистрируются в том же справочнике, что и внешние печатные формы.

    В этом случае, эффект от обработки не так очевиден. Ведь ссылка на файл запоминается в меню «Файл».

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

    Reply ↓
  10. poppy

    > 1. почему программа сама не разбирается для какого типа документов служит печатная форма(копаться во всем списке документов не удобно и не корректно)

    Спасибо за предложение.

    Действительно, назначение печатной формы можно брать из параметров авторегистрации, если оны заполнены. Кстати, этот вопрос я упустила в статье. Обязательно исправлю.

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

    Reply ↓
  11. >Действительно, назначение печатной формы можно брать из параметров авторегистрации, если оны заполнены. Кстати, этот вопрос я упустила в статье. Обязательно исправлю.

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

    Обработки с макетами для авторегистрации доп печатных форм я честно говоря никогда не встречал и сам делал только 1 раз — просто что бы посмотреть на работу этого чудо механизма. Вобшем макеты с авторегистрацией это экзотика, но где то наверно водятся 😉

    >Я так понимаю, что речь идет об обработках, которые регистрируются в том же справочнике, что и внешние печатные формы.

    В этом случае, эффект от обработки не так очевиден. Ведь ссылка на файл запоминается в меню «Файл».

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

    Reply ↓
  12. O-Planet

    А вы тут о чем %) ?

    У меня с тестированием внешних печатных форм проблем не возникало. Вернее, возникали, потом я «научился их готовить» ))

    Reply ↓
  13. poppy

    Обработка обновлена.

    Учтены пожелания и предложения от NewNick. Спасибо!

    Часть идей взято из его обработки. NewNick’а можно считать соавтором.

    Reply ↓
  14. poppy

    Обработка обновлена.

    Исправлена обнаруженная ошибка.

    Reply ↓
  15. visim

    А для тестирования печ.форм к справочникам можно ее доработать?

    Reply ↓
  16. poppy

    Добавлена обработка для платформы 8.1.

    Проверена на конфигурации Бухгалтерия предприятия 1.6

    Reply ↓
  17. artbear

    (16) Для УПП (я юзаю 1.2.14.1) нужно исправить строку

    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер,

    Документ.Метаданные().Представление() + » № » + ОбщегоНазначения.ПолучитьНомерНаПечать(Документ) + » от » + Формат(Документ.Дата, «ДФ=’дд ММММ гггг'»)+ » г.»);

    .

    на строку

    .

    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер,

    Документ.Метаданные().Представление() + » № » + ЗаполнениеДокументов.ПолучитьНомерНаПечать(Документ) + » от » + Формат(Документ.Дата, «ДФ=’дд ММММ гггг'»)+ » г.»);

    .

    т.к. метод ПолучитьНомерНаПечать находится в глоб. модуле ЗаполнениеДокументов, а не в глоб.модуле ОбщегоНазначения

    Reply ↓
  18. poppy

    (17) Спасибо, artbear, за сообщение!

    Обработка для 8.1 переработана. Она протестирована на типовых конфигурациях БП1.6, УТ10.3, ЗиП2.5, УПП1.2 и на самописанной конфигурации.

    Исправлена выявленная ошибка.

    Reply ↓
  19. Yra_bes

    Мега полезная обработка!

    Reply ↓
  20. IgorXml

    Если внешний отчет, то там, в процедуре РаботаСДиалогами.НапечататьвнешнююФорму() вызов экспортной функции Обработка.печать() жму F11. И попадаю в модуль временного отчета, где можно посмотреть отладку. Я работаю с Бух. 1.6.

    Вот с обработкой табличных частей такого не получается: В обработках РаботаСДиалогами.ОбработатьНажатиеНаДополнительнуюКнопкуЗаполненияТЧ(…) вызов Обработка.Инициализировать(). Жму F11 и никакого входа в модуль временной обработки нет.

    Шорошо бы что б эта обработка(«Обработка для тестирования внешних печатных форм в восьмерке..») могла тестировать обработки табличных частей.

    Reply ↓
  21. poppy

    (20)

    2Igor2008 для этого есть другая обработка http://infostart.ru/projects/1749/

    Reply ↓
  22. IgorXml

    (20) Сори, это делает: http://infostart.ru/projects/1749/

    Reply ↓
  23. Intimatik

    Вот бы еще отладку ПФ для справочников добавить 🙂

    Если СсылкаНаОбъект имеет тип СправочникСсылка, то в возможные варианты отладки нифига не попадает 🙂

    Reply ↓
  24. Intimatik

    делаем тип реквизита «Документ» — составной и добавляем «СправочникСсылка»

    Reply ↓
  25. poppy

    (23)

    Теперь обработка умеет тестировать и ВПФ справочников.

    Reply ↓
  26. aVtor

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

    Ошибок в работе небыло. Спасибо. +1

    Reply ↓
  27. nkleopa

    Работает. Удобно. Спасибо! +1

    Reply ↓
  28. nkleopa

    В последнем релизе Бухи(1.6.12.4) на закладке «Настройки» надо «РаботаСДиалогами» заменить на «ОбщегоНазначения», иначе ругается…

    Reply ↓
  29. poppy

    (28) Спасибо за сообщение.

    Обработка обновлена.

    Reply ↓
  30. thorben

    Спасибо за обработку! Несколько дней сидел над одной проблемой и не мог отладить

    свою обработку, пока на эту страницу не зашел. В считаные минуты ошибки в коде

    были устранены и все заработало.

    Reply ↓
  31. alexu

    Большое спасибо за обработку.

    Очень помогает.

    Успеха !!!

    Reply ↓
  32. serg__k

    Офигенная вещь! Спасибо!

    Reply ↓
  33. DeniskaRediska

    не работает

    Reply ↓
  34. DeniskaRediska

    Пардон, всё работает, только я сразу не понял принцип, спасибо.

    Reply ↓
  35. Поручик

    Автор, поправьте код в модуле формы

    #
    #—— [FIND] ——
    #
    Диалог.Фильтр = «Внешние обработки (*.epf)»;
    
    #
    #—— [REPLACE WITH] ——
    #
    Диалог.Фильтр = «Внешние обработки (*.epf)|*.epf»;
    

    Показать

    Reply ↓
  36. Поручик

    Зашибись тут двиг после апдейта работает.

    Reply ↓
  37. poppy

    (36) Спасибо! Исправлено.

    Reply ↓
  38. где файл собственно?

    Reply ↓
  39. poppy
  40. dumb851

    в 8.1.14.72 не окрывается(

    Reply ↓
  41. poppy

    (41) dumb851, возможно ты скачал файл для версии 8.0?

    Изменила главный файл. Скачай еще раз.

    Reply ↓
  42. FlyLink

    Я не понял вообще как пользоваться этой обработкой.

    есть справка?

    Reply ↓
  43. poppy

    (43) Для начала необходимо определиться «зачем» пользоваться этой обработкой. После ответа, вопрос «как» отпадет сам собой.

    Что конкретно непонятно?

    Reply ↓
  44. FlyLink

    (44) да вроде разобрался. )) не во всем. но пока этого хватило. то, что хотел отладил.

    Reply ↓
  45. poppy

    (45) Молодец! Будут вопросы — задавай.

    Reply ↓
  46. IP43

    Зашибись. Наконец то нашел ошибку. Большой респект.

    Reply ↓
  47. Brovashov

    Класс. Очень удобно 😀

    Reply ↓
  48. idw

    Добрый день. Пытаюсь открыть данную обработку в ЗУП 2.5. Выходит вот такая ошибка и обработка не открывается:

    С помощью встроенной функции Новый (New) не могут создаваться значения примитивных типов (Строка)

    Reply ↓
  49. idw

    (49) Разобрался, в печ. форме переменная СсылкаНаОбъект были типа Строка.

    Reply ↓
  50. alexluka

    Спасибо, нужная весчъ!!! Помогла очень

    Reply ↓
  51. Osuul

    такую нужно еще для табличных частей0)))

    Reply ↓
  52. Osuul

    а так спасибо) крутая штука) очень помогла

    Reply ↓
  53. mr.Kot

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

    Reply ↓
  54. ivakop

    Большое спасибо.+1

    Удобный инструмент.

    Reply ↓
  55. MrXaN

    Удобно не надо лезть в общие модули))Спасибо.+1

    Reply ↓
  56. cezaricq2

    Спасибо за инструмент! Серьёзно экономит нервы и время… Очень часто приходится делать видовые изменения, и без него было бы сложно просмотреть на результат…

    Reply ↓
  57. higs

    Огромное спасибо за разработку! Хоть и взял не здесь, но очень помогла. Долго не мог понять, почему не работала печатная форма. С помощью обработины исправил за 3 минуты!

    Reply ↓
  58. samaragips

    Спасибо пригодилась

    Reply ↓
  59. wkr

    Спасибо, очень помогает в работе 🙂

    Reply ↓
  60. lenka-nes@mail.ru

    Спасибо!очень полезная обработка. сокращает время работы

    Reply ↓
  61. ABudnikov

    Спасибо, стала одним из полезных инструментов в работе.

    Reply ↓
  62. mob51

    Когда начинал работать с 1с эта обработка очень помогла… Автору большое спасибо.

    Reply ↓
  63. olga1512

    Очень удобная вещь, особенно для новичка. Раньше тратила гораздо больше времени на отладку. Спасибо автору.

    Reply ↓
  64. Alexey55

    Спасибо большое!!!

    очень полезная чещь

    Reply ↓
  65. mariyanna

    Спасибо!!!

    Reply ↓
  66. arjunasoft

    Посмотрел, попробовал, понравилось. Без такой обработки не реально отследить все нюансы.

    Reply ↓
  67. jshadow

    Спасибо!!! Очень помогает в работе!

    Reply ↓
  68. vpozitive

    Отличная вещь!!!! Сколько мучений было без нее!! Отладка как по маслу))))

    Reply ↓
  69. prophetic

    Благодарю за обработку. Полезная вещь!

    Reply ↓
  70. nord87

    Спасибо за инструмент. Шикарная вещь. Без него как без рук при создании внешних печатных форм.

    Reply ↓
  71. 1cBIT

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

    Reply ↓
  72. Konsult

    Спасибо. Замечательная обработка. Очень помогает в разработке и отладке внешних форм.

    Reply ↓
  73. igor_1c

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

    Reply ↓
  74. Ibrogim

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

    Reply ↓
  75. KliMich

    Спасибо!

    Крайне полезная и зачастую необходимая вещь!

    Reply ↓
  76. dtitov

    Спасибо за обработку, интересно и актуально!

    Reply ↓
  77. yalo

    Меня несколько раз выручала ваша обработка. Большое спасибо!

    Reply ↓
  78. Пуд

    Спасибо,очень интересно!

    Reply ↓
  79. maratimus

    обработка очень помогла , спасибо разбогатею пришлю деньги, да для тех кто не знает, для отладки нужно поставить брейк на строку ТабДокумент = ВнешняяОбработка.Печать();, а потом нажать F11.

    Reply ↓
  80. Sova_1986

    Пригодилось, большое спасибо!

    Reply ↓
  81. Мустафа

    не тестировал, не качал. нужны стартмани))))

    Reply ↓
  82. Bolik13

    Спасибо

    Reply ↓
  83. Гость

    Пригодилось, большое спасибо!

    Reply ↓
  84. magrib

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

    Reply ↓
  85. erdos

    спасибо. обработка мне помогла

    Reply ↓
  86. oleg_ss

    Помогла при отладке!

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

    Спасибо!

    Reply ↓
  87. msmaiorka

    Какая же классая штука!!!Придумают же люди! Супер

    Reply ↓
  88. pesh1

    Не думал что есть такие узкоспециализированные вещи

    Reply ↓
  89. EugeneR1c

    Благодарю за обработку!!!!!! Пользуюсь постоянно!!!!!!!!!!!

    Reply ↓
  90. AleXpnz

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

    Reply ↓
  91. winsloow

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

    Раньше приходилось тратить уйму времени на отладку, респект автору!

    Reply ↓
  92. fixin

    (0)

    Если под рукой нет этой обработки, для тестирования можно просто выполнить код:

    ИмяФайла = «d:1cОбработкиОбработки ТЧОбработкаТабличнойЧастиТовары (УТ, типовая).epf»;
    Обработка = ВнешниеОбработки.Создать(ИмяФайла);
    Обработка.Инициализировать(Объект.ПолучитьОбъект(), «Товары», Неопределено);
    

    Можно использовать консоль кода.

    Reply ↓
  93. FReIM

    Спасибо! А для 8.2 на управляемых формах планируете написать?

    Reply ↓
  94. Luck_DMST

    Спасибо огромное, я сделал внешнюю печатную форму для печати СФ, для отладки добавил форму, где можно выбрать СсылкуНаОбъект, так называемую, сделал все как положено, но если я указываю документ через мою форму для отладки все хорошо работает, а если подключаю как ВПФ для предприятия, не работала хоть ты тресни, с помощью Вашей обработки нашел ошибку, спасибо!

    Reply ↓
  95. Aparatus

    Дааааа, это классная вещь!

    Reply ↓
  96. opiumdx

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

    Reply ↓
  97. Nathaly

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

    Reply ↓
  98. eigen20

    Спасибо большое! Рулезная вещь!!!

    Reply ↓
  99. internetname

    Спасибо, надо брать.

    Reply ↓

Leave a Comment

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