1с проверить существует ли реквизит формы

Где разместить собственный алгоритм, проверяющий заполнены реквизиты формы или нет?

Механизм проверки заполнения позволяет автоматически проверить, заполнены ли указанные реквизиты объекта (см. Как перед записью накладной проверить, что реквизит Поставщик заполнен?). Такая проверка выполняется при интерактивном вводе объекта, перед его записью.

При этом вызывается следующая последовательность событий:

image001

Таким образом разработчик может влиять на стандартную проверку заполнения, выполняемую платформой.

Для этого у него есть два события. Одно событие – Обработка проверки заполнения на сервере – можно обработать в модуле формы. Другое событие – Обработка проверки заполнения – можно обработать в модуле прикладного объекта.

У формы, как правило, есть основной реквизит (редактируемый объект) и могут быть реквизиты, не относящиеся к редактируемому объекту, а являющиеся лишь частью формы:

image002

Поэтому серверное событие формы Обработка проверки заполнения на сервере предназначено для проверки заполнения тех реквизитов формы, которые не относятся к редактируемому объекту. Это данные только формы, у формы могут быть свои причины и алгоритмы для проверки этих данных.

Напротив, событие объекта Обработка проверки заполнения предназначено для для того, чтобы проверить реквизиты основного реквизита формы.

Поэтому существует несколько сценариев того, как разработчик может встроить свой алгоритм в механизм проверки заполнения:

Все эти сценарии реализуются довольно просто.

Например, чтобы самостоятельно проверить заполненность реквизитов, можно выполнить следующий код:

Чтобы проверить лишь часть реквизитов, можно выполнить такой код:

Если ИндексПоляПоставщик > Неопределено Тогда

Добавить в массив проверяемых реквизитов еще один реквизит можно следующим образом:

А очистить массив проверяемых реквизитов, чтобы ничего не проверять ни самому, ни платформе, можно так:

Источник

IT Блог Сергея Бобошко

1С Предприятие, конфигурации, обработки, услуги программиста, помощь программиста

1С Предприятие 8.3 Как проверить наличие реквизита документа или табличной части программно

В типовых конфигурациях это делается просто:

Но если у вас не типовая конфигурация, или же, как я, привыкли работать методами, предоставляемыми платформой по возможности максимально их используя, где это имеет смысл, тогда вот так:

Если реквизит отсутствует, тогда будет возвращено значение неопределено, как будет в случае с реквизитом «БабаЯга» в регистре цен.

К метаданным можно так-же обращаться через строковое имя, как в других коллекциях, что позволяет сделать гибкую программную обработку.

В случае удачного нахождения реквизита с указанным именем возвращается искомый объект метаданных, иначе, как уже упоминалось — НЕОПРЕДЕЛЕНО,

Добавить комментарий Отменить ответ

В помощь программисту

Спасибо за интерес к моим статьям!

Если Вам понравилась статья, а особенно если я сэкономил вам кучу времени, сил и нервов(!), и Вы хотите поблагодарить автора за труды, можете пожертвовать рублик на один из кошельков автора:
R378379457675
Z428430781167
U266558095968

Ну, или нажмите кнопочку репоста в соцсетях. Или напишите отзыв.

Рубрики

Свежие записи

Благодарность мне

Если Вам понравилась статья, а особенно если я сэкономил вам кучу времени, сил и нервов(!), и Вы хотите поблагодарить автора за труды, можете пожертвовать рублик на один из кошельков автора:
R378379457675
Z428430781167
U266558095968

Ну, или нажмите кнопочку репоста в соцсетях. Или напишите отзыв.

Источник

Проверка на наличие определенного реквизита во всех документах

Всем доброго времени суток.
Люди добрые, помогите кто чем сможет))

Необходимо проверить все документы на наличие определенного реквизита. Как проверить имеется ли тот или иной реквизит в определенном документе, нашел тут. ( http://1cprofi.com/content/view/4/40/)

Реквизит = Метаданные.Документ(«АвансовыйОтчет»).РеквизитШапки(«Основание»).Выбран();
Если Реквизит = 1 Тогда
Сообщить(«У документа есть такой реквизит»);
Иначе
Сообщить(«У документа нет такого реквизита»);
КонецЕсли;

Как применить подобный шаблон ко всем документам.
ВСЕМ Спасибо за внимание.

ВидыДок = «»;
Для Инд=1 По ВыбранныеДокументы.РазмерСписка() Цикл
ВидыДок = ВидыДок + Документы.ПолучитьЗначение(ВыбранныеДокументы.ПолучитьЗначение(Инд))+»,»;
КонецЦикла;

Если ПустаяСтрока(ВидыДок)=1 Тогда
Возврат;
КонецЕсли;

Если (ВыбКонтрагент.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»Контрагент»,ВыбКонтрагент);
ИначеЕсли (ВыбПроект.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»Проект», ВыбПроект);
ИначеЕсли (ВыбАвтор.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»Автор», ВыбАвтор);
ИначеЕсли (ВыбФирма.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»Фирма», ВыбФирма);
ИначеЕсли (ВыбЮрЛицо.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»ЮрЛицо», ВыбЮрЛицо);
ИначеЕсли (ВыбФизЛицо.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»ФизЛицо», ВыбФизЛицо);
ИначеЕсли (ВыбСклад.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»Склад», ВыбСклад);
ИначеЕсли (ВыбСотр.Выбран()=1) Тогда
Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,»Сотрудник», ВыбСотр);
Иначе
Док.ВыбратьДокументы(ДатаНачала,ДатаКонца);
КонецЕсли;

Если (ТипЗначенияСтр(Таб) <> «Таблица») ИЛИ (Обновить = 0) Тогда
Таб = СоздатьОбъект(«Таблица»);
Иначе
Таб.Очистить();
КонецЕсли;
Таб.ИсходнаяТаблица( «РеестрДокументов» );

Расшифровка = СоздатьОбъект(«СписокЗначений»);
Расшифровка.Установить(«Отчет», «РеестрДокументов»);

// все настройки помещаем в список
Расшифровка.Установить(«ДатаНачала», ДатаНачала);
Расшифровка.Установить(«ДатаКонца», ДатаКонца);

Расшифровка.Установить(«ВыбФирма», ВыбФирма);
Расшифровка.Установить(«ВыбЮрЛицо», ВыбЮрЛицо);
Расшифровка.Установить(«ВыбФизЛицо», ВыбФизЛицо);
Расшифровка.Установить(«ВыбКонтрагент», ВыбКонтрагент);
Расшифровка.Установить(«ВыбАвтор», ВыбАвтор);
Расшифровка.Установить(«ВыбПроект», ВыбПроект);
Расшифровка.Установить(«ВыбСклад», ВыбСклад);

Расшифровка.Установить(«ВклПроведенные»,ВклПроведенные);
Расшифровка.Установить(«ВклТекущие», ВклТекущие);
Расшифровка.Установить(«ВклУдаленные», ВклУдаленные);

Расшифровка.Установить(«ВыбранныеДокументы», ВыбранныеДокументы);
Расшифровка.Установить(«ВсеДокументы», ВсеДокументы);

Если ВыбЮрЛицо.Выбран()>0 Тогда
Заг=Заг+»По юр. лицу «+СокрП(ВыбЮрЛицо)+». «;
КонецЕсли;
Если ВыбФизЛицо.Выбран()>0 Тогда
Заг=Заг+»По физ. лицу «+СокрП(ВыбФизЛицо)+». «;
КонецЕсли;
Если ВыбФирма.Выбран()>0 Тогда
Заг=Заг+»По фирме «+СокрП(ВыбФирма)+». «;
КонецЕсли;
Если ВыбКонтрагент.Выбран()>0 Тогда
Заг=Заг+»По контрагенту «+СокрП(ВыбКонтрагент)+». «;
КонецЕсли;
Если ВыбАвтор.Выбран()>0 Тогда
Заг=Заг+»Автор документов: «+СокрП(ВыбАвтор)+». «;
КонецЕсли;
Если ВыбПроект.Выбран()>0 Тогда
Заг=Заг+»Проект документов: «+СокрП(ВыбПроект)+». «;
КонецЕсли;
Если ВыбСклад.Выбран()>0 Тогда
Заг=Заг+»Склад документов: «+СокрП(ВыбСклад)+». «;
КонецЕсли;

Таб.ВывестиСекцию(«Кнопки»);
Таб.ВывестиСекцию(«Шапка»);
Таб.ВывестиСекцию(«ШапкаТаблицы»);

// выводим шапку на каждой странице
НачПовт = Таб.ВысотаСекции(«Кнопки») + Таб.ВысотаСекции(«Шапка»);
КонПовт = НачПовт + Таб.ВысотаСекции(«ШапкаТаблицы»);
Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);

НПП=0;
ПечИтогСумма = 0;

СуммыПоВалютам = СоздатьОбъект(«ТаблицаЗначений»);
СуммыПоВалютам.НоваяКолонка(«Валюта», «Справочник.Валюты»);
СуммыПоВалютам.НоваяКолонка(«Сумма», «Число»);

Пока Док.ПолучитьДокумент()=1 Цикл

//Проверка статуса
Если (Док.ПометкаУдаления()>0) Тогда
Если ВклУдаленные=0 Тогда
Продолжить;
КонецЕсли;
ИначеЕсли (Док.Проведен()>0) Тогда
Если ВклПроведенные=0 Тогда
Продолжить;
КонецЕсли;
Иначе
Если ВклТекущие=0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

//Проверка юр. лица, к которому относится документ
Если ВыбЮрЛицо.Выбран() = 0 Тогда
ИначеЕсли (Док.ЮрЛицо <> ВыбЮрЛицо) Тогда
Продолжить;
КонецЕсли;

//Проверка фирмы, к которой относится документ
Если ВыбФирма.Выбран() = 0 Тогда
ИначеЕсли (Док.Фирма <> ВыбФирма) Тогда
Продолжить;
КонецЕсли;

//Проверка физ. лица, к которому относится документ
Если ВыбФизЛицо.Выбран() = 1 Тогда
Если глЕстьРеквизитШапки(«ФизЛицо»,Док.Вид()) = 1 Тогда
Если (Док.ФизЛицо <> ВыбФизЛицо) Тогда
Продолжить;
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;

//Проверка автора
Если ВыбАвтор.Выбран() = 0 Тогда
ИначеЕсли (Док.Автор <> ВыбАвтор) Тогда
Продолжить;
КонецЕсли;

//Проверка проекта
Если ВыбПроект.Выбран() = 0 Тогда
ИначеЕсли (Док.Проект <> ВыбПроект) Тогда
Продолжить;
КонецЕсли;

//Проверка сотрудника
Если ВыбСотр.Выбран() = 1 Тогда
Если глЕстьРеквизитШапки(«Сотрудник»,Док.Вид()) = 1 Тогда
Если (Док.Сотрудник <> ВыбСотр) Тогда
Продолжить;
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;

//Проверка склада
Если ВыбСклад.Выбран() = 1 Тогда
ХорошийДокумент = 0;
Если глЕстьРеквизитШапки(«Склад»,Док.Вид()) = 1 Тогда
Если (Док.Склад = ВыбСклад) Тогда
ХорошийДокумент = 1;
КонецЕсли;
КонецЕсли;
Если глЕстьРеквизитШапки(«СкладПолучатель»,Док.Вид()) = 1 Тогда
Если (Док.СкладПолучатель = ВыбСклад) Тогда
ХорошийДокумент = 1;
КонецЕсли;
КонецЕсли;
Если ХорошийДокумент = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

//Проверка вида документа
Если Найти(ВидыДок,Док.Вид()+»,»)=0 Тогда
Продолжить;
КонецЕсли;

ПечСумма = глСуммаДокументаВЖурнале(Док.ТекущийДокумент(), «число»);

//ал для вывода в реестре документов суммы для СписанияТМЦ
Если Док.Вид()=»СписаниеТМЦ» Тогда
ПечИтого = 0;
ТабДвиж1 = СоздатьОбъект(«ТаблицаЗначений»);
ТабДвиж1.НоваяКолонка(«Номенклатура»);
ТабДвиж1.НоваяКолонка(«Количество»);
ТабДвиж1.НоваяКолонка(«Сумма»);

РегПартии1 = СоздатьОбъект(«Регистр.ПартииНаличие»);
РегПартии1.ВыбратьДвиженияДокумента(Док.ТекущийДокумент());

Пока РегПартии1.ПолучитьДвижение() = 1 Цикл
ТабДвиж1.НоваяСтрока();
ТабДвиж1.Номенклатура = РегПартии1.Номенклатура;
ТабДвиж1.Количество = РегПартии1.Количество;
ТабДвиж1.Сумма = РегПартии1.СуммаБезНДС;
КонецЦикла;

// выгрузим табличную часть документа в таблицу значений
ТабДок1 = СоздатьОбъект(«ТаблицаЗначений»);
Док.ВыгрузитьТабличнуюЧасть(ТабДок1, «Номенклатура, Количество, Единица, Коэффициент»);

// сформируем таблицу значений для печати

ТабПеч1 = СоздатьОбъект(«ТаблицаЗначений»);
ТабПеч1.НоваяКолонка(«Номенклатура»);
ТабПеч1.НоваяКолонка(«Количество»);
ТабПеч1.НоваяКолонка(«Сумма»);

ТабДок1.ВыбратьСтроки();
Пока ТабДок1.ПолучитьСтроку() = 1 Цикл

Поз = 0;
Пока (ТабДвиж1.НайтиЗначение(ТабДок1.Номенклатура, Поз, «Номенклатура») = 1)
и (ТабДок1.Количество > 0) Цикл
ТабДвиж1.ПолучитьСтрокуПоНомеру(Поз);

Если ТабДвиж1.Количество 0) // есть что погашать
и (ТабДвиж.НайтиЗначение(Док.Номенклатура, Поз, «Номенклатура») <> 0) // есть чем погашать
Цикл

КолвоРег = ТабДвиж.ПолучитьЗначение(Поз, «Количество»);
СуммаРег = ТабДвиж.ПолучитьЗначение(Поз, ИдКолонкиСуммы);

// преобразуем количество из регистра (в базовой единице)
// в единицу из строки документа
Если Док.Коэффициент <> 0 Тогда
КолвоРег = КолвоРег / Док.Коэффициент;
КонецЕсли;

Если глЕстьРеквизитШапки(«ДатаДокВходящий», Док.Вид()) = 1 тогда
ПечДата = Док.ДатаДокВходящий;
Иначе
ПечДата = Док.ДатаДок;
КонецЕсли;

Пока Найти(ПечСумма,» «) > 0 Цикл
ПечСумма = СтрЗаменить(ПечСумма,» «,»»);
КонецЦикла;

ПечИтогСумма = ПечИтогСумма + Число(ПечСумма);
глОживить(1);
КонецЦикла;

КолвоСтрок = СуммыПоВалютам.КоличествоСтрок();
Если КолвоСтрок >= 1 Тогда
СуммыПоВалютам.ПолучитьСтрокуПоНомеру(1);
Сумма = СуммыПоВалютам.Сумма;
Валюта = СуммыПоВалютам.Валюта;

Для Сч = 2 По КолвоСтрок Цикл
СуммыПоВалютам.ПолучитьСтрокуПоНомеру(Сч);
Сумма = СуммыПоВалютам.Сумма;
Валюта = СуммыПоВалютам.Валюта;

Таб.ВывестиСекцию(«Итого»);
глОживить(1);
КонецЦикла;
КонецЕсли;

Таб.Опции(0, 0, 7, 0, «РеестрДокументов», «РеестрДокументов»);
Таб.ТолькоПросмотр(1);
Таб.ОбластьПечати(2);
Если глПолучитьПолномочие(«РазрешитьРедактированиеТаблиц») = 0 Тогда
Таб.Защита(1);
КонецЕсли;
Таб.Показать(«Реестр документов»,»»);

Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда
СтрокаДействийФормы = «#Закрыть»;
КонецЕсли;

Это полное содержание процедуры..

Где тут идет получение документа («Имя вашего документа»), так и не нашел..

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с проверить существование элемента формы
  • 1с проверить существование реквизита формы