ОписаниеТипов.ПривестиЗначение

Методы · AdjustValue

Формирует значение на основании описания типа и переданного значения.

Синтаксис

ПривестиЗначение(<Значение>)

Примеры платформы

Процедура ТоварыНоменклатураНачалоВыбора(Элемент,СтандартнаяОбработка)
    ТипСтр = "СправочникСсылка.Номенклатура";
    Элемент.ОграничениеТипа = Новый ОписаниеТипов(ТипСтр);
    Значение = Элемент.Значение
    Элемент.Значение = Элемент.ОграничениеТипа.ПривестиЗначение(Значение);
    Элемент.ВыбиратьТип = Ложь;
КонецПроцедуры
Полное описание, параметры и ограничения

ОписаниеТипов.ПривестиЗначение (TypeDescription.AdjustValue)

ОписаниеТипов (TypeDescription)

ПривестиЗначение (AdjustValue)

Доступен, начиная с версии 8.0.

Синтаксис:
ПривестиЗначение(<Значение>)
Параметры:

<Значение> (необязательный)
Тип: Произвольный.
Значение, которое будет приводиться.
Возвращаемое значение:
Тип: Произвольный.
Если значение передано, то выполняется проверка на соответствие значения описанию типа. Если значение соответствует, то метод возвращает переданное значение. Если значение не соответствует, то оно приводится к типу, доступному в описании типа.
Если значение не передано, то выдается значение по умолчанию для данного описания типа.
Описание:

Формирует значение на основании описания типа и переданного значения.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Пример:

// В форме расположено табличное поле Товары, в котором для ячейки

// колонки Номенклатура определено событие НачалоВыбора, процедура

// обработчик которого приведена в примере

Процедура ТоварыНоменклатураНачалоВыбора(Элемент,СтандартнаяОбработка)
ТипСтр = "СправочникСсылка.Номенклатура";
Элемент.ОграничениеТипа = Новый ОписаниеТипов(ТипСтр);
Значение = Элемент.Значение
Элемент.Значение = Элемент.ОграничениеТипа.ПривестиЗначение(Значение);
Элемент.ВыбиратьТип = Ложь;
КонецПроцедуры

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Проверить тип ресурса Результат на собственной сумме

В Начисления шесть ресурсов, Результат имеет число 15,2. Подгоняем только собственное 1000.256 под тип, не вычисляя зарплату и не записывая сумму.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.

  2. Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.

  3. Имена объектов взяты из XML КА2 Progress: C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS. Исходные XML не изменяйте. Выполняйте код только в своей учебной копии соответствующей конфигурации.

  4. В другой конфигурации предварительно найдите аналогичный объект в Конфигураторе и замените только строку имени в поиске. Отсутствие имени обрабатывается до чтения свойств; оно не доказывает отсутствие аналогичной возможности.

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

Описание = Метаданные.РегистрыРасчета.Найти("Начисления");
Если Описание = Неопределено Тогда
    ВызватьИсключение "В учебной конфигурации отсутствует РегистрыРасчета.Начисления";
КонецЕсли;
Результат = Описание.Ресурсы.Найти("Результат");
Если Результат = Неопределено Или Не Результат.Тип.СодержитТип(Тип("Число")) Тогда
    ВызватьИсключение "Ожидался числовой ресурс Результат";
КонецЕсли;
Сообщить(Описание.Ресурсы.Количество() = 6);
Сообщить(Результат.Тип.КвалификаторыЧисла.Разрядность = 15);
Сообщить(Результат.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти = 2);
УчебноеЧисло = 1000.256;
Приведенное = Результат.Тип.ПривестиЗначение(УчебноеЧисло);
Сообщить(Приведенное = 1000.26);
Сообщить(УчебноеЧисло = 1000.256);

Разбор по шагам

  1. Находим числовое описание ресурса и проверяем тип до квалификаторов.

  2. ПривестиЗначение у ОписаниеТипов ограничивает собственное число типом 15,2.

  3. Исходное число остаётся прежним, значение регистра из базы не получалось.

Как проверить результат

  1. Пять сравнений Истина: ресурсы 6, квалификаторы 15 и 2, приведено 1000.26, исходное 1000.256.

  2. В коде нет расчётной формулы, сотрудника, периода конкретной записи или Записать.

Ожидаемый результат

Показано ограничение дробной части собственного числа по реальному типу ресурса.

На что обратить внимание

  1. Округление по типу хранения не заменяет прикладные правила расчёта выплат и налогов.

  2. Не переносите число 1000.26 как готовое начисление: оно только учебная проверка квалификатора.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Задать числовую колонку с двумя дробными знаками

Создаём тип Число(9,2) для учебной таблицы и отдельно отклоняем отрицательное значение до приведения типа.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Все значения учебные и создаются в памяти; документы, регистры и рабочие данные не изменяются.

  2. Выполняйте на сервере учебной базы. Представление десятичного разделителя в сообщениях зависит от локали.


Квалификаторы = Новый КвалификаторыЧисла(9, 2, ДопустимыйЗнак.Неотрицательный);
ТипСуммы = Новый ОписаниеТипов("Число", Квалификаторы);
Сообщить(ТипСуммы.КвалификаторыЧисла.Разрядность);
Сообщить(Квалификаторы.Разрядность);
Сообщить(Квалификаторы.РазрядностьДробнойЧасти);
Сообщить(Квалификаторы.ДопустимыйЗнак);
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Сумма", ТипСуммы);
Входящие = Новый Массив;
Входящие.Добавить(12.341);
Входящие.Добавить(-1);
Для Каждого Значение Из Входящие Цикл
    Если Значение < 0 Тогда
        Сообщить("Отклонено отрицательное значение: " + Строка(Значение));
        Продолжить;
    КонецЕсли;
    Если Значение > 9999999.99 Тогда
        Сообщить("Отклонено значение вне диапазона Число(9,2)");
        Продолжить;
    КонецЕсли;
    СтрокаТаблицы = Таблица.Добавить();
    СтрокаТаблицы.Сумма = ТипСуммы.ПривестиЗначение(Значение);
    Сообщить(СтрокаТаблицы.Сумма);
КонецЦикла;
Сообщить(Таблица.Количество());

Разбор по шагам

  1. Разрядность 9 включает целую и дробную части; для целой остаётся семь разрядов.

  2. ОписаниеТипов получает числовые квалификаторы вторым параметром.

  3. До приведения отдельно проверяем бизнес-требование неотрицательности и верхнюю границу.

  4. Приведённое значение попадает в типизированную колонку; третья дробная цифра не сохраняется.

Как проверить результат

  1. Свойства квалификаторов: 9, 2 и Неотрицательный; в таблице одно значение 12.34.

  2. Для -1 выводится сообщение об отказе, строки с нулём вместо ошибки не создаётся.

  3. Добавьте 10000000: значение отклоняется до приведения.

Ожидаемый результат

Таблица содержит одну допустимую сумму с заданной точностью.

На что обратить внимание

  1. ПривестиЗначение преобразует значение и может менять его; это не универсальный валидатор бизнес-правил.

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

  3. Сумма 9,2 выбрана для обучения, а не как обязательный тип всех сумм в вашей конфигурации.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.