Проверка пустых, нулевых значений в 1С; проверка "является числом"; проверка документов-оснований
Вот инфа с вариантами
https://moscowsoft.com/statii/programmirovanie_na_1s_predpriyatie/proverka_na_bituyu_ssylku_v_1s_8/
Проверка "является числом" через ПОПЫТКУ... ИСКЛЮЧЕНИЕ
Попытка прибавить число к проверяемому значению? Нет, применение функции преобразования строки в число.
При успехе = Да, при исключении = Нет
// Сообщить("Строка комиссии до преобраз в число " +СтрокаКомиссии);
Попытка
СуммаКомиссии=Число(СтрокаКомиссии);
Исключение
Сообщить("Не получается преобразовать выделен комиссию в число" + Объект.Ссылка); // И ссылку на платежку дать умно
СуммаКомиссии=0;
КонецПопытки;
Проверка ЗначениеЗаполнено(ДокументОснование.Ссылка)
выдает ошибку "Значение не является значением объектного типа (Ссылка)", если исходное значение ДокументОснование пустое (неопределено).
Ошибка выдается на этапе получения Ссылки из значения ДокументОснование, которое неопределено.
Если ДокументОснование=Неопределено Тогда
// Позволяет проверить,есть ли значение ссылки на документ в реквизите "ДокументОснование" или нет. Дает Да, если док-основание не указан.
В итоге проверку сделал так. Вроде как две проверки похожих? Может что-то лишнее?
1. Первая проверка - на заполнение исходного реквизита. Если он заполнен, тогда из него достают ссылку и снова проверяют, что ссылка получена. Не лишнее ли условие "И ЗначениеЗаполнено(ДокументОснование.Ссылка"?
2. Разве ДокументОснование само по себе не есть ссылка? Вроде как Ссылка.Ссылка? Или нет?
Если НЕ ДокументОснование=Неопределено
И ЗначениеЗаполнено(ДокументОснование.Ссылка) Тогда
ДокОснованиеРСА=ДокументОснование.Ссылка;
КонецЕсли;
Ошибка "Значение не является значением объектного типа"
Вот про ошибку Значение не является значением объектного типа
Ошибка возникает при попутках получить значение несуществующего реквизита.
Пример:
На обычной платежке, где не было основания, вылезла ошибка
{Документ.ПлатежноеПоручение.Форма.ФормаДокумента.Форма(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 УП
Если ТипЗнч(ОбрДокументСсылка) = Тип("ДокументСсылка.РеализацияТоваров") Тогда
// Строки кода, выполняемые при истинности условия.
КонецЕсли;