<?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='\
+1 Хорошее выступление и хорошее статья
на сайтеhttp://www.oscript.io/ выводится:
Unable to find a matching application for request:
Host http://www.oscript.io
Port 80
Request Path /Home
Physical Path /var/www/oscript.io/Home
Инфостарт эффект?
Спасибо за отличную статью.
Коллеги, поделитесь опытом, как отлаживать скрипты? Какие инструменты доступны?
Ещё вопрос. Разработка в среде VSC возможна?
(3) infosoft-v, отлаживать принтами, скажите спасибо, что не алертами.
(5) pumbaE, Спасибо
А существует ли аналог процедуры Состояние() для индикации долговыполняющихся процессов?
(2) infosoft-v,
Скачать OneScript загружает.
(4) infosoft-v, да.
github .
Подробнее на
(7) yurii_host, Можно реализовать используя GUI библиотеку. синтаксис практически идентичен 1С:https://github.com/ret-Phoenix/oscript-simple-gui
Спасибо! Интересно и познавательно
(10) ret-Phoenix, спасибо
Круто что даже формы есть (правда пока обычные)) )
(12) yurii_host, а какие хочется?
для решения текущих задач этого хватает, даже больше чем нужно.
С ростом количества и сложности кода на любом языке будет расти и потребность в отладчике. У всех распространенных скриптовых языков есть отладка. Так что по-прежнему очень ждем ее.
Также была бы полезна и подсказка после точки. Какие здесь перспективы?
Мы помним свой вопрос (14)
В разделе «На каком языке удобнее всего писать скрипты автоматизации?» еще можно упомянуть AutoIt. Вторая колонка как у PowerShell ))
(0)
Я бы сюда ссылку на вашу же статью подставил
(0)
я понимаю, что это по мотивам 2015-го года, но как бы это…https://github.com/EvilBeaver/OneScript
иhttps://github.com/oscript-library
(14) tormozit, если помнишь, на хабре я писал про проблему роста. Я бы с удовольствием занялся отладчиком, но куча более актуальных дел (поддержка библиотеки скриптов, багфиксы, работа, личная жизнь) не дают задаче вспыть на поверхность.
(2) infosoft-v, адрес без WWW
(18) baton_pk, да, это чистый транскрипт выступления 2015 года, сделанный командой Инфостарта. Помимо того, что ты сказал, еще и Notepad++ стал неактуален, с выходом Visual Studio Code.
Поправлю.
(1) artbear, спасибо!
(14) tormozit, А что ты про подсказку после точки спрашивал? Есть же она.
(23) Это в каком редакторе?
(24) tormozit, я имел в виду VSC, она не такая умная, какую ты хочешь, но ее хватает за глаза
Доброго времени суток.
Вот решил попробовать Gitsync, но опыта нет. Может ткнете носом почему может выдавать ошибку как на скрине.
Все скриптовые языки рано или поздно упираются в отсутствие форм.
А затем в отсутствие БД в которой можно хранить настройки/результаты.
Но если в упомянутых выше и упомянутом всуе AutoIt, который я например считаю самым быстрым стартом в автоматизацию рутинных операций, их изначально не было, то в 1С изначально все это есть.
И упрощение — это на любителя.
ИМХО при всех упомянутых выше операциях было бы неплохо хранить результаты их выполнения.
В чем выигрыш по сравнению с БД 1С в которой живут те же скрипты, кроме свободной лицензии?
Хотя задания по администрированию обычно запускаются при отключенных пользователях и проблемы с этим не должно быть.
(27) capitan,
https://github.com/ret-Phoenix/oscript-simple-gui) и работа с БД (https://github.com/ret-Phoenix/oscript-sql) . При этом поддерживаются СУБД: MS SQL Server, PostgreSQL, MySQL, Sqlite. Операции DDL + DML
для OneScript есть и формы (ссылка ранее приводилась
Создание бекапов — самое простое применение. сейчас на язые OneScript написано много чего, стоит глянуть библиотеку скриптов.
Задумываюсь о полноценной работе с git, но c v8unpack не хватило времени разобраться, а без нее git не очень для меня полезен. В основном работаю не с самой конфигурацией, а с внешними обработками и алгоритмами в Инструментах разработчика, то есть все хранится вне базы, с промежуточными версиями в каталоге разработки. Можно ли с помощью 1Script связать каталог с git, чтобы в версиях хранился именно код внешних обработок? Если кто делал, подскажите, где почитать об этом? Пока попробую с 1Script поразбираться.
(29) necropunk, смотри наhttps://github.com/pumbaEO/precommit1c
(31) capitan, Аналог БСП? Что за бред?
БСП — каркас для конфигураций.
На OneScript у многих из нас сделано
— бекапирование
— проверка обновлений
— чистка кеша
— управление списком баз
— синхронизация с git (как вместе с хранилищем так и без, например для внешних отчетов)
— различные схемы разворота рабочего места как пользователя так и разработчика
и много прочего. Тот же парсинг текста, приведение его в порядок. расширения конфигуратора как снегопатовские, так и мои.
По-моему этой публикацией ты лишил денег с десяток консалтинговых компаний :)))
Ещё бы подсветку синтаксиса 1С при codereview кто-нибудь доделал либо в gitlab либо в Atlassian
(31) capitan, сайт работает, падений не залогировано. Что именно не работает? Он не открывается по префиксу www, но это так и задумано.
(34) comol, насколько я знаю, в гитлабе уже сделали подсветку
(36) На GitLab есть, но какая-то плохенькая, до того, что сделали на GitHub далеко.
(27) capitan, у меня вот уже более 1.5 года живёт «карманная» база 1С для административных работ: обмены, обновления и т.д..
Плюсы: быстрый старт, всё в одном месте (без внешних программ и текстовых файликов) в одной базе, можно код версионировать стандартным хранилищем и настройки забивать в справочники и логи хранить в журнале регистрации.
Минусы: так и не смог настроить, чтобы из регламентного задания 1С запускался exe конфигуратора, что-то с правами, поэтому из планировщика винды запускаю толстый клиент базы с параметрами запуска, а он уже парсит параметры и выполняет обработки.
(26) LeXXuS_ju, У Вас не установлен Git
(38) zqzq, аналогично, шеф.
Я думаю, у каждого, у кого за плечами около полсотни баз имеет такую базу.
Спасибо! За огромный труд в облегчении рутинной работы. Спасибо! Жду дальнейших новинок!
(39) vasiliy_b, да так и было))
Теперь выдает ошибку 128.
У меня возник вопрос как скрипт получает доступ к гитхабу, если мы нигде пароль не указываем?
Я пробовал генерировать ключ SSH и он даже мне отозвался через Git Bash, но после вызова
gitsync init <каталог или файл хранилища> <локальный каталог git> [-email домен почты пользователей]
пишет: Не удалось получить изменения с удаленного узла (код : 128).
Прописал еще это:
git config —global user.email «you@example.com»
git config —global user.name «Your Name»
P.S. [-email домен почты пользователей] — это просто email,под которым зарегистрирован на Гитхабе?
(42) LeXXuS_ju, пароль будет спрашиваться тогда когда вы будете выполнять обмен с сервером например после команды «git push -u origin master»
Крутая вещь!
Есть маленький недочет (я так думаю).
Что бы передать переменную с текстом (например) а = «1C:Enterprise 8.3 Server Agent»;
Приходится писать примерно так:
Иначе на выходе имеем 1C:Enterprise 8.3 Server Agent (то есть уже без кавычек).
Может не совсем ясно описал, попробую привести пример:
Так команда не выполнится, так как есть пробелы между слов:
Сейчас выполнится, так как передастся именно с кавычками:
(44) tehas, я тоже пока изучаю возможности, поэтому задам наводящий вопрос, а так писать пробовали:
?
т.е как в 1с поставить 3 кавычки в начале и 3 в конце
(46) tehas, Все правильно, там как раз используется принцип двойных кавычек. Так что все отрабатывается как в 1с
(48) raevsky@e1.ru, ну я не знаю….
Вот сайт на текущий момент. Позавчера действительно был остановлен на несколько часов, но это только и всего.
(44) (46) tehas, экранирование кавычек работает точно так же, как в 1С. Дублированием символа кавычки.
Непонятно, почему у вас возникла необходимость использовать Символ( 34 ).
(49) было-было. не ругайте человека. не был вчера сайт доступен.
(51) baton_pk, не ругаю ) Кстати, если нужно просто скачать дистрибутив, то на гитхабе есть раздел releases, куда также выкладываются файлы программы.
Оч познавательная статья, спасибо. Инструмент обновляем
Не зря 1С навела паники по поводу вирусов)))
Скоро их реально станет больше и их налобают даже на 1Script )))
(54) Brawler, ну да. Чтобы заразить машину нужно поставить движок, скачать вредный файл, запустить его с полными правами… А так, конечно, язык виноват, что на нем вирусы пишут, да )
Пытаюсь осваивать потихоньку, но есть проблемы.
Поставил Notepad++, подсветку, поставил плагин NppExec, по F6 прописал oscript «$(FULL_CURRENT_PATH)» но у меня при запуске любого файла, даже просто с кодом Сообщить(«!»); выдается ошибка:
oscript «C:Work est.os»
CreateProcess() failed with error code 2:
Не удается найти указанный файл.
Не подскажете в чем может быть дело? И подсказок через точку нет, можно их как-то включить?
(56) necropunk, Хм, я запускал из тоталкоммандера, по F4, а надо запускать от администратора. Не особо удобно, но ладно, будем дальше попробовать.
Пытаюсь начать пользоваться gitsync….
Получаю следующую ошибку:
Показать
Обратил внимание, что
Показать
Пытаюсь без «-» выполнить:
(58) serg_infostart, для gitsync и других полезных пакетов есть отдельный канал обсуждения —https://gitter.im/EvilBeaver/oscript-library .
Там будет быстрее и продуктивнее.
Подскажи, что можно придумать для эмуляции нажатия кнопок экранных форм, например, по координатам. Может есть что-то уже готовое в 1Script? Может есть готовый подход, попроще?
(60) su_mai, есть AutoIt и Sikuli. Последнее активно используется в vanessa-behavior, примеры можно посмотреть там же.
Спасибо. Отличная статья. Надо обязательно посмотреть, более подробно, что он из себя представляет.
(27)
— есть версия платформы для обучения, она бесплатна.
PowerShell доступен для Linux, исправьте.
Интересная разработка.
А кто использует в реальных проектах и для каких целей ?
Насколько стабильно работает ?
(65) О, добро пожаловать! Использует в реальных проектах уже более сотни компаний (это минимум), включая крупный энтерпрайз. Работает стабильно, быстро и вообще, вещь хорошая.
Посмотрите на библиотеку наработокhttps://github.com/oscript-library там же и цели применения, в-общем.
В-основном, это автоматизация самих 1С-ников: обновление баз, развертывание на рабочий контур, тестирование, и вообще, это язык общего назначения. Есть, например, даже простенькие игры. Например, вот «Змейка»:http://www.oscript.io/downloads/examples/snake.os
Проекту 5 лет почти. Основное ядро движка не менялось уже около двух лет по причине стабильности и надежности. В готовящейся к выходу версии появился отладчик и в ядро пришлось внести изменения, но они тоже достаточно стабильны, все тесты и боевые приложения на доработанном ядре работают без нареканий.
Что касается библиотек окружения, то тут примерно, как у 1С. Все отлично работает, но иногда не работает, зато быстро исправляется. Ну а чей код всегда стабилен? Дайте-ка я брошу в него камень 🙂
О, отладчик будет наконец то. К НГ ждать?
(67) В соседней статье по 1скрипт я сегодня написал — отладчик уже есть в ночной сборке 18 релиза
(67) Уже сейчас можно смотреть:http://oscript.io/downloads/night-build/oscript-debug-0.1.0.vsix
Устанавливаешь свежий ночник и вот этот плагин к vsc
Расписано на 10 листов, много возни, а реальной автоматизации нет. Только время потерял.
(70) Мне даже подробности стали интересны. Что означает «реальной автоматизации нет?» Есть только нереальная?
Знаете, если вы за 5 лет существования проекта только лишь сейчас услышали про 1Script, в то время, когда пол-отрасли пользуется вовсю и активно участвует в развитии инструмента, а потом говорите «возня есть, автоматизации нет», то… ну расскажите, что-ли подробнее, что вы имели в виду?
(71)Все что под заголовком «Что можно автоматизировать?» не впечатлило.
(72) это (что вас не впечатлило) больше говорит о вашем профессионализме, чем о качестве 1script.
(73) коллеги, переставайте вести пустой треп, у человека явно просто никаких потребностей в данном продукте нет, и это ни коем образом не говорит, о профессионализме, а всего лишь об отсутствии потребности/задач решаемых при помощи него
у нас кстати пока именно в 1Script тоже потребности нет ибо что уже нужно было, уже запилено на AutoIt
(72) Ну ок, не впечатлило. Бывает 🙂
(73) IT — директор, знания по вершкам )
обрабатывая скрипт:
// Получаем COMConnector
Коннектор = Новый COMОбъект(«v» + ПараметрыЗапуска.ВерсияПлатформы + «.COMConnector»);
получаю ошибку:
ПолучитьСписокСеансов: {Модуль C:Program Files (x86)OneScriptlibTRun1CsrcClassesТЗапуск1С.os / Ошибка в строке: 531 / Внешнее исключение (System.Runtime.InteropServices.COMException): Не удалось получить фабрику класса COM для компонента с CLSID {181E893D-73A4-4722-B61D-D604B3D67D47} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).}
при этом коннектор V83Com.Connector определен в реестре.
При запуске обработки в 1С предприятии кусок кода
отрабатывает без проблем.
Вопрос: Как побороть ошибку ?
Скорее всего у вас стоит 64битная платформа 1с. И советую отказаться от COM в пользу RAS
Для OneScript есть библиотека для создания gui. Да, простите, ещё одна. Ну не мог остановиться. Кому интересно приходите наhttps://onescriptgui.teriy.com/
Только что закончил. Скриптим на русском, создаём формы на русском. Справка подробная, все свойства и методы с примерами.
Используется библиотека KiXforms.NET v3.2.16.0 написанная Shawn Tassie.