Каталог решений - Усовершенствованная проверка заполнения реквизитов

Усовершенствованная проверка заполнения реквизитов

Усовершенствованная проверка заполнения реквизитов

В наличии

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

Категория:

Описание

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

Основные преимущества по сравнению со стандартными процедурами:

  • проверка не только заполнения реквизитов, но и их существования в структуре метаданных;
  • одна функция для шапки и табличных частей;
  • возможность включать или отключать вывод сообщений о незаполненных реквизитах;
  • возврат булевских значений Истина или Ложь в результате работы функции, вместо модификации переменной Отказ, что позволяет более гибко использовать функцию.

-================-

// Функция проверяет заполнение шапки или табличной части справочника, документа или плана, бизнес-процесса, задачи
// Параметры:
// пИмяТаблицы (строка) — имя табличной части объекта, если не указано то будет проверятся шапка объекта
// пИменаПолей (массив строк) — имена проверяемых реквизитов объекта
// пВыводитьСообщения — если это свойство установлено в «Истина» то будут выводится сообщения в табло о
//     незаполненных реквизитах таблицы, если не установлено — то не будут
// пСсылка (ссылка) — ссылка на элемент справочника или плана, документ, по которому будет произведена проверка
// Возвращаемое значение:
// Истина — если все реквизиты найдены и заполнены
// Ложь — если хоть один реквизит не заполнен, табличная часть не найдена
// или хоть один реквизит не найден

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

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

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

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

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

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

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

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

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

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

        КонецЦикла;

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

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

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

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

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

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

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

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

                КонецЕсли;

            КонецЦикла;

        КонецЦикла;

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

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

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

    КонецЕсли;

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

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

has been added to your cart:
Оформление заказа