Исправление в типовой комплексной конфигурации глобальной функции глВсеРеквизитыДокументаЗаполнены()

20.08.14

Разработка - Универсальные функции

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

В глобальном модуле комплексной конфигурации , а также некоторых конфигураций 7.7 , основанных на комплексной, есть функция :  глВсеРеквизитыДокументаЗаполнены().
Она не проверяет реквизиты табличной части, хотя в ее исходном тексте есть такое "намерение". Мне понадобился данный функционал , и я решил подработать эту функцию ( в ней есть продублированный текст, но это так нужно, по "движку" 1с когда несколько строк в документе ). Здесь представлен подработанный мной вариант данной функции :

Функция глВсеРеквизитыДокументаЗаполнены(Конт,СписокРеквизитов) Экспорт Если Константа.РазрешитьПроводитьБудущейДатой = 0 Тогда Если Конт.ДатаДок>РабочаяДата() Тогда
	глНеПроводить(Конт,"Нельзя проводить документ будущей датой!"); Возврат (0); КонецЕсли; КонецЕсли; Пока СтрДлина(СписокРеквизитов)>0 Цикл
	ПозЗапятой = Найти (СписокРеквизитов,","); Если ПозЗапятой = 0 Тогда
	ИдентРеквизита = СписокРеквизитов;
	СписокРеквизитов = ""; Иначе
	ИдентРеквизита = Сред(СписокРеквизитов,1,ПозЗапятой-1);
	СписокРеквизитов = Сред(СписокРеквизитов,ПозЗапятой+1); КонецЕсли;
	пустой_атрибут_табличной_части=0;
	это_атрибут_табличной_части=0;// и поэтому у него доп проверка - перебор строк в которой может быть не выбрано значение
	ВидДок = Конт.Вид(); Если Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита).Выбран()=1 Тогда
	это_атрибут_табличной_части=1;// конецесли; Если ПустоеЗначение(Конт.ПолучитьАтрибут(ИдентРеквизита))=1 Тогда Если Метаданные.Документ(ВидДок).РеквизитШапки(ИдентРеквизита).Выбран()=1 Тогда
	Объект = Метаданные.Документ(ВидДок).РеквизитШапки(ИдентРеквизита); ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИдентРеквизита).Выбран()=1 Тогда
	Объект = Метаданные.ОбщийРеквизитДокумента(ИдентРеквизита); ИначеЕсли Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита).Выбран()=1 Тогда
	это_атрибут_табличной_части=1;
	Объект = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита);
	пустой_атрибут_табличной_части=0;
	конт.выбратьстроки(); пока конт.получитьстроку()=1 цикл Если ПустоеЗначение(Конт.ПолучитьАтрибут(ИдентРеквизита))=1 Тогда
	Объект = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита);
	пустой_атрибут_табличной_части=1; прервать; конецесли; конеццикла; Иначе
	глНеПроводить(Конт,"ВсеРеквизитыДокументаЗаполнены(): Неверный реквизит:"+ИдентРеквизита); Возврат (0); КонецЕсли; если это_атрибут_табличной_части=0 тогда
	ПредставлениеРеквизита = ?(ПустоеЗначение(Объект.Синоним)=0,Объект.Синоним,Объект.Идентификатор);
	глНеПроводить(Конт,"Не заполнен реквизит """+ПредставлениеРеквизита+""""); Возврат (0); иначеесли это_атрибут_табличной_части=1 тогда если пустой_атрибут_табличной_части=1 тогда
	ПредставлениеРеквизита = ?(ПустоеЗначение(Объект.Синоним)=0,Объект.Синоним,Объект.Идентификатор);
	глНеПроводить(Конт,"Не заполнен реквизит """+ПредставлениеРеквизита+""""); Возврат (0); конецесли; конецесли; КонецЕсли; если это_атрибут_табличной_части=1 тогда // может понадобиться доп проверка
	Объект = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита);
	пустой_атрибут_табличной_части=0;
	конт.выбратьстроки(); пока конт.получитьстроку()=1 цикл Если ПустоеЗначение(Конт.ПолучитьАтрибут(ИдентРеквизита))=1 Тогда
	Объект = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита);
	пустой_атрибут_табличной_части=1; прервать; конецесли; конеццикла; если пустой_атрибут_табличной_части=1 тогда
	ПредставлениеРеквизита = ?(ПустоеЗначение(Объект.Синоним)=0,Объект.Синоним,Объект.Идентификатор);
	глНеПроводить(Конт,"Не заполнен реквизит """+ПредставлениеРеквизита+""""); Возврат (0); конецесли; конецесли; КонецЦикла; Возврат (1); КонецФункции

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

С удивлением увидел , что данная функция кочует из релиза в релиз .

глВсеРеквизитыДокументаЗаполнены реквизиты документа контроль реквизитов

См. также

Библиотека процедур и функций для технологической платформы "1С: Предприятие 7.7"

Универсальные функции Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    631    8    user706545_kseg1971    0    

4

1С 7.7 и новый 1С:Контрагент

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    1802    zhenyat    7    

6

Печать таблицы значений в 1С 7.7 при отладке

Универсальные функции Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    4371    Zoltan_Black    11    

2

Установка принтера по умолчанию для 1С 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13259    4    alsen    3    

3

Формирование строки json в 1С: 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10045    malovandrey    1    

17

Как создать индикатор в 1С:Предприятии 7.7

Универсальные функции Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18658    2    HAMMER_59    6    

2
Оставьте свое сообщение