helpf.pro
Регистрация
 0 
Распечатать

1С 8.x : Реквизит ~ Функция проверяет заполненность реквизитов объекта

Как вызвать стандартную проверку заполнения реквизитов?
Код 1C v 8.2 УП
 ПроверитьЗаполнение()    

Возвращаемое значение:
Тип: Булево. Истина - ошибок не обнаружено, Ложь - в противном случае.

Описание:
Проверяет заполнение реквизитов. Для реквизитов, у которых свойство "Проверка заполнения" установлено в значение "Показывать ошибку" и реквизит не заполнен, будет сформировано сообщение об ошибке.

Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Код 1C v 8.2 УП
 &НаКлиенте
Процедура СформироватьБезСКД(Команда)
        // Проверим заполнение обязательных реквизитов
	Если Не ПроверитьЗаполнение() Тогда  	
		Возврат;                         	
	КонецЕсли;     	
	СформироватьСервер();		
КонецПроцедуры   


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


У прикладных объектов на платформе 1С Предприятие 8.2 появился новый обработчик события ОбработкаПроверкиЗаполнения, где теперь рекомендуется делать все проверки на заполненность реквизитов объекта. Рассмотрим работу с этим обработчиком. Обработчик должен быть расположен в модуле объекта (для констант в модуле менеджера значений) и имеет следующий синтаксис:
Код 1C v 8.2 УП
 Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) 
КонецПроцедуры   

Здесь параметр Отказ (тип Булево) отвечает за возможность дальнейшей работы программы после проверки заполнения, а в параметре ПроверяемыеРеквизиты(тип Массив) содержатся реквизиты объекта, которые система будет проверять на заполненность. Напомним, что в версии 1С Предприятие 8.2 появилось возможность на уровне свойств реквизитов объекта устанавливать свойство Проверка заполнения. Так вот в массив ПроверяемыеРеквизиты по умолчанию система помещает реквизиты с установленным свойством «Выдавать ошибку». Однако разработчик может сам некоторые реквизиты добавить в массив или удалить из него в зависимости от каких-либо условий:
Код 1C v 8.2 УП
 Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

  Клиент = ПроверяемыеРеквизиты.Найти("Контрагент");

  Если Клиент<>Неопределено тогда

   ПроверяемыеРеквизиты.Удалить(Клиент);

  конецесли;

  ПроверяемыеРеквизиты.Добавить("Склад");

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

Как видно из примера в качестве элементов массива выступают строковые наименование реквизитов, как они заданы в конфигураторе. Для того чтобы полностью отказаться от системной проверки, необходимо очистить массив. При этом разработчик может проводить проверку реквизитов по произвольным алгоритмам, система же проверяет только на заполненность/незаполненность:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Код 1C v 8.2 УП
 ПроверяемыеРеквизиты.Очистить();

Если Контрагент.ПометкаУдаления Тогда

  Отказ = Истина;

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

  Сообщение.Текст = "Нельзя указывать контрагента, помеченного на удаление!";

  Сообщение.Поле = "Контрагент";

  Сообщение.УстановитьДанные(ЭтотОбъект);

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


КонецЕсли; 

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

Далее рассмотрим, когда вызывается данный обработчик. Это зависит от типа объекта и его свойств. Так для, например, для справочника обработчик вызывается перед записью объекта; для документа: если разрешено проведение - при проведении, иначе при записи; для обработки : при вызове стандартных команд "OK", Да". Подробно это описано во встроенной справке. Но также есть возможность вызвать данный обработчик в произвольный момент, используя метод объекта ПроверитьЗаполнение(). Например, определить команду Проверить в форме документа:
Код 1C v 8.2 УП
 &НаКлиенте

Процедура Проверить(Команда)

  ПроверитьНаСервере();

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


&НаСервере

Процедура ПроверитьНаСервере()

  Документ = РеквизитФормыВЗначение("Объект");

  Документ.ПроверитьЗаполнение(); 

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

Автор: Борис Захаров


Код 1C v 8.х
  //СписокРеквизитов - список значений. Элемент списка значений - имена реквизитов для проверки через запятую. 
//Если представление заполнено - считается, что передаются реквизиты табличной части.  Пример:
СписокРеквизитовДляПроверки=Новый СписокЗначений;
СписокРеквизитовДляПроверки.Добавить("Контрагент,МестоХранения,ВидОперации");
СписокРеквизитовДляПроверки.Добавить("Номенклатура,Единица,Цена,Количество","ПолнаяТаблица");
СписокРеквизитовДляПроверки.Добавить("ВидОтклонений,Номенклатура,Единица,Серия,Цена,Количество","ТаблицаОтклонений");
        
Если Не глРеквизитыОбъектаЗаполнены(Источник,СписокРеквизитовДляПроверки) Тогда
     Отказ=Истина;
     Возврат;
КонецЕсли;

Функция глРеквизитыОбъектаЗаполнены(Объект,СписокРеквизитов) Экспорт
    МетаданныеОбъекта=Объект.Метаданные();
    МетаданныеТабличныеЧасти=МетаданныеОбъекта.ТабличныеЧасти;
    
    РеквизитыЗаполнены=Истина;
    
    СтрокаДляВыполнения="";
    
    Для каждого НаборРеквизитов Из СписокРеквизитов Цикл
        НаименованиеТаблицы=НаборРеквизитов.Представление;
        РеквизитыДляПроверки=СтрЗаменить(НаборРеквизитов.Значение,",",Символы.ПС);
        
        ДлинаСпискаРеквизитов=СтрЧислоСтрок(РеквизитыДляПроверки);
        
        Если НаименованиеТаблицы<>"" Тогда
            МетаданныеТаблица=МетаданныеТабличныеЧасти[НаименованиеТаблицы];
            МетаданныеРевизитыТаблицы=МетаданныеТаблица.Реквизиты;
            
            ТаблицаОбъекта=Объект[НаименованиеТаблицы];
            
            Для СчетчикСтрокРевизитов=1 По ДлинаСпискаРеквизитов Цикл
                ИдентРеквизита=СтрПолучитьСтроку(РеквизитыДляПроверки,СчетчикСтрокРевизитов);
                
                МетаданныеРеквизит=МетаданныеРевизитыТаблицы[ИдентРеквизита];
                ОписаниеТиповРеквизита=МетаданныеРеквизит.Тип;
                ТипыЗначенийРеквизита=ОписаниеТиповРеквизита.Типы();
                
                СтрокаПоиска=ТаблицаОбъекта.Найти(глПолучитьПустоеЗначениеТипа(ТипыЗначенийРеквизита[0]),ИдентРеквизита);
                Если СтрокаПоиска=Неопределено Тогда
                    Продолжить;
                КонецЕсли; 
                
                Возврат глВозвратЛожьССообщением("Не заполнен реквизит """+МетаданныеРеквизит.Синоним+""" Табличная часть строка "+СтрокаПоиска.НомерСтроки);
            КонецЦикла;
        Иначе
            Для СчетчикСтрокРевизитов=1 По ДлинаСпискаРеквизитов Цикл
                ИдентРеквизита=СтрПолучитьСтроку(РеквизитыДляПроверки,СчетчикСтрокРевизитов);
                
                Если Не ЗначениеЗаполнено(Объект[ИдентРеквизита]) Тогда
                    МетаданныеРевизитыШапки=МетаданныеОбъекта.Реквизиты;
                    Попытка
                        Возврат глВозвратЛожьССообщением("Не заполнен реквизит """+МетаданныеРевизитыШапки[ИдентРеквизита].Синоним+"""");
                    Исключение
                        Возврат глВозвратЛожьССообщением("Не заполнен реквизит """+ИдентРеквизита+"""");
                    КонецПопытки; 
                КонецЕсли;
            КонецЦикла;
        КонецЕсли; 
    КонецЦикла; 
    
    Возврат Истина;
КонецФункции   



Код 1C v 8.х
 // Ярослав Волохов aka YVolohov
// Функция проверяет заполнение шапки или табличной части справочника, документа или плана, бизнес-процесса, задачи
// Параметры:
// пИмяТаблицы (строка) - имя табличной части объекта, если не указано то будет проверятся шапка объекта
// пИменаПолей (массив строк) - имена проверяемых реквизитов объекта
// пВыводитьСообщения - если это свойство установлено в "Истина" то будут выводится сообщения в табло о
//     незаполненных реквизитах таблицы, если не установлено - то не будут
// пСсылка (ссылка) - ссылка на элемент справочника или плана, документ, по которому будет произведена проверка
// Возвращаемое значение:
// Истина - если все реквизиты найдены и заполнены
// Ложь - если хоть один реквизит не заполнен, табличная часть не найдена
// или хоть один реквизит не найден

Функция ПроверитьЗаполнениеТаблицыОбъекта(пИмяТаблицы = Неопределено,
    пИменаПолей, пВыводитьСообщения = Истина, пСсылка) Экспорт

    МассивСообщений   = Новый Массив;
    ЗначениеВозврата  = Истина;
    МетаданныеОбъекта = пСсылка.Метаданные();

    Если НЕ(пИмяТаблицы = Неопределено) Тогда
        МетаданныеТаблицы = МетаданныеОбъекта.ТабличныеЧасти.Найти(пИмяТаблицы);
    Иначе
        МетаданныеТаблицы = МетаданныеОбъекта;
    КонецЕсли;

    // Проверка существования табличной части
    Если НЕ(МетаданныеТаблицы = Неопределено) Тогда

        МассивМетаданныхРеквизитов  = Новый Массив;
        МетаданныеРеквизитов        = МетаданныеТаблицы.Реквизиты;

        // Проверка существования полей
        Для Каждого ИмяПоля Из пИменаПолей Цикл

            МетаданныеРеквизита = МетаданныеРеквизитов.Найти(ИмяПоля);

            Если НЕ(МетаданныеРеквизита = Неопределено) Тогда
                МассивМетаданныхРеквизитов.Добавить(МетаданныеРеквизита);
            Иначе

                Если пИмяТаблицы = Неопределено Тогда
                    МассивСообщений.Добавить("Реквизит шапки с именем '" + ИмяПоля + "' не найден !!!");
                Иначе
                    МассивСообщений.Добавить("Реквизит табличной части '" + пИмяТаблицы + "' с именем '" +
                    ИмяПоля + "' не найден !!!");
                КонецЕсли;

                ЗначениеВозврата = Ложь;
            КонецЕсли;

        КонецЦикла;

        // Проверка заполнения полей
        КоличествоСтрокТаблицы = ?(НЕ(пИмяТаблицы = Неопределено), пСсылка[пИмяТаблицы].Количество(), 1);
        КоличествоСтрокТаблицы = ?(МассивМетаданныхРеквизитов.Количество() > 0, КоличествоСтрокТаблицы, 0);

        // Обход строк таблицы
        Для НомерСтрокиТаблицы = 1 По КоличествоСтрокТаблицы Цикл

            СтрокаТаблицы = ?(НЕ(пИмяТаблицы = Неопределено),
            пСсылка[пИмяТаблицы].Получить(НомерСтрокиТаблицы - 1), пСсылка);

            // Обход списка проверяемых реквизитов
            Для Каждого ЭлементМетаданныхРеквизитов Из МассивМетаданныхРеквизитов Цикл

                // Получение значения ячейки и проверка ее заполнения
                ЗначениеЯчейкиТЧ = СтрокаТаблицы[ЭлементМетаданныхРеквизитов.Имя];
                ЯчейкаПустая     = НЕ(ЗначениеЗаполнено(ЗначениеЯчейкиТЧ));

                // Если значение пустое, добавляем сообщение в массив сообщений
                Если ЯчейкаПустая Тогда

                    Если пИмяТаблицы = Неопределено Тогда
                        МассивСообщений.Добавить("Реквизит шапки с именем '" + ЭлементМетаданныхРеквизитов.Имя + "' не заполнен !!!");
                    Иначе
                        МассивСообщений.Добавить("В строке № " + НомерСтрокиТаблицы + " табличной части '" +
                        пИмяТаблицы + "' не заполнен реквизит с именем '" + ЭлементМетаданныхРеквизитов.Имя + "' !!!");
                    КонецЕсли;

                    ЗначениеВозврата = Ложь;

                КонецЕсли;

            КонецЦикла;

        КонецЦикла;

    Иначе
        МассивСообщений.Добавить("Табличная часть с именем '" + пИмяТаблицы + "' не найдена !!!");
        ЗначениеВозврата = Ложь;
    КонецЕсли;

    // Здесь выводим все сообщения
    Если пВыводитьСообщения Тогда

        Для Каждого ТекстСообщения Из МассивСообщений Цикл
            Сообщить(ТекстСообщения, СтатусСообщения.Важное);
        КонецЦикла;

    КонецЕсли;

    Возврат ЗначениеВозврата;

КонецФункции   
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 92036
 0 
Распечатать
Возможно, вас также заинтересует
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1С Предприятие что это? 13
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
Excel файл как Внешний источник данных 17
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . https://helpf.pro/uploads/img
Google maps : вывод точек на карту и режим панорамы 9
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!