gifts2017

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

Опубликовал hvv 2002 (hvv2002) в раздел Программирование - Практика программирования

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

В глобальном модуле комплексной конфигурации , а также некоторых конфигураций 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); КонецФункции

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

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

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа