1с запуск внешней обработки расписанию. Универсальное регламентное задание. Чего нельзя забывать

  • Дата: 28.12.2022

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

Создаем внешнюю обработку в 1С 8.3

Чтобы создать новую внешнюю обработку, используем конфигуратор. Через меню «Файл» выбираем команду создания «Новый…» и определяемся, что мы будем создавать внешнюю обработку. В открывшемся окне задаем имя, и при нажатии «Enter» оно заполняется автоматически. Также это имя вам предложит система в качестве названия файла при сохранении.

Добавим форму обработки, нажав на кнопку с изображением лупы в соответствующем окне. Для примера создадим обработку, показывающую, в каких заказах клиента используется определенная номенклатура. Для этого нам необходимо разместить на форме:

  • Реквизит – поле для установки номенклатуры;
  • Кнопку, которая выполнит вызов кода.

Добавляем реквизит «Номенклатура» с типом данных «СправочникСсылка.Номенклатура» в соответствующем разделе и кнопку «Показать» в меню «Команды» -> «Команды формы».

Чтобы на форме отразились добавленные данные, их необходимо перетащить в элементы формы, расположенные в левой верхней части. Есть возможность поменять местами элементы с помощью синих стрелок. Чтобы созданная нами кнопка выполняла задуманное, ей нужно назначить процедуру. Через контекстное меню выберем «Действие команды», и на вопрос, где нужен обработчик, ответим: «Создать на клиенте и процедуру на сервере».


Фрагмент 1

&НаКлиенте Процедура Показать(Команда) ПоказатьНаСервере(); КонецПроцедуры &НаСервере Процедура ПоказатьНаСервере() //Вставить содержимое обработчика. КонецПроцедуры

Мы выбрали создание процедуры на сервере, так как хотим в качестве результата получить выборку из базы данных. На клиенте у нас нет такой возможности, поэтому потребуется подключение к серверу, который и обменивается с БД данными. Теперь нам необходимо написать код, который реализует задуманное нами. Будет использоваться запрос и вывод всех документов через функцию «Сообщить()».


Фрагмент 2

&НаКлиенте Процедура Показать(Команда) ПоказатьНаСервере(Номенклатура); КонецПроцедуры &НаСервере Процедура ПоказатьНаСервере(Номенклатура) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗаказКлиентаСостав.Ссылка КАК Ссылка | ИЗ | Документ.ЗаказКлиента.Состав КАК ЗаказКлиентаСостав | ГДЕ | ЗаказКлиентаСостав.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; КонецПроцедуры

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

Чтобы разместить внешнюю обработку в разделе 1С, необходимо ей в модуле объекта прописать процедуру «СведенияОВнешнейОбработке». В основном меню обработки нажмите «Действия» и выберите «Модуль объекта». Здесь необходимо прописать все нужные для 1С настройки, чтобы система поняла, что от нее требуется и что за файл перед ней. На скриншоте изображен код функции «СведенияОВнешнейОбработке».

Функция СведенияОВнешнейОбработке() Экспорт ДанныеДляРег = Новый Структура(); ДанныеДляРег.Вставить("Наименование","Новая внешняя обработка"); ДанныеДляРег.Вставить("БезопасныйРежим", Истина); ДанныеДляРег.Вставить("Версия", "ver.: 1.001"); ДанныеДляРег.Вставить("Вид", "ДополнительнаяОбработка"); ТабЗнКоманды = Новый ТаблицаЗначений; ТабЗнКоманды.Колонки.Добавить("Идентификатор"); ТабЗнКоманды.Колонки.Добавить("Использование"); ТабЗнКоманды.Колонки.Добавить("Представление"); НовСтрока = ТабЗнКоманды.Добавить(); НовСтрока.Идентификатор = "НоваяВнешняяОбработка"; НовСтрока.Использование = "ОткрытиеФормы"; НовСтрока.Представление = "Новая внешняя обработка"; ДанныеДляРег.Вставить("Команды", ТабЗнКоманды); Возврат ДанныеДляРег; КонецФункции

Фрагмент 3

Подключение внешней обработки в 1С

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


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

  • Указать размещение объекта. Нажатием на «Не определено» мы открываем окно разделов и укажем, в каких разделах будет доступна операция;
  • Выбрать пользователей, у которых данная команда появится в меню «Дополнительные обработки» выбранных разделов без лишних настроек. Для этого в табличной части нужно выбрать пункт «Быстрый доступ» и добавить в правую половину ответственных пользователей;
  • На вкладке «Дополнительная информация» вы можете указать папку, в которой будет находиться загруженная обработка;
  • После нажатия клавиши «Записать» в выбранном разделе в меню «Дополнительные обработки» пользователи обнаружат нашу команду и смогут ею воспользоваться.

Если мы хотим внести изменения в нашу обработку, необходимо сначала выгрузить ее из базы. Для этого в справочнике «Дополнительные обработки и отчеты» найдите нужную строчку и воспользуйтесь командой «Выгрузить в файл…». Внесите изменения, сохраните обработку и через клавишу «Загрузить из файла…» найдите измененный файл epf, не меняя параметры. После записи все пользователи увидят внесенные изменения.

Если вы используете не типовую или снятую с поддержки базу 1С, то воспользуйтесь возможностью загрузить обработку через конфигуратор. В дереве объектов в разделе «Обработки» создайте новую обработку и через контекстное меню выберите «Заменить на внешнюю обработку, отчет…». Останется лишь настроить запуск внешней обработки из нужного раздела, включив добавленную обработку в нужную подсистему.


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

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

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

Следующий шаг, делаем автоматическое закрытие программы после выполнения внешней обработки, которую мы создали и она у нас уже работает. Для этого в процедуре ПриОткрытии() в самом конце вставляем следующую команду: ЗавершитьРаботуСистемы(Ложь); в данном случае параметру ЗапрашиватьВозможность мы передаем значение «Ложь», что бы отсечь различные варианты дополнительных вопросов системы при закрытии, тем самым инициируем безусловное завершение работы 1С после выполнения данной внешней обработки. Для верности опять запускаем программу и выполняем обработку и убеждаемся, что она отработала и программа сама закрылась.

«C:\Program Files (x86)\1cv8\8.3.5.хххх\bin\1cv8.exe» ENTERPRISE /DisableStartupMessages /FС:\путь к базе /N»ИмяПользователя» /P»ПарольПользователя» /Execute с:\путь к обработке\самаобработка.epf

Расшифруем:

1. «C:\Program Files (x86)\1cv8\8.3.5.хххх\bin\1cv8.exe» ENTERPRISE — сам движок 1С в данном случае 8.3, проверьте путь с себя сами, он отличается в зависимости от версии и движка в том числе и не забываем править его после обновления последнего.

2. /DisableStartupMessages — отключаем все сообщения при старте системы.

4. /N»ИмяПользователя» /P»ПарольПользователя» — соответственно /N имя пользователя, также сразу без пробела и /P пароль.

5. /Execute с:\путь к обработке\самаобработка.epf — /Execute запускает нашу обработку, путь и название должно следовать после этого ключа.

Теперь все, остается только добавить в планировщик заданий наш cmd файл: avtozapusk1c.cmd , указав расписание его запуска.

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

Вот такие не хитрые инструменты помогают автоматизировать каждодневные рутинные операции, успехов Вам!

Создаем регламентное задание

Создадим регламентное задание «Выполнение обработки».

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

Назначим процедуру, которая будет срабатывать при запуске регламентного задания: МодульРегламентныхЗаданий.РегламентноеЗаданиеВыполнениеОбработки .

Сама процедура имеет вид:

Процедура РегламентноеЗаданиеВыполнениеОбработки(Ключ) Экспорт

ПараметрыРегламентныхЗаданий.ВыполнитьОбработкуСПараметрами(Ключ);

КонецПроцедуры

Создаем справочник для регламентных заданий

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

Справочник «Параметры регламентных заданий» :

Реквизиты :

· КодПередЗапуском - неограниченная строка - код на языке 1С, который нужно выполнить перед запуском.

· Обработка из конфигурации - строка (100) - идентификатор обработки из конфигурации

· Обработка из справочника - строка (100) - ссылка на элемент справочника «Внешние обработки», если такой имеется в конфигурации

· Выполнять через приложение 1С - булево - будет создано отдельное приложение 1С и в нем будет запущено регламентное задание. Создано для 8.1, где не все методы приложения доступны на сервере, где работает регламентное задание.

· КодЗапуска - - неограниченная строка - код на языке 1С, который будет выполняться при запуске регламентного задания.

Создадим форму элемента :

По нажатию на кнопку «Создать регл. задание» программно создается регламентное задание с ключом-кодом:

Процедура ОсновныеДействияФормыСоздатьРеглЗадание(Кнопка)

Перем Задание;

Ключ = СокрЛП(Код);

Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ВыполнениеОбработки");

Задание.Наименование = Ключ;

Задание.Ключ = Ключ;

Параметры = Новый Массив();

Параметры.Добавить(Ключ);

Задание.Параметры = Параметры;

Задание.Записать();

КонецПроцедуры

Запуск регламентного задания

Каждое созданное нами регламентное задание имеет ключ:

Этот ключ соответствует коду справочника «Параметры регламентных заданий», по нему осуществляется поиск при старте задания. Если элемент справочника не найдено, задание не выполняется.

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

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

Для 1С81 предусмотрено выполнение в новом приложении - чтобы можно было использовать код, доступный только на клиенте, в том числе и использование внешних обработок. Для этого нужно установить галочку «Выполнять через приложение 1С». Иначе регламентное задание будет выполняться на сервере.

Рекомендую устанавливать пользователя в поле «Пользователь» у вновь созданного регламентного задания, чтобы задание выполнялось под определенными правами. Рекомендую такому пользователю давать полные права. У меня используется пользователь « robot ».

Расписание регламентного задания создается по гиперссылке «Расписание» из формы регламентного задания. Можно использовать обработку «Консоль регламентных заданий».

2017-12-19T18:29:06+00:00

Обновлятору не требуется быть всё время открытым или работать как служба, чтобы стал возможен запуск операций по расписанию.

Запуск по расписанию работает через стандартный механизм Windows, который называется "Планировщик задач".

И, когда пользователь задаёт настройки расписания...

Обновлятор автоматически создаёт нужные задачи в планировщике:

Чего нельзя забывать

Выбор пользователя

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

Должен иметь права в системе на "Вход в качестве пакетного задания".

Как проверить имеет ли пользователь необходимые права?

Самый простой вариант, это нажать правой кнопкой на созданном задании в планировщике и выбрать "Выполнить":

Если после того как отработает задача результат её запуска будет успешным...

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

Должен иметь непустой пароль. Это требование безопасности Windows. Если вы столкнулись именно с этим ограничением, то самым правильным решением будет:

  • либо назначить пароль текущему пользователю, под которым вы собираетесь запускать обновлятор по расписанию
  • либо создать в системе отдельного пользователя с паролем, которого и прописать в расписании обновлятора

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

Выбор баз

Также нельзя забывать, что в операциях, запущенных по расписанию участвуют только те базы, которые выбраны в списке баз, участвующих в расписании:

При этом не важно стоит ли отметка рядом с базой в общем списке:

Эти галки (в общем списке) предназначены только для ручного запуска операций и на запуск по расписанию никак не влияют.

Порядок запуска

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

Это означает, что если нам, к примеру, нужно настроить, чтобы в 22-00 выполнялась архивация, а сразу после её окончания обновление баз, то достаточно для архивации указать время запуска 22-00, а для обновления, например, 22-01.

Что если нужно более сложное расписание

А что, если нам нужен не просто регулярный запуск в определенное время в определенные дни? Что если мы хотим, скажем, настроить запуск с 5 часов каждые пол часа, ну или что-то в этом роде?

В этом случае нам нужно воспользоваться всей мощью планировщика задач.

Сначала настраиваем расписание через обновлятор, указав что конкретное расписание будет настроено уже в планировщике:

А уже затем открываем свойства созданных обновлятором задач в планировщике Windows:

И на соответствующих вкладках настраиваем всё, что наша душа пожелает:

Как исключить базу из некоторых операций по расписанию

Предположим, что у нас настроено расписание для обновления и для архивации:

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

Как же этого добиться - ведь список баз участвующих в расписании у нас один:

А сделать это очень просто.

Зайдите в свойства той базы, которую нужно исключить из обновления по расписанию и в самом низу окна найдите пункт "Исключить некоторые операции...":

Нажмите на него и исключите обновление этой базы из запуска по расписанию:

Должно получиться вот так:

Возможен ли запуск по расписанию с другими параметрами

Хочу обратить отдельное внимание на то, что задача в планировщике задач - это обычный запуск обновлятора с определенными параметрами командной строки:

А параметров для запуска через командную строку у обновлятора много.

Вы можете используя их настроить автоматизацию гораздо более тонко и в соответствии с вашими потребностями. Только не меняйте параметры командной строки в уже созданном задании обновлятора - иначе он всё равно сбросит их на начальные при обновлении настроек запуска по расписанию. Вместо этого скопируйте созданное задание в планировщике (чтобы у него было своё имя) и меняйте уже его.

Обо всех ключах командной строки обновлятора .

Как узнать запускался ли обновлятор по расписанию

Бывает так, что расписание вроде бы настроили - но что-то идёт не так.

И мы вообще не уверены - запускался ли обновлятор этой ночью.

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

Здесь мы видим сколько дней назад запускалась соотв. операция по расписанию; сколько в ней участвовало баз и были ли ошибки. При этом если мы нажмём левой кнопкой на этих ссылках, то откроется соответствующий отчёт.

Также мы можем зайти в полный журнал отчётов обновлятора...

И посмотреть происходило ли выполнение задач.

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

Чтобы включить журнал планировщика Windows заходим в диалог "Запуск по расписанию" и нажимаем кнопку "Открыть планировщик Windows":

Это можно сделать также и из панели управления Windows (раздел администрирование).

Здесь находим и нажимаем пункт "Включить журнал всех заданий":

Готово! Теперь мы сможем просматривать историю работы любой задачи в планировщике.

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

Как настроить облачную систему мониторинга за запуском задач обновлятора

Сейчас я расскажу о способе как застраховать себя от ситуации - "ой, у нас оказывается уже целую неделю не архивируются (обновляются, тестируются..) базы".

Такая ситуация очень даже возможна, если мы настроили запуск архивации по расписанию, а затем:

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

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

Это, на мой взгляд, совершенно гениальная штука, которая называется healthchecks.io . У этих ребят есть и платные тарифы, но нам вполне сгодится их бесплатный тариф.

Идея следующая. Мы регистрируемся у них на сайте и в своём личном кабинете имеем возможность сказать:

  • Эй, HealthChecks, дай мне уникальный Url (адрес интернет ресурса).
  • HealthChecks, если по этому адресу никто не будет стучаться (запрашивать) в течение такого-то периода - оповести меня об этом на такую-то почту.

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

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

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

Простейший сценарий настройки HealthChecks вместе с обновлятором

Пусть мы настраиваем ежедневную архивацию на сервере с именем DataServer , который принадлежит компании ООО "Ромашка" :

И хотим, чтобы HealthChecks оповестил нас, если вдруг обновлятор перестанет запускаться для архивации или такие запуски будут завершаться аварийно.

3. Регистрируемся на почту, на которую хотим получать оповещения.

3. Переходим в раздел "Checks" и нажимаем большую зелёную кнопку "Add Check".

5. Изменим имя этой проверки на OOO "Romashka" (DataServer, archiving). Это нужно сделать, чтобы мы понимали с чем именно связана эта проверка (архивация на сервере с именем DataServer в компании ООО "Ромашка"):

6. Укажем период проверки (архивация должна запускаться 1 раз в день, сам процесс архивации может занимать до 12 часов):

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

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

Например, если мы настраиваем обновление по расписанию на запуск в 22-00, то сегодня это обновление может закончиться в 23-00, а уже завтра (вышло много новых обновлений) будет длиться до 4 утра.

Отсюда и дополнительный запас в 12 часов, чтобы не было ложных срабатываний от HealthChecks.

Результат настройки периода будет таким:

7. Но как видите поле Last Ping пустое (Never). Оно будет обновляться по мере обращения к этому адресу обновлятором при архивации. А если обращения не будет больше чем 1 день и 12 часов, то HealthChecks забьёт тревогу и оповестит нас на почту.

Рассмотрим в данной статье пошаговую инструкцию по созданию внешней обработки в 1С 8.3 в режиме управляемого приложения, соответственно, будем использовать управляемые формы. А самое главное — мы научимся подключать её к механизму «внешних обработок» конфигураций 1С, построенных на библиотеке стандартных подсистем версии 2.0 и новее.

Задача будет следующая: создать простейшую внешнюю обработку, которая будет выполнять групповое действие над справочником «Номенклатура», а именно, устанавливать выбранный процент ставки НДС для указанной группы номенклатуры.

Для этого сразу произведем необходимую настройку в программе (рассматривается конфигурация 1С 8.3: «Бухгалтерия предприятия 3.0» на управляемых формах).

Установка данного флажка дает нам возможность использовать внешние обработки.

Создание новой внешней обработки в 1С 8.3 на примере

Теперь переходим в конфигуратор. В меню «Файл» выбираем «Новый…». Откроется окно выбора вида создаваемого файла. Выбираем «Внешняя обработка»:

Откроется окно новой внешней обработки. Сразу зададим ей имя. Оно будет предложено при сохранении обработки на диск:

Добавим новую управляемую форму обработки. Указываем, что это форма обработки и она является основной:

На форме у нас будет два реквизита:

  • ГруппаНоменклатуры – ссылка на справочник «Номенклатура»;
  • ВыбСтавкаНДС – ссылка на перечисление Ставки НДС.

Создаем реквизиты в колонке «Реквизит» в верхнем правом окне. Перетаскиваем мышкой их в левое верхнее окно. Новые реквизиты должны сразу отобразиться на форме внизу.

Очередность реквизитов можно менять стрелками «Вверх» – «Вниз»:

Получите 267 видеоуроков по 1С бесплатно:

Осталось добавить кнопку «Установить». В управляемых формах нельзя просто так добавить кнопку на форму. Даже если добавить её в структуру элементов формы, на самой форме её видно не будет. Кнопку обязательно нужно связать с командой, которую она будет выполнять. Переходим к закладке «Команды» и добавляем команду «УстановитьСтавкуНДС». В свойствах команды создаем действие. Обработчик команды выбираем «На клиенте». Команду можно добавить на форму также простым «перетаскиванием» в раздел с элементами формы.

В модуле формы будет создана одноименная процедура. В ней вызовем процедуру на сервере:

&НаКлиенте

Процедура УстановитьСтавкуНДС(Команда)

УстановитьСтавкуНДСНаСервере();

КонецПроцедуры

В процедуре на сервере напишем небольшой запрос и действия, связанные с установкой ставки НДС:

&НаСервере

Процедура УстановитьСтавкуНДСНаСервере()

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ (&ГруппаНоменклатуры)
| И НЕ Номенклатура.ПометкаУдаления
| И НЕ Номенклатура.ЭтоГруппа»;

Запрос.УстановитьПараметр(«ГруппаНоменклатуры», ГруппаНоменклатуры);
РезЗапроса = Запрос.Выполнить();
ВыбДетЗаписи = РезЗапроса.Выбрать();

Пока ВыбДетЗаписи.Следующий() Цикл

Попытка
СпрНомОбъект.Записать();
Исключение
Сообщить(«Ошибка записи объекта «»» + СпрНомОбъект + «»»!
|» + ОписаниеОшибки());
КонецПопытки;

КонецЦикла;

КонецПроцедуры

Возвращаемся на закладку «Форма», добавляем на форму кнопку и связываем ее с командой:

Как таковая наша обработка готова к использованию. Чтобы ее вызвать, в режиме «1С Предприятия» нужно зайти в меню «Файл» – «Открыть» и выбрать созданный файл.

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

Для этого и служит раздел «Дополнительные отчеты и обработки».

Но чтобы добавить туда нашу обработку, нужно сначала дать ей описание и сообщить программе ее свойства.

Описание функции «Сведения О Внешней Обработке»

Приведу пример содержимого данной функции. Она должна быть экспортной и, соответственно, располагаться в модуле обработки:

Функция СведенияОВнешнейОбработке() Экспорт

ДанныеДляРег = Новый Структура();
ДанныеДляРег.Вставить(«Наименование», «Установка ставки НДС»);
ДанныеДляРег.Вставить(«БезопасныйРежим», Истина);
ДанныеДляРег.Вставить(«Версия», «ver.: 1.001»);
ДанныеДляРег.Вставить(«Информация», «Обработка для установки ставки НДС в справочнике Номенклатура»);
ДанныеДляРег.Вставить(«Вид», «ДополнительнаяОбработка»);

ТабЗнКоманды = Новый ТаблицаЗначений;
ТабЗнКоманды.Колонки.Добавить(«Идентификатор»);
ТабЗнКоманды.Колонки.Добавить(«Использование»);
ТабЗнКоманды.Колонки.Добавить(«Представление»);

НовСтрока = ТабЗнКоманды.Добавить();
НовСтрока.Идентификатор = «ОткрытьОбработку»;
НовСтрока.Использование = «ОткрытиеФормы»;
НовСтрока.Представление = «Открыть обработку»;
ДанныеДляРег.Вставить(«Команды», ТабЗнКоманды);

Возврат ДанныеДляРег;

КонецФункции

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

Как видим, все довольно просто. Не совпадает лишь один реквизит: «ВариантЗапуска» – «Использование». Если посмотреть код одного из общих модулей, то мы увидим, как возникает связка этих полей:

Чтобы определить, какие поля структуры обязательны, можно сначала не описывать ее, просто создать пустую, а далее воспользоваться отладчиком. Если трассировать модули при регистрации обработки, сразу становится ясно, какие поля требуются, а какие нет.

Подключение внешней обработки в 1С 8.3