РусскийФокс и ClickerMann заносят данные в 1С



Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает сценарии для Clickermann. Сценарий заполняет справочник в 1С.

  Бывает так, что надо заполнить справочники в программе, а импортировать нет возможности или лень программировать. Тогда можно попросить робота Clickermann перенести данные из электронной таблицы в программу. Пусть робот за вас нажимает на клавиши. Но писать типовые сценарии для Clickermann удобнее из Русского Фокса, а не в Clickermann.

    В прилагаемом файле имеется пример составления такого сценария (см.файл Lesson13.rus из RusFox_v1_07.rar).  Я же дам краткие пояснения к примеру и предоставлю учебное видео.

Программа ClickerMann.exe генерирует нажатия клавиатуры по программному сценарию, имитируя работу пользователя. Это можно использовать для заполнения справочников в различных программах. Например, в уроке 13 показано, как в Русском Фоксе формировать сценарий к программе ClickerMann для создания новых карточек по основным средствам для программы 1С. У меня возникла необходимость ввести более 13000 карточек в программе 1С, при этом данные для заполнения полей в карточках содержатся в таблице Calc OpenOffice. ClickerMann выполнит эту работу, а РусскийФокс напишет ему сценарий для выполнения.

Создаем два объекта (см. Lesson13.rus)

Офис = НовыйОбъект("RepOpenOffice")

Об = НовыйОбъект("clickermann")

 

Объект «Офис» будет читать данные из таблицы Calc, а объект «Об» будет формировать файл со сценарием для ClickerMann.exe.

Об.НачатьЗаписьСценария("test","Больница")

 

Здесь test – это задаваемое нами имя файла со сценарием (он будет иметь расширение “.cms”). Больница — это слово, которое содержится в заголовке окна открытой программы 1С. В программе 1С мы должны сами открыть справочник «Основные средства» до запуска сценария. ClickerMann, выполняя наш сценарий, сам активизирует окно 1С (в заголовке которого есть слово «Больница»), так как в сценарии будут соответствующие команды.

Используя объект «Офис» мы получаем содержимое нужных нам ячеек и заполняем нужные переменные.

Наименование = Офис.ПолучитьСтрокуИзЯчейки(1, Начало)

Нужные переменные мы передаем в функцию

ДобавитьОсновноеСредство(Наименование,ИнвНомер,Сумма,Номер,Об)

Данная функция производит запись команд в файл сценария (“test.cms”), которые произведут создание новой карточки в программе 1С, внесут в нее нужные данные и нажмут кнопку «Записать». Таким образом, нужные данные попадут в справочник 1С.

Имитируя нажатие клавиши INS, робот ClickerMann создаст новую карточку основного средства в списке основных средств.

Об.КлавишаINS()

После этой команды, на всякий случай, сделаем задержку 500 миллисекунд, чтоб команда нормально отработала (для надежности я делаю заведомо большую задержку).

Об.Задержка(500)

После создания новой карточки курсор будет находится в поле «Наименование». В это поле мы заносим наше значение.

Об.ПечататьСтроку(Наименование)

Теперь нам надо перейти на поле для ввода инвентарного номера. Для этого надо нажать три раза клавишу TAB

Об.КлавишаTAB()

После задержки вставляем нужные данные в это поле. Затем вновь нажимаем TAB. Вводим норму амортизации (в данном случае во всех карточках вводим 100). После этого вновь нажимаем TAB. Вносим количество часов работы оборудования в год (во всех карточках 1925). Затем нажимаем 9 раз клавишу TAB, чтоб попасть на строку «Примечание». В нее записываем порядковый номер карточки. Вновь нажмем TAB и окажемся на кнопке «Записать». Чтоб «нажать» кнопку вводим команду

Об.КлавишаВВОД()

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

Для закрытия файла «test.cms» после окончательной записи сценария вызываем

Об.ЗакончитьЗапись()

После выполнения данной программы мы получим файл сценария для ClickerMann.exe в файле test.cms. Запустив данный сценарий мы увидим, как робот ClickerMann будет создавать новые записи в программе 1С и заносить в них наши данные.

 

20 Comments

  1. grumagargler

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

    Reply
  2. andreosh

    Тестер у 1С слишком сложный и описаний хороших по работе с ним не попадалось. Может подскажете, что почитать ? Есть такое понятие «порог вхождения». Задача РусскийФокс снизить порог вхождения. ClickerMann так же достаточно простая прога. В clickermann есть еще хорошая функция — это считывание цвета в любой точке экрана. Например, чтоб убедится, что карточка открылась, я могу проанализировать изменился ли цвет точки в определенном месте. Если цвет точки не равен требуемому, то значит что-то пошло не так, возможно произошла какая-то ошибка и выполнение сценария следует остановить. Я еще не тестировал эту возможность, но позже включу нужные методы в объект «clickermann»

    Reply
  3. grumagargler

    (2) test1c.com

    Reply
  4. andreosh

    «Запуск Тестера и тестируемой конфигурации желательно производить на одном компьютере. Для запуска программ на разных компьютерах, необходимо настроить порт и адрес тестируемого приложения в справочнике Приложения.» (https://habr.com/post/331532/) Это же усложнение требований, не говоря уж об установке тестера. А Clickermann может работать с любой прогой или вебсайтом без установки. Возможно, что у тестера 1С возможностей поболее, но в описанной мной задаче можно обойтись без дополнительных возможностей. Простую проблему надо решать просто.

    Reply
  5. andreosh

    (3)

    test1c.com

    Достаточно почитать минусы тестера, чтоб понять, что в данной задаче РусскийФокс лучше.

    Reply
  6. grumagargler

    (5)

    Достаточно почитать минусы тестера, чтоб понять, что в данной задаче РусскийФокс лучше.

    Мда…ну лучше, значит лучше, я ведь не утверждал обратное, а только предложил попробовать.

    Удачи.

    Reply
  7. andreosh

    За предложение Спасибо ! Во всяком случае, почитал про тестер 1С.

    Reply
  8. Ta_Da

    (5)

    в данной задаче РусскийФокс лучше

    В задаче по переносу данных из справочника в 1С в электронную табличку, путем эмуляции нажатий клавиш и копирования данных наугад из одного окна в другое с помощью программы, которая сама по себе имеет язык сценариев и может это все сделать без кириллического посредника? Вполне возможно что лучше. Но что-то мне подсказывает, что никто в реальной жизни таким образом эту задачу решать не будет.

    Reply
  9. andreosh

    Но я решил вчера ее именно таким образом. Запустил на ночь и занес клиенту 5000 карточек основных средств в удаленный сервер (облако). Задержки я поставил большие, потому заносится 1000 записей за полтора часа. Это быстрее, чем ковыряться в сценариях. Сценарий же должен брать записи из Calc OpenOffice.

    Reply
  10. user928779

    (9)

    Это быстрее, чем ковыряться в сценариях.

    Это характеризует разработчика, а не механизм.

    Reply
  11. andreosh

    Чем больше разнообразных способов решения проблемы, тем лучше. А каким способом решать, каждый сам выберет.

    Reply
  12. Perfolenta

    (11) Мне кажется, что вы выбрали не верный путь для раскручивания своего языка… Вы в основном демонстрируете какие-то очень частные решения мелких проблем, причем для решения каждой из этих задач вы внедряете в «язык» какой-то объект… Я думаю это не правильно… По-моему, Вам надо отделить язык от прикладных библиотек, показать мощь и красоту самого языка в чистом виде, а затем подумать над стандартной библиотекой полезных функций и объектов в обобщенном виде и поразить воображение богатством возможностей…

    Пока все выглядит хаотичным метанием без какого-либо плана….

    Это дружеская критика, если что… т.к. сам сейчас размышляю о плане «выхода в люди» 🙂

    Reply
  13. andreosh

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

    Reply
  14. andreosh

    (12) В принципе я двигаюсь разными путями. Но основная цель — это не раскрутить, а развить в востребованном направлении. Для этого надо прислушиваться к различным мнениям. Кроме этого, есть потребность объединить свои знания различных языков программирования (FoxPro, php, javascript, CSS и т.д.) в одном русскоязычном языке программирования.

    Reply
  15. Perfolenta

    (13) я в такой же ситуации, мне так же необходимо в первую очередь заработать на жизнь, а потом любое хобби, вроде языка программирования… 🙂 но если уж я делаю серьезный язык, то нужна некая академичность в разумных пределах, а иначе будет сарай с прицепом….

    Вы часто делаете упор на то, что Русский Фокс это единственный ОО язык, вот сюда и толкайте, покажите красоту и привлекательность того, что это ООП… что бы читающий и смотрящий заразился этой красотой и сказал: «да, это красиво и элегантно!»…

    Следующим шагом можно очертить круг задач, в решении которых ваш язык будет эффективен, например, как это сделал ОСкрипт, очертив для себя нишу скриптов администрирования вокруг 1С… Как пример, «Русский Фокс позволяет легко прикрутить к своей программе на другом языке внешние отчеты»… и покажите, вот структура отчета, вот так он программируется…вот так его можно прикрутить к 1С, а вот так к C#, а вот так к языку Н…

    Это конечно не простая работа, но иначе мы с вами работаем, что называется в стол…

    Reply
  16. Perfolenta

    (14) развить в востребованном направлении это хорошо, но без раскрутки оно в массы не пойдет… если посмотреть на список не взлетевших русскоязычных языков программирования, то можно удивиться, что о большинстве из них мы даже не слышали… а автор сварился в собственном соку… если обратите внимание, то еще ни одно из ваших видео на Ютубе не собрало более 100 просмотров… и только 3 из них превысили 50… без раскрутки все умрет в забвении… я просто сам об этом размышляю, вот и вас стараюсь направить, как мне кажется, в правильном направлении… мне просто давно хочется, что бы русскоязычные языки программирования были… может быть мой не выстрелит, так пусть еще чей-то… радуюсь успехам ОСкрипта и надеюсь, что он уже не умрет, кажется он живет и растет, но у него была огромная фора, т.к. он простая копия языка 1С… у нас с вами этой форы нет, хотя и мы идем как рыбы прилипалы за некоторой совместимостью с языком 1С, т.к. надеемся в начале пути на крохи от его популярности…

    Reply
  17. andreosh

    (16) 1С просто задал первоначальный стандарт, которому имеет смысл следовать.

    Reply
  18. andreosh

    (15) В ближайшее время опишу способы создания экранных форм, покажу формирование более сложного отчета по шаблону OpenOffice, работу с DBF-файлами (индексы и соединение файлов), экспорт и импорт в XML. Затем уже перейду на MySQL, командную строку Windows (администрирование через командную строку, объекты на Русском Фоксе будут запускать командные строки Windows и разбирать возвращаемый результат), дальнейшее развитие взаимодействия с Clickermann (он обладает функциями своего рода экранного зрения, то есть может сравнивать изображения на экране, чтоб анализировать открылось окно или что-то пошло не так).

    Reply
  19. Perfolenta

    (18)

    Clickermann

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

    работа с ДБФ по идее должна быть сильной стороной Фокса, хотя я с ним не работал, не знаю… может вы меня и присадите на него немного 🙂

    Reply
  20. andreosh

    (19) Clickerman хорош тем, что обладает экранным зрением, то есть вы можете его запрограммировать, чтоб он сравнивал цвет пикселей в разных частях экрана (позже я добавлю в РусскийФокс эти возможности). Тогда если кошка пробежала по клавиатуре, то сценарий остановится, так как цвет пикселей в ключевых точках не будет соответствовать ожидаемому. Так же возможно сравнение и нахождение на экране изображений (областей экрана), сравнивая его с эталонным, записанным в файле. Конечно, программировать на Clickermann можно и без Русского Фокса, но проще начать с Русским Фоксом. Конечно, РусскийФокс хорош пока для начинающих программистов или сисадминов, так как профессионал предпочтет писать прогу на языке оригинала без переводчика типа РусскогоФокса, но и времени потратит на решение некоторых задач больше.

    Reply

Leave a Comment

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