Как отменить обработку заполнения 1с

Обновлено: 04.07.2024

"Нажать" Ctrl-Break программно не вариант? Либо использовать любую программу для автоматизации (Я н.п. обычно пользую AC Tool).

Либо написать скрипт на VB, что-то типа:

8.
kalimehtar
02.01.12 15:29

(1) yuriyscr,
А экранная клавиатура не спасает?

Если в обработке не предусмотрено заранее, что ее можно будет прервать - то через диспетчер задач снимай задачу 1Cv8 и будет счастье. Через диспетчер - так и поступаю. Но это не выход, вернее - выход, но корявый. Не красиво. Не правильно так. Ах да, - в обработке предусмотрено прерывание, но оно не срабатывает - не поступает команда прерывания от клавиатуры,- нажать ведь нечего. Вообще надо посмотреть в сторону процедуры ОбработкаПрерыванияПользователя(), сейчас под рукой нету конфигуратора, посмотреть, что там справка покажет по данной процедуре, можно конечно попробовать решить задачку через н-ное место - пишем батник, который генерирует нажатие нужной кнопки, которую и словит далее наша обработка прерывания. Есть программы, которые переназначают кнопки клавиатуры, можно их попробовать. а в программном коде прописано ОбработкаПрерыванияПользователя() ? В коде, в нужном месте поставить ОбработкаПрерыванияПользователя() . Тогда в этом месте можно будет прекратить обработку.

В коде есть ОбработкаПрерыванияПользователя(). На клиенте.

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

Прерывание выполняется безусловно, без запроса подтверждения. Это позволяет использовать данную процедуру и при выполнении длительных транзакций.

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

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

Так ведь дело в том, что нету клавиши "Пауз\Брэйк".
А с экранной клавиатуры не получится - т.к. фокус (активное окно/задача) - не обработка.

Обработчик события ОбработкаЗаполнения

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. В случае если в силу каких-либо условий необходимо ограничивать ввод на основании по команде "Создать на основании", то такую проверку следует выполнять в обработчике ОбработкаЗаполнения модуля объекта (набора записей). Например, это могут быть проверки вида:

  • Для команды "Создать на основании" не различимы группы и элементы справочников и планов видов характеристик: команда одинаково доступна в форме списка как для групп, так и для элементов. Требуется запретить ввод на основании групп.
  • Требуется запретить ввод на основании непроведенных документов.

2. Для оповещения пользователя о причинах отказа, в обработчике ОбработкаЗаполнения следует использовать исключения:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)

Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
Если ПолучитьЗначениеРеквизита(ДанныеЗаполнения, "ЭтоГруппа") = Истина Тогда
ВызватьИсключение "Ввод приказа о приеме на основании группы сотрудников невозможен!
|Выберите сотрудника. Для раскрытия группы используйте клавиши Ctrl и стрелку вниз";
КонецЕсли;

// обработка заполнения объекта по данным заполнения

При этом не рекомендуются какие-либо иные решения для подобных проверок. В частности, не следует создавать дополнительные команды для ввода на основании и размещать проверки в обработчиках этих команд.

Методическая рекомендация (полезный совет)

3. Рекомендуется придерживаться следующей логической структуры обработчика ОбработкаЗаполнения (отдельные шаги могут быть пропущены):

3.1. Выполнение специального заполнения в зависимости от типа параметра ДанныеЗаполнения .

Например:

ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ЗаполнитьДокументНаОснованииЗаказаКлиента(ДанныеЗаполнения);
// .

3.2. Выполнение общего заполнения, с целью заполнить значениями по умолчанию реквизиты, которые не были заполнены специальным заполнением. При этом необходимо предварительно проверять реквизит на заполненность.

Например:

Если Не ЗначениеЗаполнено(Подразделение) Тогда
Подразделение = ЗначениеНастроекПовтИсп.ПодразделениеПоУмолчанию();
КонецЕсли;

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

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

Механизм проверки заполнения позволяет автоматически проверить, заполнены ли указанные реквизиты объекта. Для этого нужно воспользоваться свойством ПроверкаЗаполнения , которое есть у реквизитов объектов конфигурации.


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

  • Одно событие — ОбработкаПроверкиЗаполненияНаСервере — можно обработать в модуле формы.
  • Другое событие — ОбработкаПроверкиЗаполнения — можно обработать в модуле прикладного объекта.


У формы, как правило, есть основной реквизит (редактируемый объект) и могут быть реквизиты, не относящиеся к редактируемому объекту, а являющиеся лишь частью формы:


Поэтому серверное событие формы ОбработкаПроверкиЗаполненияНаСервере предназначено для проверки заполнения тех реквизитов формы, которые не относятся к редактируемому объекту. Это данные только формы, у формы могут быть свои причины и алгоритмы для проверки этих данных.

Напротив, событие объекта ОбработкаПроверкиЗаполнения предназначено для для того, чтобы проверить реквизиты основного реквизита формы.

Обработчики обеих событий имеют параметр ПроверяемыеРеквизиты , в который платформа передает массив имен тех реквизитов, которые подлежат проверке. Если после выхода из обработчика в этом массиве все еще останутся какие-то имена реквизитов — платформа выполнит автоматическую проверку оставшися реквизитов.

Поэтому существует несколько сценариев того, как разработчик может встроить свой алгоритм в механизм проверки заполнения:

  • самостоятельно проверить заполненность всех реквизитов и очистить массив ПроверяемыеРеквизиты , чтобы платформа не выполняла их проверку
  • проверить часть реквизитов самостоятельно, удалить их из массива ПроверяемыеРеквизиты , а оставшиеся оставить на проверку платформе
  • добавить в массив ПроверяемыеРеквизиты какие-то реквизиты, чтобы платформа проверила и их тоже
  • вообще отказаться от проверки заполненности реквизитов, очистив массив

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

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

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

А очистить массив проверяемых реквизитов, чтобы ничего не проверять ни самому, ни платформе, можно так:

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

Справка

ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)

  • Отказ . Тип: Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись выполнена не будет. Значение по умолчанию Ложь .
  • ПроверяемыеРеквизиты . Тип: Массив . Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.

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

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

Для формы документа, если при конфигурировании для документа свойство Проведение установлено в Разрешить , событие вызывается только при проведении. Если документ не проводится (свойство Проведение установлено в Запретить ), то вызывается при записи.

ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

  • Отказ . Тип: Булево . Если в теле процедуры-обработчика установить данному параметру значение Истина , то будет выполнен отказ от продолжения работы после выполнения проверки заполнения. Значение по умолчанию Ложь .
  • ПроверяемыеРеквизиты . Тип: Массив . Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.

Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи или при проведении документа в форме, а также при выполнении метода ПроверитьЗаполнение() . Если для документа при конфигурировании свойство Проведение установлено в Разрешить , то вызывается только при проведении. Если документ не проводится (установлено Запретить ), то вызывается при записи.

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

Читайте также: