1с посмотреть поля объекта
И в том, и в другом случае 1С выступает в качестве OLE сервера, а значит OLE клиент зачастую испытывает необходимость в получении от сервера информации о предоставляемых для использования клиентом свойствах и методах. Частично данная проблема может быть решена посредством использования метаданных, но как же получить список, например, экспортных методов общего модуля? Или вы написали COM объект, который при вызове своих методов принимает от 1С параметры агрегатного типа, и Вам в теле своего объекта нужно определить, что же это Вам при вызове метода такое передали. Список поддерживаемых свойств и методов тоже был бы весьма кстати.
Для начала немного ликбеза. С COM объектами 1С работает через интерфейс IDispatch. Этот интерфейс, в свою очередь, поддерживается всеми объектами агрегатного типа системы 1С:Предприятие и позволяет, помимо прочего, получать подробную информацию о методах объекта (свойства, методы, параметры методов и их типы, типы возвращаемых значений и т.д.). Вот сигнатура его методов (здесь и далее на примере Delphi):
Чтобы проверить существование какого-либо единичного метода или свойства у COM-объекта, нужно воспользоваться методом GetIDsOfNames, и сделать это примерно вот так:
Для того, чтобы COM объект (далее "сервер") мог "рассказать" вызывающей стороне (далее "клиент") о своих методах, необходимо, чтобы при вызове метода GetTypeInfo он возвращал указатель на реализованный интерфейс ITypeInfo, через который клиент и получает эту информацию. Отметим, что это не является обязательным. В этом случае каждый раз при вызове клиентом метода сервера по имени сначала вызывается метод GetIDsOfNames, который, в случае наличия нужного метода, возвращает его DispID. После этого осуществляется вызов метода Invoke с полученным DispID. В случае с поддержкой ITypeInfo информация о доступных методах и свойствах запрашивается единожды при инициализации объекта, и затем методы вызываются уже сразу по DispID.
Для получения информации о свойствах и методах, используя ITypeInfo, нужно выполнить примерно такой код:
Анализ объектов системы 1С:Предприятие версии 8.х показывает, что далеко не для всех объектов поддерживается получение интерфейса ITypeInfo. В частности, получить его можно для объектов типа "СправочникОбъект", "ДокументОбъект", "ОбработкаОбъект" (но не "ВнешняяОбработкаОбъект"), "РегистрХХХХХХХХХНаборЗаписей" и некоторые другие.
Выход в данной ситуации есть, и он заключается в том, что для своих объектов 1С реализовала поддержку интерфейса IDispatchEx, который также позволяет получать информацию о свойствах и методах. Вот его описание:
Предоставляемая данным интерфейсом информация о методах объекта не такая подробная, как при использовании ITypeInfo, но для нашей цели ее вполне достаточно. Более того: реализация ITypeInfo в объектах системы 1С:Предприятие не позволяет отличить процедуру от функции, а при использовании IDispatchEx это возможно. И главное: IDispatchEx реализован для всех агрегатных объектов (кроме, к сожалению, корневого).
Таким образом, чтобы получить список свойств и методов, используя интерфейс IDispatchEx, необходимо выполнить примерно такой код:
На практике такой подход может быть полезен, например, в случае, если вы написали какой-то COM-объект, принимающий в качестве параметров одинэсовские объекты агрегатного типа. В моей практике был метод, принимающий в качестве параметра или объект типа "Картинка", или "ДвоичныеДанные", и лучшего способа для того, чтобы отличить в теле COM-объекта одно от другого я не нашел.
Для демонстрации метода предлагается для скачивания небольшая утилита, реализующая оба метода получения информации о свойствах и методах объектов (исполняемый файл + исходный код (Delphi XE)).
Очень часто фактические значения полей скрыты под многочисленными слоями интерфейса. Данная обработка решает эту проблему. Отображаются значения реквизитов шапки и всех табличных частей с группировкой по строкам.
Команду её вызова можно подключить ко всем "ссылочным" объектам.
Специальные предложения
(2) kosmo0,
Если речь идет об универсальном редакторе реквизитов, то за счет меньшей функциональности мой вариант получился интерфейсно удобнее. Но это, разумеется, вопрос личных предпочтений.
Просмотры 7091
Загрузки 9
Рейтинг 0
Создание 25.06.15 12:07
Обновление 25.06.15 12:07
№ Публикации 371556
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
См. также
Групповая корректировка записей регистров (Управляемое приложение) v 2.2 Промо
Обработка предназначена для групповой корректировки записей регистров Накопления, Сведений и Бухгалтерии. Разработана специально для Управляемого приложения.
2 стартмани
06.09.2013 72943 382 kser87 69
Предпросмотр PDF, JPG, PNG, TIFF, Word, Excel
Предварительный просмотр присоединенных файлов PDF, JPG, PNG, TIFF, Word, Excel через расширение. Позволяет изменять масштаб, поворачивать и листать. Не требует подключения к интернету и внешних компонент.
2 стартмани
01.11.2021 4512 50 TyurinArt 23
Управление платформенными обработками (расширение для типовых) [update 8.3.20]
Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".
1 стартмани
07.10.2021 6021 10 SeiOkami 24
Универсальная обработка переноса данных из основной конфигурации в расширение
Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.
5 стартмани
05.10.2020 13343 81 biz-intel 71
Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо
Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.
1 стартмани
22.10.2014 230915 4478 ekaruk 189
Улучшенная обработка универсального обмена данными в формате XML (УФ)
Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).
1 стартмани
23.06.2020 16082 170 Lem0n 1
Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.
2 стартмани
01.05.2020 17767 118 sapervodichka 3
Яндекс сервисы [Расширение]
Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)
1 стартмани
24.10.2019 17971 11 noprogrammer 12
Обработка "Распознавание штрихкода с помощью утилиты Zbar" для Документооборот ред. 2 Промо
В связи с тем, что стандартный функционал программы «Документооборот» ред. 2.1 дает возможность распознавания штрихкодов только форма EAN-13, данная обработка - альтернативный способ для распознавания штрихкода в программе 1С: Документооборот ред. 2 с помощью утилиты Zbar, которая распознает в том числе и в формате Code 128 (один из стандартных штрихкодов кодирования документов, например, «Управление торговлей» ред. 11), а также с возможностью поэтапно проследить все действия от распознавания до прикрепления к документу или простой загрузки в каталоги файлов в базе 1С.
5 стартмани
05.09.2016 30459 187 SEOAngels 11
Работа с файлами (обычная и управляемая форма)
Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!
1 стартмани
10.06.2019 48335 261 Xershi 78
Электронная таблица средствами 1С (Версия 2.0)
Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.
Довольно часто в алгоритмах приходится обращаться к значениям реквизитов различных объектов "через точку". При этом, если объект ссылочного типа, то возможно многократное обращение к БД. В данной статье попробуем унифицировать и оптимизировать этот процесс.
Общий принцип оптимизации заключается в сокрашении количества обращений к базе данных. Для этого в линейном алгоритме анализируем, что за объект перед нами, если это ссылка, то описываем запрос, с помощью которого получаем все данные и в дальнейшем работаем с результатом запроса.
Задача: Описать функции позволяющие получить значения реквизитов различных объектов (независимо от типа объекта). Но ограничимся объектами метаданных конфигурации, которые могут иметь ссылочный тип данных: Справочники, Документы и т.п.
Описанные далее функции желательно располагать в общем серверном модуле без возможности вызова сервера. Если будет возможность вызывать данные функции с клиента, то злоумышленник сможет получить любые данные из базы без особого труда.
Определимся с параметрами:
- Объект - объект, данные которого необходимо получить;
- ИменаРеквизитов - Список имен реквизитов, данные которых необходимо получить. Если спиок не указан, то предполагаем, что нужно получить данные всех реквизитов;
- ДополнительныеРеквизиты - Структура, с помошью которой можно было бы описать дополнительные данные, которые нужно получить вместе с реквизитами объекта (без использования явных соединений с другими таблицами) или выполнение каких-то действий с полями выборки на языке запросов. В ключе элемента структуры описываем имя реквизита в общем списке реквизитов объекта, в значении - поле выборки или алгоритм обработки полей выборки на языке запросов.
Функция ДанныеРеквизитовОбъекта ( Объект , ИменаРеквизитов = Неопределено,
ДополнительныеРеквизиты = Неопределено) Экспорт
Разберем, значения каких реквизитов необходимо получить из базы и приведем список имен к типу данных Массив.
СтруктураОбъекта = Новый Структура ;
МетаданныеОбъекта = Объект . Метаданные ();
Если ИменаРеквизитов = Неопределено тогда
МассивИменРеквизитов = МассивИменРеквизитовОбъекта ( Объект );
иначе
Если ТипЗнч ( ИменаРеквизитов ) = Тип ( "Массив" ) тогда
МассивИменРеквизитов = ИменаРеквизитов ;
иначеЕсли ТипЗнч ( ИменаРеквизитов ) = Тип ( "Строка" ) тогда
МассивИменРеквизитов = МассивПодстрокИзСтроки ( ИменаРеквизитов );
КонецЕсли;
КонецЕсли;
Если список имен не задан, то с помощью функции МассивИменРеквизитовОбъекта () получим массив имен всех реквизитов объекта (алгоритм этой функции смотри ниже).
Если список имен задан в виде строки разделенной запятыми, то разложим ее на подстроки с помошью функции МассивПодстрокИзСтроки () . Это не сложная задача, алгоритм этой функции разбирать не будем.
Далее с помошью функции ЭтоСсылка () определим, является ли объект ссылочным типом. Для ссылочных типов значения необходимо получить из БД, в противном случае значения реквизитов хранятся в памяти.
ЭтоСсылка = ЭтоСсылка ( Объект );
СсылкаОбъекта = ?( ЭтоСсылка , Объект , Объект . Ссылка );
ПолучитьДанныеИзОбъекта = НЕ ЭтоСсылка ;
Если ЭтоСсылка И СсылкаОбъекта . Пустая () тогда
// это пустая ссылка (данных в базе нет)
ПолучитьДанныеИзОбъекта = Истина;
КонецЕсли;
Теперь, если данные объекта хранятся в памяти - мы можем их сразу получить, в противном случае необходио подготовиться для составления запроса к БД (переведем список имен реквизитов из типа данных Массив в тип Структура).
ОсновныеРеквизиты = Новый Структура ;
Для каждого ИмяРеквизита Из МассивИменРеквизитов Цикл
Если ПолучитьДанныеИзОбъекта тогда
СтруктураОбъекта . Вставить ( ИмяРеквизита , Объект [ ИмяРеквизита ]);
иначе
ОсновныеРеквизиты . Вставить ( ИмяРеквизита );
КонецЕсли;
КонецЦикла;
Все готово к составлению запроса чтобы получить значения реквизитов если перед нами объект ссылочного типа, а так же для получения дополнительных реквизитов, описанных в 3-ем параметре функции. Но смысл всех этих действий есть, только если данный объект существует в БД (на него есть ссылка).
Для начала составим текст запроса для полей выборки поочередно обходя структуры Основных и Дополнительных реквизитов
Если НЕ СсылкаОбъекта . Пустая () тогда
// сформируем текст выборки по реквизитам
ТекстВыборкиРеквизиты = "" ;
Для индекс = 0 по 1 Цикл
СтруктураРеквизитов = ?( индекс = 0 , ОсновныеРеквизиты , ДополнительныеРеквизиты );
Если СтруктураРеквизитов = Неопределено тогда
Продолжить;
КонецЕсли;
Для каждого ЭлементСтруктуры из СтруктураРеквизитов Цикл
Если НЕ МетаданныеОбъекта . ТабличныеЧасти . Найти ( ЭлементСтруктуры . Ключ ) = Неопределено тогда
// это имя табличной части
Продолжить;
КонецЕсли;
ТекстВыборкиРеквизиты = ТекстВыборкиРеквизиты
+ ?( ПустаяСтрока ( ТекстВыборкиРеквизиты ), "" , "," + Символы . ПС )
+ ?( ЗначениеЗаполнено ( ЭлементСтруктуры . Значение ), ЭлементСтруктуры . Значение , ЭлементСтруктуры . Ключ )
+ " КАК " + ЭлементСтруктуры . Ключ ;
КонецЦикла;
КонецЦикла;
Теперь соберем текст запроса и выполним его. Результат запроса добавим в общую структуру данных объекта
// получим реквизиты одним запросом
Если НЕ ПустаяСтрока ( ТекстВыборкиРеквизиты ) тогда
Запрос = Новый Запрос ;
Запрос . Текст = "ВЫБРАТЬ
|" + ТекстВыборкиРеквизиты + "
|ИЗ
| " + МетаданныеОбъекта . ПолноеИмя () + "
|ГДЕ
| Ссылка = &Ссылка" ;
Запрос . УстановитьПараметр ( "Ссылка" , СсылкаОбъекта );
РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();
Если Выборка . Следующий () тогда
Для каждого Колонка из РезультатЗапроса . Колонки Цикл
СтруктураОбъекта . Вставить ( Колонка . Имя , Выборка [ Колонка . Имя ]);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Все данные получены, можно завершать функцию
Достоинства алгоритма:
- Может работать с различными типами объектов конфигурации (которые могут иметь ссылки: Справочники, Документы, ПВХ и т.п.);
- Получение всех реквизитов за одно обращение к БД;
- Данные возвращаются в виде структуры, что позволяет их передать далее на клиент без преобразования;
- С помошью Дополнительных реквизитов можно получить вспомогательные данные (обращение к полям выборки через несколько точек) или на уровне запроса выполнить какие-то действия с данными.
- Наглядность кода, данные получаются одной функцией, без надобности каждый раз писать запрос к БД с обработкой результата.
Недостатки:
- Не реализована возможность получения табличных частей объектов
Дополнительные функции использованные в алгоритме:
// Возвращает массив имен всех реквизитов переданного объекта
//
Функция МассивИменРеквизитовОбъекта ( Объект ) Экспорт
МассивИменРеквизитов = Новый Массив ;
Если ТипЗнч ( Объект ) = Тип ( "ОбъектМетаданных" ) тогда
МетаданныеОбъекта = Объект ;
иначе
МетаданныеОбъекта = Метаданные . НайтиПоТипу ( ТипЗнч ( Объект ));
Если МетаданныеОбъекта = Неопределено тогда
Возврат МассивИменРеквизитов ;
КонецЕсли;
КонецЕсли;
Для индекс = 0 по 1 Цикл
КоллекцияРеквизитов = ?( индекс = 0 , МетаданныеОбъекта . СтандартныеРеквизиты , МетаданныеОбъекта . Реквизиты );
Для Каждого Реквизит Из КоллекцияРеквизитов Цикл
МассивИменРеквизитов . Добавить ( Реквизит . Имя );
КонецЦикла;
КонецЦикла;
Для каждого ОбщийРеквизит Из Метаданные . ОбщиеРеквизиты Цикл
Если ИспользуетсяОбщийРеквизит ( ОбщийРеквизит , МетаданныеОбъекта ) тогда
МассивИменРеквизитов . Добавить ( ОбщийРеквизит . Имя );
КонецЕсли;
КонецЦикла;
// Проверяет используется ли в Объекте указанный общий реквизит
//
Функция ИспользуетсяОбщийРеквизит ( ОбщийРеквизит , Объект ) Экспорт
Если ТипЗнч ( Объект ) = Тип ( "ОбъектМетаданных" ) тогда
МетаданныеОбъекта = Объект ;
иначе
МетаданныеОбъекта = Метаданные . НайтиПоТипу ( ТипЗнч ( Объект ));
Если МетаданныеОбъекта = Неопределено тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Если ТипЗнч ( ОбщийРеквизит ) = Тип ( "ОбъектМетаданных" ) тогда
МетаданныеОбщегоРеквизита = ОбщийРеквизит ;
иначе
МетаданныеОбщегоРеквизита = Метаданные . ОбщиеРеквизиты . Найти ( ОбщийРеквизит );
Если МетаданныеОбщегоРеквизита = Неопределено тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
ЭлементСостава = МетаданныеОбщегоРеквизита . Состав . Найти ( МетаданныеОбъекта );
Если ЭлементСостава = Неопределено тогда
Возврат Ложь;
КонецЕсли;
пИспользованиеОбщегоРеквизита = Метаданные . СвойстваОбъектов . ИспользованиеОбщегоРеквизита ;
Если ЭлементСостава . Использование = пИспользованиеОбщегоРеквизита . Использовать тогда
Возврат Истина;
иначеЕсли ЭлементСостава . Использование = пИспользованиеОбщегоРеквизита . НеИспользовать тогда
Возврат Ложь;
иначе
пАвтоИспользованиеОбщегоРеквизита = Метаданные . СвойстваОбъектов . АвтоИспользованиеОбщегоРеквизита ;
Если МетаданныеОбщегоРеквизита . АвтоИспользование = пАвтоИспользованиеОбщегоРеквизита . Использовать тогда
Возврат Истина;
иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
В этой статье я разберу объекты платформы 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С Предприятие имеет вложенную структуру. Например, справочник «Номенклатура» имеет в своём составе поле «Номенклатурная группа». Справочник «Номенклатурные группы», в свою очередь имеет в своём составе другие поля и т.д. Вся иерархия данных обеспечивает простой, понятный и структурированных подход к их использованию. Для того, чтобы обратиться к тем или иным данным из этой иерархии программисту требуется писать запросы или использовать цикл, причём в каждой конкретной ситуации код 1С будет разным.
Я предлагаю вашему вниманию одну универсальную функцию, которая обращается к необходимым данным с помощью строки, содержащей путь к этим данным.
Предположим есть объект – элемент справочника «Контрагенты». Нам нужно обратиться к вложенным данным и получить элемент справочника «Контактные лица». Мы сможем это сделать через связку: Контрагент – ОсновноеКонтактноеЛицо – КонтактноеЛицо.
Обращение к функции будет следующим:
ПолучитьЗначениеПоляОбъекта(Контрагент, "Контрагент.ОсновноеКонтактноеЛицо.КонтактноеЛицо", "Контрагент");
Вот сама функция:
// Получает значение поля по его пути. // // Параметры: // Объект - - Произвольный объект системы, содержащий структуру вложенных полей; // Путь - - Строка, содержащая путь к заданному полю объекта. Наименования вложенных полей разделены между собой символом ".". // К примеру, путь: "Контрагент.ОсновноеКонтактноеЛицо.КонтактноеЛицо"; // НаименованиеОбъекта - - Строка, содержащая имя объекта. Если этот параметр пустой, то путь не содержит наименования самого объекта. // К примеру, строка: "Контрагент". // // Возвращаемое значение: // - Заданное поле объекта. // Функция ПолучитьЗначениеПоляОбъекта(Объект, Путь = "", НаименованиеОбъекта = "") Экспорт Если ТипЗнч(Путь) = Тип("Строка") Тогда ПутьМассив = РазобратьСтрокуВМассивПоРазделителю(Путь, "."); Иначе ПутьМассив = Путь; КонецЕсли; НачальныйИндекс = ?(ЗначениеЗаполнено(СокрЛП(НаименованиеОбъекта)) ИЛИ (ПутьМассив.Количество() > 0 И ПустаяСтрока(СокрЛП(ПутьМассив[0]))), 1, 0); Поле = Неопределено; Если (НачальныйИндекс = 0) ИЛИ ((НачальныйИндекс = 1) И (ПутьМассив.Количество() > 0) И (ПутьМассив[0] = НаименованиеОбъекта)) Тогда Поле = Объект; Для Индекс = НачальныйИндекс По ПутьМассив.Количество()-1 Цикл Элемент = ПутьМассив[Индекс]; Попытка Поле = Поле[Элемент]; Исключение Поле = Неопределено; Прервать; КонецПопытки; КонецЦикла КонецЕсли; Возврат Поле; КонецФункции;
А вот вспомогательные функции:
// Разбирает строку в массив подстрок по разделителю. // При этом пробелы между подстроками не учитываются. // // Параметры: // Стр - исходная строка; // СтрРазделитель - разделитель, по умолчанию ","; // ИгнорироватьПустые - игнорировать ли пустые места между разделителями. // // Возвращаемое значение: // Массив строк // Функция РазобратьСтрокуВМассивПоРазделителю(Знач Стр, СтрРазделитель = ",", ИгнорироватьПустые = Ложь) Экспорт Результат = Новый Массив; ВхождениеРазделителя = Найти(Стр, СтрРазделитель); Пока ВхождениеРазделителя <> 0 Цикл ЧастьДоРазделителя = СокрЛП(Лев(Стр, ВхождениеРазделителя - 1)); Если НЕ (ИгнорироватьПустые И ПустаяСтрока(ЧастьДоРазделителя)) Тогда Результат.Добавить(ЧастьДоРазделителя); КонецЕсли; Стр = СокрЛП(Сред(Стр, ВхождениеРазделителя + 1)); ВхождениеРазделителя = Найти(Стр, СтрРазделитель); КонецЦикла; Если НЕ (ИгнорироватьПустые И ПустаяСтрока(Стр)) Тогда Результат.Добавить(СокрЛП(Стр)); КонецЕсли; Возврат Результат; КонецФункции;
// Определяет относится ли данный объект к одному из типов: Число, Строка, Булево, Дата, УникальныйИдентификатор. // // Параметры: // Объект - произвольный объект данных // // Возвращаемое значение: // Истина - простой тип; Ложь - составной тип. // Функция ЭтоПростойТипДанных(Объект) Экспорт Возврат (ТипЗнч(Объект) = Тип("Число") ИЛИ ТипЗнч(Объект) = Тип("Строка") ИЛИ ТипЗнч(Объект) = Тип("Дата") ИЛИ ТипЗнч(Объект) = Тип("Булево") ИЛИ ТипЗнч(Объект) = Тип("УникальныйИдентификатор")); КонецФункции;
// По заданному объекту находит его принадлежность к определённому классу метаданных. // // Параметры: // Данные - Произвольное значение - Передаваемый объект; // Запрос - - // Истина - Класс метаданных будет использоваться в запросе, // Ложь - Класс метаданных будет использоваться в коде. // По умолчанию этот параметр задан "Истина". // // Возвращаемое значение: // - Название класса метаданных. // Функция ВернутьИмяТипаДанных(Данные, Запрос = Истина) Экспорт ТипДанных = ТипЗнч(Данные); ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипДанных); ИмяКоллекции = ""; Если ОбъектМетаданных <> Неопределено Тогда ПолноеИмяМетаданных = ОбъектМетаданных.ПолноеИмя(); МассивСтр = РазобратьСтрокуВМассивПоРазделителю(ПолноеИмяМетаданных, ".", Истина); ИмяКоллекции = ?(МассивСтр.Найти("ТабличнаяЧасть") = Неопределено, Лев(ПолноеИмяМетаданных, Найти(ПолноеИмяМетаданных, ".")-1), "ТабличнаяЧасть"); КонецЕсли; ИмяТипаДанных = ИмяКоллекции; Если ИмяКоллекции = "Справочник" Тогда ИмяТипаДанных = ?(Запрос, "Справочник", "Справочники"); ИначеЕсли ИмяКоллекции = "ПланСчетов" Тогда ИмяТипаДанных = ?(Запрос, "ПланСчетов", "ПланыСчетов"); ИначеЕсли ИмяКоллекции = "Перечисление" Тогда ИмяТипаДанных = ?(Запрос, "Перечисление", "Перечисления"); ИначеЕсли ИмяКоллекции = "Документ" Тогда ИмяТипаДанных = ?(Запрос, "Документ", "Документы"); ИначеЕсли ИмяКоллекции = "ПланВидовХарактеристик" Тогда ИмяТипаДанных = ?(Запрос, "ПланВидовХарактеристик", "ПланыВидовХарактеристик"); ИначеЕсли ИмяКоллекции = "ПланВидовРасчета" Тогда ИмяТипаДанных = ?(Запрос, "ПланВидовРасчета", "ПланыВидовРасчета"); ИначеЕсли ИмяКоллекции = "Отчет" Тогда ИмяТипаДанных = ?(Запрос, "Отчет", "Отчеты"); КонецЕсли; Возврат ИмяТипаДанных; КонецФункции;
На основе этого кода была создана простая обработка доступа к данным, которую можно скачать по ссылке ниже.
- Выбираете объект (справочник или документ)
- Задаёте путь к данным
- Нажимаете кнопку «Выполнить»
- Получаете доступ к объекту данных.
Смело используйте этот код 1С для реализации своих проектов! Если в коде имеются баги (ошибки), просьба сообщить об этом, написав в комментариях ниже.
Читайте также: