Как решать повседневные задачи с помощью OneScript




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

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

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

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

99 Comments

  1. m-aziat

    Действительно классно получается. +

    Reply
  2. OrsoBear

    Отличная идея!

    Часто приходится пользоваться скриптами.

    Хорошо, что админ толковый попался, за меня эту функцию выполняет.

    В данном случае могу делать все сам, и уровень сложности зависит только от меня.

    Это радует.

    Спасибо!

    Reply
  3. ekaruk

    Отличная статья.

    Недавно как раз наткнулась в Инфостартовских видео на OneScript.

    Как раз присматриваюсь.

    Именно такой статьи и не хватало.

    Есть ли какая-то возможность отладки скрипта?

    Reply
  4. WhiteOwl

    Занятная разработка))

    Reply
  5. Evil Beaver

    (3) ekaruk, мы пишем скрипты через тестирование и необходимость в отладке, как правило отпадает. Если что — выводим диагностические сообщения. За 4 месяца активного использования желания отладить пошагово ни разу не возникло.

    Пошаговой отладки нет и вначале казалось, что она нужна. Сейчас такой уверенности нет. Диагностические сообщения и короткие тесты снимают необходимость колупать скрипт пошагово.

    Reply
  6. yku

    Это шикарно!

    Reply
  7. Bronislav

    Отличная штука, пользуюсь.

    Reply
  8. vandalsvq

    Классная работа. Молодцы. И большое спасибо что статью сделали — это большой шаг для продвижения. На конференции не все было понятно, не все воспринималось так же легко. В статье же все доходчиво и просто.

    И на самом деле удобный и нужный инструмент. Только главное на хабре не рассказывать, что 1С-ники настолько ленивые что ничего кроме 1С знать не хотят )))))))

    Reply
  9. tormozit

    Кроме отладки еще и подсказка через точку отсутствует как я понимаю? =)

    Reply
  10. Evil Beaver

    (9) tormozit, присутствует. Вся подсказка реализуется средствами Notepad++. Она работает не так, как 1С-овская (и, наверное, не так, как твоя), но мне она кажется очень удобной ибо подсказывает вообще все, в том числе слова внутри строковых констант и через точку.

    Reply
  11. JohnyDeath

    Отлично!

    А почему людям не дал ссылочку на жизненно важные скрипты-примеры https://github.com/xDrivenDevelopment/AutoAdmin1C/tree/develop/Scripts ? 😉

    Reply
  12. lustin

    (9) идет работы по прикручиванию с Sublime, но идет тяжело

    Reply
  13. lustin

    (11) потому-что они не красиво пока выглядят. это же develop ветка. И зависят от TeamCity.

    Reply
  14. lustin

    (3) ekaruk, цитата 3-ех месячной давности


    Учитывая возникшие вопросы, хотелось бы поднять вопрос необходимости отладки самих скриптов

    Причем давайте договоримся, что возможность «реализации отладки» существует. Гипотетическая.

    То есть задача «Отладка скриптов 1Script» в первом приближении вырождается в несколько задач (причем эпичных):

    * запуск интерпретатора в отладочном режиме (с debug портами)

    * включение поддержки отладки в свою собственную IDE или в стороннюю (например Atom.io или Sumlime)

    Пока в ближайшем будущем создание такого отладчика скорее НЕ нужно.

    (5) ты решил что отладка все нужна ?

    Reply
  15. Evil Beaver

    (14) lustin, мне казалось, что я ответил как раз противоположное. Возможно плохо сформулировал? Мы обсудили (ты привел цитату из обсуждения) и пришли к выводу, что отладка не нужна.

    Reply
  16. Pr-Mex

    (15) пишу скрипты на OneScript постоянно.

    Справляюсь без отладки.

    Имхо, это не главное.

    Главное — что новый язык для скриптов изучать не надо.

    Reply
  17. Asmody

    А Выполнить() реализована?

    Я к тому, что repl бы не помешал.

    Reply
  18. Evil Beaver

    (17) Asmody, в вики перечислены отличия от 1С:

    Отличия от стандартного языка 1С:

    Не реализованы следующие строковые функции:

    • СтрЧислоСтрок;
    • СтрПолучитьСтроку;
    • СтрЧислоВхождений (уже реализована в dev-версии 1.0.9);
    • ТРег
    • Не реализовано динамическое выполнение кода функциями Вычислить и Выполнить
    • Не реализованы функции ДобавитьОбработчик, УдалитьОбработчик для обработки событий COM-объектов.
    • Не поддерживается оператор Перейти (Goto) и метки

    Некоторые отличия в будущем могут быть реализованы.

    Мы не гонимся за абсолютной совместимостью, реализуем только наиболее полезные и востребованные вещи. «Выполнить» и «Вычислить» делать планируем, но это пока не жизненно необходимо и приоритет задачи снижен.

    Reply
  19. JohnyDeath

    (13) выглядят они очень даже неплохо, тем более решают насущные проблемы простого одинэсника. От тимсити там не сильно много. А вот как старт для новичков, которым нужна выгонялка пользователей, этот небольшой наборчик очень даже пригодится.

    Reply
  20. pumbaE

    Для 8.3 есть управление сервером на основании RAC и RAS утилит. Можно по cron вешать проверку на наличие блокировки фоновых заданий.

    Reply
  21. Asmody

    (18) я же не столько про Выполнить(), сколько про repl. Если писать repl onescript на самом onescript (что кармически расово верно), то нужна Выполнить().

    Reply
  22. Evil Beaver

    (21) Asmody, я понял. repl в чистом виде нет. Зато в комплекте есть тестовая утилита TestApp.exe. Там можно экспериментировать с кодом.

    Reply
  23. cool.vlad4

    плюсую хоть и не буду пользоваться))) и добавлю — видел подобное на ис сначала у Душелова (умный был мужик) и думал нафига оно, а оказалось если развить идею, то кому-то очень даже нужная вешь . от себя добавлю , что пользуюсь моим любимым python, на который вообще чего только нет и сейчас пытаюсь как-то использовать f# (а там есть скрипты!!!) , уж больно мне функциональщина и type provider (это вообще бомба) милы. например скачал здесь скрипт , перезапускает процессы и другие штуки делает на js

    for (var enumItems = new Enumerator(objWMIService.ExecQuery (query_processes));!enumItems.atEnd(); enumItems.moveNext()) {

    pcss_terminated = false;

    var objProc = enumItems.item();

    и понял , что js мне не люб.

    вот так куда круче

    let GetServiceByName(name : string) =

    data.Win32_Service

    |> Seq.find (fun proc -> proc.Name.Contains(name))

    а потом можно передать список сервисов через пайп и делать что нужно

    Reply
  24. lustin

    (23) cool.vlad4, понимаешь в чём штука — когда пишешь для себя, и сам изучаешь скриптинг — то да, такой способ работает на ура и мы его уже прошли. Кто-то на python, bash|zsh, Powershell. F# и Go — это тоже интересно, но только тебе и мне и еще 10-15 людям.

    В свое время был такой сайт script-coding.info где gray-cardinal и остальные создавали скрипты для повторного использования.

    Так вот проблема именно в повторном использовании — пример с Go, я не могу передать команде все мои наработки по Go, так как она не знает языка. Вариантов 2 — любо все изучают скрипты на go, либо я всё пилю в одиночку. И это проблема.

    Применительно к твоему примеру — что еще хуже, такой скриптинг завязан только на Windows. То есть если у соседней команды linux — ты таким скриптингом уже не поделишься.

    То есть 1Script предназначен для коллективной автоматизации 1С-специалистов и для повторного использования уже имеющихся наработок.

    P.S. Как ты понял — я помимо ruby и python, последней время подсел на Go и экспериментирую с ним. Но только для личных целей.

    Reply
  25. minimajack

    (24) lustin, проблема в том, что:

    -скрипты пишутся под необходимое действие — один раз правильно написаный скрипт не требует изменений

    -зависимости от дотнет, моно

    в свое время писал скрипты(в основном php), с обязательным условием — наличие рядом интерпретатора и всех необходимых библиотек…

    то есть структура была приблизительно такая:

    скрипт1.bat
    скрипт1.sh
    /scripts/
    /scripts/script1.php
    /sctipts/data/ <- интерпретаторы, библиотеки
    /sctipts/libs/ <- дополнительные библиотеки( на пхп)

    фактически папка кидалась куда угодно и запускался любой скрипт в независимости от того, есть что либо установленное или нет. Размер 8-9 Мб + необходимые динамические библиотеки

    Плюсы других скриптов в том — что на них уже понаписано много всего…вам недогнать без вливания гор денег и времени.

    Reply
  26. Litvin2015

    Хорошая статья

    Reply
  27. Litvin2015

    Я бы даже сказал, что упрощает жизнь))

    Reply
  28. Evil Beaver

    (25) minimajack, от интерпретаторов никуда не уйти. На чем скрипт ни пиши, а интерпретатор поставить придется (разумеется, shell-язык не считаем). Если инфраструктура скриптинга удобна, то интерпретатор и незаметен вовсе. На линукс с этим проще, пишете в начале скрипта #!/usr/bin/oscript и вперед.

    Reply
  29. Yashazz

    Насколько это легально, как вяжется со всякими цопирайтами 1С и вообще каково мнение 1С об этом всём? Как сертифицируется, локально, в сети, в терминале итд?

    Reply
  30. cool.vlad4

    (24) lustin, с этой точки зрения да, onescript выгоден. но минус у него — довольно маленькое комьюнити. даже у f# поболее) про python вообще молчу. как следствие гораздо меньше всяких возможностей. вот интересно interop у него есть какой-нибудь?

    (f# кстати на linux-е вполне себе работает. проверено на opensuse, проверено на HackerRank, куда его недавно добавили, насчет wmi вот тут не уверен, что он там будет работать))) надо будет попробовать . но вроде и onescript на шарпе написан. так что паритет) смотрел немножко go, немного не понял нафига они сделали такую извращенную работу с исключениями а-ля C . на дворе 2015 год как никак.

    Reply
  31. cool.vlad4

    не в любом случае нужная вещь. это я понимаю. для тех кто вообще не пишет ни на каком скриптовом языке, это ж круто, — взял, сел и написал что нужно. без 1С. теперь может парсеры будут на onescript писать))) не серьезно, стоит подумать об всяких interop. не знаю. какой конкретно . но раз это на шарпе написано, то возможность подключения сборок.

    Reply
  32. jdo

    В связи с тряской мелкософтом перхотью с своих тухлых яиц и угрозой сцанкций, где можно скачать пакет под Linux? Не очень хочется, чтобы в час Х у меня всё перестало работать. Хотя кто его знает, может там уже заложено и ждёт своего часа, что-то типа format c:. 🙂 Windows это же проприетарная, то есть частная закрытая корпоративная система. Там по коду не полазишь, а укого есть такая возможность, то они не поделятся и не помогут.

    Reply
  33. pumbaE

    (32) jdo, какой-то сумбур.

    apt-get install mono-core

    mono oscript.exe —version
    Reply
  34. su_mai

    «Скрипты – наше все!»

    «ИТС — наше все!»

    Где то я это уже слышал 🙂 Улыбнуло!

    Reply
  35. Evil Beaver

    (29) Yashazz, полностью легально. Синтаксисы языков программирования не облагаются копирайтами.

    Reply
  36. Evil Beaver

    (34) su_mai, привет, Андрей. Не уловил шутку про скрипты и ИТС, пояснишь?

    Reply
  37. su_mai

    (36) КВ так обычно говорила на семинарах. Извини если обидел.

    Reply
  38. jdo

    (33) pumbaE, нормальный «сумбур»-каламбур, то есть под nix-ы нет, на nix-ах только в эмуляторе. Одним словом он не кроссплатформенный. Жаль. 🙁

    Reply
  39. Evil Beaver

    (38) jdo, Что-что простите? Какой эмулятор? Моно? Вы по-моему, не в теме, уважаемый. Моно — это не эмулятор. Вы еще JAVA эмулятором назовите. 1Script кросс-платформенный в полной мере (насколько позволяет Runtime, а он позволяет практически все, что вам может понадобиться).

    Reply
  40. pumbaE

    (39) java — это кофе.

    Reply
  41. Evil Beaver

    (40) pumbaE, Женя, а ты тот еще трололо 🙂

    Reply
  42. jdo

    (39) не тогда при чем здесь oscrip.EXE? В nix-ах вообще нет такого понятия как EXE, COM, BAT, CMD. Насколько я помню там есть только исполнимые файлы (+x). Также можно запустить и wine excel.exe.

    Reply
  43. pumbaE

    (42) jdo, ну расширение EXE ведь это условность, можно прописывать в скирптах

    #!/usr/local/bin/oscript.exe

    установить +x и скрипт будет выполняться с помощью oscript , а то что там расшрирение exe-это не важно.

    Reply
  44. Evil Beaver

    (43) pumbaE, не совсем так, но смысл правильный.

    (42) jdo, wine это тоже не эмулятор (это отражено в названии), хотя я с ними и не совсем согласен. А вот Mono — это полноценный runtime для Common Language Infrastructure. А то, что там файл с расширением .exe — так это просто название, ничего более. Внутри это не windows executable и не linux elf. Там внутри байткод для виртуальной машины. В Винде такой машиной является .NET, в Linux — Mono. Для работы 1Script в линукс не нужен wine.

    Reply
  45. jdo

    (44) спасибо большое :-). Давно уже не работал с Linux-ом после сборки медиацентра на базе RedHat 5.4 руки не доходят (видите какой я древний, помню ещё Red Hat 6.1 — Black Cat). Да, согласен — WINE («Wine Is Not an Emulator»), по моему уразумению — это совокупность «бридж»-библиотек для среды Linux (Wine — это альтернативная реализация Windows API). Можно ли это назвать «RunTime для Windows приложений» или нет не могу сказать. О mono слышу впервые. Wiki: «Mono — проект по созданию полноценного воплощения системы .NET Framework на базе свободного программного обеспечения. …платформа Mono была официально признана реализацией .NET на Unix-подобных операционных системах (Linux, Mac OS X и других). Mono предоставляет реализацию ASP.NET, ADO.NET и Windows.Forms, но в то же время рекомендует не использовать эти API.[6].»

    Из всего вышенарытого делаю осторожный вывод, что mono — это частично реализованная WINE, поскольку Windows API включает в себя ADO.NET, ASP.NET & Windows Forms) или я снова ошибаюсь? (Опять я «за старое» :-))

    Reply
  46. Evil Beaver

    (45) jdo, Mono и Wine два разных проекта. Насколько мне известно, между собой не связанных. .NET сам по себе кросс-платформенная среда (как и Java, с которой он был слизан). В .net нет в явном виде завязок на какую-то конкретную операционную систему, все как-бы абстрагировано от ОС. Опять же, см. JAVA. Другое дело, что если вы собираетесь явно привязать свой софт к Windows, то можете использовать системные вызовы, ориентированные именно на конкретную ОС. Но архитектурно .NET кросс-платформенная среда, выполняемая в виртуальной машине. Mono — это реализация такой машины для nix. Там нет оберток для функций windows.

    Что касается ASP.NET, то он написан уже на управляемом коде, соответственно, отвязан от ОС и может быть выполнен в Mono. Про Windows Forms не знаю, как они это делали. Вообще оригинальный WinForms был жестко завязан на GDI. Как они вышли из ситуации не знаю. Вполне возможно, опять же, что рисуют окошки сами, изображая снаружи API Windows Forms.

    Reply
  47. jdo

    (46) огромное спасибо. В связи с физиологическим несварением корпорации Мелкософт и их форточек, не воспринимаю их продукты уже физическом уровне (скорее бы уж они ввели свои сцанкции против нас, о как достали). Поэтому не интересуюсь их «творчеством», просто пользую в работе. Отлик был для меня очень полезен. Ещё раз большое спасибо.

    Reply
  48. Артано

    Давно слежу за развитием проекта. Очень хорошо, что удалось его довести до известности. По поводу необходимости знания «настоящих языков» могу сказать следующее:

    В любой задаче на разработку есть два ключевых параметра: время на разработку и эффективность конечного софта.

    Разумеется, если разработчик 95% времени пишет на языке 1С, то рабочий скрипт на этом же языке напишет быстро даже в обычном блокноте без плюсов.

    Reply
  49. Evil Beaver

    (47) jdo, Да не за что. Это вам спасибо.

    P.S. Ненависть к Microsoft является болезнью. Линус Торвальдс. 🙂

    Reply
  50. Evil Beaver

    (48) Артано, Спасибо за отзыв. Вопрос из любопытства: а самим 1Script пользуетесь? Или просто за проектом следите?

    Reply
  51. Артано

    (50) Пока только слежу, очень понравилась идея изначально. Вчера всерьёз обсуждали вопрос об использовании 1Script в повседневной работе. Скорость и качество написания скриптов админами известна, скорость и качества кода разработчиков тоже. Вопрос времени.

    Reply
  52. Evil Beaver

    (30) cool.vlad4,

    вот интересно interop у него есть какой-нибудь

    Есть COMОбъекты, их в какой-то мере можно считать за Interop. В родном 1С примерно то же самое.

    Reply
  53. DexterMorgan777

    Спасибо за подробное описание. Буду пробовать написать скрипт для автоматического обновления иб из cfu файла. Пока не нашел таких примеров (мало искал). Может кто-нибудь посоветует или поделиться примером?

    Reply
  54. Evil Beaver

    (53) DexterMorgan777, пример очень простой:

    ЗапуститьПриложение(ПутьК1Cv8.exe DESIGNER /F»путь к каталогу ИБ» /N»Администратор» /UpdateCfg»ПутьКФайлуCFU»)

    Т.е. вам нужно только запустить конфигуратор с нужными ключами и собственно на этом все. А инфраструктурную обвязку напишите, уже какую вам надо.

    Удобно будет воспользоваться библиотечным скриптом v8runner.os (https://github.com/EvilBeaver/oscript-library/blob/master/src/v8runner/v8runner.os)

    Reply
  55. DexterMorgan777

    (54) спасибо. Я сначала написал просто бат файл, но он не стабильно работал. Пару раз обновление не прошло из-за того что не всех пользователей выгнало, а один раз обновило динамически (в обновлении только код был). Я примерно так и начал писать как вы указали (посмотрел другие ваши темы и поискал примеры). Но пока отложил на следующую неделю или чуть позже, подкинули задач. Как допишу может выложу сюда, может подскажете чего полезного или кому-то полезно окажется.

    Reply
  56. mikhailv

    (52)

    Есть COMОбъекты, их в какой-то мере можно считать за Interop. В родном 1С примерно то же самое.

    А как быть в linux? Например, мы в своё время не смогли подружить сервер 1С на linux и API OpenOffice. Пришлось этот кусок отдать python-у.

    Reply
  57. Evil Beaver

    (56) mikhailv, ну поскольку 1Script — это язык 1С, а в языке 1С нет никакого Interop, кроме COM, то ответ — никак. Вернее, есть вариант написать как-бы «внешнюю компоненту» на C#

    Reply
  58. Чарик

    Классная статья! Иногда нужна «быстрая» отладка для консультаций, без запуска пофигуратора.!

    Reply
  59. Evil Beaver

    (58) Чарик, спасибо за отзыв. Про консультации я вот не понял.. Вы что имели в виду?

    Reply
  60. Чарик

    (59) иногда спрашивают как сделать то, как сделать это, и нужно посмотреть в конфигураторе как отрабатывает код, а тут без запуска конфигуратора — все под рукой)))

    Reply
  61. Evil Beaver

    (60) Чарик, ну здесь поведение берется не из 1С, а реализуется внутри 1Script по аналогии с наблюдаемым поведением платформы. В общем случае, они могут различаться. Если 1Script ведет себя одним образом, то 1С может повести себя по-другому. У них не общая кодовая база.

    Reply
  62. kMidas

    Подскажите, пожалуйста, есть ли способ использовать существующие наработки кода (библиотека функций в нескольких общих модулях) ?

    Reply
  63. Evil Beaver

    (62) kMidas, да, можно. Начиная с версии 1.0.10 поддерживается библиотека скриптов. Почитать про то, как это устроено можно вот здесь:

    https://bitbucket.org/EvilBeaver/1script/wiki/externals

    https://bitbucket.org/EvilBeaver/1script/wiki/package-loader

    Кроме того, мы организовали стандартную библиотеку пакетов, которая будет со временем пополняться (https://github.com/EvilBeaver/oscript-library ). Дорабатывать и дополнять библиотеку может любой желающий.

    Ну и кроме того, всегда можно спросить меня, если что-то в документации написано сумбурно.

    Reply
  64. logarifm

    Отлличная статья. Премного благодарен. Согласен насчет того, что ненужно вспоминать ничего никаких других языков и диалектов языка.

    Reply
  65. eugeniezheludkov

    хочу его на андроид с возможностью обработки событий андроида (подписка на события типа получения СМС, автозагрузка и тд ), написания виджетов, сервисов. существует ли возможность скомпилить oscript в .apk файл например с помощью XamarinStudio (доработав работу с событиями и intents)?

    Reply
  66. Evil Beaver

    (65) eugeniezheludkov, вот прямо сейчас такой возможности нет. Если на андроиде можно выполнять код .NET, то можете попробовать адаптировать код oscript под это дело, но я в андроидах ни в зуб ногой, ничего конкретного сказать не могу.

    Reply
  67. eugeniezheludkov

    (66) под андроид на шарпе разрабатывал в Unity3d, нормально выполняется .NET через mono. Ксамарин еще не пробовал, вроде как там должен быть выбор платформы и сборка apk с подписыванием сертификатов (как это сделано в Юнити). Если качать VS2015, в комплекте идет(опционально) Xamarin Studio правда при этом требуется скачивать 26 гиг. (пока не качал) на данный момент я скачал просто VS2015. у меня получилось скомпилировать по проектам отдельно ScriptEngine, ScriptEngine.HostedScript, TestApp и тд.

    экспериментирую, по мере нахождения свободного времени, изучаю…

    Reply
  68. Evil Beaver

    (67) eugeniezheludkov, тогда проще обсуждать не в каментах, а напрямую. Меня можно найти в google hangouts или в скайпе. Контакт отправил в личку.

    Reply
  69. vasbur

    На Инфостарте вы рассказывали, что есть возможность скачивать новые релизы помощью этого инструмента.

    Можете по это рассказать подробнее?

    Reply
  70. shmax

    Не смог воспользоваться вот этим: «Код наших скриптов также расположен в git, и любой 1С-ник компании может при желании что-то доработать. Язык знаком всем и не требует дополнительных навыков.» Я впервые на Git хабе и потртив полчаса так и не нашёл примеров 🙁

    Reply
  71. Evil Beaver

    (70) shmax, не нашел примеров чего? Возможно мы плохо что-то положили, неявно, можно попробовать улучшить. В чем заключалась сложность поиска?

    Reply
  72. Evil Beaver

    (69) vasbur, у 1С есть сервер, где лежат новые версии. Типовые конфигурации скачивают оттуда свои обновления (см. подсистему автообновления в типовых). Можно скачивать обновления и другими средствами. Этот инструмент не «позволяет скачивать новые релизы», а позволяет написать код, который будет что-либо скачивать. Готового скрипта у меня нет, т.к. мне не нужно скачивать типовые, я это у себя не автоматизирую. Но алгоритм и адреса сервера есть в любой типовой конфигурации от 1С, а поскольку языки совместимы, то на скрипты это портируется копированием-вставкой.

    Reply
  73. cool.vlad4

    (49) вообще судя по постам, он и линух знает так себе (тем более сам написал, что давно его не видел) . а если и микрософт ему не люб, интересно на чем он вообще работает и что он делает в подобных темах. (назвать mono — эмулятором это круто. ксати для ненавистников микрософта — он уже кучу месяцев назад стал открывать исходники . и как сейчас там дела обстоят, я не знаю, но думаю в ближайшее время net будет полноценным конкурентом java)

    (0) идея: для ленивых виндузятников можно сделать package (по сути powershell скрипт написать) для chocolatey и тогда можно будет одной командой ставить и на винде.

    cinst oscript -y

    (52) comобъекты это уже хорошо. но я не понимаю почему нет (или я не знаю) возможности подключения net assembly ? (как в IronPython например . как в powershell и т.д. кстати я не писал тогда выше, но забыл тогда упомянуть про другой скриптовый язык, который кстати для знакомых с C# ближе. это scriptcs . через choco также ставится одной строкой )

    Reply
  74. cool.vlad4

    (24) lustin,

    Применительно к твоему примеру — что еще хуже, такой скриптинг завязан только на Windows.

    мой метод завязан на dotnet, как и onescript. (ну и сравнивать f# и onescript, как-то несерьезно было с твоей стороны. у onescript только одно преимущество, которое преимущество среди 1С разработчиков. это синтаксис 1С. и все. типизация кстати в f# строгая, что по мне плюс. огромный такой плюс. )

    Reply
  75. cool.vlad4

    (73) cool.vlad4, + про p/invoke забыл добавить (комментарий не дает сайт редактировать)

    Reply
  76. cool.vlad4

    (45) jdo, вы несете , извините за грубость, несете ерунду. причем как по винде, так и по linux тематике.

    вот исходники моно https://github.com/mono/mono

    найдите мне где там зависимость от вайн?

    для Windows Forms есть альтернативы типа gtk#

    про ADO.NET, ASP.NET , какая-то ересь написана.

    а ребята в https://github.com/Perspex/Perspex пилят как я понят WPF фрэймворк, который и на linux работает, и на яблоке.

    см https://youtu.be/c_AB_XSILp0

    Reply
  77. cool.vlad4

    и еще вдогонку .

    есть ли некий биндинг, скрипт eval для самой 1С? т.е. как msscript control , чтобы можно было выполнять код уже в самой 1С и получать результат, добавлять переменные и т.п.? или такой задачи не стояло?

    Reply
  78. Evil Beaver

    (73) cool.vlad4,

    почему нет (или я не знаю) возможности подключения net assembly ? (как в IronPython например)

    Такая возможность планируется. Все, как обычно, упирается в свободные ресурсы.

    Reply
  79. cool.vlad4

    (78) понятно, ну это я не требую, это просто идеи вслух. например еще идеи для onescript, это сделать reflection для языка onescript и сделать некий анализатор этого языка на предмет ошибок. …и потом использовать это для 1С языка) (для всяких предметно-ориентированных вещей можно гипотетически сгенерировать заглушки, моки и тогда можно будет и тестирование сделать и генерацию кода, но это так, чисто пока идеи, фантазии на тему)

    Reply
  80. andy23

    А как избавиться от такого сообщения:

    Тип System.Int64 невозможно преобразовать в один из поддерживаемых типов ?



    Sessions = ServerAgent.GetSessions(Cluster);

    Для NubCon = 0 По (Sessions.Count()-1) Цикл

    Соединение = Sessions[NubCon];

    UserName = Соединение.UserName;

    MemoryCurrent = Соединение.MemoryCurrent;

    … тут и возникает это сообщение…

    Reply
  81. Evil Beaver

    (80) andy23, надо зарегистрировать баг в issue-трекере проекта. Вот здесь:

    https://bitbucket.org/EvilBeaver/1script/issues?status=new&status=open

    Правильно ли я понял, что у вас сервер предприятия, к которому вы подключаетесь — 64-разрядный?

    Reply
  82. andy23

    (81) Да, именно так.

    На трекере ошибку зарегил.

    Reply
  83. Evil Beaver

    (82) andy23, спасибо. Попробуйте скачать ночную сборку и проверить: http://oscript.io/downloads/night-build/zip

    Reply
  84. comol

    А по скрипту gitsync не подскажешь?…

    1) Он выгружает кучу хлама в виде обычных и упр форм, которые потом GitLab затягивает в себя и собственно «засоряет» эфир. Не делали чтобы выгружал чисто только код?

    2) А не делали чтобы начальную выгрузку хранилища можно было ограничивать по номеру версии?… Сейчас оценил по времени сколько будет выгружаться всё хранилище — получил недели две… Хотя может стоит и всё выгрузить…

    Reply
  85. Evil Beaver

    (84) comol, привет. Выгрузка по номеру там есть, но забыл где. Возможно, @pumpaEO подскажет? Если не ошибаюсь, у тебя в git будет лежать спец. файл VERSION, который показывает, какая версия у тебя сейчас лежит в гите. Если поставить там тот номер, после которого хочешь синхронизировать, то оно как раз не все хранилище, а с этого номера будет обрабатывать.

    Да, и по «чисто коду» — не делали, нам нужно как раз все, а не только код.

    Reply
  86. dis_2015

    Здравствуйте. А возможно ли отправлять почту при помощи onescript? Доступен ли объект ИнтернетПочта ?

    Reply
  87. comol

    (85) Спасибо. С файлом Version попробую. Так по-моему и работает… По коду тогда уже значит или Женя что-то подскажет или сам расковыряю…

    Reply
  88. artbear

    (84) Олег, тебе нужно смотреть именно файл Version.

    В гит будет выкладываться конфигурация с номером, на единицу больше, чем в этом файле

    Reply
  89. artbear

    (84)

    Он выгружает кучу хлама в виде обычных и упр форм, которые потом GitLab затягивает в себя и собственно «засоряет» эфир. Не делали чтобы выгружал чисто только код?

    Можешь написать доп.скрипт, который будет удалять все файлы, кроме ObjectModule.*, module*.*, Форма.*, CommandModule.*, ManagerModule.* и тогда останется только код.

    Но я не советую.

    Например, ты лишишься интересной информации по изменения метаданных и их реквизитов, форм и т.п.

    Reply
  90. andy23

    (83) уже попробовал, все ок, спасибо!

    Reply
  91. JohnyDeath

    (84) comol, по второму вопросу отвечу.

    Я разбивал разбор хранилища на куски и потом их гитом собирал в одну ветку.

    Т.е. например у меня в хранилище 1с было 1000 помещений.

    Я запустил 5 разборов параллельно: с 1 по 200; с 201 по 400 и т.д.

    Получил 4 отдельных git-хранилища

    И далее магическими командами git объединил всё в одно.

    Рулил все файликом Version.

    И это было еще в v83unpack. Здесь, думаю, будет тоже самое, т.к. этот скрипт и есть порт проекта v83unpack

    Reply
  92. Evil Beaver

    (91) JohnyDeath, а магические команды гит — это какие? Ты давай, не хитри, а тащи всё в студию! 🙂

    Reply
  93. JohnyDeath

    (92) это они для меня немного магические. Для гуру гита наверняка все просто.

    Вот откопал видео, которое я делал года полтора назад для тех, кто хочет побыстрей переложить все хранилище 1С в гит.

    Все операции проводил в SourceTree:

    http://www.screencast.com/users/mevgeny/folders/Jing/media/e6e543f6-96ec-4b30-a51b-a286f4b2e16b

    Reply
  94. Lapitskiy

    ссылка на onescript.io не открывается что-то, работает только репозиторий на bitbucket, а хочется сразу инсталлятор 🙂

    Reply
  95. JohnyDeath

    (94) Lapitskiy, да, есть такое. Уже дня три недоступен сайт. Андрей ака Evil Beaver в курсе, обещает скоро решить проблему

    Reply
  96. nipil

    Спасибо за статью. Жаль что только наткнулся. Буду тестировать

    Желательно добавить в статью для быстрого старта.

    Для корректной работы NppExec на windows 7 и выше нужно запускать Notepad++ от имени Администратора.

    иначе

    oscript C:Shared1cScriptHello.os
    CreateProcess() failed with error code 2:
    Не удается найти указанный файл.
    
    Сообщить(«Привет Мир!»);
    

    ну и конечно:

    Сообщить(«Привет Мир!»);
    Reply
  97. JohnyDeath

    (96) nipil,

    Для корректной работы NppExec на windows 7 и выше нужно запускать Notepad++ от имени Администратора.

    Не согласен. Без админских прав работает. Может это только при установки самого плагина и только в том случае, если каталог плагинов N++ находится в «Program Files»?

    Reply
  98. nipil

    (97) JohnyDeath,

    Именно так.

    Автор описывает «Быстрый старт» включая Notepad++. Соответственно «установка по умолчанию» . (Program files (x86)Notepad++plugins)

    Reply
  99. Evil Beaver

    (86) dis_2015, ИнтернетПочты нет. Есть исходники, в которые вы можете добавить такой объект )

    Reply

Leave a Comment

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