Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 08:20

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

Автор tasya, 27 июл 2021, 22:42

0 Пользователей и 1 гость просматривают эту тему.

tasya

Добрый день! Подскажите как из модуля формы передать данные в модуль объекта именно в процедуру ОбработкаПроверкиЗаполнения()? Через дополнительные свойства не получается, так как они заполняются в процедуре ПередЗаписьюНаСервере(), а она вызывается после ОбрабткаПроверкиЗаполнения.

Ивашка

Цитата: tasya от 27 июл 2021, 22:42Добрый день! Подскажите как из модуля формы передать данные в модуль объекта именно в процедуру ОбработкаПроверкиЗаполнения()? Через дополнительные свойства не получается, так как они заполняются в процедуре ПередЗаписьюНаСервере(), а она вызывается после ОбрабткаПроверкиЗаполнения.
а какие данные хотите передавать? какая задача стоит?

Ивашка


LexaK

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

2.при выполнении операции Записи или Проведения из формы (см.настройки формы)
вызывается процедура проверки
ОбработкаПроверкиЗаполнения(<Отказ>, <ПроверяемыеРеквизиты>)
ПроверяемыеРеквизиты - "Массив путей к реквизитам..." см.СП
вот этом массиве как раз все Реквизиты из п.1 у которых выбрано Проверка Заполнения: Выдавать ошибку

3.в этой процедуре вы можете изменить этот массив, Добавить или Удалить из него элементы
либо сразу установить Отказ = Истина, тогда процедура Записи или Проведения будет прервана 
так как процедура ОбработкаПроверкиЗаполнения() расположена в модуле Объекта,
то вам сразу, просто по именам, доступны ВСЕ реквизиты, ничего дополнительно в процедуру передавать не надо.
 
если помогло нажмите: Спасибо!

tasya

Цитата: Ивашка от 27 июл 2021, 23:04
Цитата: tasya от 27 июл 2021, 22:42Добрый день! Подскажите как из модуля формы передать данные в модуль объекта именно в процедуру ОбработкаПроверкиЗаполнения()? Через дополнительные свойства не получается, так как они заполняются в процедуре ПередЗаписьюНаСервере(), а она вызывается после ОбрабткаПроверкиЗаполнения.
а какие данные хотите передавать? какая задача стоит?

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

tasya

Цитата: LexaK от 28 июл 2021, 10:52механизм примерно следующий
1.у реквизитов объекта (см. конфигуратор) есть свойство: Проверка Заполнения, режимы Выдавать ошибку или Не проверять
для важных реквизитов указано: Выдавать ошибку 

2.при выполнении операции Записи или Проведения из формы (см.настройки формы)
вызывается процедура проверки
ОбработкаПроверкиЗаполнения(<Отказ>, <ПроверяемыеРеквизиты>)
ПроверяемыеРеквизиты - "Массив путей к реквизитам..." см.СП
вот этом массиве как раз все Реквизиты из п.1 у которых выбрано Проверка Заполнения: Выдавать ошибку

3.в этой процедуре вы можете изменить этот массив, Добавить или Удалить из него элементы
либо сразу установить Отказ = Истина, тогда процедура Записи или Проведения будет прервана 
так как процедура ОбработкаПроверкиЗаполнения() расположена в модуле Объекта,
то вам сразу, просто по именам, доступны ВСЕ реквизиты, ничего дополнительно в процедуру передавать не надо.
 

На форме есть программно добавленная табличная часть. Вот ее и нужно проверить на заполнение в процедуре обработка проверки заполнения

LexaK

tasya, это прямо на форме создать процедуру/функцию

ПроверитьДобавленнуюТабличнуюЧасть(Отказ);

вызвать ее в процедуре формы ПередЗаписью(...)

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

ПроверитьДобавленнуюТабличнуюЧасть(Отказ);
   
КонецПроцедуры

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


если что-то не заполнено, будет сообщение, документ не запишется.
если помогло нажмите: Спасибо!

БезПонтов

Самый простой способ это создать свою Функцию, вот код:

&НаСервере
Функция ПроверкаЗаполнения()
   ТД=РеквизитФормыВЗначение("Объект");
    ТД.ДополнительныеСвойства.Вставить("РаспределениеЗатрат",Ложь);
    Возврат ТД.ПроверитьЗаполнение();
КонецФункции // ПроверкаЗаполнения()

&НаКлиенте
Функция РаспределениеЗатратФрагмент()
    Если ПроверкаЗаполнения()=Ложь Тогда  //Имя нашей функции
       Возврат Ложь;
    КонецЕсли;
КонецФункции // РаспределениеЗатратФрагмент()

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

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск