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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-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 не будет опубликован. Обязательные поля помечены *