<?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='\
Точно с SQL версиями 8.1 не работает? 😉
В описании было написано только с файловыми версиями. Сам не проверял!
(2) Что означает «было написано» и «Сам не проверял»?
Чья это разработка?
Точно уже не помню. Я же писал: «Скрипт найден в Интернете и доработан для себя.» У меня файловая версия базы 1С. Поэтому «Сам не проверял» для SQL версий.
(4) т.е. ты не разбирался и не понимаешь принципа ее работы … ?
Если бы не понимал принципа работы скрипта, то как бы тогда дорабатывал?
Всего навсего — никогда не работал с SQL, поэтому не знаю ИХ принципа работы… 🙁
у меня выдает сообщение об ошибке
Переменная «DeleteTextFile» не определена
что сделать (с криптами не работал)?
заремил но хочется чтобы работало
Замечательно архивируется! 🙂
Спасибо!
Для migulia отвечаю.
Посмотрел свой скрипт и прошу прощения за неточность. В скрипте в двух позициях «DeleteTextFile» замени на «DeleteFile».
Замечательная штучка
В имя файла дата не пишется?
Однозначно «+». Только дорабатывать, конечно, надо. Например, хотелось бы, чтобы старые базы не удалял все, а оставлял хотя бы одну на каждый месяц.
Жаль, что на этом кривом vbs, а не на человеческом js 🙁
У меня имя файла с датой, все нормально. Поясни какую версию архивируешь? 8 или 7.7
На счет дорабатывать, так ты угадал мой следующий шаг. В ближайшее время этим и займусь 😉
Гм…
А зачем создавать bat файл для запуска vbs?
Все и так прекрасно запускается в планировщике.
Вот здесь есть ссылки на публикации аналогичной направленностиhttp://www.infostart.ru/public/19363/
На счет bat файла согласен.
Мне же он нужен был только для того, чтобы в процессе архивации отображалось окно с предупреждением!
Согласен, аналогичных публикаций много.
Всем спасибо за плюсики!!!
В ближайшее время выложу обновленную версию ! 💡
Давно работаю в этом направлении, сделал подобное на bat теперь вот тоже написал на vb (насчет js — незнаю какие у него реальные преимущества?)
и сразу думаю нужен список баз организовать хранение в ini файле как для нормальной проги
готов подключится к работе для создания нормального многопрофильного скрипта
у меня даже есть реализация на vb механизма выгрузки через конфигуратор для SQL баз где обычное копирование не пройдет
А ВООБЩЕ ХОРОШИЙ ПРИМЕР КОДА И ВОЗМОЖНОСТЕЙ VB
я все это по крупицам собирал и тестировал
Так что вперед автор, делай новые версии, пиши на zerbo-2001@yandex.ru если что то нужно — реализуем вместе, можно потом и документацию небольшую сваять
поправка zerno-2001@yandex.ru
по поводу других разработок: все не смотрел, но написанные на 1С категорически отметаю т.к.
1. нужен универсальное средство не зависящее от ключа или платформы
2. нужно удобство и быстрота разработки и доработки для конкретного случая — а 1С предназначена для экономических задач (открыть Syn в Totale гораздо быстрее со всеми подсветками чем конфигуратор)
3. ну и наконец — нужно иметь больший кругозор, ведь vb позволяет работать без 1С и делать тоже удобные вещи, это большой помошник при автоматизации работы с ПК
посмотрел половину ссылок на аналоги
http://www.infostart.ru/public/63813/
самая крутая на VB пока
рассматриваю только VB (как вариант JS, но на нем не видел) т.к. это позволяет добится тех же возможностей только без интерфейса что и другие разработки
но зато наработки на VB легко используемы в других местах и это открытый код, окрытые исходники, по моему мнению это нужно развивать т.к. закрытые решения в корне неинтересны
Полезная штука!
Отлично архивирует. Как написано. Спасибо! 🙂
Все отлично но вот беда у меня почему то не удаляет старые файлы ?
Какая у тебя версия 7.7 или 8?
Что пишет в логе?
У меня тоже не удаляет старые файлы, как 7.7 и 8.1.
Подготавливаем строку для запуска 1С v 7.7
Строка для запуска 1С получилась следующая:
«C:Program Files1cv77in1cv7.exe» config /d»D:1cbase
koPRBasic» /n»Admin» /p»1″ /@»D:BackUp1C
ko1CBackUp.prm»
Запускаем 1C в пакетном режиме…
Отчёт самой программы 1С о выгрузке базы следующий:
20100625;22:40:02;Admin;C;UpDown;UpDownDnldToFile;1;D:BackUp1C
ko1Cv7 25.06.2010 22.40.00.zip;;
20100625;22:41:12;Admin;C;UpDown;UpDownDnldSuc;1;;;
Удалим файл с отчётом 1С с диска компьютера…
Файл с отчётом 1С успешно удалён!
Удалим файл параметров выгрузки базы 1С с диска компьютера…
Файл параметров выгрузки базы 1С успешно удалён!
Закончили обработку базы № 1
Да про 7.7 уже знаю. 🙁 Исправляю !
Сегодня или завтра выложу обновленную версию. 🙂
🙁 так как же все ж с удалением старых баз решается ❓
Прошу прощения за долгое молчание. Уезжал, совсем не было времени. Вчера наводил последние штрихи.
Вот, выложил ОБНОВЛЕННУЮ версию! 😀
Смотрите, качайте, оценивайте… 😉
Есть ряд изменений и дополнений. Об этом напишу в описании.
Жду отзывов…
🙂 Стесняюсь спросить а обязательно базы разносить в разные каталоги или можно их хранить в одном ❓
Можно в одном, но для меня удобнее если в разных 😉
Чтобы все было в одном, в параметрах каждой базы введи одинаковый параметр: MyBase.BaseBackUpFolderName = «твоя папка»
Спасибо, то что надо! Только перед использованием надо сделать так:
Рад, что понравилось ! 🙂
Отдельное спасибо за указанную ошибочку.
Все исправил!!!
Добавить возможность сохранения в SQL версии 1С 8 и будет отлично. А лучше еще сделать внешнюю обработку, которая автоматически заполнит все данные и создаст этот файл.
С обновления от 14.07.2010 добавил поддержку 8.2 !!! ❗
Дружище! Мегагигантское тебе спасибо!!!! Очень полезный скрипт!!!! И главное работает правильно…
Да.. не за что 😀
Вот бы еще плюсик 😉
Классно, и код открыт, можно под себя переделать, хотя и так прекрасно работает!
СПАСИБО ! 🙂
Добавь поддержку SQL и будет просто супер !!! 😎
Скачал и … неожидал … заработало сразу, правильно и без глюков. 😮
Такое редкость.
Автору однозначно преспект !!! 😀
Плюсануть не жалко 😉
Однако…
Всем нравится, качают, все работает, а … плюсануть забываем!?
Обидно-о-о 🙁
Приветствую.
Базы из 8-ки отлично выгружает! Респект!
А вот с семеркой такая ошибка:
Сценарий …
Строка… (у меня 678) — функция выгрузки баз 1С 77
Символ: 3
Ошибка: Variable undefinite «FullPathBaseBackUpFolder»
Код 800A01F4.
Что я не так заполнил?
Все правильно заполнил…
Прошу прощения, моя ошибка 😮
Уже исправил файл и закачал 😉
Вопрос: а нельзя сделать так, чтобы получать извещение об окончании работы скрипта
А что писать если логин-пароль на базу не установлены?
А то приходится Ок все время жать.
(44) Куда получать извещение об окончании работы скрипта?
На почту?
Автору огромное спасибо, давно искала что-то подобное для небольших баз 😀 !
Все отлично работает, и 8.1, и 7.7!
СПАСИБО!!!
( 46) — у меня база большая — пока скрипт отработает люди успевают состарится 🙂 а постоянно заглядывать в лог завершилось или нет не очень хочется….
(48) Понял, сделаю, чтобы на почтовый адрес отправлялось извещение об окончании работы скрипта.
Как выложу обновление, так напишу. 🙂
(48) Выложил обновление…
Теперь на почтовый адрес отправляется извещение об окончании работы скрипта.
Функцию при желании можно отключить. Выше в описании все сказано об этом. Качай, проверяй. Рад помочь. 😀
(45) Теперь не надо будет жать ОК.
Качай новую версию, установи константу User = False и наслаждайся.
Будут вопросы, пиши… 😉
Доброво времени суток. У меня вот такая проблемка с вашим скриптом. Скрипт работает все нормально (выгрузка данных) но почему-то на проверке свободного места на диске выдает ошибку….
какая ошибка? можете подробнее описать?
Сценарий: E:ToxicArchivator1Cv8_v2.vbs
Строка: 588
Символ: 6
Ошибка: Ну удается найти указанный файл
Код: 80070002
Источник: CDO.Message.1
ВНИМАНИЕ!!! Проверяем наличие свободного места на диске для архивных копий…
Диск E: — / Своббодно: 26 333 Мбайт
Архивация закончена.
Дата: 30.07.2010
Время: 14:05:26
КОНЕЦ
Отправлено предупреждающее сообщение на e-mail.
Дата: 30.07.2010
Время: 14:05:26
КОНЕЦ
А вообще скриптик изумительный!!!
(54) Теперь все становится ясно.
При проверке свободного места на диске ошибок нет
Диск E: — / Своббодно: 26 333 Мбайт
А вот тут: Источник: CDO.Message.1 ??? Думаю проблема с отправкой e-mail.
У Вас локальный SMTP сервер установлен?
Если нет? то надо установить такие значения для констант:
Const EmailEndScript = False
Const Email = False
Если таких констант у Вас нет, то качайте последнюю версию отсюда.
было бы хорошо если бы этот скрипт удаленных пользователей обрубал(
(56) Планировал в новой версии… Думаю скоро … 🙂
Строка 74, Символ:34, Ошибка: Предполагается наличие окончания инструкции, Код: 800А0401
Из-за чего эт может быть? Программа работает с portable-версиями 1С ?)
(58) Какая у тебя версия Windows Script Host (в русской версии он называется, по-моему, Сервер Сценариев) …Набери в командной строке cscript — он выдаст версию …Или доустановить надо …Вообще, под ХР можно загрузить его вот отсюда
http://www.microsoft.com/downloads/details.aspx?Fami…mp;displaylang=ru
Что касается портативных версий, то думаю будет работать, главное чтобы все пути были верные, проверь…
Еще не проверил, с временем косяк, но думаю все в порядке будет, если что проинформирую
Огромное спасибо! + Работает отлично. Пока проверила на 3 базах. Вопрос — можно ли установить определенное время запуска — конец рабочего дня, например. А то мои бух-ши забывают нажимать кнопочки.
(61) Очень просто! Создать в планировщике заданий Windows задачу на запуск скрипта в определенное время или при определенном событии… Если не получится, пишите! 🙂
Отличный скрипт :D,
в коплекте с бесплатным xStarter работает на 5 с плюсом 🙂
немного дописал функцию для прямой отправки мыла через SMTP майла-ру (можно и любого другого)…
Показать
(может пригодится кому)
Спасибо за комментарий!
Данную функцию планирую ввести в следующей версии, вот только не хватет времени реализовать 🙁
Буду изыскивать… 😉
Скачал себе. Будем тестить. 🙂
Интересует, каким образом закрываются локально запущенные экземпляры 1С ?
просто класс
Просто класс!
Показать
А куда это вставлять??? И какие-нибудь измнения еще в скрипте нужно при этом делать?
А то у меня локального smtp нет, а уведомление на почту ой как надо!!!
Ну или как сделать, чтобы после окончания выскакивало popup окошко с информацией либо о успешной выгрузке либо об провале???
(69) Завтра выложу обновление в котором данная функция реализована, т.е. отправки e-mail с компьютера, на котором не установлен локальный SMTP-сервис/сервер. 😉
СПАСИБО! РАБОТАЕТ НОРМАЛЬНО! 😀
Спасибо за обработку! Работает отлично. Немного дописала, чтобы по окончании выдавалось окно сообщения. А то не видно было, когда закончилась архивация.
В целом — все очень понравилось и пригодилось.
Очень понравилась!
Замечательная вещь очень помогла!!!
Установил програму, настроил по варианту №2, когда перегрузил компютер, то появляєтся собщение Windows Script Host:
Сценарий: D:1C_ArhivAutoBackUp (резервная копия).vbe
Строка: 26
Символ: 3
Ошибка: Недопустимый вызов или аргумент процедуры: ‘Chr’
Код: 800А0005
Источник: Ошибка выполнения Microsoft VBScript
Может кто-то подскажет в чем может быть проблема, архивирование по розписанию вариантом №1 тоже не работает.
Спасибо, очень полезная программка
халь что почту так и не осылает пока еще не обновили
Для выгрузки надо создать нового пользователя? Какие права у пользователя должны быть?
А как же пароль? Он хранится получается в открытом виде.
Интересует, каким образом закрываются локально запущенные экземпляры 1С ?
ага. меня вот тоже смущают строки типа
😮
так делать нельзя;
автор по-видимому еще не сталкивался с проблемой разрушения баз при таких кренделях.. ❓
Имею 2 базы 7.7 SQL и dbf, в списке друг за дружкой аналогично. SQL бакапится нормально, а вот следом dbf бакапиться никак не желает. Меняю очередность — курят обе. Оставляю одну dbf — бакапятся нормально. Что такое может быть??
Отличный скрипт ,
в коплекте с бесплатным xStarter работает на 5 с плюсом
немного дописал функцию для прямой отправки мыла через SMTP майла-ру (можно и любого другого)…
А куда это вставлять а то локального SMTP нет….
Предложение доработки для файлового варианта базы:
Вначале скопировать базу во временный каталог (причем лучше вначале копировать самые свежие файлы для 7.7) а потом уже выгружать — так не надо выгонять пользователей, но портит достоверность архива
Очень не хватает SQL
здесь реализовано
Если поможет посмотри
люди подскажите что делаю нет так (или как надо делать)
ситуация следующая
1с server + PosGreSQL живут на Ubuntu
клиент 1с живет на Windows
хочу пользовать скрипт
правлю скрипт под себя
0_17_6″
——
Set MyBase = New Base1C
ReDim Preserve BasesList(UBound(BasesList)+1)
MyBase.Type1C = «82»
MyBase.Program1CName = «C:Program Files1cv828.2.12.80in1cv8.exe»
MyBase.BaseLocationPath = «C:UsersWolfAppDataRoaming1C1Cv82 mplts1cAccounting2_
MyBase.BaseBackUpFolderName = «Бухгалтерия»
MyBase.BaseBackUpFileName = «1Cv8»
MyBase.UserName = «Администратор»
MyBase.UserPassword = «»
Set BasesList(UBound(BasesList)) = MyBase
Set MyBase = Nothing
——
как я понял надо обращяться именно по таким путям
но лог пишет что
«Запускаем 1C в пакетном режиме…
Отчёт самой программы 1С о выгрузке базы следующий:
Информационная база не обнаружена!»
что делать ❓
люди очень горит подскажите что делаю не так =(
————-
ругается на то что база не найдена
но я не знаю где она еще можеть лежать ? ссылаюсь на вполне существующий файл (размером в 80 мб и форматом *.dt)
————-
или изза того что у меня все через PostGreSql я не смогу указать скрипту на Информационную Базу ?
а как настроить чтобы она автоматически также делала реиндексацию базы 8.1
Отчёт самой программы 1С о выгрузке базы следующий:
Каталог не обнаружен ‘E:BackUp1CБухгалтерия1Cv8Acc 7 812011 10.31.14 AM.dt’ Вот Это я не совсем понял….. а именно 81 — это как прописать и где
Проблема решена ! Спасибо за Скрипт!
Попробовала на 1С 7.7 несколько баз. Все работает.
Спасибо! Все работает отлично!
Отличная вещь. Спасибо!
Полезная и нужная штука. Спасибо
Выдает какую-то ошибку, но работае спасибчки огромнейшее!!!!!!!!!!!!
попробую на работе поставить, она может работать, когда пользователи а 1с сидят ?
привет
совет бекапиться раром 1сд файл и все сохраниться, а вот обработка это отличная лучше я не нашел, но вот отсылку на емейл пришлось отключить, единственная обработка к которой у меня нет претензий:)
(95) burnoutparad, на работе ставь любой стандартный бекап в режиме реального времени, без отключения пользователей! этого хватит, сам Нуралиев заверяет:)
А на 8.2 нормально работает? Кто уже пользовался?
(70) Спасибо за скрипт — все работает, кроме отправки на почту без локального smtp клиента.. пробовал вставить скрипт из 69 поста — ругается.