DB.SetValue

From SunFlurry wiki
Jump to: navigation, search
  SetValue (Значение реквизита)
Объект:Объект базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Сервер и БД
Исключения:Невозможно превратить в строку, дату, неверный реквизит, стр. часть, номер строки, и пр.
Визуальность:Нет

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

  • Объект был выбран, но не заполнен, либо заполнен в режиме только заголовка.
  • Объект был заполнен в режиме частичного заполнения, однако запрашиваемый реквизит не входит в число загруженных реквизитов.
  • Указан реквизит строчной части, и строчная часть еще не была загружена (происходит загрузка требуемой строчной части)

В случае, если реквизит не периодический, изменения не записываются в базу данных до момента вызова функции Save, объект получает признак измененный, если производится визуальное редактирование объекта, форма редактирования также получает признак были изменения. При изменении реквизитов объектов, отображенных на формах, изменения автоматически транслируются на элементы формы. Если же реквизит периодический, функция выполнит сохранение его значения в базу данных безотлагательно, флаг изменения объекта не будет установлен. Если дата загрузки периодических реквизитов объекта находится в диапазоне дат записи, заданном этой функции, функция также обновит значение этого реквизита в загруженных реквизитах объекта (в ином случае, значения загруженных реквизитов не меняются).

Синтаксис

DB.SetValue(<Указание на реквизит (STRING)>,<Значение реквизита>,<Дата начала записи периодического реквизита (DATE)>,<Дата окончания записи периодического реквизита (DATE)>)

Аргументы

  • <Указание на реквизит (STRING)> - Задает наименование реквизита, значение которого необходимо установить, если реквизит находится в строчной части, указывает также на наименование строчной части и номер строки. Общий формат аргумента: [<Наименование строчной части>.<Номер строки строчной части>.]<Наименование реквизита>.
  • <Значение реквизита> - Устанавливаемое значение реквизита. Если тип значения не соответствует типу значения реквизита, тип будет приведен (т.е., если реквизит имеет тип число, а аргумент имеет строчный тип, строка будет превращена в число до установки значение).
  • <Дата начала записи периодического реквизита (DATE)> - (необязательный аргумент) Задает дату начала периода сохранения периодического реквизита объекта. Если реквизит не периодический, этот аргумент игнорируется.
  • <Дата окончания записи периодического реквизита (DATE)> - (необязательный аргумент) Задает дату окончания периода сохранения периодического реквизита объекта. Если реквизит не периодический, этот аргумент игнорируется. Если аргумент не задан, однако аргумент Дата начала записи периодического реквизита задан и не соответствует пустой дате, этот аргумент устанавливается равным предыдущему (запись производится на дату, а не на диапазон дат), если оба аргумента не заданы, используется диапазон записи, заданный функцией UsePeriod.

Примеры

//aEl содержит выбранный и загруженный элемент справочника вида Номенклатура с реквизитом "Code" равным "000000005745" в режиме частичной загрузки
aEl:=Ref.Номенклатура;
aEl.FindEx(2,"ТоварнаяГруппа","Code","000000005745");

//Фрагмент устанавливает значение реквизита Цена на текущую дату, при этом функция предварительно производит загрузку содержимого объекта в память.
//Запись производится непосредственно при вызове функции, объект не получает статус "изменен"
aEl.SetValue("Цена",1000.55,Date());