<?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='\
за труды
Интересная публикация. Не совсем понятно, зачем, но все-равно интересно))
Смысл: ускорение разработки/отладки печатных форм, а также помощь при переносе кода из модуля документа в модуль внешней печ. формы.
поправьте в описании публикации слова Прозьба и отличтя.
Плюс за работу .. жудем ждать дальнейшей доработки
Если можно поинтересоваться: управляемые формы поддерживаются? Инструкция по выдиранию с помощью обработки какой-нибудь простенькой формы из типовой конфы будет? Заранее спасибо за ответ.
Управляемые не поддерживаются, но если публикация будет иметь успех то можно сделать.
По поводу описания: позже появится.
(3)
Вот про это можно поподробнее? Конкретно про цель и средства?
а насчет вот этого:
создать форму обработки, на нее реквизит СсылкаНаОбъект и кнопку с вызовом функции Печать() из модуля объекта. Обработку открывать через Файл->Открыть в предприятии и отлаживать сколько душе угодно. Куда уж проще и быстрее?
(8) ksai,
А потом закрывать, переходить в конфигуратор, дописывать, сохранять, снова открывать, проверять, ну или кнопка переоткрыть.
Никто не мешает, но зачем делать постоянно одни и те же действия каждый раз. Когда можно их автоматизировать и упростить. Обработка позволяет быстрее найти нужный метод печати, необходимые доп. методы/переменный и используемый макет. А потом соединить все это в одну обработку.
Я просто предлагаю еще один инструмент, а использовать его или нет ваше дело.
Оправданность Вашего труда никто не оспаривает. Сейчас, имхо, нужное дело делаете. Только пожалуйста не распыляйтесь. Если есть возможность, доведите данный инструмент до ума. Очень бы хотелось иметь средство ускоренного создания печатных форм для управляемого приложения. Только ради этого вчера оплатил доступ к скачиваниям. Вы ж не указали в описании, что поддерживается, а что — нет.
(10) PiotrLoginov, управляемые как я уже писал пока не поддерживаются. По поводу «Если есть возможность, доведите данный инструмент до ума.» хотелось бы услышать предложения других пользователей.
А кто мешает ОДИН раз сделать эталон, и копированием из него получать рыбу будущей вн.печ.формы. Это делается за несколько секунд. Опять же кнопка Переоткрыть. Если все это в рыбе — вы только докидываете ваши процедуру и сохраняете, и пере-открываете.
Не осуждаю подобные вещи, но на практике, настраивать что-то, разбираться с чем-то, ну совсем очевидным, и самое главное при имеющихся очень простых и очень быстрых аналогичных методах. Смысл? Никто не заставляет — это понятно. Но смысл какой? 🙂
(12) Новенький_2209, Смысл работать/допиливать не шаблон, а готовую обработку. В идеале должна получиться обработка, которая вытягивает из конфы необходимые методы для дальнейшей их модификации в обработке.
(13) успехов =)
(14) Новенький_2209, Вот еще бы придумать как, а то выгружать всю конфигурацию в папку не хочется, не думаю, что это будет оправдано.
очень интересная задумка, плюсую!
будет полезно иметь
Очень полезная публикация. Применяю для обучения новичков в 1с. Ускоряет процесс обучения, и позволяет более быстро, молодым специалистам разобраться в механизме доработки ВнешПечатныхФорм.
Хочу такое же для УФ под БСП!
Жолтокнижниг, молодец! Плюсую
Я немного опоздал, только что выложил свою разработку. Пока еще не опубликовали)
Сейчас покапаюсь в твоей =)
Подключение автоматическое — это круто)
На мой взгляд отличия таковы: моя работа заточена под быстрый перенос печатной формы из типовой во внешнюю, а данная на редактирование и отладку в режиме предприятие
Вот бы ещё кто адаптировал это под управляемый интерфейс под УТ 11.
дело в том, что печать в управляемых приложениях построена по немного иной логике. Я еще сильно не лез в нее. Но как моя публикация выйдет и если людям понравится, то я сделаю под управляемые)
да да)) народ просит управляемые) очень полезная штука, спасибо)
(3)
так и какое ускорение, окромя автоформирования Макет = ПолучитьМакет() и Область = ПолучитьОбласть() ?
Пишите тогда подробнейшее руководство, как, что и зачем делать.
Иначе — будет больше условностей, ограничений и неявных «это элементарно, можно же догадаться», известных автору обработки, но не известных использующему.
(25) friday1,
народ пусть сначала вообще с 1с разберется, а потом лезет в УФ.
(24) SeiOkami,
вся «иная логика» в ПФ УФ — скопировать пару модулей для инициализации.
Остальное — все то же самое и строго по индивидуальному заданию.
(28) AlexO, ну вполне возможно, я же говорю, что не вникал в это дело =)
http://infostart.ru/public/158517/
Вот моя версия —
Может кому будет интересно )
Пока нет времени описание и доработанную версию сделаю/выложу попозже
Мне кажется не покатит, не будет пользоваться популярностью у программистов, действительно быстрее создать ВПФ через конфигуратор, нежели работать с кодом процедур печати в пользовательском режиме.
нужная вещь в хозяйстве
Спасибо!
Спасибо Автору — меня устраивает во всем — а некоторые моменты возьму на вооружение для дальнейшего использования
Автор спасибо за такую класную вещь! Ты собрал самое лучшее в одном месте, очень полезная тема. Я тоже весьма плотно работаю с динамическими средствами т.е. без использования конфигуратора и открытости пользователю.
(31) Ну как сказать, бывают случаи когда нет прав пользоватся конфигуратором, или он занят другим программистом (только не нужно сразу вспоминать про хранилище конфигурации — не каждый раз же его настраивать).
Возможно не каждому программисту это подойдет для практического применения (опять же все зависит от предпочтений), но как образец красивого многоуровневого решения это впечетляет.