В этом языке всего два основных элемента: элемент A (assembly, группа) и элемент R (repeat, цикл)
Здесь я приведу три примера того, что можно сделать, используя эти два элемента.
Первый пример будет совсем простой. У нас есть справочник "Товары". В справочнике есть реквизит "Цена". Мы хотим сделать переоценку, т.е. изменить все цены. Кликаем на элемент R и добавляем его на рабочее поле. Вызываем контекстное меню для добавленного элемента и открываем окно свойств.
Поменяем предопределенное имя R на Товары. Укажем источник цикла - Справочник.Товары. Укажем новое значение реквизита Цена и команду ЗАПИСАТЬ.
Последняя буква в названии ART, T означает - tracking. Это и получение результата и сам результат и отладка. Нажмем кнопку "Трэкинг". Данный наш случай слишком простой, чтобы что-нибудь отслеживать. Просто откроем справочник Товары и убедимся, что цены действительно изменились. Чтобы вернутся в режим разработки, нажмем эту же кнопку (она изменила свой вид):
Слегка усложним задачу. У нас есть документ Отгрузка с табличной частью Товары. Мы хотим разделить этот документ на два. Можно придумать множество способов разделить один документ на два. Мы возьмем самый простой: половину строчек в один документ, другую половину в другой. Разместим на рабочем поле два элемента типа A и один типа R
Зададим свойства для элемента Подготовка. Исходный документ - это тот который мы хотим разделить на два. Первый и Второй - это новые документы.
У элемента Разделение укажем одно свойство: Источник. Больше нам здесь ничего не нужно.
Элемент Запись содержит команды записи Первого и Второго документов
Зайдем внутрь элемента Разделение и создадим там два новых элемента типа A. Назовем их Туда и Сюда. На иллюстрации заливка этих элементов выглядит размытой. Это говорит о том, что каждый из них содержит условие выполнения.
Вот так выглядят свойства элемента Туда. Свойства элемента Сюда очевидным образом отличаются условием и обращением ко Второму документу вместо Первого.
Структура получилась несложная. Но вы не заблудитесь и в сложной структуре, благодаря навигатору в правой части.
Нажмем кнопку Трэкинг. На этот раз результат будет выглядеть более содержательно. В свойствах первого элемента можно будет найти созданные документы. Открыть их и убедится, что все прошло по плану. Также можно будет увидеть все шаги цикла.
Эти примеры, конечно, примитивные и вряд ли они кого-то удивят. Тем менее, лично мне эта штука уже не раз помогла справиться с ерундовой работой, ради которой лень открывать конфигуратор. Попробуем теперь сделать что-то приближенное к "боевым условиям". У нас есть документы ЗаказПокупателя, Поступление и Отгрузка. Поступление делает запись в регистр остатков ТоварыНаСкладе со знаком "плюс". Отгрузка - со знаком "минус". ЗаказПокупателя пишет в регистр остатков ЗаказыПокупателей "плюс", Отгрузка пишет "минус", используя для этого реквизит Основание. Мы хотим определить: что мы можем сейчас отгрузить по оставшимся на текущий момент заказам покупателей. И создать документы Отгрузка на основе этих данных.
Разместим на рабочем поле элемент типа R c названием Подбор. Зададим ему следующие свойства:
Внутри элемента Подбор разместим другой элемент типа R, Заказы. Здесь мы, кроме источника укажем условие отбора, которое ссылается на значение, полученное из верхнего элемента.
Внутри элемента Заказы разместим два элемента типа A. Один из них назовем Еще, другой Все. Свойства элемента Еще зададим так:
А свойства элемента Все так (обратите внимание на команду Прервать):
В любой момент можно перейти в режим трэкинга и проконтролировать процесс.
Сейчас у нас есть в наличии вся необходимая информация и можно заняться созданием документов. Разместим рядом с элементом Подбор элемент типа R Отгрузка. Обратите внимание на источник. Здесь мы хотим получить содержимое элемента Подбор (т.е. то, что мы получили на предыдущем шаге). "Подбор.Заказы" означает, что мы хотим взять все элементы с нижнего уровня дерева (а Подбор - это дерево, как нетрудно догадаться). Наконец "...Заказы(Заказ)" говорит о том, что мы хотим сгруппировать полученные элементы по заказам. В результате мы получим дерево. На верхнем уровне будет перечень заказов. Уровнем ниже будут детальные строки.
Внутри элемента Отгрузка разместим элементы Документ, СтрокиДокумента, Запись. Свойства элементов Документ и Запись, я думаю, вам сейчас уже должны быть очевидны. Свойства элемента СтрокиДокументы выглядят так. Обратите внимание на источник. Здесь мы обращаемся к элементу-родителю. Он ведь дерево, следовательно мы получим ветки.
Вот и вся задача. Можно запустить трэкинг и убедиться, что новые документы действительно создаются. А если эта штука нам действительно полезна в работе, можно создать еще один элемент типа A, перетащить туда элементы Подбор и Отгрузка, и задать расписание.
В приложении к публикации вы найдете саму обработку, показанные здесь примеры в файлах test1.xml, test2.xml, test3.xml, а также тестовую базу.
Обработка тестировалась на управляемых формах. Платформа 8.3.10.2667. Код обработки полностью открыт.
Update 22.12.2018
Добавлены новые источники итераций.
COM. Поддерживает только один объект V83.COMConnector. Позволяет подключаться к любым базам 1С.
ADO. Универсален. В частности, можно использовать для получения данных из Excel.
Архив содержит демо-примеры.
Update 30.12.2018
В процессе работы над декларацией по НДС, выяснилось, что нужны свойства без имени. Я решил, что такие свойства будут размещаться не в списке свойств, а прямо в рабочем поле.
Теперь ART можно использовать как "табло" (была такая штука в предыдущих версиях 1С). В режиме дизайна пишите выражения в рабочем поле.
В режиме трэкинга получаете их значения.
Update 26.01.2019
Добавлена декларация по НДС. Этот ART состоит из 61 элемента (22 для книги покупок, 22 для книги продаж, 16 для декларации и 1 элемент настройки). По сравнению с 1С-овским отчетом, в котором не менее 25 тысч строк кода - это совсем немного. А главное - гораздо более понятно и доступно. ART предназначен для работы в типовой конфигурации "Бухгалтерия предприятия". Тестировалаось на релизе 3.0.67.43. Платформа 8.3.12.1790.
ОБРАТИТЕ ВНИМАНИЕ. Этот продукт предназначен для ознакомления с экспериментальной технологией. Хотя он и будет работать в большинстве случаев, автор не может гарантировать этого для вас конкретно. Если вы захотите использовать его в реальной работе, то есть вероятность, что вам придется его донастраивать (впрочем, это совсем несложно).
Update 02.02.2019
Добавлен отчет СЗВ-М. Тестировалаось на релизе БП 3.0.65.91. Платформа 8.3.12.1790. В архиве последняя версия обработки, файл отчета и короткая инструкция. Еще раз напоминаю, что отчет предлагается as is. В нем всего 41 элемент. Разобраться намного проще, чем в типовой тысяче (на самом деле еще больше) строк, разбросанной по разным модулям.