Процессор 1С – групповая обработка данных
Прототип
В повседневной жизни пользователей 1С часто бывает нужно преобразовать группу объектов одного вида по определенному правилу. Например, в документах потребовалось заменить одно подразделение на другое. Еще пример: в базу добавляется новый реквизит документа/справочника и его нужно заполнить определенным значением для существующих объектов.
В составе типовых конфигураций поставляется легендарная обработка «Групповая обработка справочников и документов». Это удобная и часто используемая обработка даже у обычных пользователей. С помощью построителя можно легко установить несколько простых отборов, что обеспечивает определенную гибкость данного инструмента.
Несмотря на всю гибкость и полезность указанная обработка имеет свои ограничения:
- не обрабатываются табличные части;
- не обрабатываются регистры;
- не обрабатываются остальные ссылочные объекты (кроме справочников и документов, есть еще планы видов характеристик, задачи, бизнес-процессы);
- допускается только изменение реквизитов и удаление объектов (нет операции копирования);
- нельзя использовать сложные формулы в отборах (конструкции +, -, /, *, (), Или, Подобно, Выбор), только пересечение стандартных условий по 1 полю;
- нельзя использовать формулы новых значений изменяемого поля, только конкретное значение;
- нельзя менять несколько полей сразу.
Указанные ограничения, конечно же, не уменьшают все достоинства столь популярной типовой обработки.
Эволюция
Представленный авторский продукт «Процессор 1С» можно рассматривать как следующее поколение легендарной Групповой обработки, которую можно считать прототипом. Обработка «Процессор 1С» написана с нуля, не является надстройкой типовой обработки, полностью авторский продукт.
Описанные ограничения обработки-прототипа получилось преодолеть. «Процессор 1С» помимо ссылочных объектов обрабатывает табличные части и регистры. Вместо одной операции «Изменения» функционал дополнен операциями «Копирование», «Создание», «Удаление», «Поиск» и «Поиск ошибочных объектов».
Далее будет описание функционала программного продукта «Процессор 1С».
Область применения
Первым этапом в обработке фиксируется вид/подвид метаданных. Это может быть любой ссылочный тип, табличная часть ссылочного типа, регистр, журнал документов или константа.
Обрабатываемые виды/подвиды метаданных | Состав |
---|---|
Ссылочные виды | Справочник, Документ, План видов характеристик, План счетов, План обмена, План видов расчета, Задача, Бизнес-процесс, Перечисление |
Табличные части ссылочных типов | Табличные части изменяемых ссылочных видов (кроме перечислений) |
Регистры | Регистры сведений/накопления (Регистр расчета и Регистр бухгалтерии пока в тестовом режиме) |
Журналы документов | Журналы документов |
Константы | Константы |
В обработке можно выбрать любой вид метаданных, который можно перебрать запросом.
Функционал
После выбора вида метаданных выбирается действие, которое будет выполнено над экземплярами вида. Основное действие – это Изменение. Но также есть: Копирование, Создание, Удаление, Поиск и Проверка.
Для каждого действия можно задать необязательные параметры Отбор и Выражения. Язык очень похож на язык запросов, реализовано использование математических формул, дополнительных формул, логических операторов, скобок, полей объекта и параметров. Формулы могут быть сложные и вложенные, ограничений нет. Параметры задаются амперсандом (&) перед идентификатором-именем параметра. Параметры можно получить из выражений с помощью кнопки «Заполнить». Как и в языке запросов в параметрах можно указать конкретные экземпляры ссылочных данных (например, элементы или группы справочников, ссылки на документы). Обработка вычисляет возможные типы параметров из формул, если это возможно.
Возможности языка выражений «Процессора 1С» больше, чем в типовой обработке, т.к. там используется отбор построителя 1С. «Процессор 1С» предоставляет гибкость, сравнимую с языком запросов 1С при определении полей. Обработка включает в себя парсер выражений, с помощью которого формируются схемы выражений, что обеспечивает работу со сложными формулами. Работа первой версии парсера описана в статье //infostart.ru/1c/articles/1343680/.
На предоставленном выше скриншоте выполняется операция «Изменение» над справочником Контрагенты (конфигурация нетиповая). В квадратных скобках далее в тексте будут выделены конструкции языка выражений. Выбираются только элементы (группы отсекаются условием [не ЭтоГруппа]), у которых либо Организация в списке ООО Аметист (стар), ИП Стар [Организация В &Организации] либо Категория пустая [КатегорияКонтрагента=&ПустКатегория]. Для этих элементов устанавливается новая категория [КатегорияКонтрагента=&КатегорияНовая] и скидка 0,5 или 1,5 в зависимости от флага Партнер [Скидка=0.5+ВЫБОР КОГДА Партнер ТОГДА 1 ИНАЧЕ 0 КОНЕЦ]. По кнопке Заполнить обработка получает 3 параметра из Отбора и Выражений вместе с предполагаемыми видами (&Организации – это список, остальные справочник категории контрагентов).
Для удобства при переходе в режим процессора дополнительно добавляется ветка с синтаксис-помощником. В этой ветке можно найти все функции и операторы, доступные для использования на текущий момент.
Если поле «Отбор» пустое, тогда будут обработаны все экземпляры указанного вида/подвида. Поле «Выражения» также может быть пустым.
Назначение поля Выражения зависит от Действия: там задается произвольная формула или значения полей через «;».
Описание Действий:
Действие (Символ) | Описание | Назначение поля Выражения |
---|---|---|
Изменить (*) | Изменение одного или нескольких реквизитов, описанных в полях Выражения. |
В выражении формулы для полей в формате: Поле1=<Выражение1>; Поле2=<Выражение2>; ... ПолеN=<ВыражениеN> |
Копировать (+) | Копировать выбранные объекты. Реквизиты новых объектов будут заполнены стандартным алгоритмом копирования. Поля из Выражения будут изменены перед записью. | |
Создать (^) | Создание объектов указанного вида. Реквизиты новых объектов будут заполнены стандартным алгоритмом заполнения новых объектов. Поля из Выражения будут установлены перед записью. Только для самостоятельных видов: ссылки и независимые регистры сведений. | |
Удалить (-) | Удаление выбранных объектов/строк ТЧ и записей регистров. | |
Найти (?) | Найти объекты, которые удовлетворяют условию в Выражении (формула Выражения пустая или принимает значение ИСТИНА). Результат будет передан в таблицу объектов для дальнейшей обработки. | В выражении произвольная формула |
Ошибки (!) | Найти объекты, для которых формула в Выражении вызывает ошибку. Результат будет передан в таблицу объектов для дальнейшей обработки. Специальный режим для поиска ошибочных объектов. |
Тонкий клиент
Обработка работает в толстом и в тонком клиентах. В тонком клиенте на управляемых формах такой же функционал, как и на обычных формах. Интерфейс незначительно отличается, т.к. управляемые формы устроены по-другому. Обе формы запускают функции модуля обработки, поэтому обработка одинаково работает в тонком и толстом клиенте, немного отличаясь интерфейсом.
В тонком клиенте нет функции передавать данные в открытую форму во время выполнения на сервере. Поэтому сообщения будут выведены пользователю в момент завершения серверного вызова. Это, конечно, не очень удобно при длительных операциях, но это – плата за облачную архитектуру.
Инструкция
Видео-инструкция разработки: https://youtu.be/ZFkYO_mp5x4
Открываем «Универсальную обработку Командер», переходим на вкладку «Конфигурация». Устанавливаем флаг «МД». Опционально можно установить флаг «Итоги».
Выбираем вид метаданных в дереве конфигурации и нажимаем кнопку «Зафиксировать». Если установлен флаг «Итоги», то можно кликнуть на количество объектов (помеченных на удаление, Предопределенных, Групп, Проведенных) в таблице, тогда откроется Процессор с предустановленным отбором.
После фиксации вида метаданных справа откроется панель процессора. Выбираем Действие. Перетаскиваем поля и функции/конструкции в Отбор и Выражения. Если использовались параметры, нажать кнопку «Заполнить» над таблицей параметров. После установить параметры. Далее кнопка «Выполнить».
После завершения Действия появится сообщение со статусом выполнения.
Для Действий «Найти» и «Ошибки» после завершения откроется вкладка «Объекты» с таблицей, в которую попадут все объекты, удовлетворяющие условию.
Ответственность
Безусловно, программа может содержать ошибки, т.к. не все функции хорошо протестированы. После выявления ошибок описанного в статьях функционала, автор предоставит исправленную версию обработки через определенное время, в зависимости от загрузки.
«Процессор 1С» - это очень опасная разработка, которая преобразует большие объемы данных. Если не указать отбор, обработкой можно удалить/заменить все экземпляры любых видов метаданных базы 1С без контроля использования. Программный продукт предоставляется «как есть», автор не несет ответственности за использование данного продукта. Предварительные запуски обработки необходимо проводить на копии рабочей базы.
Примеры
Изменение регистра сведений. Изменяем статус во всех записях позже определенной даты.
Меняем организацию в регистре накопления. Сначала проверяем сколько записей со старой организацией есть в регистре.
Далее указываем на какую организацию поменять.
Пример на копирование справочников. Допустим в папке «Физические лица» заведено 4 контрагента. Задача: сделать тестовых контрагентов.
Запускаем «Процессор 1С» с действием «Копирование». Для скопированных объектов задаем изменение полей: Наименование, Телефоны и ТипКонтрагента.
В результате появятся 4 тестовых контрагента. У новых контрагентов не заполнено поле Код, т.к. запись новых элементов справочников происходит в спец. режиме: «Без контроля записи» (ОбменДанными.Загрузка=Истина). Если снять данный флаг, то при создании новых объектов будет выполнена полноценная запись с установкой номеров/кодов и с контролем, который запрограммирован в коде конфигурации.
Далее удалим тестовые контрагенты. Здесь предполагается, что у нетестовых элементов нет слова тест в наименовании.
Транзакции
При запуске процессора можно указать флаг «Использовать транзакции». В этом режиме запись/удаление всех объектов будет происходить в одной транзакции. Если в процессе выполнения действия возникнет ошибка, то произойдет отмена транзакции, в результате чего объекты вернутся к начальному состоянию на момент запуска (если было удаление, то объекты восстановятся). Это стандартная функция использования транзакций 1С. Используется в тех случаях, когда нужно чтобы действие полностью выполнилось без ошибок либо не выполнилось вообще (не было частичного выполнения).
COM-соединение
Еще один режим работы обработки – подключение через COM-соединение с внешней базой. В данном режиме чтение структуры конфигурации и действия процессора будут применяться к другой базе, с которой установлено COM-соединение. Например, можно изменить реквизит справочника/документа в другой базе с произвольной конфигурацией, даже работающей в другом клиенте. С помощью дерева реквизитов и табличных частей можно составить отбор и выражения по метаданным внешней базы. Внешне работа Процессора с внешней базой почти ничем не отличается от работы с текущей базой.
Подключение к внешней базе осуществляется на закладке «База». При открытии обработки всегда подключается текущая база, и все действия выполняются над текущей базой. На закладке «База» можно подключиться к внешней базе, добавив параметры подключения в таблицу внешних баз. В один момент времени может быть подключена только одна база, таблица нужна для быстрого переключения и хранения настроек подключения. Настройки подключения стандартные: тип подключения, пользователь, пароль, каталог/имя базы+сервер/web-адрес (в зависимости от типа подключения). При успешном подключении будет соответствующая надпись со статусом (надпись «Текущая база» или «Внешняя база»).
После подключения к внешней базе можно переходить в раздел «Конфигурация», где далее все действия будут применятся уже к внешней базе. В любой момент можно сбросить подключение, выбрав текущую базу на закладке «База». При закрытии обработки также идет сброс подключения.
Таблица с подключениями сохраняется на закладке «Прочее» в толстом клиенте и автоматически сохраняется в тонком клиенте.
Продукт
Разработка «Процессор 1С» поставляется как часть программного продукта «Универсальная обработка Командер», описанного в статье автора //infostart.ru/public/682078/, в разделе «Конфигурация». В указанной статье представлена последняя версия обработки, которая включает в себя последнюю версию «Процессора 1С».
Обработка постоянно совершенствуется, исправляются ошибки, добавляется новые возможности и дополнительные параметры у функций. Все реализованные функции были вызваны практической необходимостью. Чем больше практики, тем более тонкие инструменты приходится использовать. Скриншоты в статье могу немного отличаться от последней версии программного продукта.
Видео-демонстрация разработки: https://youtu.be/ZFkYO_mp5x4
Тестирование проводилось на платформе 8.3.10.2561 под разными конфигурациями (обработка универсальная, не зависит от конфигурации). Код открыт. Обработка работает на обычных и управляемых формах (в тонком и толстом клиентах).