<?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='\
Вот спасибо. Очень помогло.
Подскажите пожалуйста — при создании печатной формы в конфигурации у Вас есть функция ПолучитьПараметрыПечати() в которой вы определяете заголовок формы
Как определить заголовок формы если печатная форма реализуется как внешняя обработка?
И второй вопрос, Сделал внешнюю печатную форму для заказа клиента (конфигурация КА2) «Заявка». При попытке её сохранить 1с присваивает ей имя «Заявка» (без номера и даты). Типовые печатные формы, встроенные в конфу 1с сохраняет в файлы правильно. С номером и датой документа в названии файла.
Как, во внешней печатной форме, заставить 1с давать файлу имя с датой и номером документа?
Конфигурация Комплексная автоматизация 2.2, на БСП 2.3
Спасибо за статью, очень полезная. Подскажите, а что делать, если у меня внешняя обработка это не печатная форма, а просто дополнительная обработка, т.е. объектов назначения как таковых нету, а я хочу из этой обработки все таки выводить какие-то печатные формы, которые в ней формируются через эту типовую форму вывода БСП? Возможно ли это вообще?
Спасибо, очень помогло в создании своей внешней формы с вводом параметров.
Спасибо. Интересно.
Вообще тем, кто будет разбираться, советую почитать в коде, описание к этой функции:
ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Там подробно описано и примеры есть.
Оно спасибо за труды конечно.
Только для будущих статей пожелание — ссылок поменьше между вариантами реализации.
Изучая второй вариант задалбывают сноски на первый. А мне первый вообще не в тему, т.к. все через внешние обработки.
странная статья в которой не указана версия БСП.
что такое ? ОбщийМодульПечатнаяФорма.ОбработкаКомандыПечатиПечатнойФормы
у меня нет такого БСП 2.3.2.53
Хороший — рабочий пример для ВПФ //+1
Единственное, добавил бы реквизит ссылка на объект и соответственно заменил бы инициализацию для «ОбъектыНазначения»:
Показать
Выдает ошибку
«Для объекта не определена форма по умолчанию, соответствующая текущему режиму запуска. Объект: «Печатная форма»
(встраиваемая)
Что не так?)
такая ситуация 1С BAS ERP (2.1.8.1) для Украины
БСП 2.3.2.53
делаю внешний отчет со своей печатно формой
отборы настройки и т д
и пробую выводить на печать процедурами из БСП
Показать
Помогите разобраться что не так
(2) Вы разобрались как определить заголовок формы, если печатная форма реализуется как внешняя обработка?
Объясните, как получилось разместить на форме еще одну кнопку печати?