<?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='\
Для это специалист должен заполнять сервисный лист, где указывается куда сохранены резервные копии. Хотя статья не об этом.
По теме статьи могу сказать, что я бы не стал в названии папок вперемешку использовать латиницу и кириллицу. И опять же одна папка называется «1S_Base7» (слово «база» переведено а английский, хотя стоило бы использовать множественную форму «bases»), а другая папка называется «1S_Обновления», тут уже по русски.
Данный «стандарт» определенно рекомендован к доработке. Я бы не стал его использовать в данном виде.
— 1Cv8_251012_БГУ – сперва стандартное заполнение 1С, далее пишем дату архива и в конце наименование конфигурации.
К этому тоже есть претензия. Я, например, могу в день несколько бекапов делать. Если делаю обновление базы, то минимум 2 — до и после обновления.
По поводу нескольких бэкапов, то никто не мешает в конце, после названия архива, добавить «_1» и «_2» и т.д. А по остальным притензиям — с таким же успехом можно и к фиговому листу придраться! Тем более это всего лишь рекомендация, главная идея у которого состоит в том, что компаниям нужно унифицировать поход к этому вопросу. А уж конкретные формы и методы реализации пусть разрабатывают сами, если не нравится моя реализация!
Разделять базы на 7.7 и 8 не имеет смысла, если в имени каталога базы используется префикс, обозначающий конфигурацию: «Бух» — бухгалтерия 7.7, «БП_2.0» — бухгалтерия предприятия 8, ред. 2.0 и т. п.
Имена архивов вида «1Cv8_251012_БГУ» чудовищно неудобны. Даты в именах файлов следует задавать в виде «YY-MM-DD». Пример — «УТ_10.3 Вектор 13-10-27»: при сортировке по имени файлы естественным образом сортируются ещё и по дням. Если необходимо, в конце также можно добавлять время — «УТ_10.3 Вектор 13-10-31 14-01», — и прочие суффиксы.
По новым правилам публикации за скачивание файлов прикрепленных к статье ничего не дают, кажется.
Оформив публикацию в таком виде вам не дадут $m за то что она есть
«1S_Архив» это фатально;
за «1S_Шаблоны» при коллективной разработке можно просто огрести;
на скриншоте все и так находится в папке 1C, к чему повсюду 1S_ 1Cv8_, понимаю, что кто как хочет так и фигачит, но с чем можно перепутать?
Мда… а я думал только я этим заморачиваюсь)))
У меня так же идёт разделение по папкам, только названия все по английски: 1CBase, 1CTemplate, 1CBackup.
Названия баз по разному, если предполагается у клиента несколько баз с одной конфигурацией, то одно, если одна конфигурация то другое. Установочные файлы обновления удаляю сразу, после установки.
(0) Ну у вас и каша в структуре хранения.
Если вы перестраховываетесь и используете английские названия, то имя не должно быть длиннее 8 символов.
Если у вас не архаичные операционные системы, то можно задавать нормальные «осмысленные» имена папкам.
Вот пример организации для разработчика:
Показать
Демонстрационные базы с оригинальными конфигурациями актуальных релизов рекомендую устанавливать всегда.
Ну с папкой шаблоны и так все понятно.
В каком бы режиме ваши клиенты не работали с 1С: Предприятие — архивные копии должны хранится на другом сервере/компьютере.
Дату в именах архивных копий лучше задавать в общепринятом формате ГГГГ.ММ.ДД или ГГ.ММ.ДД, например я использую такой формат:
ГГГГ.ММ.ДД-Организация-Конфигурация
Тема нужная, но статья сырая — надо было получше все продумать.
Например: не заводить в корне диска D: кучу каталогов 1S_… а создать один — 1S и уже все остальное складывать туда, тогда идея легко адаптируется к компьютерам у которых диска D: нет вообще.
Еще один минус в разноязычии названия каталогов — если будете настраивать резервное копирование с помощью bat файлов нужно следить за кодировкой русских букв. Желательно избегать названий в которых кодировка не понятна: 1С -английская и 1C — русская.
(9) h00k, про subst в принципе знаю, но никогда не пользовался — потому рекомендовать не могу.
А в остальном — да, не люблю длинные имена, в них очень легко ошибиться (не везде и не всегда можно выбрать путь кнопочкой).
И вообще чем проще — тем лучше. Хотя «проще» у меня и у рядового юзера часто различаются. Например: самое простое для пользователя — все валить на рабочий стол.
(10) раньше была мега полезная команда, когда всякие банк-клиенты требовали дискеты с ключами.
А сейчас я её использую для создания удобной для меня дисковой структуры без физического разбиения диска.
Например, для создания виртуального диска Д из папки Мои документы пользователя Администратор ключи команды будут выглядеть так:
Дату архива пишут обычно не так «1Cv8_251012_БГУ», а цифры пишут наоборот: сначала год, потом месяц, потом день: 121025
Таким образом сортировка будет правильная и видно хронологию
(12) mr.Kot, «Таким образом сортировка будет правильная и видно хронологию»
Я тоже пользуюсь «наоборот: сначала год, потом месяц, потом день». Но и на это бывает проруха. Если, например, несколько копий в день пришлось делать. Поэтому, на мой взгляд, сортировать по дате создания вполне нормально. Открывать каталог с сортировкой по дате создания. Не панацея, но как вариант.
Вопрос а не проще ли поделить папки
d
1c_bases
7.7
work
ТИС
Бух
arhive
test
8.X
work
УТ
Розница
arhive
test
Я показал не всю структуру просто хотелось выделить деление по версиям 1с и внутри них уже можно делать и архивы и отбработки но вы знаете где вы работаете и любой человек который придет после вас будет знать где что находится
Что-то так и тянет программистов ещё с DOS-времён задействовать латинский алфавит в наименованиях папок.
Windows уже давно позволяет создавать русские имена, но знаки подчёркивания, отсутствие пробелов, латиница — всё ещё в ходу. Есть предложение осваивать русское именование папок/файлов с наиболее логичным их обозначением.
Меня одного напрягла надпись «1С» как «1S» ???
(16) Gadzi, я тоже привык писать «1C».
🙂
М-да, сыровато…
(15) ALev,
Вполне возможна ситуация что ОС упадет и нужные файлы придется копировать с помощью командной строки или загрузившись с дискеты
Я использую всегда только русские имена. Латиницу задействую в основном только для DOS-программ/утилит, и ОС не падает…
(19) загружаться с дискеты? загрузочные флешки уже отменили? 🙂
(11) это создает виртуальный диск, но в случае повреждения файловой системы на С этот Д будет нечитабельным — в отличие от размещения данных на отдельном разделе.
(19) забавно, я уже не помню когда последний раз видел компьютер с дисководом, что уж говорить про сервера.
Если есть CD/DVD привод, то загрузится можно с какого нибудь дистрибутива LiveCD, например CentOS или Ubuntu, кому что нравится.
На моем новом сервере dvd вообще нет, зато есть usb-флэшка на все случаи жизни (инсталятор Windows 2012 R2 + инсталятор CentOS 6.4 + набор для восстановления системы).
(21) Вы внимательно читали сообщения?! Или так, лишь бы написать?
Что делает данная команда я прекрасно знаю.
Я написал простое решение для рабочих станций у которых диска «D:» нет, а установка еще одного физического диска, или логического, по каким либо причинам не возможна.
В случае повреждения файловой системы отдельного диска «D:» он тоже будет не читабельным.
Правда дополнительный диск можно в ReFS отформатировать, эта файловая система надежней чем NTFS, но такая возможность есть только у пользователей новых версий Windows…
(23) «Я написал простое решение для рабочих станций у которых диска «D:» нет, а установка еще одного физического диска, или логического, по каким либо причинам не возможна. »
1) по каким причинам может быть невозможно создание логического диска?
2) вероятность повреждения файловой системы одновременно на двух разделах гораздо ниже, чем на одном (системном). к тому же в таком случае при переустановке ОС данные не теряются.
(24)
1. Запрещено системными политиками например, ну а причин введения подобных запретов может быть сколько угодно много.
2. При переустановке ОС данные в любом случае не теряются, если правильно настроить профили пользователей.
Самое главное с какой точки зрения на этот вопрос смотреть, если с точки зрения пользователя одноранговой сети из двух компьютеров — то да, можно делать что угодно.
А если с точки зрения пользователя корпоративной сети, где все регламентируется доменными политиками, то все уже не так просто.
(21) rus128,
Еще Live CD бывают. Речь была о загрузке MS DOS.
ReFS еще не видел ни у одного клиента.
(26) на моей загрузочной флешке есть несколько образов загрузочных записей, в том числе — ДОС с Нортоном и Викторией. При желании можно даже Линукс на нее положить 🙂
(26)ReFS появилась начиная с Виндовз Сервер 2012.
Большинство предпочитает ставить «проверенные» 2008R2.
И еще пара моментов:
1. Системный раздел не может быть отформатирован в ReFS.
2. Файл подкачки нельзя разместить на разделе отформатированном в ReFS.
Классная такая статья… для совсем уж новичков…