Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Rollback




Commit

Если был выполнен отказ от изменений (Rollback), то просто очищается транзакционный кэш.


 


556



Краткий справочник разработчика


Получение представлений ссылочных объектов

П

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

В остальных случаях выполняется чтение в кэш полей объекта, необходимых для формирования представления.

Аналогичный механизм используется при вызове функции:

А = Строка(СсылкаНаЭлементСправочникаНоменклатура);

а также при неявном преобразовании ссылочной переменной к типу Строка.

Теперь, если вспомнить нашу работу с конструктором выходной формы, лишний раз становится понятно, почему конструктор, при выборе ссылочного поля, всегда добавляет к списку выбранных полей представление этого поля. Именно для того, чтобы не выводить в ячейку табличного поля ссылку и не вызывать тем самым преобразования ссылочной переменной к типу Строка со всеми вытекающими отсюда действиями.


Виртуальные таблицы запросов

К

ак вы теперь знаете, при создании запроса система предоставляет нам в качестве источников данных некоторое количество виртуальных таблиц. Название «виртуальные» полностью соответствует их сути, поскольку эти таблицы, в свою очередь, также являются результатом запроса, который система формирует в момент выполнения соответствующего участка кода.

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

Во-первых, все виртуальные таблицы параметризованы, т.е. разработчику предоставляется возможность задать некоторые параметры, которые система будет использовать при формировании запроса создания виртуальной таблицы. Примечательным здесь является то, что задание параметров виртуальной таблицы не всегда приводит к простой подстановке указанных разработчиком значений в текст запроса. В зависимости от того, какие параметры виртуальной таблицы указаны разработчиком, система может формировать РАЗЛИЧНЫЕ запросы для получения одной и той же виртуальной таблицы, причем эти запросы будут оптимизированы с точки зрения переданных параметров.

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

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


 


558



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


Манипулирование данными объектов

Н

есмотря на большое разнообразие объектов встроенного языка, предназначенных для работы с информационными структурами, создаваемыми на основе объектов конфигурации, лишь некоторые из объектов встроенного языка позволяют изменять данные, хранящиеся в этих информационных структурах. Такие объекты мы назовем объектами манипулирования данными.

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

Так вот, модуль объекта манипулирования данными будет всегда выполняться при создании объекта манипулирования данными. Кроме этого, он будет всегда выполняться и при интерактивном обращении пользователя к самой структуре манипулирования данными, поскольку такое обращение будет вызывать создание соответствующего объекта манипулирования данными. Например, при открытии формы элемента справочника будет создаваться объект СправочникОбъект.<имя>.

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

Например, если мы, для объекта конфигурации Справочник «Клиенты» опишем в модуле объекта процедуру:


Процедура Проверка() Экспорт

КонецПроцедуры;


560



Краткий справочник разработчика


Манипулирование данн ыми объек!


 


то в дальнейшем сможем вызывать ее как метод объекта СправочникОбъект.Клиенты:

Клиент = Справочники.Клиенты.НайтиПоКоду(1)ПолучитьОбъект(); Клиент.Проверка();

Однако следующий код будет приводить к ошибке, т.к. объект СправочникСсылка.Клиенты не имеет метода «Проверка»:

Клиент = Справочники.Клиенты.НайтиПоКоду(1); Клиент.Проверка();

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

Во-первых, для констант указаны три объекта манипулирования
данными КонстантаМенеджерЗначения.<имя>,

КонстантаМенеджер.<имя> и КонстантыНабор. На самом деле манипулирование данными константы осуществляется при помощи объектаКонстантаМенеджерЗначения.<имя>.

Два других объекта - КонстантаМенеджер.<имя> и
КонстантыНабор - также позволяют изменять значения констант,
хранящиеся в базе данных, однако они, при выполнении своих
методов Установить() и Записать() вызывают создание объекта
КонстантаМенеджер.<имя>, который и выполняет

непосредственное изменение данных.

При выполнении метода Установить() объекта КонстантаМенеджер.<имя>, будет вызван модуль менеджера значения и обработчики событий ПриЗаписи() и ПередЗаписью() для изменяемой константы. При выполнении метода Записать() объекта НаборКонстант, модуль менеджера значения и соответствующие обработчики будут вызваны для каждой константы, входящей в набор.

Во-вторых, для регистра сведений указаны два объекта манипулирования данными. «В чистом виде» манипулирование данными регистра сведений осуществляется при помощи объекта РегистрСведенийНаборЗаписей.<имя>.


Однако существует возможность манипулирования записями
регистра сведений и при помощи объекта

РегистрСведенийМенеджерЗаписи.<имя>. Но объект

РегистрСведенийМенеджерЗаписи.<имя> работает с данными
регистра не напрямую, а через объект

РегистрСведенийНаборЗаписей.<имя>. Таким образом, модуль
набора записей, а также обработчики событий ПередЗаписью() и
ПриЗаписи() набора записей, будут отрабатывать и при
манипулировании объектом

РегистрСведенийМенеджерЗаписи.<имя>. Однако процедуры и функции, описанные в модуле набора записей с ключевым словом Экспорт, не будут доступны как методы объекта РегистрСведенийМенеджерЗаписи.<имя>.


 


562




Константы

Объекты встроенного языка для работы с константами:

*Заливкой выделен объект манипулирования данными

Узнай больше!

Про основные виды объектов встроенного языка можно прочитать в главе «Виды объектов встроенного языка, предназначенные для работы с данными прикладных объектов конфигурации» на странице 551.

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

КонстантаМенеджерЗначения<имя> - используется для доступа к константе. Любая запись константы (интерактивно в форме, объекты КонстантыНабор и КонстантаМенеджер.<имя>) создает объект этого типа и производит запись с его помощью, что обеспечивает вызов модуля и обработчиков событий этого объекта.


565


Краткий справочник разработчика


Константы


Использование объектов:


// Константы

//Пример: Открыть основную форму констант

Форма = Константы.ПолучитьФорму(); Форма.Открыть();


СоздатьМенеджерЗначения()

//Пример: Вывести значения всех констант, существующих в конфигурации

Для Каждого ОчереднаяКонстанта Из Константы Цикл

ИмяКонст=ОчереднаяКонстанта.СоздатьМенеджерЗначения().Метаданные().Имя-ЗначениеКонст = ОчереднаяКонстанта.Получить(); Сообшить("Константа "+ИмяКонст+" = "+ЗначениеКонст); КонецЦикла;


II. <имя константы> // [<имя константы>] // Для Каждого... Из... Цикл... КоненЦикла;

//Пример: Прочитать значение константы

Результат = Константы.ПрефиксНумерации.ПолучитьО; Сообщить("Значение константы ПрефиксНумерации = "+Результат);

/ЛТример: Установить значение константы «ПрефиксНумерации» равным «ЦБ»

Константы["ПрефиксНумерации"].Установить("ЦБ");

Сообщить("Новое значение = "+Константы["ПрефиксНумерации"].Получить());

/ЛТример: Очистить значения всех констант

Для Каждого ОчереднаяКонстанта Из Константы Цикл

ОчереднаяКонстанта.Установить(Неопределено); КоненЦикла;

// СоздатьНабор()

//Пример: Установить новые значения нескольких констант

Набор = Константы.СоздатьНабор("Руководитель, Бухгалтер"); Набор.Руководитель = "НиколаевДенис Павлович"; Набор.Бухгалтер = "Николаева Людмила Сергеевна"; Набор.Записать();


566



Краткий справочник разработчика


Константы


 


Последовательность событий при записи констант из формы


Особенности внутренней реализации объекта КонстантыНабор таковы, что при записи набора констант, обработчики события ПередЗаписью() и ПриЗаписи() модуля менеджера значения константы будут вызваны для каждой константы, входящей в записываемый набор.


Замечание. Работа с формой констант осуществляется при помоши объекта КонстантыНабор, который, в свою очередь, использует объектКонстантаМенеджерЗначения.<имя>.


568



Справочники


                   
 
 
   
   
 
 
   
     
 


Справочники

Объекты встроенного языка для работы со справочниками


Использование объектов:

II Справочники




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 492; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.046 сек.