Объект этот объект 1с
Мы уже познакомились с таким понятием, как объект в 1С , следующим шагом будет логично познакомиться с таким понятием, как ссылка в 1С.
Ссылка указывает на данные экземпляра объекта, но не хранит их, т.е. получив ссылку на конкретный экземпляр объекта, мы сможем узнать всю информацию об экземпляре этого объекта, но не сможем внести какие-нибудь коррективы в эту информацию.
Мы помним, что в платформе 1С 8.3. существуют три вида объектов. Это объекты метаданных, общие объекты и универсальные коллекции значений.
Так вот, ссылка может быть только у объектов метаданных.
Замечу что, ссылка указывает не на сам объект, а на экземпляр объекта. Хотя, очень часто употребляют выражения «ссылка объекта», «ссылка на объект» и т.п.
Все ссылки объектов имеют тип СправочникСсылка. , ДокументСсылка. и т.д.
Ссылку можно использовать в качестве переменной, и также ссылку можно указывать, как реквизит других объектов метаданных.
Например, в моей конфигурации есть справочник Контрагенты.
А также какой-то документ, пусть будет Оплата. И я могу какому-то реквизиту документа Оплата присвоить тип — ссылка на справочник Контрагент.
Это значит, теперь в документе Оплата можно хранить информацию о контрагенте, который сделал оплату.
Если мы используем ссылку в качестве реквизита какого-то объекта, то при редактировании экземпляра, на который указывает ссылка, сам реквизит не изменится.
Поясню на примере. Я выше создал документ Оплата и реквизит Оплативший для этого документа с типом СправочникСсылка.Контрагенты.
Если я переименую элемент справочника Контрагенты.
Затем, зайду обратно в выше созданный документ Оплата, то увижу, что отображение контрагента в реквизите поменялось автоматически.
Что это значит? Это не значит, что реквизит Оплативший элемента и сам элемент справочника Номенклатура поменялся автоматически. Нет, это значит, что данный реквизит хранит указатель на экземпляр объекта, который отображается посредством наименования. Поменяли наименование, поменялось только отображение, если бы поменяли какой-нибудь другой реквизит справочника Контрагенты, то пользователь бы ничего не заметил.
Получить ссылку 1С
Каким образом программно получить ссылку на экземпляр объекта, который уже есть в базе?
Сделать это можно несколькими способами: найти по коду, найти по наименованию, найти по реквизиту и найти по нескольким реквизитам через запрос. Я рассмотрю первые два метода.
Для демонстрации этих методов, на основной форме документа Оплата я создам команду «Установить контрагента», которую размещу в командной панели формы.
При выполнении этой команды я буду в поле Оплативший записывать определенного контрагента. Для этого я создам обработчики команды на клиенте и на сервере.
Первый способ получения ссылки: найти по коду, для поиска по коду необходимо использовать функцию менеджера объекта НайтиПоКоду.
Функция НайтиПоКоду вернёт ссылку на экземпляр объекта справочник Контрагенты, которому соответствует код 000000002. Почему мы задали код в виде строки, а не в виде цифры, например? Чтобы понять это, нужно открыть непосредственно редактор справочника Контрагенты в конфигураторе, перейти на закладку «Данные» и посмотреть, какой тип кода у этого справочника.
Тип кода у справочника Контрагенты — строка, поэтому код мы ищем по строковому значению.
Таким образом, данный код:
возвращает ссылку на справочник Контрагенты, код у которого 000000002. Если такой нет, возвращается пустая ссылка (о них ниже), если с таким кодом несколько элементов, то возвращается один из них, какой конкретно — предугадать невозможно, платформа выберет элемент по своим внутренним идентификаторам.
Рассмотрим синтаксис этой функции для менеджера справочника:
Код – непосредственно тот код, по которому мы ищем наш элемент;
ПоискПоПолномуКоду — если стоит параметр Истина, то поиск будет вестись по кодам всей иерархии, т.е. Вам необходимо будет указывать код каждой группы, куда входит элемент через флеш. Например, так: 001/005/110, где слева будет располагаться самая верхняя группа, а справа непосредственно код элемента.
Данное поле необязательно, по умолчанию – Ложь;
Родитель – для иерархических справочников можно указать группу, тогда поиск будет вестись внутри группы. Данное поле необязательно;
Владелец – для подчиненных справочников можно указать владельца, тогда поиск будет вестись только среди элементов, подчиненных данному владельцу. Данное поле необязательно.
Второй способ получения ссылки: найти по наименованию, для поиска по наименованию необходимо использовать функцию менеджера объекта НайтиПоНаименованию.
Этот способ можно применить только для тех объектов, у которых имеется стандартный реквизит Наименование.
Например, у справочников этот реквизит имеется.
А у документов его нет.
В случае этой функции, поиск ведется по тому значению, которое в поле Наименование объекта
Синтаксис функции для менеджера справочника следующий:
«Наименование» – непосредственно то наименование, по которому мы ищем наш элемент;
«ТочноеСоответствие» — если стоит параметр Ложь, то поиск будет вестись не точно, т.е. когда левая часть наименования элемента и строка поиска будут совпадать (например, Металл и Металл 01), то поиск выдаст результат. Если стоит Истина, то будут найдены только те элементы, наименование которых будет точно совпадать со строкой поиска.
Данное поле необязательно, по умолчанию – Ложь.
Помните это, что по умолчанию поиск ведется не точно;
Параметры «Родитель» и «Владелец» точно такие же, как для процедуры НайтиПоКоду.
Пустая ссылка 1С
У Вас уже, наверное, назрел вопрос: что будут возвращать методы НайтиПоКоду, НайтиПоНаименованию, если такой элемент справочника не был найден. Они будут возвращать Пустую ссылку. Пустая ссылка — это пустое значение какого-нибудь справочника или документа. У менеджеров справочника или документа есть методы, которые возвращают пустую ссылку соответствующих объектов.
Выглядит он так:
ПустаяНоменклатура= Справочники.Номенклатура.ПустаяСсылка();
ПустаяОплата = Документы.Оплата.ПустаяСсылка();
Переменные ПустаяНоменклатура и ПустаяОплата содержат в себе пустые ссылки на каждый объект.
Обращаю Ваше внимание, что для каждого вида справочника и каждого документа будет своя собственная пустая ссылка.
Данный метод очень удобно использовать, когда нам необходимо знать, найден ли элемент справочника по коду (названию) или нет.
ПустаяСсылка() – это метод менеджера объекта. Также есть метод ссылки объекта Пустая(), который возвращает тип булево. Истина — если это пустая ссылка. Код выше можно переделать:
Метод Пустая() удобно использовать работая в клиентском контексте (в том числе на тонком клиенте), потому что менеджер объекта это «тяжелый» объекта и с ним можно работать только в серверном контексте. Т.е. установку контрагента можно сделать таким способом:
В этом коде я получаю по наименованию ссылку на нужного контрагента, делаю это в серверном методе, поскольку обращаюсь к менеджеру справочника, записываю если он не пустой, а потом в клиентском методе проверяю, найден контрагент по такому наименованию или нет, если не найден то вывожу предупреждение.
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Форум
Конфигуратор
Все начинается с запуска Конфигуратора. Программы для 1С:Предприятие называются "конфигурациями" и создаются они в специальном режиме для разработчика "Конфигуратор". Обычные пользователи работают в режиме "Предприятие".
Объекты, свойства и методы
Самое главное понятие 1С -- это "объект". Объект -- это элемент реального мира. Объектом может быть все что угодно: компьютер, облако, кошка. Но нас интересуют только те объекты, которые имеются в офисной деятельности предприятия: документы, отчеты, справочники. Программа для 1С представляется как совокупность объектов, взаимосвязанных между собой, т.е. конфигурация объектов. Например, документ "Приказ о приеме на работу", справочник "Сотрудники", отчет "Сотрудники, принятые за период".
У объектов имеются некоторые атрибуты (свойства, реквизиты). Например, сотрудник имеет фамилию, имя, отчество, оклад, табельный номер. Приказ о приеме имеет номер и дату. Набор свойств объекта задается разработчиком.
Также объекты имеют определенные методы (процедуры и функции). Например, вы можете выбрать всех сотрудников с помощью метода справочника ВыбратьЭлементы(), или можно сохранить документ методом Записать().
Встроенный язык
Поведение объектов конфигурации задается на встроенном языке. Программист может писать на встроенном языке 1С свои собственные модули, состоящие из процедур и функций. Встроенный язык позволяет работать со справочниками, документами и другими объектами 1С. Можно, например, с помощью методов объектов выбрать все элементы справочника Сотрудники для вывода в отчет, или создать и сохранить любой документ.
Модули, процедуры и функции
Вся конфигурация, как вы уже наверное заметили, состоит из модулей. Это могут быть модули документов или модули отчетов или другие модули. Модули состоят из процедур и функций. Процедура -- это небольшая программа для выполнения определенной задачи. Функция отличается от процедуры, только тем, что имеет результат. Говорят, "функция возвращает результат". Например, модуль "Приказа о приеме на работу" может иметь следующие процедуры ПроверитьПравильность( ) и НапечататьПриказ( ).
Глобальный модуль
В системе 1С есть так называемый Глобальный модуль.Он относится к конфигурации в целом. Глобальный модуль нужен для того, что писать процедуры и функции, доступные в любом месте программы (в любом другом модуле). Для этого необходимо просто указать ключевое слово Экспорт. Также можно создать глобальные переменные, которыми можно будет пользоваться в любом месте программы. Но чем меньше будет таких глобальных переменных, тем лучше, так как модули получаются более независимыми друг от друга, что снижает количество ошибок в программе и облегчает отладку.
Возьмем ДокументОбъект и ДокументСсылка. Будем, например, смотреть на флаг ОтражатьВБухгалтерскомУчете. Событие - ПередЗаписью.
Я завел две переменные ОбъектОтражатьВБухгалтерскомУчете и СсылкаОтражатьВБухгалтерскомУчете. И вычислил их значения, остановившись на точке останова в обработчике события.
Нарисовал себе табличку:
1. Документ уже проведен. В нем взведен флаг отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Истина.
СсылкаОтражатьВБухгалтерскомУчете - Истина.
2. Документ был проведен, в нем БЫЛ взведены флаг отразить в БУ. Сняли флаг БУ.
ОбъектОтражатьВБухгалтерскомУчете - Ложь.
СсылкаОтражатьВБухгалтерскомУчете - Истина.
3. Документ был проведен, в нем не был взведен флаг отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Ложь.
СсылкаОтражатьВБухгалтерскомУчете - Ложь.
4. Новый документ. Накинута галка отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Истина.
СсылкаОтражатьВБухгалтерскомУчете - Ложь.
5. Новый документ. Нет галки отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Ложь.
СсылкаОтражатьВБухгалтерскомУчете - Ложь.
Вот сижу и смотрю на эту табличку. И не могу понять 2 и 4-й случаи. Был бы очень признателен за комментарий.
Вообще, хочу понять - новый документ заводится, или редактируется старый. И что-то из этих выкладок ничего не приходит на ум.
Очень интересное исследование, знать бы только смысл.
"Итак дети, все прочитали произведение великого пейсателя и готовы ответить мне, что же хотел сказать автор."
ЭтоНовый()
Возвращаемое значение:
Тип: Булево.
Истина - изменяется еще ни разу не записанный документ; Ложь - документ уже записан.
Описание:
Определяет, записан ли документ в базу данных.
Сервер, толстый клиент, внешнее соединение.
А мое исследование - оно совсем не имеет смысла?
Но почему-то же поведение таково.
(0) Чувак, реально не понимаешь что такое ссылка на объект и сам объект.
Что такое объектные блокировки? Ой, о чем это я.
Смотри, есть квартира (объект) и адрес в каталоге, который модно по телефону продиктовать (ссылка), есть разница?
То есть обращаясь к обьекту при вычислении ты каждый раз заставляешь считывать актуальное значение из базы
А ссылка на то она и ссылка тире в ней же нигде не уакзпно что должно соответствовать состоянию объекта в базе
Поэтому ссылку следует использовать для ССЫЛКИ на объект
А объект для получения актуальных зачений реквизитов объекта
(0) Молодец. Не обращай внимание на жесткую критику. Системный подход к изучению 1С. Пытливый ум даст свои плоды. Так держать!.
(9) Обращаясь к Объекту, ты считываешь поля объекта, такие, какие они там есть, такие, какие ты мог в него раньше присвоить.
Обращаясь к ссылке, ты всегда получишь то, что в базе, даже если реквизиты ссылки кешированы (обращался чуть раньше, менее 20 секунд назад) - 1С все равно запросит в базе поле _version и сравнит его со значением в кеше.
(8) Ладно, пусть квартира.
Второй случай:
Ссылка в каталоге: в квартире есть душ.
Объект: в квартире ванна. Т.е. после публикации объявления успели переделалать.
Это более-менее понятно.
Четвертый случай (новый объект):
Объект: в квартире душ. Вот он - можно потрогать.
Ссылка в каталоге: . Почему должна ложь-то стоять?
В четвертом случае по ссылке ложь.
(20) не помню, в Си уже были объекты?
докОбъект - это классический экземпляр класса. докСсылка -грубо говоря идентификатор в БД.
ПолучитьОбъект() -конструктор по идентификатору, при котором в переменные считываются данные с базы. Потом идет работа с уже считанными значениями. С докСсылка все не так "привычно". Фактически при обращении докСсылка.реквизит каждый раз идет считывание с БД.
Спасибо всем. Разобрался. У меня в четвертом случае некорректно было все.
У нового ссылка пустая. А от пустой ссылки я получил значение свойства. Ну, и получил ложь.
(18) прошу сделать поправку на мою неснеговитость-клюшечност и пояснить азы
Объект тире это копия записи базы в оперативной памяти слэш кеше вопрос
Потому как для меня-клюшечника объект это актуальный экземпляр записи.
(24) причем гуру говорят что при обращении к реквизиту ссылки тащатся все реквизиты, что некошерно. v8: обращение к реквизиту vs запрос
(0) Ссылка.Реквизит - обращение к ЗАПИСАННЫМ данных из ИБ
Объект.Реквизит - обращение к текущим данным и не факт записанны
Даже в семерке неявно существуют объекты и ссылки. СоздатьОбъект("Справочник.XXX") - гибрид объекта с менеджером. А вот .ТекущийЭлемент() - ссылка в чистом виде.
(32) Считывается весь объект из памяти, что естественно может повлиять на производительность. Работайте с запросами
(35) Выразился не правильно.
Считывается весь объект в память из базы данных, что естественно Может повлиять на производительность, если получать данные всего объекта не требует алгоритм. Работайте с запросами.
(0) у вас не Ссылка или Объект конфликт - а проведен/не проведен.
Пока док не был проведен - объект давал картину "я снял /поставил флаг", а ссылка - давала данные БД, которые еще не изменились.
После проведения - объект записался в БД, по ссылке снова стали актуальные данные.
(32)>>что при обращении к реквизиту ссылки тащатся все реквизиты,
- да, все ссылочные.
(20) ссылки 1С к ссылкам остальных языков отношения не имеют - там ссылка на область памяти (сам объект), тут - ссылка это уникальный индекс, по которому 1С ищет у себя что-то в таблицах.
(18) вот вроде все правильно написал, но из-за незнания ООП - путаешь объекты и Объекты.
С большой буквы - это, конечно же, в 1С ))
(21) если "объект" обновил свое альтер-эго в базе, то ссылка и объект возвратят одно и то же.
Если нет - то ссылка возвратит то, что в БД, а обращение к объекту (это "объект" 1С, не забываем! он вообще ничего общего не имеет с объектами ООП!) даст некое содержимое некоего кэша в 1С, куда она временно спихнула содержимое блока памяти (отвечающего за отображение на экране - если угодно, "скриншот" экрана в виде "объектов") и держит свой "объект".
- дважды неправильно. Считывается весь объект и ссылочные "продолжения" его реквизитов.
Отсюда и ранее распространенная ошибка SQL "превышено 256 таблиц".
Когда такое неявное "разъименование" тащило за собой чуть не всю базу.
И плюс один раз неправильно - в запросах 1С тоже такое возможно: неявное разъменование и дополнительные "явно не указанные" соединения "ссылочных" таблиц между собой.
(37)>>теперь пойди книгу почитай или к (8) на курсы
- они там сами не знают, как у них эта вся "система ниппель" работает ))
+ 42
SQL-ю указывают ссылку на другие таблицы ("дай мне весь объект вместе со значением реквизита "СправочникСсылка"!"), он и возвращает все ссылочные таблицы. А уже 1С отбирает из этого то, что "нужно" для 1С-запроса (значения полей, интерпретацию ссылок и т.д.), и отбрасывает "лишнее".
(22)>>Нет. Объект может:
1) Устареть.
- как "объет" может "устареть", не модифицируясь при этом в своих остальных "реинкарнациях"? Разве что только испортится в БД ))
(24)>>не помню, в Си уже были объекты?
- напоминаю: в С++ появились объекты. Но еще не ООП.
>>докОбъект - это классический экземпляр класса. докСсылка -грубо говоря идентификатор в БД.
- нет.
докОбъект "в Си" - это не класс, а сам объект. С "ручками"-методами, и "ножками"-свойствами.
А класс - это описание поведения объекта. Его "ручек" и "ножек". А еще и событий.
докСсылка "в Си" - это ссылка (почти указатель, но менее "опасный") на область памяти, где содержится в данный момент считанный из БД нужный объект.
Т.е. ссылка в Си сродни ярлыку на папку (объект), которая физически находится на диске по такому-то указателю. Это "безопасное" звено между вызовом из интерфейса и физическим содержимым памяти.
К 1С все выше перечисленное не имеет ровным счетом никакого отношения.
(0)Про то, что у нового объекта у .Ссылка все поля пустые и все булево = ложь говорили уже?
А у Объекта могло и при создании сделать Истина
(24)>>ПолучитьОбъект() -конструктор по идентификатору, при котором в переменные считываются данные с базы.
- вы путаете получение объекта (из базы), и работу с этим объектом.
При обращении/изменении к реквизиту/та (до записи в БД) уже полученого объекта - никакого "нового" считывания объекта из БД нет, поэтому и получается расхождение между "объектом", и тем, что по ссылке в БД.
>>Фактически при обращении докСсылка.реквизит каждый раз идет считывание с БД.
- да, Ссылке и неоткуда больше брать данные - только считывать их снова и снова из БД (она же в 1С прсото "ссылка", и больше ничего не умеет, как только указать на данные в ТАБЛИЦЕ БД, чтобы их оттуда могли забрать).
(50)>>Про то, что у нового объекта у .Ссылка все поля пустые
- ссылка на формируется на оснвое скрипта-"класса в 1С". Если разработчик заложит в платформе какое-то поле "Истина" - то ссылка тоже будет с полем Истина сразу.
>>А у Объекта могло и при создании сделать Истина
- потому что "объект" - уже не детерменирован "классом-скриптом", жесткая, как у ссылки, связь с "классом" разрушена-оторвана, т.е. сам объект уже может успеть поменяться после того, как 1С его сгенерировала из своих "скриптов-классов".
+ . как 1С его сгенерировала из своих "скриптов-классов", и запустила в "свободное" плавание по таблицам БД ))
(51)
Че это я путаю?
ПолучитьОбъект() - обычный конструктор. При котором как раз данные и считываются по ссылке.
Никто не мешает получить два объекта по одной ссылке :)
(54)>>Че это я путаю?
- путаете понятия объекта в ООП (Си), и "объекта" в 1С.
"ПолучитьОбъект()" - это в 1С не "конструктор", а "отделение "самостоятельного" объекта, если новый/получение существующего по ссылке".
(54)>>Никто не мешает получить два объекта по одной ссылке :)
- в 1С это невозможно ))
Ссылка - это не "класс", а "выхлоп" скрипта-класса. И не ссылка формирует объект 1С, а этот скрипт-класс, а ссылка идет как "бесплатное приложение", однозначно уникально идентифицирующее объект внутри отдельно взятой БД ))
(56)
Невозможно два Объекта по одной Ссылке получить?
Т.е. два экземпляра класса по одному идентификатору в базе? (это если нормальным языком).
Да легко.
Ссылка не формирует Объект, я этого не писал. Конструктор формирует новый экземпляр класса(Объект), получая в качестве параметра идентификатор в базе(Ссылку).
(58)>>Невозможно два Объекта по одной Ссылке получить?
- невозможно
>>Т.е. два экземпляра класса по одному идентификатору в базе? (это если нормальным языком).
- конструктор в 1С - это команда, которая и запускает скрипт-класс. На выходе - не "экзепляр класса", а "объект 1С", т.е. "собранный" из кусочков "объект 1С". assembling руками "робота"-скрипта.
>>получая в качестве параметра идентификатор в базе(Ссылку).
- ссылка не параметр, а скорей свойство. Параметр можно менять в широких пределах, чтобы получить разные реакции "объекта", а ссылку - только сгенерировать на точно такую же ссылку, т.е. ни для объекта, ни, тем более, для программиста - ничего в этом случае не меняется ))
(59)>>Когда начинают объектную модель 1с натягивать на ООП
- гораздо чаще путают их между собой. А 1С делает вид, что ничего не происходит, называя каждый раз заново собираемый платформой монолитный кусок (объекты Документ и Справочник - не потомки "одного класса", как может показаться, а совершенно разные по происхождению) - "объектом" ))
(62)>>"выхлоп", "скрипт класса", "отделение объекта" - вот это нормальный язык :)
- у 1С нет своей терминологии, а где есть - она крайне нечеткая.
Поэтому это наиболее близкие, в моем понимании, термины, описывающие взаимодействие сущностей внутри 1С.
Но это взаимодействие - точно не ООП ))
Поэтому и термины ООП к 1С не должны применяться, либо - с гигансткими оговорками, о чем, собственно (об этих оговорках), и вся текущая тема.
Что такое "ссылка" - это некоторый специальный объект в системе, в котором хранится информация о том, как найти объект в базе данных и какой объект найти.
Если мы у ссылки запрашиваем какие-то данные объекта, то система считывает данные из базы или из кеша и отдаёт их нам, но реально в самой ссылке они не хранятся.
"Объект" же - это объект в системе, где хранятся данные объекта из базы данных. То есть уже внутри самого объекта будут хранится все данные, считанные из базы, также допускается изменение этих данных с возможностью последующего сохранения в базу.
Несколько разных объектов, полученных из одной ссылки, могут содержать совершенно разные данные.
Кроме того, у объекта есть модуль, где можно определить некоторые процедуры и функции, выполняемые при некоторых системных событиях или вызываемые в коде для самого объекта (если они описаны с модификатором "Экспорт").
Что касается ООП в 1С, то есть только иллюзия ООП, так как есть общие свойства у всех объектов, а также у объектов одного типа (документы, справочники, регистры).
Но реально никакого наследования нет, каждый объект описывается самостоятельно.
Программист в конфигураторе может создать объект только определённого типа и никак иначе.
- нет.
То ли у программистов 1С такой уровень, то ли лень было делать - но кажущиеся однтипными "объекты" - имеют, на самом деле, совершенно разные свойства и методы работу. Зачастую даже одинаково называющиеся (свойства или методы), но работающие по-разному (и это совершенно не замотивированно каким-либо "назначением" объекта и чем-то подобным).
(69) По крайней мере это было бы логично. Сначала создать базовый класс СсылочныйТип со свойством "Ссылка" и методами Записать(), Удалить(). Далее производные классы частично переопределяют эти методы и свойства, и добавляют свои.
(68)>>так как есть общие свойства у всех объектов
- это далеко не так. Даже скажу прямо - это вообще не так. Подтверждение тому - весь гигантский зоопарк методов и свойств работы с разными объектами в 1С.
(70) Так если есть команда "ПолучитьОбъект", то мы можем получать объект из ссылки.
Также есть команда "Ссылка", позволяющая получить из объекта ссылку.
То есть ничего удивительного в том, что из одного объекта (Ссылка) можно получить другой объект (Объект) - нет.
(73)>>Так если есть команда "ПолучитьОбъект", то мы можем получать объект из ссылки
- было бы неразумно считать, что завуалированная команда "создать объект" имеет непосредственное отношение к значению того слова-команды, которая в 1С призвана создавать объект ))
(71) Просто программистам 1С ООП не совсем знакомо.
Одинаковые методы могут вызывать однотипные низкоуровневые функции (например, для записи табличной части), но изначально это будут разные функции.
Собственно, в случае ООП это также будут разные функции, просто для них будет создаваться таблица виртуальных функции, чтобы разные функции одного объекта находились по одному смещению.
Так как в языке 1С все функции вызываются по наименованию, то делать виртуальные таблицы функции никто не стал - там будут таблицы соответствия между наименованием и адресом функции.
(71)>>Сначала создать базовый класс СсылочныйТип со свойством "Ссылка" и методами Записать(), Удалить(). Далее производные классы частично переопределяют эти методы и свойства, и добавляют свои.
- это вообще не так, хотя бы потому, что ваш с Torquader подразумеваемый "класс Ссылка" вообще не имеет каких-либо свойств и методов, тем более описанных вами ))
(74) Нет, а что вам не нравится, есть в системе объект, называемый "ссылка" у него есть метод "ПолучитьОбъект", который возвращает объект другого типа (для системы в целом нет никакой связи между объектами "ссылка" и "объект").
Вообще-то, в 1С нет просто объекта "Ссылка", есть объекты "ДокументСсылка", "ДокументВидаСсылка" и т.п.
В этой статье я разберу объекты платформы 1С 8.3, и покажу, какие виды объектов бывают в 1С.
Что такое объект? Объект в языке программирования — это некоторая сущность, обладающая Свойствами, над которой можно свершать различные манипуляции посредством Методов.
Самое интересное, что пользователь программы 1С работает не с самим объектом, а с экземпляром объекта, который он может создать либо самостоятельно, либо с помощью программного кода, написанного разработчиком.
Всего в платформе 1С 8.3 можно выделить несколько видов объектов – это объекты конфигурации (или объекты метаданных, прикладные объекты), общие объекты и универсальные коллекции значений.
Какое общее свойство всех объектов в 1С? В платформе 1С мы не можем, как разработчики, самостоятельно изобрести тот или иной объект (или прототип объекта, если это касается объекта метаданных, об этом ниже), мы можем довольствоваться только тем, что нам предоставили разработчики платформы. Мы можем создать разные справочники, разные документы, разные таблицы значений и списки значений, но не можем придумать какой-то свой объект и с ним работать. В этом есть плюс, и есть минус. Минус в том, что мы ограничены функционалом платформы 1С, и вынуждены с ним работать. Плюс в том, что любое приложение, разработанное на платформе 1С стандартизировано, и нам не придётся разбираться в том, что придумал тот или иной разработчик.
У объектов есть свойства, методы и события.
Свойство объекта – это поле, которое может содержать какую-то информацию, связанную с этим объектом. Это поле может быть доступно для записи (можно записать какую-то информацию в это поле) и для чтения (информацию можно прочитать из этого поля), или просто для чтения. Причем, информация в свойстве объекта связана не с самим объектом, а с его экземпляром.
Метод объекта – это процедура или функция, которая выполняет или какое-то действие над экземпляром этого объекта, или возвращает информацию о состоянии экземпляра этого объекта.
У объектов метаданных разработчик может создать собственные свойства и методы, а у общих объектов и у универсальных коллекций значений можно довольствоваться только теми свойствами и методами, которые предоставляет платформа 1С.
Событие – это процедура, которая позволяет перехватить какое-то событие над этим объектом, и, или доработать это событие, или отменить его.
Объекты конфигурации 1С
Объекты конфигурации 1С или объекты метаданных создаются на этапе конфигурирования разработчиком – это справочники, документы, константы и т.п. Пользователь может непосредственно работать с некоторыми объектам — создавать экземпляры объектов и манипулировать ими. Или использовать их — отчеты, обработки и тп.
В платформе 1С существуют различные прототипы объектов метаданных. Это справочники, документы и прочие метаданные.
Все прототипы объектов метаданных представлены в дереве метаданных.
Разработчик может самостоятельно создать объект того или иного прототипа. Например, мы можем создать Справочник. Для этого, достаточно выделить ветку Справочники дерева конфигурации, вызвать правой клавишей мышки контекстное меню, и выполнить команду «Добавить» этого меню.
После выполнения команды, будет создан новый объект, с заранее определенным разработчиками платформы 1С набором методов и свойств.
Например, у справочника, созданного выше, одни из свойств это Имя, Синоним и т.д., а методы, например, Записать, Заполнить и тд.
Также, у объекта могут быть события: это возможность перехватить какие-то действия с объектом, например, можно перехватить запись элемента справочника.
Набор методов, свойств и событий объекта определяется его прототипом. Например, у справочников может быть один набор свойств, а у документов совершенно другой.
Посмотреть все методы, свойства и события прототипа того или иного объекта можно в синтакс-помощнике. В ветке для соответствующего прототипа.
Для объектов метаданных разработчик может самостоятельно создать те или иные свойства – реквизиты объектов.
А также, разработчик может создать методы – описав их в модуле объекта.
У некоторых объектов пользователь может создавать экземпляры этих объектов: например, можно создать экземпляр справочника или документа, и записать этот экземпляр в базу данных. А некоторые объекты метаданных пользователь может использовать для каких-то целей. Например, отчет или обработку.
Общие объекты 1С
Общие объекты – это объекты встроенного языка программирования 1С, которыми может оперировать разработчик, необходимые для различных технических и вспомогательных нужд (например, такой общий объект, как ДиалогВыбораФайла предназначен для работы с диалогом открытия файла, сохранения файла и т.д.).
В синтакс-помощнике информация обо всех общих объектах расположена в одноименном каталоге.
Если у объектов метаданных были прототипы, и разработчик мог создать тот или иной объект какого-либо прототипа, то у общих объектов ни каких прототипов нет, и разработчик может довольствоваться только теми общими объектами, которые ему предоставляет платформа 1С.
Разработчик имеет возможность самостоятельно создать только экземпляр какого-то объекта, для своих утилитарных целей. Делается это при помощи конструктора. Какой у того или иного объекта конструктор, можно посмотреть в синтакс-помощнике в одноименном каталоге.
Как правило, большинство общих объектов создается при помощи конструктора Новый. Например, так создаётся табличный документ.
У общих объектов, также как и у объектов метаданных, могут быть свойства, методы и события. Но, в отличие от объектов метаданных, мы не можем, как разработчики, самостоятельно конструировать те или иные свойства и методы, а можем оперировать только тем, что предоставила платформа 1С. О том, какие свойства, методы и события имеются у того или иного общего объекта можно посмотреть во всё том же синтакс-помощнике.
Не у всех общих объектов есть и методы, и свойства, и события. У некоторых объектов может не быть событий, а у некоторых свойств.
Обратиться к свойствам и методам можно через оператор «.»:
Универсальные коллекции значений
Универсальные коллекции значений – это, также как и общие объекты, объекты встроенного языка программирования, которыми может оперировать разработчик. Но, в отличие от общих объектов, они предназначены для хранения наборов данных, причем эти наборы данных хранятся в оперативной памяти компьютера, во время запущенного сеанса. Таким образом, когда пользователь прекратит работу с сеансом 1С, то и вся информация этих наборов данных будет уничтожена.
Все универсальные коллекции описаны в синтакс-помощнике в разделе «Универсальные коллекции значении». Это массив, структура, соответствие, список значений, таблица значений и т.д.
Как правило, все универсальные коллекции значений создаются при помощи конструктора Новый.
Читайте продолжение темы:
Более подробно про основные универсальные коллекции значений платформы 1С можно почитать в соответствующих статьях:
Так же, как и остальные объекты, универсальные коллекции значений имеют методы и свойства. Но, у каждой универсальной коллекции будет свой состав.
Например, у массива есть только методы, а у структуры есть методы и свойства.
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Прочел в сети несколько страниц, на которых идет речь об обновлении свойства управляемой формы. Там теперь с новой версии следует писать "ЭтотОбъект". Тем не менее, когда я так и пишу, программа выдает ошибку "Переменная не определена (ЭтотОбъект)". Собственно, сам код:
Расчет начислений сотрудников: ошибка "Процедура уже определена".
1С выдает следующую ошибку: ""Отчет.НачисленияСотрудникам.МодульОбъекта": Процедура или функция с.
1С 8.3 Розница 2.1.4.9 "Текущая цена розницы" и "Остаток" в форме элемента "Номенклатура"
Есть ли готовое решение, можно через внешнюю форму нужно контроль "Текущая цена розницы" и.
Переменная не определена
Доброго времени суток! Позавчера пришлось столкнуться с 1с Предприятие 8.2 Начал делать.
Переменная не определена
Добрый день, возникла такая проблема, в общем модуле хочу получить последние записи из регистра.
Прочел в сети несколько страниц, на которых идет речь об обновлении свойства управляемой формы. Там теперь с новой версии следует писать "ЭтотОбъект".
Это где же ты такое прочел.
По коду видно что он написан в модуле формы.
Обрати внимание на реквизиты формы? Что там? Есть там переменная ЭтотОбъект?
Какие там есть переменные?
Dethmontt, при всем уважении. Не должно быть в реквизитах ЭтотОбъект. В переменной "ЭтотОбъект" хранится объект типа УправляемаяФорма. СП:
"ЭтотОбъект (ThisObject)
Использование:
Только чтение.
Описание:
Тип: ДокументОбъект..
Содержит сам объект базы данных. Предназначено, в основном, для получения данного объекта встроенного языка в модуле объекта или модуле формы"
Введено в 8.3, не работает в 8.2 или в режиме совместимости с 8.2
polax, как на клиенте может храниться тип ДокументОбъект .
Зачем тогда функции РеквизитФормыВЗначение(), ДанныеФормыВЗначение() ?
Добавлено через 1 минуту
ЭтотОбъект
Доступность:
Сервер, толстый клиент, внешнее соединение.
Dethmontt, а вот здесь 100% ошибка СП. Работает в тонком клиенте! И описание тоже хромает. "ЭтотОбъект" - Значение УправляемаяФорма и Тип - УправляемаяФорма. Это не Объект в стандартном понимании.
В форме есть реквизит Объект - тип СтруктураДанныхФормы
Объект - это сконвертированный для формы ЭтотОбъект - тип ДокументОбъект (что бы его можно было хранить на клиенте)
Для того что бы сконвертировать данные формы в прикладной тип, необходимо воспользоваться функциями
РеквизитФормыВЗначение(), ДанныеФормыВЗначение().
При записи документа платформа это делает автоматически.
Dethmontt, а вот здесь 100% ошибка СП. Работает в тонком клиенте! И описание тоже хромает. "ЭтотОбъект" - Значение УправляемаяФорма и Тип - УправляемаяФорма.
Добавлено через 1 минуту
polax, да назвать можно как угодно.
По сути это старая переменная ЭтаФорма
Добавлено через 5 минут
Зачем плодить однотипные свойства.
Что бы сишникам было проще привыкать код писать? this
Добавлено через 4 минуты
polax, да в СП 8.3.10
УправляемаяФорма (ManagedForm)
ЭтотОбъект (ThisObject)
Использование:
Только чтение.
Описание:
Тип: УправляемаяФорма.
Содержит данную форму. Может быть использовано в модуле формы для получения данной формы и передачи ее в качестве параметра в другие формы, глобальные процедуры и функции и т.д.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент).
Форма (Form)
ЭтаФорма (ThisForm)
Использование:
Только чтение.
Описание:
Тип: Форма.
Содержит данную форму. Может быть использовано в модуле формы для получения данной формы и передачи ее в качестве параметра в другие формы, глобальные процедуры и функции и т.д.
Читайте также: