Правильная установка шрифта средствами 1С




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

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

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

<?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='\

17 Comments

  1. insurgut

    В коде сразу и ответ: средствами 1С — никак %) Но с точки зрения пользователя ему все-равно, каким именно образом будет установлен шрифт, а с точки зрения программиста — отличное решение, чтобы конфигурация включала в себя сам шрифт и могла его «налету» устанавливать.

    Reply
  2. miniogn

    В слову,в некоторых типовых встроен код установки шрифтов.

    Пользователю не всегда удастся установить шрифт, т.к. могут отсутствовать права.

    Reply
  3. sytkosa

    Решение неплохое. Но также нужно не забывать проверять безопасно а можно ли пользователю создать COM объект и можно ли ему выполнить инсталляцию, так как если прав нету то 1С выпадет в ошибку

    Reply
  4. anig99

    (3) 8SiriuS8, у меня не с одним пользователем в стандартной УПП проблем не возникло

    Reply
  5. unichkin

    А под Linux как, не знаете?

    Reply
  6. killovolt

    (5) unichkin, под Linux на базе Debian (Ubuntu, Mint) надо копировать шрифт в папку /usr/share/fonts, но у пользователя должны быть соответствующие права, вернее это можно сделать только под правами root.

    Reply
  7. sytkosa

    (4) Видимо в вашей сети админы не используют AppLocker и не делают повышенные ограничения для пользователей

    Reply
  8. anig99

    (7) 8SiriuS8, если в сети используются серверные возможности по управлению, то шрифты на все компьютеры можно установить и через них.

    Reply
  9. androgin

    Для WINDOWS: сохранить шрифт во временный файл — открыть его для пользователя, чтобы она сам его установил (кнопочка УСТАНОВИТЬ присутствует) — после установки удалить временный файл (опять же кодом!) или после закрытия клиента временный файл сам удалиться.

    Штатными средствами все делается.

    А устанавливать что-то втихую — это варварство!

    Reply
  10. anig99

    (9) готовы объяснять 100+ пользователям, что не нужно пугаться появляющейся кнопки? А шибко умным объяснять, что нужно нажать кнопку Ок, а не Отмена. А надписи и предупреждения 90% пользователей просто не читают… А если читают, то принципиально не подключают мозг для чтения.

    Reply
  11. androgin

    (10) что там объяснять?

    вывалил окошко с текстом, что будет установлен шрифт и прочей информацией «для тупых»

    выводишь свой шрифт.

    пользователь его устанавливает.

    Что тут сложного? Вы сами себе проблемы создаете?

    Не читают — знач такие работники. Установят, когда шрифты поплывут.

    Reply
  12. anig99

    (11) эххх. установят, прочитают… Вот такие вот бывают разные работники. 1с тоже вот мечтало, что пользователи будут сами отчеты для 1с создавать… Ну и много таких пользователей? Ещё раз. Я 12 лет работаю с 1с. И все 12 лет ситуация не меняется — 90% пользователей не читают текст. А если читают, то слова у них в цельное предложение не связывается. Им «работать надо, а не окошки читать». А когда документы уйдут в час ночи в сетевые магазины без нужных штрихкодов (выводимых с помощью шрифтов), где откажутся принимать товар, то виноват будет не оператор, который не прочитал текст на незнакомом окошке, и не админ, которые заменил сгоревшую машину… А 1сник, который создавал эту печатную форму. Ситуации бывают в жизни разные. Вот будто бы такая задача у меня просто так возникла. Или я такой злодей, похабные шрифты устанавливать буду…

    Reply
  13. androgin

    (12) никто не мешает пользователям самим составлять себе отчеты.

    И не важно сколько вы в 1С. Ваша работа говорит больше вашего срока в ней.

    А злодей или нет — НЕЛЬЗЯ принудительно устанавливать то, на что пользователь не соглашался!

    Reply
  14. anig99

    (13) не важно сколько я в 1с. Важно сколько я работаю с людьми. Я знаю о существовании пользователей, которые могут сами себе писать отчеты. Но так же я знаю, что существуют должности, уровень оплаты на которых не позволяет нанять квалифицированных сотрудников. Поэтому существуют ситуации, когда нельзя доверять неквалифицированным пользователям устанавливать что-либо на оборудование, которое является собственностью организации. Ну вот ведь ужас! Злой сисадмин поставил операционную систему на компьютер без ведома пользователя!

    Ладно. Всё это лирика. Я не знаю какой Вы специалист, но судя по другим сообщениям на форуме, любите поругаться, а не обсуждать профессиональные темы. Я этот этап прошел уже давно и не хочу тратить на это время.

    Reply
  15. androgin

    (14) вы работаете в системе учета, в не в детском саду раскаршки малюете. Тут главное минимизировать человеческий фактор. Вы же его наоборот розводите.

    И не будьте «бабой», говоря о «любите поругаться». Ечли для вас приведенте аргументов ругань — уж простите, но это ваше личное мнение. Не я тут не в состоянии оправдать свои действия

    Reply
  16. anig99

    (15) Странно. Мне казалось, что просить пользователя сделать что-то руками, а не автоматизировать — это как раз увеличение человеческого фактора. Кроме того, увеличение автоматизации процессов как раз снижает затраты на человеческие ресурсы за счет снижения человеко-часов и квалификации непосредственных исполнителей до уровня наблюдателей. Ещё раз. Учетная система и оборудование — собственность предприятия, поэтому он вправе давать указание исполнителям производить установку необходимого софта в пределах АК и УК.

    Reply
  17. androgin

    (16) вы бросаетесь в крайности. Это не вопрос: «вы уверены, что хотите провести документ?». Вы не в 1С ставите/запускаете, а в систему. Мало того, вы даже не учитываете, что права у пользователя могут быть ограниченными

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *