Имя: Пароль:
1C
1С v8
Проверяемые реквизиты формы обработки.
0 lirt82
 
27.03.26
09:47
Всем привет, есть самописная обработка которая программно создает документы в базе. У обработки есть форма с вкладками, на вкладке "Настройка" расположены реквизиты  которые заполняет пользователь и далее данные этих реквизитов используются при создании документов, в процедуре создания новых документов есть проверка на заполненность реквизитов с вкладки "Настройка", код процедуры ниже.
Как можно код проверки на заполненность реквизитов оптимизировать (меньше строк кода)? напрм. только один раз написать строку кода
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Заполните поле %1 на закладке ""Настройка"".'"), ПолеОшибки) или другие варианты.

&НаКлиенте
Процедура СоздатьДокументыРегистрации(Команда)
  
    ТекстОшибки = "";
    Если Не ЗначениеЗаполнено(Объект.ДатаОплатыЗаНерезидента) Тогда
        ПолеОшибки = """Дата оплаты за нерезидента""";
        ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Заполните поле %1 на закладке ""Настройка"".'"), ПолеОшибки);
    КонецЕсли;    
    Если Не ЗначениеЗаполнено(Объект.Субконто2) Тогда
        ПолеОшибки = """Подразделение для затрат""";
        ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Заполните поле %1 на закладке ""Настройка"".'"), ПолеОшибки);
    КонецЕсли;
    Если Не ЗначениеЗаполнено(Объект.Субконто1) Тогда
        ПолеОшибки = """Статья затрат""";
        ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Заполните поле %1 на закладке ""Настройка"".'"), ПолеОшибки);
    КонецЕсли;
    Если Не ЗначениеЗаполнено(Объект.Счет) Тогда
        ПолеОшибки = """Счет учета затрат""";
        ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Заполните поле %1 на закладке ""Настройка"".'"), ПолеОшибки);
    КонецЕсли;
    Если Не ЗначениеЗаполнено(Объект.ОсновнаяСтавкаНДС) Тогда
        ПолеОшибки = """Основная ставка НДС""";
        ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Заполните поле %1 на закладке ""Настройка"".'"), ПолеОшибки);
    КонецЕсли;
    Если Не ЗначениеЗаполнено(Объект.ОсновнойВидОборота) Тогда
        ПолеОшибки = """Основной вид оборота""";
        ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Заполните поле %1 на закладке ""Настройка"".'"), ПолеОшибки);
    КонецЕсли;
    Если Не ЗначениеЗаполнено(Объект.ОтражатьДокументыВНалоговомУчете) Тогда
        ПолеОшибки = """Отражать документы в налоговом учете""";
        ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Укажите способ отражения в поле %1 на закладке ""Настройка"".'"), ПолеОшибки);
    КонецЕсли;    
    Если Не ЗначениеЗаполнено(Объект.ДокументыПоступления) Тогда
        ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru='Выполните команду ""Заполнить ""Поступление товаров"""".'");
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ТекстОшибки) Тогда
        ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки);
    Иначе
        СоздатьДокументыРегистрацииНаСервере(Команда.Имя);
    КонецЕсли;
    
КонецПроцедуры

.....а где правильнее с точки зрения разработкиисоздавать реквизиты обработки? непосредственно на форме или в объекте
1 Мультук
 
гуру
27.03.26
09:46
(0)

&НаКлиенте
Процедура СоздатьДокументыРегистрации(Команда) 
   реквизитыДляпроверки = ПолучитьРеквизитыДляПроверки(); 

   ПроверитьЗаполнение(реквизитыДляпроверки);

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


Вариант 1

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

   Возврат список;
КонецФункции 


Вариант 2
Как-то еще получить список реквизитов
2 trooba
 
27.03.26
10:04
(1) В список значений лучше Для ккаждого реквизит из Этаформа.ПодчиненныеЭлементы цикл ...
3 Кир Пластелинин
 
27.03.26
10:10
(0) для реквизитов установить свойство "проверка заполнения" в значение "выдавать ошибку". Если есть реквизиты, которые требуют условную проверку заполнения, то им так же устанавливается это свойство, но в таком случае алгоритм проверки реализуется или в хендлере ОбработкаПроверкиЗаполнения МО, или в ОбработкаПроверкиЗаполненияНаСервере МФ. Реквизиты, которые по итогу не требуют проверки удаляются из коллекции проверямых - см. ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива
4 lirt82
 
27.03.26
10:21
(3) это подходит для документов, справочников в событие ПриЗаписи формы элемента, а у меня обработка.
5 Кир Пластелинин
 
27.03.26
10:29
(4) чой та?
6 Кир Пластелинин
 
27.03.26
10:44
(4) как пример
7 trooba
 
27.03.26
11:10
(6) Это реквизит объекта, а не формы. Если у него именно реквизиты формы- не прокатит

А, не у него в коде от объекта код. Тогда да, все ок.
8 Кир Пластелинин
 
27.03.26
11:22
(7) так и у реквизитов формы есть такое свойство и обработчик
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.