<?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='\
Скриншоты? Описание?
http://www.infostart.ru/public/15601/ ?
Чем лучше например
В связи с новыми правилами лично я даже качать не буду в таком состоянии…
Скриншот появился…
А посмотреть потом заполненную ТЧ как?
😥 Извините, коллеги, в процессе выкладывания обработки был лишен интернета на значительное время.
Дополнил описание и обновил файл
(1) в связи с новыми правилами и некоторыми постами, вносящими неясность к употреблению той обработки, например, зачем её подключать к документу? лично я бы не стал ей пользоваться и скачивать.
Считаю что выложенная выше вещь — удобная, полезная, универсальная и сделана качественно, ничего лишнего
(2) либо открыть документ, воспользовавшись кнопкой выбора, либо он сам откроется при установке соответствующего флажка
Не удалось протестировать эти обработки:
http://www.infostart.ru/public/20302/
http://www.infostart.ru/public/18828/
Обр.Объект = ЭлементыФормы.ВыбДок.Значение.ПолучитьОбъект();
(3) по (1)
Ту обработку нужно подключать для того, чтобы запускать из открытого документа. При этом, документ может быть не записан, как до, так и после выполнения тестируемой обработки.
Действия тестируемой обработки можно отменить.
(5) Обработка расчитана на наличие реквизита «Объект» в обработке заполнения табличной части (если тип этого реквизита ограничен типами ссылок на документы к которым подключается обработка заполнения ТЧ, а не установлен в «Любая ссылка», тогда в поле выбора «Документ для заполнения табличной части» будем выбирать из ограниченного множества. Это удобно)
(1) скачал обработку — хорошая
(7) 1. Эта информация должна быть в описании
2. было бы удобно, если бы наличие/отсутствие реквизита «Объект» проверялось автоматом и в случае отсутствия выдавалось вменямое сообщение об этом.
Вопрос: документ всегда сохраняется?
ИМХО в (6) значительно удобнее, можно легко отказаться от неверных исправлений.
(7) Следовательно, она не является подспорьем для тестирования ОЗТЧ, написанных по стандартной технологии.
(9)-(10) Лично я всегда создаю реквизит «Объект», привык к такому порядку, что ж теперь делать?
(9) А сообщение, что реквизита нет, выводится в строке сообщений
1. Где про Объект написано в описании?
2. Что по сохранению документа ?
3. (10) перечеркивает универсальность, тем более, что и в описании об ограничении по Объект ничего не написано.
(12).2 документ записывается после заполнения
(13) Не было меня давно. Вставлю свои 5 копеек.
Записывать объект(документ) оооочень часто не удобно… Например, когда сидишь у клиента и надо быстро протестировать на рабочей базе.
Лично я поступаю просто:
1. Пользуюсь обработкой poppy (если не лень подключать)
2. У меня все внешние обработки с формами: из формы обработки я просто открываю сформированный документ не сохраняя его…
(14.2) тоже вариант
В общем, неудобно и неуниверсально 🙁
Не в обиду автору поставлю минус — у poppy намного лучше 🙁
Ничего страшного, я не обидчивый 😉
Мне во всяком случае удобен такой подход — если форма подключается к паре видов документов, то выбирать только из них.
Кесарю кесарево
Я тоже не создаю реквизит объект в обработке заполнения, так поправить — это два слова в сабже убрать. Немного доработал напильником и все ок.
Огромное вам спасибо, очень полезная вещь!!!
(19) — (20)
Вот ещё полезности —
1. — много отчетов одном — нужно просто создать несколько схем компоновки данных — и в меню сверху можно выбирать любую — отчет по этой схеме формируется сразу после выбора.
2. — форма для авторегистрации внешней печатной формы — необходимо указать типы документов, к которым подключается ВПФ, и в модуле прописать функцию «Печать()».
3. для формирования кода заполнения макета ПФ — создается макет со всеми параметрами/шаблонами,
указываешь имя макета в модуле, и вуаля — костяк заполнения процедуры Печать() уже готов, осталось подставить запрос с выборкой.
Показать
(20) Это ты про что пишешь?
дай схему использования, что запускаем, как генерим, как юзаем.
(22) Завтра-послезавтра сниму видео с демонстрацией
Очень удобная обработка для отладки работает в любых конфигурациях спасибо автору
(24) Спасибо, пункт (23) откладывается на выходные…
Спасибо огромное за обработку — очень помогла!!!
(26) lyubashonka, пожалуйста! 🙂
Очень удобная обработка для отладки спасибо автору — очень помогла!!!
(22) artbear, кстати, вот видео снял — как ВПФ сделать :http://infostart.ru/public/66570/ — четвертый файл, также он лежит тут: http://files.mail.ru/BDNTCN
Спасибо автору. Использую при отладке, оч. хорошее средство.
Спасибо автору! Очень часто раньше приходилось использовать формы в тестировании.
(31) oiter, посмотрите и другие мои публикации — шаблон ВПФ тоже полезная вещь и дерево метаданных конфигурации
забавно видеть как минусовали данную обработку, совсем даже зря, отличный инструмент для отладки, правда интерфейс напоминает обработку poppy но это все мелочи
Друзья, есть ли подобная вещь для управляемых форм под тонкий клиент? очень нужно
(34) Manticor, у меня пока нет, скачал с ИС отладку ВПФ под БСП
(35) просто без подобной обработки такго рода встает вся отладка на тонком(((
(36) Manticor, приспичит самому тестить ОЗТЧ — сделаю, а пока и так зашиваюсь
{Форма.Форма.Форма(19)}: Метод объекта не обнаружен (Записать)
Обр.Объект.Записать();
Вот такая ошибка при попытке заполнить ТЧ. 🙁
(38) TODD22, посмотри в отладчике — что в Обр.Объект находится? наверняка Неопределено или что-то ещё не ссылочного типа
Не хватает кнопки «Закрыть» и подстановки имени табличной части при выборе типа, первой в списке ТЧ.