Проверка пустых, нулевых значений в 1С; проверка "является числом"; проверка документов-оснований

Вот инфа с вариантами

https://moscowsoft.com/statii/programmirovanie_na_1s_predpriyatie/proverka_na_bituyu_ssylku_v_1s_8/



Проверка "является числом" через ПОПЫТКУ... ИСКЛЮЧЕНИЕ

Попытка прибавить число к проверяемому значению? Нет, применение функции преобразования строки в число.

При успехе = Да, при исключении = Нет

// Сообщить("Строка комиссии до преобраз в число " +СтрокаКомиссии);
Попытка
	СуммаКомиссии=Число(СтрокаКомиссии);
Исключение
	Сообщить("Не получается преобразовать выделен комиссию в число" + Объект.Ссылка); // И ссылку на платежку дать умно
СуммаКомиссии=0;
КонецПопытки;

 

 

Проверка ЗначениеЗаполнено(ДокументОснование.Ссылка)

выдает ошибку "Значение не является значением объектного типа (Ссылка)", если исходное значение ДокументОснование пустое (неопределено).

Ошибка выдается на этапе получения Ссылки из значения ДокументОснование, которое неопределено.



Если ДокументОснование=Неопределено Тогда

// Позволяет проверить,есть ли значение ссылки на документ в реквизите "ДокументОснование" или нет. Дает Да, если док-основание не указан.



В итоге проверку сделал так. Вроде как две проверки похожих? Может что-то лишнее?

1. Первая проверка - на заполнение исходного реквизита. Если он заполнен, тогда из него достают ссылку и снова проверяют, что ссылка получена. Не лишнее ли  условие "И ЗначениеЗаполнено(ДокументОснование.Ссылка"?

2. Разве ДокументОснование само по себе не есть ссылка? Вроде как Ссылка.Ссылка? Или нет?

Если НЕ ДокументОснование=Неопределено

И ЗначениеЗаполнено(ДокументОснование.Ссылка) Тогда

ДокОснованиеРСА=ДокументОснование.Ссылка;

КонецЕсли;

Ошибка "Значение не является значением объектного типа"

Вот про ошибку Значение не является значением объектного типа

https://buhexpert8.ru/obuchenie-1s/oshibki-v-1s/znachenie-ne-yavlyaetsya-znacheniem-obektnogo-tipa-1s.html



Ошибка возникает при попутках получить значение несуществующего реквизита.

Пример:

На обычной платежке, где не было основания, вылезла ошибка

{Документ.ПлатежноеПоручение.Форма.ФормаДокумента.Форма(761)}: Значение не является значением объектного типа (Ссылка)

Если НЕ ЗначениеЗаполнено(ПараметрОснование) И ЗначениеЗаполнено(ДокументОснование.Ссылка) Тогда



РСА Я не понял сразу, почему выдается ошибка.

Если ДокументОснование.Ссылка есть Неопределено, то проверка ЗначениеЗаполнено(ДокументОснование.Ссылка) должно давать  Ложь. А почему выдает ошибку?

Потому что ошибка выходит на этапе получения Ссылка из ДокументОснование, которое есть Неопределено!



Такое будет работать?

Если НЕ ДокументОснование.Ссылка=Неопределено Тогда

ДокОснованиеРСА=ДокументОснование.Ссылка;

КонецЕсли;

Не должно работать! В левой части при получении ссылки из пустого (неопределенного) значения будет та же самая ошибка!

 

Проверка ЗначениеЗаполнено

Инфа

Глобальный контекст (Global context)

ЗначениеЗаполнено (ValueIsFilled)

Синтаксис: ЗначениеЗаполнено(<Значение>)

Параметры:

<Значение> (обязательный)

Тип: Произвольный. 
Значение для проверки.

Возвращаемое значение:

Тип: Булево
Для значений типа Булево всегда возвращается Истина.
Для значений типа Строка возвращается Истина, если в строке есть непробельные символы.
Для массивов и коллекций возвращается Истина, если в них есть хотя бы 1 элемент.
Для Неопределено и Null всегда возвращается Ложь.



РСА

1. Для Неопределено и Null всегда возвращается Ложь.

2. Если проверяемое значение получается через точку из неопределенного значения, тогда возвращается ошибка "Значение не является значением объектного типа (Ссылка)"



"ПараметрОснование" в формах 15.04.23 — не сохраняется после записи документа!

Инфа с ИТС

Как обрабатывать во встроенном языке ввод на основании и копирование?

В 1С:Предприятии 8.1 при вызове стандартной команды ввода на основании выполняется создание нового объекта и вызов в модуле объекта обработчика события ОбработкаЗаполнения(). В этом событии должен быть реализован алгоритм заполнения данных объекта из данных объекта-основания. Именно этот обработчик генерируется конструктором ввода на основании. Следует учитывать, что этот обработчик будет использоваться не только при вводе на основании. Он будет вызываться и при вызове метода объекта Заполнить(). Таким образом, он является стандартным местом, в котором реализуется заполнение данных объекта из данных объекта основания без учета того, откуда и зачем вызывается это заполнение. Соответственно в этом обработчике можно только выполнять заполнение данных и нельзя делать каких-либо дополнительных действий связанных с интерфейсом системы. 

Аналогично при копировании вызывается обработчик события ПриКопировании(), в котором можно дополнить стандартное заполнение данных выполняемое системой при копировании объекта. Этот обработчик вызывается, как при интерактивном копировании, так и при вызове метода Скопировать()

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

https://its.1c.ru/db/metod8dev/content/2468/hdoc





Расширение формы документа (Document form extension)

ПараметрОснование (BasisParameter)

Использование: Чтение и запись.

Описание: Содержит ссылку на объект-основание.

Доступность:  Толстый клиент.





РСА: Увидел, что "ПараметрОснование" формы существует с момента создания документа на основании до закрытия формы, нигде не сохраняется. При последующих открытиях документа в этом параметре пустое значение!

Платежные поручения

"ПараметрОснование" заполняется при вводе на основании и существует до закрытия /записи формы документа. При последующем открытии документа ПараметрОснование будет пустым значением.



Разбираться

Вот неправильная попытка проверить наличие документа-основания

Если ДокументОснование=Документы.ПриходнаяНакладная Тогда

// ошибки не дает, но не видит ссылки, дает "нет" при наличии ссылки в левой части выражения

Разбираться



В платежке доки-основания могут быть различные.

Смотри варианты:

-если мы хотим проверить конкретный документ как вид-основание;

- если хотим дату из дока-основания любого типа

Разбираться



Вот инфа про получение наименования ссылок

Получить название объекта конфигурации

В платежках есть реквизит "ДокументОснование" (ссылка на док-основание, возможны 5 видов оснований).

ДокументОснование.Наименование — дает ошибку, нет такого поля.

Как получить наименование документа-основания?



Общие реквизиты справочников? https://programmist1s.ru/obshhie-rekvizityi-1s/

Нет, это не то!



Вот что-то старое для 1С77

https://its.1c.ru/db/metod8dev/content/2480/hdoc



Вот инфа старая для 8.2, может работать в 8.3

https://helpf.pro/help/view/13303.html

20.12.2013 11:15 Ответ № 2

(0) ivnik,

Код 1C v 8.х

ДокументСсылка.Метаданные().Имя; // пример: РеализацияТоваровУслуг

ДокументСсылка.Метаданные().ПолноеИмя(); // пример: Документ.РеализацияТоваровУслуг

 

А вообще для проверок проверяется Тип документа

Код 1C v 8.2 УП

Если ТипЗнч(ОбрДокументСсылка) = Тип("ДокументСсылка.РеализацияТоваров") Тогда

// Строки кода, выполняемые при истинности условия.

КонецЕсли;