Если поле не заполнено выдавать ошибку 1с

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

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

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

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

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

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

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

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

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

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

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

Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "Необходимо заполнить поставщика!";
    Сообщение.Поле  = "Поставщик";
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Сообщить();
    Отказ = Истина;
КонецЕсли;

// Проверка остальных реквизитов
// ..........

// Очистить массив проверяемых реквизитов, чтобы платформа
// не выполняла их автоматическую проверку
ПроверяемыеРеквизиты.Очистить(); 

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

Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "Необходимо заполнить поставщика!";
    Сообщение.Поле  = "Поставщик";
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Сообщить();
    Отказ = Истина;
    // Удалить поставщика из массива проверяемых реквизитов
    ИндексПоляПоставщик = ПроверяемыеРеквизиты.Найти("Поставщик");
    Если ИндексПоляПоставщик <> Неопределено Тогда
        ПроверяемыеРеквизиты.Удалить(ИндексПоляПоставщик);
    КонецЕсли;
КонецЕсли;

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

ПроверяемыеРеквизиты.Добавить("Комментарий");

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

ПроверяемыеРеквизиты.Очистить();

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

Справка

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

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

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

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

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

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

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

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

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

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

    // Проверим заполненность реквизита «Покупатель»
    Покупатель = ПроверяемыеРеквизиты.Найти("Покупатель");

    Если Не ЗначениеЗаполнено(Покупатель) Тогда
        
        // Если он не заполнен, сообщим об этом пользователю
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = "Не указан Покупатель, на которого выписывается товарная накладная!";
        Сообщение.Поле = "Покупатель";
        Сообщение.УстановитьДанные(ЭтотОбъект);
        Сообщение.Сообщить();
            
        // Сообщим платформе, что мы сами обработали проверку заполнения реквизита «Покупатель»
        ПроверяемыеРеквизиты.Удалить(Покупатель);

        // Так как информация не консистентна, то продолжать работу дальше смысла нет
        Отказ = Истина;
            
    КонецЕсли;

    // Сообщим платформе, что мы сами обрабатываем проверку реквизита товар в табличной части «Товары»
    ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары.Товар"));

    // Обходим строки и проверяем заполнение реквизита
    Для Индекс = 0 По Товары.Количество()-1 Цикл
        СтрокаТовар = Товары.Получить(Индекс);
        Если Не ЗначениеЗаполнено(СтрокаТовар.Товар) Тогда
            Сообщение = Новый СообщениеПользователю();
            Сообщение.Текст = "В строке " + Индекс + " не заполнено значение товара";
            Сообщение.Поле = "Товары[" + Индекс + "].Товар";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            Отказ = Истина;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Поиск:
1С:Предприятие • Обработка проверки заполнения • Проверяемые реквизиты • Реквизит • Управляемая форма

В 1С весь пользовательский интерфейс построен на формах. Для того чтобы наглядно в этом убедиться достаточно открыть любой документ или справочник. Формы создаются в режиме 1С:Конфигуратор. Для их создания необходимо обладать знаниями в области программирования 1С. Очень часто перед обработой данных с формы требуется выполнить проверку на заполненность обязательных полей. Это можно сделать несколькими способами.

Встроенные методы проверки заполнения

Во встроенном языке 1С есть функция для автоматической проверки заполнения полей формы. Функция ПроверитьЗаполнение() проверяет заполнение реквизитов у которых свойство «Проверка заполнения» установлено в значение «Показывать ошибку». Если реквизит не заполнен, то выводится сообщение об ошибке.

Свойство «Проверка заполнения» можно установить в двух местах:

1) В свойствах реквизита формы

Свойство проверка заполнения в реквизите формы


Свойство проверка заполнения в реквизите справочника

2) В свойствах реквизита объекта метаданных (справочника, документа и т.д)

Свойство проверка заполнения в реквизите справочника

Процедура ВыполнитьНажатие()Если НЕ ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;//...
//...
//...

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

Программная проверка заполнения

Встроенный язык программирования обладает всеми необходимыми возможностями для того чтобы написать проверку на заполненность полей формы. В основном, для проверки заполнения используется несколько функций. Для проверки ссылочных значений применяется встроенная функция Пустая(), которая вызывается непосредственно из ссылки. Для проверки строковых значений подходит функция ПустаяСтрока(<Строка>). Есть более универсальный метод ЗначениеЗаполнено(<Значение>), он проверяет заполненность значений любых типов. Информацию о том как работает та или иная функция можно найти в синтакс-помощнике.

Процедура ПроверитьЗаполнение()//Проверка ссылочных знаечний
Если Номенкалтура.Пустая() Тогда
Сообщить("Номенлатура пустая ссылка");
КонецЕсли;//Проверка строковых знаечний
Если ПустаяСтрока(Артикул) Тогда
Сообщить("Строка пустая");
КонецЕсли;//Проверка с помощью функции ЗначениеЗаполнено()
//Булево значение всегда заполнено
//Строка не пустая, если в строке есть непробельные символы
//Массив или коллекция не пустая, если в них есть хотя бы 1 элемент
//Неопределено и Null это всегда пустые значения
Если НЕ ЗначениеЗаполнено(Номенкалтура) Тогда
Сообщить("Номенлатура пустая ссылка");
КонецЕсли;Если НЕ ЗначениеЗаполнено(Артикул) Тогда
Сообщить("Строка пустая");
КонецЕсли;КонецПроцедуры

В этой статье я рассмотрю основные механизмы платформы 1С 8.3, которые обеспечивают проверку заполнения реквизитов.

Проверка заполнения реквизита объекта 1С

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

Для того, чтобы у реквизита объекта осуществлялась проверка заполнения, достаточно в свойстве реквизита «Проверка заполнения» указать значение «Выдавать ошибку».

Проверка заполнения реквизита объекта 1С

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

Проверка заполнения реквизита объекта 1С

Данная проверка будет осуществляться независимо от того, сгенерирована эта форма платформой 1С 8.3 автоматически, или используется форма созданная разработчиком.

Проверка заполнения табличной части в 1С

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

Проверка заполнения табличной части в 1С

Если в этом случае мы попытаемся записать элемент, в котором будет табличная часть без строк, то выйдет ошибка, и записать элемент не получится.

Проверка заполнения табличной части в 1С

В тоже время, мы спокойно сможем записать элемент, у которого имеется строка табличной части с пустыми полями.

Проверка заполнения табличной части в 1С

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

Проверка заполнения программно в 1С

Иногда возникает необходимость проверить программно заполнение объекта в 1С. Для этих целей предназначен метод ПроверитьЗаполнение(), который имеется у большинства объектов 1С (справочники, документы и т.д.).

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

НовОбъект = Справочники.Номенклатура.СоздатьЭлемент();
НовОбъект.Наименование = "Товар";
Если НовОбъект.ПроверитьЗаполнение() Тогда
    НовОбъект.Записать();
КонецЕсли;

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

Иногда, нужно проверить заполнение реквизита, у которого в свойстве «Проверка заполнения» установлено значение «Не проверять».  Например, у реквизита Артикул справочника Номенклатура.

Проверка заполнения программно в 1С

Если нам нужно осуществлять проверку этого реквизита (например, по какой-то определенной логике), то необходимо в модуле объекта создать метод  ОбработкаПроверкиЗаполнения.

ОбработкаПроверкиЗаполнения в 1С

ОбработкаПроверкиЗаполнения в 1С

У этого метода, который является процедурой, имеется параметр ПроверяемыеРеквизиты. Этот параметр массив, в котором содержится список имен реквизитов, которые нужно проверять. Если в этот список мы добавим название реквизита, то при сохранении элемента будет осуществляться проверка на то, заполнен этот реквизит или нет.

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    ПроверяемыеРеквизиты.Добавить("Артикул");
КонецПроцедуры
Проверка заполнения программно в 1С

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

Например, удалим из проверяемых реквизит ПолноеНаименование.

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    Индекс = ПроверяемыеРеквизиты.Найти("ПолноеНаименование");

    Если Индекс <> 0 Тогда
        ПроверяемыеРеквизиты.Удалить(Индекс);
    КонецЕсли;

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

Тогда мы сможем спокойно записать элемент с незаполненным реквизитом ПолноеНаименование.

Проверка заполнения программно в 1С

Если мы хотим проверить программно, что заполнен реквизит табличной части объекта, то необходимо добавить этот реквизит в массив ПроверяемыеРеквизиты по такому формату: [НазваниеТабличнойЧасти].[НазваниеРеквизита] .

Например:

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

    ПроверяемыеРеквизиты.Добавить("СписокСвойств.НазваниеСвойства");

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

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

Проверка заполнения программно в 1С

Проверка заполнения формы 1С

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

Проверка заполнения реквизита объекта 1С

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

&НаКлиенте
Процедура Посчитать(Команда)

    Если ПроверитьЗаполнение() Тогда

        Сумма = Множетель1 * Множетель2;

    КонецЕсли;

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

Теперь мы не сможем посчитать сумму, если один из множителей не заполнен.

Проверка заполнения реквизита объекта 1С

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Проверка заполнения реквизитов

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

Проверка заполнения

Платформа поддерживает автоматическую проверку указанных реквизитов прикладных объектов и форм, а также позволяет выполнить процесс проверки в модуле. Для управления проверкой заполнения реквизита служит свойство Проверка заполнения. Если свойство установлено в значение Не проверять – платформа не проверяет заполнение реквизита. Значение Выдавать ошибку указывает на необходимость выполнять проверку.

Платформа выполняет автоматическую проверку заполнения:
● констант;
● справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, бизнес-процессов, задач:
● реквизитов и стандартных реквизитов,
● табличных частей,
● реквизитов и стандартных реквизитов табличных частей;
● наборов записей регистров бухгалтерии, регистра сведений, регистра накопления, регистра расчета, перерасчетов, последовательностей:
● измерений,
● ресурсов,
● реквизитов и стандартных реквизитов;
● реквизитов форм;
● реквизитов форм отчетов;
● реквизитов форм обработок.
ПРИМЕЧАНИЕ. Проверка заполнения реквизитов выполняется аналогично функции ЗначениеЗаполнено(). Проверка заполнения табличных частей подразумевает, что табличная часть считается заполненной, когда в ней присутствует хотя бы одна строка.
Проверка заполнения может быть вызвана двумя способами:
● вызовом метода ПроверитьЗаполнения() (у объекта или формы);
● автоматически.
ВНИМАНИЕ! Если свойство конфигурации Режим совместимости установлено в значение Версия 8.1, то автоматическая проверка заполнения не работает.

Установки по умолчанию

Свойство реквизита Проверка заполнения по умолчанию устанавливается в значение Выдавать ошибку для следующих стандартных реквизитов:
ПланОбмена – Наименование;
Справочник – Владелец, Наименование;
Документ – Дата;
ПланВидовХарактеристик – Наименование;
ПланСчетов – Код, Наименование;
ПланСчетов.ВидыСубконто – ВидСубконто;
ПланВидовРасчета – Наименование;
ПланВидовРасчета.ВедущиеВидыРасчета – ВидРасчета;
ПланВидовРасчета.БазовыеВидыРасчета – ВидРасчета;
ПланВидовРасчета.ВытесняющиеВидыРасчета – ВидРасчета;
РегистрСведений – Период;
РегистрНакопления – Период;
РегистрБухгалтерии – Период;
РегистрРасчета – ПериодРегистрации, ВидРасчета, ПериодДействияНачало, ПериодДействияКонец;
БизнесПроцесс – Дата;
Задача – Наименование.

Порядок работы

Автоматическая проверка заполнения вызывается расширением формы перед интерактивной записью всех объектов, кроме документов, бизнес-
процессов, отчетов и обработок. Для этих объектов определено следующее поведение:
● для документов:
● проверка заполнения вызывается расширением формы перед проведением, если                   свойство Проведение установлено в значение Разрешить;
● проверка заполнения вызывается расширением формы перед записью, если                            свойство Проведение установлено в значение Запретить;
● для бизнес-процессов проверка заполнения вызывается расширением формы перед стартом;
● для отчетов проверка заполнения вызывается расширением формы при нажатии                   кнопки Сформировать;
● для обработок проверка заполнения вызывается расширением формы в случаях, если            нажаты кнопки, связанные со стандартными командами формы OK, Да, Повторить,                Пропустить.
Если реквизит является основным реквизитом формы следующих типов: СправочникОбъект, ДокументОбъект, ОтчетОбъект,
ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетовОбъект, БизнесПроцессОбъект, ЗадачаОбъект, то для значения такого реквизита
также будет вызвана проверка заполнения.
Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство Проверять заполнение автоматически. В этом случае вначале будет вызван обработчик ОбработкаПроверкиЗаполненияНаСервере() формы, а затем обработчик ОбработкаПроверкиЗаполнения() модуля объекта.
ВНИМАНИЕ! Если у формы свойство Проверять заполнение автоматически установлено в значение Истина при выполнении стандартных команд Записать (Провести для документов и т. д.), а также стандартных команд формы OK, Да, Повторить, Пропустить, будет вызван метод ПроверитьЗаполнение(). В противном случае проверка заполнения не вызывается ни для формы, ни для объекта.

Процесс проверки заполнения происходит следующим образом:
● Формируется список имен реквизитов формы, для которых возможна проверка заполнения и для которых свойство ПроверкаЗаполнения установлено в значение ВыдаватьОшибку. В этот список не будут включены имена реквизитов, тип которых не поддерживает проверку заполнения (например, СправочникОбъект), но будет включено имя основного реквизита формы.
В автоматически формируемый список реквизитов не будут включены реквизиты формы, отключенные с помощью функциональных опций.
● Вызывается обработчик события формы ОбработкаПроверкиЗаполненияНаСервере, в котором разработчик может описать свой алгоритм проверки заполнения или изменить состав проверяемых реквизитов. В обработчик будет передан сформированный список имен реквизитов. Если в обработчике необходимо добавить к списку какие-либо реквизиты, это можно сделать только для реквизитов вышеперечисленных типов (для
которых возможна проверка заполнения в форме) и основного реквизита. Добавление в список имен реквизитов объектного типа (например, СправочникОбъект) вызовет исключение при дальнейшей автоматической проверке. Добавление в список имени несуществующего реквизита вызовет исключение при дальнейшей автоматической проверке.
● После завершения работы обработчика события механизм проверки заполнения получает обратно список имен, проверяемых реквизитом (который, возможно, был изменен в обработчике). Система анализирует список реквизитов и проверяет заполненность каждого реквизита. Если реквизиттявляется основным реквизитом объектного типа (например, Объект типа СправочникОбъект), будет вызвана проверка заполнения самого объекта.
Если реквизит является реквизитом объектного типа, но не основным, будет вызвано исключение.

Разработчик имеет возможность влиять на процесс проверки путем определения в модуле объекта, набора записей и в модуле формы обработчика события ОбработкаПроверкиЗаполнения.
Определив обработчик события, разработчик получает полный контроль над проверкой заполнения. В параметре ПроверяемыеРеквизиты обработчик получает массив реквизитов, для которых в режиме Конфигуратор указано, что они должны проверяться. Разработчик может произвольно модифицировать этот массив:
● удалять те реквизиты, проверку заполнения которых он реализует сам или считает, что их не нужно проверять в данный момент;
● добавлять необходимые реквизиты, для которых должна выполниться проверка заполнения.
В случае если разработчика не устраивает стандартная процедура проверки, он может написать алгоритм проверки сам и, используя объект СообщениеПользователю, сообщить об имеющихся проблемах пользователю.
Если в процессе проверки разработчик вывел пользователю сообщения об ошибках, необходимо установить параметр Отказ в значение Истина, чтобы уведомить платформу о том, что текущее действие не может быть завершено.
Параметр события ПроверяемыеРеквизиты содержит имена атрибутов в следующем формате:
● для реквизитов и констант – ИмяРеквизита, например, Поставщик;
● для табличных частей – ИмяТабличнойЧасти, например, Товары;
● для реквизитов табличных частей – ИмяТабличнойЧасти.ИмяРеквизита, например, Товары.Номенклатура;
● для реквизитов форм – ИмяРеквизита, например, ДокументОбъект.

Для реквизитов, входящих в состав функциональных опций без параметров, значение опции учитывается при проверке заполнения. Если функциональная опция включена, то реквизит будет включен в список проверяемых реквизитов; если опция выключена, реквизит не будет включен в список проверяемых реквизитов. Это значит, что отключенное поле не будет передано через параметры ПроверяемыеРеквизиты в
ОбработкаПроверкиЗаполнения.
Реквизиты, входящие в состав функциональной опции с параметрами , всегда включаются в список проверяемых реквизитов (параметр ПроверяемыеРеквизиты). Удаление реквизита из списка проверяемых реквизитов в таких случаях необходимо выполнять в обработчике ОбработкаПроверкиЗаполнения. Для этого следует получить значение функциональной опции, указав в качестве параметров необходимые данные
объекта.

Правила отображения отметки незаполненного

На отображение отметки незаполненного влияют следующие свойства элементов конфигурации:
● свойство Проверка заполнения реквизита или стандартного реквизита объекта метаданных;
● свойство Проверка заполнения реквизита формы;
● свойство Автоотметка незаполненного элемента формы;
● свойство ОтметкаНезаполненного элемента формы (доступно только для программного изменения).
Свойство элемента формы Автоотметка незаполненного может быть установлено в значение:
Авто – отметка будет отображаться, если у реквизита формы или реквизита (стандартного реквизита) объекта метаданных свойство Проверка заполнения установлено в значение Выдавать ошибку и реквизит, связанный с элементом формы, содержит пустое значение.
Да – отметка будет отображаться для незаполненного элемента вне зависимости от того, в каком состоянии находится свойство Проверка
заполнения.
Нет – отметка не будет отображаться для незаполненного элемента вне зависимости от того, в каком состоянии находится свойство Проверка заполнения.
При начале интерактивного изменения поля ввода отметка незаполненного перестает отображаться, при этом значение свойства ОтметкаНезаполненного не изменяется. Отображение отметки восстанавливается (если это необходимо) после того, как в поле ввода завершено интерактивное редактирование или установлено значение. При этом свойство ОтметкаНезаполненного может быть изменено системой в том случае, если
свойство АвтоОтметкаНезаполненного установлено в значение Истина:
● если значение в поле не заполнено, то свойство ОтметкаНезаполненного будет установлено в значение Истина;
● если в поле значение заполнено, то свойство ОтметкаНезаполненного будет установлено в значение Ложь.
ПРИМЕЧАНИЕ. Если свойство ОтметкаНезаполненного установлено у таблицы, то для таблицы, в которой нет строк, будет подсвечена первая строка, а для заполненной таблицы – все строки.
Кроме того, отметка незаполненного также будет отображена, если в окне сообщений есть сообщение , связанное с конкретным полем формы, вне зависимости от установленных свойств элемента формы и связанных с ним реквизитов. После очистки окна сообщений отметка незаполненного снимается у тех элементов формы, значение свойства ОтметкаНезаполненного которых равно значению Ложь.

Вывод сообщения о незаполненном поле документа ☑ 0

LivingStar

20.09.19

14:08

УТ 11, Документ.ЗаказКлиента.

При записи документа нужно выводить сообщение о том что не заполнено одно из полей на форме.

В зависимости от выбранного значения в списке другого поля. Подскажите пожалуйста. Где правильно это сделать?

В какой процедуре? В модуле формы или модуле объекта?

1

GROOVY

20.09.19

14:11

В обработкеПроверкиЗаполнения

2

LivingStar

20.09.19

14:13

В процедуре ОбработкаПроверкиЗаполненияВМодулеФормы ?

3

Mankubus

20.09.19

14:14

объекта

4

trooba

20.09.19

14:15

(2) Пример из типовой, тут есть обращение к обеим функциям, думаю разберетесь:

Если УчетТоваров.НеУказанаСтранаПроисхождения(СтрокаТовары.НомерГТД, СтрокаТовары.СтранаПроисхождения) Тогда

                ТекстСообщения = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения(«Колонка»,, НСтр(«ru = ‘Страна происхождения'»),

                    СтрокаТовары.НомерСтроки, ИмяСписка);

                    
                Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(«Товары», СтрокаТовары.НомерСтроки, «СтранаПроисхождения»);

                ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, Поле, «Объект», Отказ);

            КонецЕсли;

5

LivingStar

20.09.19

14:33

(4) Обязательно так сложно делать?

Может перед записью? Если значение поля не такое то, и если не заполнено такое то поле, то сообщить то то?

(4) Это сходу не понять.

(3) В модуле документа? Я видел процедуру (2) в модуле формы. То есть нужно её сейчас искать именно в модуле объекта?

6

LivingStar

20.09.19

14:34

(1) (3) Вижу процедуру ОбработкаПроверкиЗаполнения в модуле объекта.

То есть нужно делать именно в ней? А в какой момент она выполняется?

7

palsergeich

20.09.19

14:39

(6) когда происходит проверка заполнения.

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

Рекомендую почитать на ИТС или на ИС про это

8

GROOVY

20.09.19

14:40

(6) Там в синтакс-помощник все ОЧЕНЬ подробно описано.

9

LivingStar

20.09.19

14:59

Делаю в расширении в модуле объекта.

Почему выходит ошибка?

{ДМ_Документ_ЗаказКлиента Документ.ЗаказКлиента.МодульОбъекта(39,29)}: Переменная не определена (Объект)

        Если Не ЗначениеЗаполнено(<<?>>Объект.ДополнительнаяИнформацияПоДоставке1) Тогда (Проверка: Сервер)

//////////////////////////////////////////////////////////////

// LivingStar 2019_09_20 ->

&После(«ОбработкаПроверкиЗаполнения»)

Процедура ДМ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    Если Не СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда

        Если Не ЗначениеЗаполнено(Объект.ДополнительнаяИнформацияПоДоставке1) Тогда

            
        КонецЕсли;

    КонецЕсли;

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

// <-

10

LivingStar

20.09.19

15:49

Я сдела вот так, почему то по коду проходит, но сообщение не показывается (((((

&После(«ОбработкаПроверкиЗаполнения»)

Процедура ДМ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    Если Не СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда

        Если Не ЗначениеЗаполнено(ЭтотОбъект.ДополнительнаяИнформацияПоДоставке) Тогда

            Сообщить(«Не заполнено поле <<Контактная и дополнительная информация по доставке !>>», СтатусСообщения.Информация);    

        КонецЕсли;

    КонецЕсли;

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

Почему?

11

LivingStar

20.09.19

15:56

Сообщение не показывается. Что я не так делаю?

&После(«ОбработкаПроверкиЗаполнения»)

Процедура ДМ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    Если Не СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда

        Если Не ЗначениеЗаполнено(ЭтотОбъект.ДополнительнаяИнформацияПоДоставке) Тогда

            Сообщить(«Не заполнено поле <<Контактная и дополнительная информация по доставке !>>», СтатусСообщения.Информация);    

            Текст = «Не заполнено поле <<Контактная и дополнительная информация по доставке !>>»;

            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);

        КонецЕсли;

    КонецЕсли;

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

12

LivingStar

20.09.19

16:03

Подскажите пожалуйста! Где мое сообщение????? Почему оно не показывается? Что я не так сделал??????

13

Кодер

20.09.19

16:06

Последний вопрос, конечно, провоцирует…

Ты на УФ? Тогда зачем используешь «Сообщить»?

14

palsergeich

20.09.19

16:08

Проверка заполнения сама плюется сообщениями, надо только поиграть с МассивПроверяемыхРеквмзитов

Я думал ты таки справку то почитал, там же усё написано(

15

palsergeich

20.09.19

16:10

(14) ой проверяемыереквизиты, вот с ней надо поиграться

16

Механик

20.09.19

16:21

(13) А разве «Сообщить» на УФ не работает?

17

LivingStar

20.09.19

16:29

(13) Я как то хочу вывести сообщение. Как угодно. Что бы оно осталось. А то я нажимаю записать и закрыть, документ закрывается, велетает и пропадает какое то сообщение не мое а моего нет ((((( Мне хоть как бы , любым способом. Почему не срабытывает? Помогите!!!!!!

18

LivingStar

20.09.19

16:30

Может эта процедура дурная????

ОбработкаПроверкиЗаполнения

И нужно делать в при записи и все будет работать?

Что не так у меня, подскажите?

19

Кодер

20.09.19

16:31

Дамочка, прекратите истерику.

Не можете творить — не надо, копируйте чужой удачный код.

И это не работает — почитайте документацию.

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

20

craxx

20.09.19

16:32

(18) Андрюха, завязывай тупить

21

LivingStar

20.09.19

16:35

Я с утра бывает могу хорошо работать, а после полудня ещё и под вечер, голова выключается. Вот дошел до того что не могу вывести сообщение ((( Что делать то?

22

ам794123

20.09.19

16:35

(17) вам же в (4) сказали как делать

23

SadrArt

20.09.19

16:36

(18) нет, это кто то другой дурной

24

LivingStar

20.09.19

16:36

дело в параметрах да?

ТекстСообщения, ЭтотОбъект, Поле, «Объект», Отказ);

25

SadrArt

20.09.19

16:38

у тебя сообщения выводятся, но ты их не видишь, потому как форма закрывается

сделай так, чтобы форма не закрывалась

26

SadrArt

20.09.19

16:39

(13) + «ЭтотОбъект» в модуле объекта тоже кажется моветон

27

Очевидно

20.09.19

16:39

28

LivingStar

20.09.19

16:42

(25) Вечер, как не пытайся а мозгов в голове уже нет (((((( Теперь с утра нового дня уже.

29

LivingStar

20.09.19

17:06

Как мне привязывать к форме сообщение то, если форма закрывается!

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

30

Очевидно

20.09.19

17:09

(29) в ссылке из (27) есть пример для копипаста

31

LivingStar

20.09.19

17:21

Скажите я в правильном месте делаю вывод сообщения?

Форма то закрывается!!!

Как что бы сообщение осталось?

Не знаю что это даст

// LivingStar 2019_09_20 ->

&После(«ОбработкаПроверкиЗаполнения»)

Процедура ДМ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    Если Не СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда

        Если Не ЗначениеЗаполнено(ЭтотОбъект.ДополнительнаяИнформацияПоДоставке) Тогда

            Сообщить(«Не заполнено поле <<Контактная и дополнительная информация по доставке !>>», СтатусСообщения.Информация);    

            Текст = «Не заполнено поле <<Контактная и дополнительная информация по доставке !>>»;

            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, ЭтотОбъект, «ДополнительнаяИнформацияПоДоставке»,»Объект.ДополнительнаяИнформацияПоДоставке»);

        КонецЕсли;

    КонецЕсли;

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

// <-

Пробую. Мне нужно что бы сообщение осталось!

32

LivingStar

20.09.19

17:22

(31) Какое то сообщение показывается, не моё, и все закрывается. Моего так и нет (

33

LivingStar

20.09.19

18:02

может быть само положение сообщения куда то скрыто?

Так тоже не работает.

&НаСервере

Процедура ДМ_ПриЗаписиНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)

    Если Не Объект.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда

        Если Не ЗначениеЗаполнено(Объект.ДополнительнаяИнформацияПоДоставке) Тогда

            Сообщить(«Не заполнено поле <<Контактная и дополнительная информация по доставке !>>», СтатусСообщения.Информация);    

            //Текст = «Не заполнено поле <<Контактная и дополнительная информация по доставке !>>»;

            //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, ЭтотОбъект, «ДополнительнаяИнформацияПоДоставке»,»Объект.ДополнительнаяИнформацияПоДоставке»);

        КонецЕсли;

    КонецЕсли;

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

34

LivingStar

20.09.19

19:00

35

LivingStar

20.09.19

19:07

Не работает

&НаКлиенте

Процедура ДМ_ПередЗаписьюПеред(Отказ, ПараметрыЗаписи)

    //ВсеОкна = ПолучитьОкна();

    //РабСтол = ВсеОкна[0];

    //РабСтол.Активизировать();

    //    

    ОкнаКлиентскогоПриложения = ПолучитьОкна();

    Для каждого ОкноКлиентскогоПриложения Из ОкнаКлиентскогоПриложения Цикл

        Если ОкноКлиентскогоПриложения.Основное Тогда

            ОкноКлиентскогоПриложения.Активизировать();

            Прервать;

        КонецЕсли;

    КонецЦикла;    

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

// <-

36

LivingStar

20.09.19

19:22

Кто либо понимает о чем я говорю? Нажатие кнопки провести и закрыть закрывает документ и нет сообщения ( !!! Как что бы оно было после закрытия документа?

37

Fram

20.09.19

21:33

(36) ты документацию принципиально не читаешь?

38

LivingStar

21.09.19

06:13

(37)  Ну подскажите что читать? Какое решение? Везде пишут что это не возможно или какие то примеры которые не работают.

39

PuhUfa

21.09.19

06:19

(38) не знай что ты где читаешь, но все возможно и все выше тебе уже подсказали. в той же ут11 примеров твоей «задачи» полно

40

LivingStar

21.09.19

06:59

(39) Вы понимаете что мне нужно вывести сообщение по провести и закрыть?

Форма документа закрывается и нет никаких сообщений. Я пробовал все возможные варианты.

Подскажите хоть один я попробую.

41

LivingStar

21.09.19

07:01

Не нужна мне процедура ОбработкаПроверкиЗаполнения.

То о чем я пишу принципиальная проблема, и по ней есть много статей, где это разбирается.

Одно из решений

2). Довольно часто необходимо вывести сообщение в обработке проведения документа, причем не только когда возникла ошибка при проведении, но и в том случае, когда документ успешно проведен. Проблема возникает когда пользователь использует команду “Провести и закрыть”. Сообщение привязывается к окну содержащему форму текущего документа, которое в случае успешного проведения тут же закрывается и пользователь его не видит. Все дело в том что метод Сообщить() объекта СообщениеПользователю выводит сообщение в АКТИВНОЕ окно, документ как правило открывается в дополнительном окне, которое в данном случае и является активным. Таким образом, что бы пользователь смог прочитать сообщение после закрытия формы документа, необходимо перед использованием метода Сообщить() активизировать основное окно управляемого приложения. Один из вариантов – сделать это в событии формы ПередЗаписью(), например так:

&НаКлиенте

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

  ОкнаКлиентскогоПриложения = ПолучитьОкна();

  Для каждого ОкноКлиентскогоПриложения Из ОкнаКлиентскогоПриложения Цикл

    Если ОкноКлиентскогоПриложения.Основное Тогда

      ОкноКлиентскогоПриложения.Активизировать();

      Прервать;

     КонецЕсли;

  КонецЦикла;

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

  // …..

  Сообщение = Новый СообщениеПользователю;

  Сообщение.Текст = «Проведен документ » + Ссылка;

  Сообщение.КлючДанных = Ссылка;

  Сообщение.Сообщить();

  // …..

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

Но у меня это не работает! Форма закрывается и моего сообщения нет

42

LivingStar

21.09.19

09:17

up

43

hhhh

21.09.19

09:44

(42) а точно окно основное? У тебя же не основное окно.

44

rphosts

21.09.19

09:47

(0) о! ЛивингСтар! (42) см (1) там всё есть!

(41) а где вот это самое: Отказ = Истина;

45

LivingStar

21.09.19

09:54

(44) Что такое отказ истина? Эточто бы документ оставался открытым при этом сообщении????

Этого не нужно.

Нужно что бы документ закрылся и вывелось сообщение. Как это сделать?

(43) Вы про какое окно? Вот http://joxi.ru/GrqW64zi4DaqP2

Я пытаюсь понять как это сделать и можно ли вообще.

Пользователь, нажимает «записать и закрыть», ему нужно вывести сообщение.

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

46

hhhh

21.09.19

10:02

(45) какое из всех этих окон Основное? Непонятно

47

rphosts

21.09.19

10:02

это значит отказаться от продолжения процесса на этом этапе.

48

Kashey

21.09.19

10:07

(45) Если проверяемое поле не заполнено, то документ должен проводиться или нет?

49

hhhh

21.09.19

10:07

(47) ему не нужно отказываться, просто сообщить и двигаться дальше.

50

LivingStar

21.09.19

10:09

(45) Основное — Это рабочий стол конфигурации. Основное окно конфигурации.

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

51

LivingStar

21.09.19

10:11

(47) Не нужно не от чего отказываться.

Пользователь жмет Записать и закрыть. Окно закрывается.

А пользователю выводится сообщение, —

    Если Не СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда

        Если Не ЗначениеЗаполнено(ЭтотОбъект.ДополнительнаяИнформацияПоДоставке) Тогда

            Сообщить(«Не заполнено поле <<Контактная и дополнительная информация по доставке !>>», СтатусСообщения.Информация);    

            Текст = «Не заполнено поле <<Контактная и дополнительная информация по доставке !>>»;

            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, ЭтотОбъект, «ДополнительнаяИнформацияПоДоставке»,»Объект.ДополнительнаяИнформацияПоДоставке»);

        КонецЕсли;

    КонецЕсли;

Или как там его вывести. Любым способом, что бы оно осталось. В обычных формах с этим бы не было бы проблем.

52

rphosts

21.09.19

10:11

(49) ну значит закроется вместе с сообщением оконце

53

rphosts

21.09.19

10:13

(51) если у вас такие извращения… прячьте кнопки ЗаписатьИЗакрыть, Ок, Провести и втыкайте вместо них свои со своей логикой

54

LivingStar

21.09.19

10:15

(53) Не нужно ничего прятать. Нужно сделать как заявлено.

Пользователь жмет, записать и закрыть.

Документ закрывается.

И если не заполнено это поле, то выводится сообщение об этом, и отображается.

А то сколько я его не вывожу его нет нигде.

55

hhhh

21.09.19

10:17

(54) Ну, потому что рабочий стол это не основное окно. Ты где прочитал, что оно основное?

56

rphosts

21.09.19

10:19

(54) оконце снизу — тексты всех вызовов Сообщить в нём. Если так нужно ещё и вернуться в закрытый уже документ — выкидывай туда этого документа Ссылку

57

LivingStar

21.09.19

10:24

(55) Я же вот вам подчеркнул http://joxi.ru/GrqW64zi4DaqP2

Я не сам это придумал а взял решение, про которое говорят что оно работает (41)

Но оно не работает!!!!!!!

(56) Я не понимаю. Можете по коду подсказать?

Я перепробовал все что можно, ничего не работает!!!!!

58

hhhh

21.09.19

10:31

(57) а какого года это решение в (41) ? Может оно столетнее? Точно на такси?

59

hhhh

21.09.19

10:33

(57) А рабочий стол открывал после проведения? Может ты забыл открыть рабочий стол и там посмотреть?

60

LivingStar

21.09.19

10:41

(59) После проведения и закрытия, когда документ закрывается

остается же рабочий стол????

Я СДЕЛАЛ ВОТ ТАК. ВСЕХ УСТРАИВАЕТ? ИЛИ ЧТО ТО НЕ ТАК? НЕ ВИЖУ ДРУГИХ ВАРИАНТОВ.

ЕСЛИ ВСЕ ЧТО И БЫЛО ТО СТОЛЕТНЕЕ. Я делаю в конфигурации УТ 11.4.7.141

/////////////////////////////////////////////////////

    // LivingStar 2019_09_21 ->

    Если Не Объект.СпособДоставки = ЗначениеСамовывоз() Тогда

        Если Не ЗначениеЗаполнено(Объект.ДополнительнаяИнформацияПоДоставке) Тогда

            Предупреждение(«Не заполнено поле»               + Символы.ПС +

                           «<<Контактная и дополнительная» + Символы.ПС +

                           «информация по доставке !>>»);    

        КонецЕсли;

    КонецЕсли;

    //

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

//

Функция ЗначениеСамовывоз()

    Возврат Перечисления.СпособыДоставки.Самовывоз;

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

// <-

61

hhhh

21.09.19

10:43

(60) нет, рабочий стол не остаётся.

62

LivingStar

21.09.19

10:44

(61) Ну не знаю тогда. Что сделать то что бы сообщение осталось???

Я уже не соображаю по этому поводу и решил остановиться на (60).

63

hhhh

21.09.19

10:45

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

64

LivingStar

22.09.19

08:41

(63) Какое решение тогда этой задачи?

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

65

Мимохожий Однако

22.09.19

08:44

(51) Правильнее и логичнее (ИМХО) при обязательных незаполненных полях делать отказ в записи документа, проведения и закрытии. Тогда не придётся городить огород с оповещением.

66

Фрэнки

22.09.19

09:22

продолжу пост выше — при том, что в топике задано, что форма документа отрыта и Запись документа с проведением делается из его формы. И исходя из того, что нужен контроль на заполненные поля, либо реквизиты объекта в форме.

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

Если потребуется, то можно использовать и вызовы процедур в контексте Сервер. Но вся клиентская муть останется на клиенте и обработчиках событий клиента. И даже без оповещений можно обойтись.

з.ы. решение будет довольно простым и примитивным.

67

Fram

22.09.19

11:04

(64) правильнее будет задать вопрос какой смысл в этом сообщении после закрытия формы?

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