Struct.Numerator

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

Атрибут применяется к объекту структуры базы данных, позиционированному на нумераторе (в случае свободного нумератора, привязанного к нескольким реквизитам разных объектов), либо на реквизите объекта, являющемся нумератором (в случае связанного нумератора, привязанного к единственному реквизиту объекта), и возвращает новый объект структуры базы данных который можно использовать для получения свойств нумератора. Данный атрибут применяется для получения свойств как к объектам общих нумераторов и к реквизитам с самостоятельным нумератором, так и к реквизитам, ссылающимся на общий нумератор (в последнем случае, можно, к примеру, получить реквизит периода нумерации, см. Numerator.PeriodProperty). См. также статью Конфигурация данных проекта.


Синтаксис

Struct.Numerator:<Свойства нумератора текущего объекта (DBSTRUCT)>

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

Возвращается объект структуры базы данных, позиционированный на нумераторе.

Примеры

//Фрагмент вызывается при изменении реквизита "DocDate" (дата документа) существующего документа.
//Фрагмент проверяет, выходит ли измененное значение реквизита "DocDate" за период нумерации для реквизита-нумератора "DocNum"
//  Если выходит, необходимо запретить запись изменений, так как в новом периоде это может нарушить нумерацию (нумерация продолжиться не с начала, а с старого номера этого документа).

//Получим старую дату существовавшего документа
ДатаСтар:=aEl.Copy().DocDate;
//Найдем период нумерации номера
ФлПериод:=Struct.Doc(Вид).Props("DocNum").Numerator.TimePeriod;
  
Фл:=0;
If ФлПериод=1 Then //Год
  Фл:=(GetYear(aEl.DocDate)<>GetYear(ДатаСтар);
ElseIf ФлПериод=2 Then //Квартал
  Фл:=BegOfQuarter(aEl.DocDate)<>BegOfQuarter(ДатаСтар);
ElseIf ФлПериод=3 Then //Месяц
  Фл:=BegOfMonth(aEl.DocDate)<>BegOfMonth(ДатаСтар);
ElseIf ФлПериод=4 Then //День
  Фл:=BegOfDay(aEl.DocDate)<>BegOfDay(ДатаСтар);
EndIf;

If Фл Then
  Message("Сохранение запрещено, так как дата выходит за предыдущий период нумерации документа!","!");
  Exit;
EndIf;

...
//Фрагмент выводит свойства общего нумератора
aNum:=Struct.Num("НумераторДокументов").Numerator;

aList:=List.Create("без периода","год","квартал","месяц","день");
bList:=List.Create("контроль по всем номерам","контроль в пределах подчинения родителю","контроль в пределах папки справочника",
  "контроль в пределах элемента, используется для реквизитов строчных частей","контроль уникальности отсутствует");
сList:=List.Create("номер создается при сохранении объекта","номер создается при создании нового объекта","номер не создается автоматически");

Message("Свойства нумератора "+aNum.NumeratorObjectLink.Name+": "+
  ?(aNum.DataType="NUMBER","тип данных число","тип данных строка")+
  ", период нумерации: "+aList[aNum.TimePeriod+1]+
  ", контроль номеров: "+bList[aNum.UnicityControl+1]+
  ", создание номера: "+сList[aNum.AutoNumeration+1]);
Message("  Объекты, в которых используется нумератор:");
For i:=1 To aNum.Props.Count() Do
  aProp:=aNum.Props(i);
  Message("  "+aProp.ObjectLink.Name+", реквизит: "+aProp.Name);
  If aNum.TimePeriod>0 Then
    Message("    Реквизит периода нумерации: "+aProp.Numerator.PeriodProperty.Name);
  EndIf;
EndDo;