<?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='\
«прилогаемом» -> в прилагаемом
«прилогаемом» -> в прилагаемом
Упс ))) Исправлено
Стандартная обработка печатает форму по умолчанию, которую можно изменять
(3) Red_Devil,
Согласен но здесь если поставить галки на нескольких формах то и на каждый документ будет печататься несколько форм (указанных в списке).
Просто и приятно. Респект.
(4) Можно капельку поподробнее. А то никак не могу решить качать или нет. Не вижу по скриншотам отличия от обычной групповой обработки. Хотя возможно что у меня просто не обычная)))
3й скриншот показывает выбор распечатываемых форм документа (это и есть отличие), но один минус все же есть данная возможность присутствует если выбран один вид объекта.
Имеет право на жизнь. Хотя вышесказанное по поводу установки варианта печати по умолчанию (и печать одной формы соответственно) закрывает проблему как таковую на 90%
(8) asg1975,
А если же например надо распечатать по каждому сотруднику из отдела 3формы, при этом бухгалтерии распечатывать счет-фактуры пачкой в 200 штук (и несколько сразу по индивидуальным формам)— что и произошло)))
Чем лучше этой?
(10) СергейКа,
если честно ее невидел счас потестю
(10) СергейКа,
скачал твою обработку и сразу в глаза минусы (хотя есть и плюсы в ней) перечислять небуду но кое что из твоей мне по нраву и хотел бы забросить в свою с твоего разрешения)))
PS: твоя обработка у меня не работает КА 1.1.12.1.
(12) 🙂
Дату разработки посмотри 🙂
И еще в нескольких конфигурациях.
Я знаю, но поскольку запросов не было, то и не переделывалась.
Сделано максимум универсального, остальное «дотачивается» без особых проблем. Все предусмотреть невозможно.
Как большая часть разработок она бесплатна и с открытым кодом, свободна для доработки.
Можно конечно, только просьба указывать исходную публикацию и все.
полезная, давай ещё!:)
(14) zhleonid8,
Тогда не забываем плюсовать
спасиб!
Обработка безусловно нужная, вот только никак накопить не могу на нее(((.
Как накоплю, скачаю посмотрим.
Не работает на «Управление небольшой фирмой, редакция 1.2 (1.2.2.3)»
(18) d_hof,
можешь посмотреть по коду что там не так, на что ругается?
Да!!!! Прикольненько, но что-то мало смысла — помощнее бы обработочку!
(20) demon852002,
чего по твоему там не хватает???
Я все конечно понимаю, но нельзя ли точно обозначать для 8.1 или для 8.2. Если для 8.1 еще куда не шло (конвертнуть можно). А вот обратно никак. (Я не знаю лично как). В данном случае для 8.2. В шапке как обычно перечилено все подряд и 8.1 тоже упомянуто. Прошу к этому вопросу повнимательнее относиться. У меня например УТ на 8.1 пока еще. Что прикажите конвертнуть ради этого дела?
На последок: файл без расширения скачивается… Поди догадайся, то ли это .rar, то ли .erf
Интересно и актуально!
Это то что мы искали!
Можно использовать в практической жизни.
У нас достаточно часто возникант подобная задача и вот красивое решение.
Спасибо автору.
отличная обработка, возможность печати на разных печатных формах является огромнейшим плюсом
Отличная обработка!
Чудесно. Присоединяюсь к вышесказаному. Спасибо за выбор нескольких печатных форм и за открытый код
Жаль, на «1С8: Бухгалтерия гос.учреждения» 1.0.11.3 (8.2 15-я платформа), не работает:
ДокументОбъект = Документы[ВидДокумента].СоздатьДокумент();
(19)Метод объекта не обнаружен (СведенияОвнешнейОбработке)
УНФ 1.4.
Актуальна групповая печать именно справочников и с возможностью использования внешних печатных форм. Это сделано в обработке?
Именно так (29) PAAG
Да, попробовал, действительно печатает, только вот есть одно неудобство — каждая форма показывается в отдельном окне, и если печатать сотню, другую сотрудников, то это очень неудобно, было бы хорошо, если бы все формы выводились в одном табличном документе.
Придется допиливать это самому.
Но все равно спасибо, а то нигде не видел такой обработки, везде печать только для документов.
Отличная обработка!!!!
Благодарю!
Писал свою обработку, ваш код пригодился при вытаскивании внешних печатных форм, спасибо. Хотя можно было и реализовать список форм для нескольких видов документов и количество экземпляров, а также запоминание пометок. Она у меня не универсальная, но если будет время, модифицирую вашу обработку, выложу и сошлюсь на вашу.