Анатомия Ant или 1С для ленивых администраторв

21.01.14

Разработка - Инструментарий разработчика

Пошаговая инструкция создания автоматизации рутинных операций.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Файл проекта
.xml 0,69Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.
Файл свойств
.properties 0,23Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

Зачем я написал эту статью? Я в последнее время удалял черновики и наткнулся на //infostart.ru/public/181935/. Хотел было ее удалить, да за нее уже проголосовали. Ну раз она кому-то да нужна, по-быстрому написал описание к ней, что к чему и опубликовал. Но радовался я рано. Видать не любит у нас народ поиском пользоваться. Попробую кратко в цикле статей описать те инструменты, которые я использовал для получения результата.

 

Начну с цитаты Википедии:

Apache Ant (англ. ant — муравей и акроним — «Another Neat Tool») — утилита для автоматизации процесса сборки программного продукта. Является платформонезависимым аналогом утилиты make (в качестве «Makefile» применяется «build.xml»).

Ant был создан в рамках проекта Jakarta, сегодня — самостоятельный проект первого уровня Apache Software Foundation.

Первая версия была разработана инженером Sun Microsystems Джеймсом Дэвидсоном (James Davidson (англ.)русск.), который нуждался в утилите, подобной make, разрабатывая первую референтную реализацию J2EE.

Ant, в отличие от другого сборщика проектов Apache Maven, обеспечивает императивную, а не декларативную сборку проекта.

Устанавливается он крайне просто. В Windows(tm) качаем архив, распаковываем и в свойствах системы добавляем к переменной среды %PATH% путь к bin каталогу анта. В linux все еще проще apt-get install(Debian/Ubuntu) ant или yum install ant(Fedora/Red Hat), или pkg-add -r ant(FreeBSD) и т.д.

 

Далее команды с комментариями в  UNIX стиле:

1. mkdir ant_test                     # создаем каталог проекта

2. mkdir .ant                           # создаем каталог для свойств и прочих файлов

3. touch .ant/project.properties # здесь будем хранить значения переменных

4. touch build.xml                    # Файл сборки

5. cat build.xml                       # Добавляем содержание

 

 

6. ant # Запускаем


Buildfile: /home/awk/ant_test/build.xml

BUILD FAILED
Target "help" does not exist in the project "1C".

Total time: 0 seconds

 

Вывод нам рассказал, что в описанном нами проекте по имени 1С не существует цель по умолчанию.

Давайте ее создадим.

И запустим ант

ant

Buildfile: /home/awk/ant_test/build.xml

help:

BUILD SUCCESSFUL
Total time: 0 seconds

 

Здорово, но абсолютно бесполезно.

Что бы что-то получилось в цель надо добавить задачу. Например: сделаем архивацию базы.

Для начала напишем справку

И проверим ее работу:

ant

Buildfile: /home/awk/ant_test/build.xml

help:
     [echo] ant backup - Запуск архивации

BUILD SUCCESSFUL
Total time: 0 seconds

xml узел echo - это задача. Данная задача выводит на экран то, что вы в ней напишете. Теперь давайте напишем саму цель backup

Для начала можно посмотреть справку.

Затем добавим цель и задачу в файл build.xml:

И переменные в файл:.ant/project.properties

echo "bin1C.exec=[путь к программе 1С]" >> .ant/project.properties
echo "bin1C.db.key=[Ключ расположения базы /F или /S]" >> .ant/project.properties
echo "bin1C.db.value=[путь к базе имя файла или сервер\база]" >> .ant/project.properties
echo "bin1C.backup.key=[ключ выгрузки ИБ /DumpIB]" >> .ant/project.properties
echo "bin1C.backup.valuee=[путь куда выгружать]" >> .ant/project.properties

Теперь о том, что мы с вами добавили.

Узел property - здесь мы задали файл где искать файл со свойствами.

Задача exec - здесь мы указали программу для запуска и ее параметры. Атрибут value говорит о том, что это один параметр (даже если он содержит пробелы). А атрибут line - что это несколько параметров разделенных пробелами.

Далее можно запустить ant backup и проверить создался ли файл.

Смысл появился, но все это можно сделать и обычными скриптами. В чем профит? А профит в следующем:

1. Наши настройки действий не зависят от операционной системы. Действия (цели и задачи) настраиваем отдельно от свойств.

2. Любая задача может зависеть от другой задачи.

Давайте посмотрим на примере загрузки конфигурации. Перед ней надо сделать backup - это и реализуем.

 

cat .ant/project.properties                                                  # Файл настроек (моих)
bin1C.exec=/usr/bin/1cv8
bin1C.db.key=/F
bin1C.db.value=/home/awk/runtime-EclipseApplication/t5/db
bin1C.backup.key=/DumpIB
bin1C.backup.value=backup.dt
bin1C.upload.key=/LoadCfg
bin1C.upload.value=1cv8.cf
bin1C.upload.option=/UpdateDBCfg

Что нового мы добавили?

1. Узел upload

2. В узле upload мы сказали что он зависит от backup (depends="backup")

3. Заменили ключи выгрузки, на ключи обновления базы.

 

На этом пожалуй на первый раз стоит остановится. А пока можно пойти и посмотреть сколько задач умеет выполнять ант. Они начинаются от файловых операций (создание, удаление, архивирование файлов) и заканчиваются рассылкой почты и отправкой смс.

Напомню задачи берет на себя ант, а цели ему ставите вы.

P.S. К статье прикреплены два созданных файла которые указаны на скриншотах и в тексте. К сожалению я не понял как вставлять файлы xml в текст статьи и как прикреплять бесплатные файлы.

apache ant

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    172075    964    403    

924

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14572    109    46    

108

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17344    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27366    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11955    45    33    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191342    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18113    7    32    

42

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1153    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. q_i 584 21.01.14 12:24 Сейчас в теме
Интересный вариант использования. Спасибо! Ещё бы поправить орфографию и пунктуацию - вообще было бы супер!
К сожалению я не понял как вставлять файлы xml в текст статьи и как прикреплять бесплатные файлы.

Надо полагать, что те, кто придумывал и реализовывал "старт-монетизацию", даже представить себе не мог что кто-то из авторов захочет прикреплять БЕСПЛАТНЫЕ файлы, поэтому они попросту не предусмотрели такой возможности. Или наборот - предположили, что таковых среди авторов будет подавляющее большинство, а значит они не получат своего процентика, и поэтому не реализовали такую возможность сознательно.
Однако ж положить оба файла в один архив Вы могли бы! ;)
2. awk 745 21.01.14 12:40 Сейчас в теме
(1) q_i,
поправить орфографию и пунктуацию
Вроде поправил. Если что word пропустил пишите.
3. pumbaE 21.01.14 12:59 Сейчас в теме
Вопрос такого плана (если знаешь), как определить переменную получаемую из нескольких источников?
Например, хотелось бы получить в <property> определить переменную bin1C.db.value получаемую из env.bin1Cdbvalue и в случаи отсутствия переменной окружения, только тогда брать из файла свойств или же определять каким либо другим выражением.

Для чего это надо: хотелось бы создать более или менее универсальный build.xml и устанавливать переменные окружения необходимые нам из внешних источников, например из jenkins.

gradle не пробовал использовать? Имхо в некотором плане проще анализировать результаты от 1С, сейчас то, что бы проанализировать, а успешно ли выполнилась команда, необходимо писать регулярку и анализировать файл результата, иногда не очень удобно.
4. awk 745 21.01.14 13:19 Сейчас в теме
(3) pumbaE, Легко.

<condition property="env.bin1Cdbvalue">
    <Property name="bin1C.db.value" value="${env.bin1Cdbvalue}"/>
<else>
   <Property name="bin1C.db.value" value="blabla"/>
</else>
</condition>


http://ant.apache.org/manual/Tasks/condition.html
6. pumbaE 21.01.14 13:51 Сейчас в теме
(4) спасибо. Все руки не доходили.
Я для анализа результатов использую чисто ant, читаю файл результат, с помощью регулярки определяю правильный ответ 1С и если что-то не так делаю fail.

  <target name="dumpcfg">
      <mkdir dir="bin"/>
      <exec executable="${1cbin}">
          <arg value="CONFIG"/>
          <arg value="${ib}"/>
          <arg value="/N${iblogin}"/>
          <arg value="/P${ibpassword}"/>
          <arg value="/ConfigurationRepositoryF${rep}"/>
          <arg value="/ConfigurationRepositoryN${replogin}"/>
          <arg value="/ConfigurationRepositoryP${reppassword}"/>
          <arg value="/ConfigurationRepositoryDumpCfg${builds}/bin/1cv8.cf"/>
          <arg value="/outoutDumpCfg.txt"/>
      </exec>
      <loadfile property="checkerror" srcFile="outDumpCfg.txt" encoding="cp1251">
      </loadfile>
      <echo message="${checkerror}" encoding="cp866"/>
      <loadfile property="checkerror" srcFile="outDumpCfg.txt" encoding="cp1251">
          <filterchain>
              <tokenfilter>
                  <containsregex pattern="успешно|success"/>
              </tokenfilter>
          </filterchain>
      </loadfile>
      <fail unless="checkerror"/>
  </target>
Показать


т.е. задачи отвечающие за проверку результата такие :

      <loadfile property="checkerror" srcFile="outDumpCfg.txt" encoding="cp1251">
          <filterchain>
              <tokenfilter>
                  <containsregex pattern="успешно|success"/>
              </tokenfilter>
          </filterchain>
      </loadfile>
      <fail unless="checkerror"/>
Показать
5. awk 745 21.01.14 13:21 Сейчас в теме
(3) pumbaE, Использовал ruby


		<script language="ruby" classpath="C:\bin\java\jruby-1.7.10\lib\jruby.jar" src="result.rb">

		</script>




require 'java'
factory = javax.xml.parsers.DocumentBuilderFactory.newInstance
factory.namespace_aware = true # unfortunately, important!
parser = factory.newDocumentBuilder
stream = java.io.FileInputStream.new $result
reader = java.io.InputStreamReader.new stream, 'cp1251'
is = org.xml.sax.InputSource.new reader
document = parser.parse is
root = document.getDocumentElement()
tests = root.getElementsByTagName('test')
0.upto tests.getLength - 1 do |i|
node = tests.item(i)
attr = node.getAttributes
name = attr.getNamedItem 'name'
result = node.getFirstChild.getNextSibling.getNextSibling.getNextSibling.getFirstChild.getNodeValue
puts "#{name.getTextContent} - #{result}"
if result != 'true'
puts node.getFirstChild.getNextSibling.getNextSibling.getNextSibling.getNextSibling.getNextSibling.getFirstChild.getNodeValue
end
end
stream.close
Показать
7. lustin 21.01.14 17:22 Сейчас в теме
(0)(6)

Может не надо ant ? Да еще и с вызовом ruby

может http://www.gradle.org/ чуть лучше будет


8. awk 745 21.01.14 17:38 Сейчас в теме
(7) lustin, Может и лучше. Но его еще смотреть надо. Я так понимаю gradle != groovy && gradle =~ groovy
9. lustin 21.01.14 20:38 Сейчас в теме
(8)

gradle = build DSL on groovy
ну и еще много чего

я не против ant и тем более Maven, так как это 2 очень крутых инструмента. Но как бы так попроще сказать чуть старые (но проверенные временем).

для аналогии по Gradle я советую смотреть Chef и его "рецепты" по приготовлению "блюд"
http://docs.opscode.com/chef/dsl_recipe.html

p.s. конфигурирование на основе xml файлов - сейчас уже вызывает небольшое отвращение.
10. awk 745 21.01.14 22:19 Сейчас в теме
(9) lustin, Спасибо. Только я по вашей же рекоммендации добрался до jenkins, а тут еще на-те. :)
11. lustin 22.01.14 00:24 Сейчас в теме
(10)

Ты представляешь какое "скотство"
это одна и таже команда http://www.gradle.org/tooling
опосредовано

We are also working with the Jenkins team on a couple of other issues:


Наткнулся я на данную информацию случайно в процессе автоматизации "билдов" - я думал на основе какого из стандартов работать с 1С
началось все с вот этого http://stackoverflow.com/questions/5994814/help-evaluating-build-tools

Что касается ant - это работа не пройдет зря ant.xml напрямую импортируют в Gradle и обратно.

Так что я не говорю что это другая (новая) технология. Это небольшое уточнение.
1. Jenkins остается
2. ant остается
3. НО вместо build.bat+build.xml мы используем один файл build.gradle
12. awk 745 22.01.14 01:03 Сейчас в теме
(11) lustin, Я переписал свои тесты с ant на gradle.
Из минусов gradle:
1. Работает на 1-2 секунды дольше.
2. Консоль в M$ удалось победить только chcp 1251

А так красота и компактность:

task test4(type:Exec) {
	catalog="C:/Program Files (x86)/1cv82/"
	version="8.2.18.82"
	executable(catalog+version+"/bin/1cv8.exe")
	args "/F", "Z:\\v.kazmin\\test\\msfo\\msfo", "/N", "autotest", "/Execute", "Z:\\Public\\Downloads\\MSFO\\test_4.epf", "/Out", "log.xml"
	doLast {
		echoLog("Log.xml")
	}
}

void echoLog(String name) {

	def f = new File(name)
	def parsedLogXml = (new XmlParser()).parseText(f.getText('cp1251'))
	def succ = true
	parsedLogXml.test.each{ test ->
		println "Name : " +  test.@name + ", result : " + test.result.@value
		if(test.result.@value!='true') {
			succ = false
			println test.message.text()
			println test.error.text()
		}
	}
	
	if(succ!=true) {
		assert false: "Error test"
	}
}
Показать
artbear; pumbaE; lustin; +3 Ответить
13. artbear 1566 23.01.14 18:41 Сейчас в теме
(0) Ты бы еще опубликовал свой тестовый фреймворк, было бы совсем интересно :)
14. awk 745 23.01.14 19:04 Сейчас в теме
(13) artbear, От фреймворка одно название. Пара-тройка функций обработка и Вывод:


Z:\Public\Downloads\MSFO>C:\bin\java\gradle-1.10-all\gradle-1.10\bin\gradle test_6
:test_6
Analize file: test_6.xml
Name : ТестЗаполнениеСчетовПоУмолчанию, result : [true]
Name : ТестОткрытияДокумента, result : [true]
Name : ТестКнопкаПодборТЧ1, result : [false]
Message:

Error:
{ВнешняяОбработка.ИТПл***.МодульОбъекта(6)}: Количество в таблице
 подбора 0, не совпадает с эталоном 3
Name : ТестКнопкаПодборТЧ2, result : [false]
Message:

Error:
{ВнешняяОбработка.ИТПл***.МодульОбъекта(135)}: Метод объекта не о
бнаружен (ОткрытьПодборОбъекты***)
:test_6 FAILED

FAILURE: Build failed with an exception.

* Where:
Build file 'Z:\Public\Downloads\MSFO\build.gradle' line: 18

* What went wrong:
Execution failed for task ':test_6'.
> java.lang.AssertionError: Error test. Expression: false

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.

BUILD FAILED

Total time: 10.606 secs

Z:\Public\Downloads\MSFO>
Показать
15. artbear 1566 27.01.14 11:47 Сейчас в теме
(14) вот и выложил бы их. Можно мне в личку aartbear (собачка) gmail.com
16. awk 745 27.01.14 12:03 Сейчас в теме
(15) artbear, Откомментирую исходники и пришлю (в течении часа). Правда, у меня под толстый клиент писал на коленке, а о gradle от (7) узнал.
17. lustin 28.01.14 00:43 Сейчас в теме
(13) ну в идеале нам нужен плагин http://www.gradle.org/docs/current/userguide/custom_plugins.html

gradle - фреймворк, plugin - адаптация gradle для 1С

apply plugin: 'onecmother'


18. awk 745 28.01.14 00:56 Сейчас в теме
(17) lustin, Читал. Пока не понял как организовать репозитарий. А имя мне больше G1C нравится.
Оставьте свое сообщение