Определить тип ссылки 1с

Обновлено: 07.07.2024

В других языках с данными, полученными из базы данных обычно работают «как с таблицей». В 1С такое тоже возможно – выполнить запрос, получить «в ответ» таблицу и работать с ней.

Работа с объектом 1С ведется тогда, когда требуется создать объект 1С или изменить существующий. В остальных случаях (например поиск объекта 1С, использование его в другом объекте 1С) – используется ссылка 1С на объект 1С.

Создание объектов 1С

Объект 1С можно создать с помощью оператора Новый, при этом вызывается конструктор данного типа, если у типа несколько конструкторов – он выбирается по указанным параметрам:
Переменная1 = Новый СписокЗначений();

Менеджеры для получения объектов 1С из базы данных

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

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

Например:
Переменная1 = Справочники.ИмяСправочника.СоздатьЭлемент();
Переменная1 = Справочники.ИмяСправочника.НайтиПоНаименованию("Наименование");

Ссылки 1С и объекты 1С

Работа с объектами 1С, связанными с данными в базе данных может вестись двумя способами – с помощи «ссылки 1С на данные» и объекта 1С.

Ссылка 1С – это данные, доступные только для чтения. Объект 1С – это данные, доступные для чтения, изменения и записи. Работа со ссылкой 1С производится гораздо быстрее, чем с объектом 1С.

Ссылка 1С на данные получается с помощью функций вида:
СправочникСсылка = Справочники.ИмяСправочника.НайтиПоНаименованию()

Объект 1С можно получить из ссылки 1С или создать с нуля:
СправочникОбъект = СправочникСсылка.ПолучитьОбъект();
СправочникОбъект = Справочники.ИмяСправочника.СоздатьЭлемент();

Пустая ссылка 1С

Ссылка может быть пустой, это значит, что создан «пустой» экземпляр объекта 1С, который не связан с данными.
СправочникСсылкаПустая = Справочники.ИмяСправочника.ПустаяСсылка();

Также ссылку 1С можно проверить на заполненность:
Если СправочникСсылка.Пустая() Тогда
//…
КонецЕсли

Уникальный идентификатор (GUID)

Узнать идентификатор можно с помощью универсального метода любого объекта 1С ссылочного типа:
СправочникСсылка = Справочники.ИмяСправочника.НайтиПоНаименованию("Наименование");
GUID = СправочникСсылка.УникальныйИдентификатор();

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

GUID назначается в момент первой записи объекта 1С. Уже до записи можно узнать GUID, который будет назначен объекту 1С при записи:

Также перед записью можно назначить свой GUID. Это бывает полезным, например, при обмене данными:

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

  • Переменная – созданная в модуле программистом, нетипизированная
  • Реквизит объекта 1С (справочника, документа), добавленный в конфигураторе – хранится в базе данных, строго типизирован
  • Реквизит формы – поле на форме, строго типизирован.

Поле на форме показывает «какие-то данные». Данные могут быть напрямую связаны с реквизитом объекта 1С (указаны в свойстве поля формы ПутьКДанным).

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

Доступ к значениям именованных свойств объектов 1С

У многих объектов 1С есть свойства, которые имеют наименования.
Например:

  • элемент справочника имеет реквизиты с наименованиями
  • форма имеет реквизиты с наименованиями
  • у таблицы есть колонки с наименованиями
  • у строки таблицы есть поля с такими же наименованиями, как колонки у таблицы.

Если у объекта 1С есть свойства (реквизиты, колонки и т.п.), у которых есть наименования, то к ним можно обращаться двумя способами.

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

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

Предлагаю простые решения этой задачи (без построения запросов к базе данных), полученные эмпирическим путём:

1) Для платформы 1С-7.7:
- Для «битой» ссылки метод Ссылка . Выбран () и функция ПустоеЗначение () возвращают ноль;
- Для «пустой» ссылки метод Ссылка . Выбран () возвращает ноль, а функция ПустоеЗначение () единицу;
- Для «нормальной» ссылки метод Ссылка . Выбран () возвращает единицу, а функция ПустоеЗначение () ноль;

Таким образом, с точки зрения 1С-7.7 «битая» ссылка – это не пустое значение, которое не является выбранным .

2) Для платформы 1С-8.x:
Все обстаит несколько сложней.
В обоих случаях (для «битых» и «нормальных» ссылок) метод Ссылка . Пустая () и функция ЗначениеЗаполнено () ведут себя одинаково:
первый возвращает Ложь , а второй Истина .

Простоте решение было найдено случайно, при отладке ошибок времени исполнения:

- Для «битой» ссылки метод Ссылка . ПолучитьОбъект () возвращает значение Неопределено;
- Для «пустой» ссылки» метод Ссылка . ПолучитьОбъект () выбрасывает исключение:
«Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!» ;
- Для «нормальной» ссылки метод Ссылка . ПолучитьОбъект () возвращает значение согласно документации;

Таким образом, с точки зрения 1С-8.х «битая» ссылка – это не пустое значение ссылочного типа,
для которого возвращается значение объекта равное Неопределено .

При этом особняком стоят ссылки на значения перечислений. У них нет метода Ссылка . ПолучитьОбъект () .
И трудно вообще представить себе ситуацию, когда ссылка на перечисление может оказаться «битой».
Например, если удалить значение в конфигураторе, то при восстановлении значения функцией ЗначениеИзФайла () возвращается пустая ссылка.
Поэтому будем считать любые ссылки на перечисления «небитыми».

В архиве файла поставки находятся текстовые файлы с примерами реализации функции IsEmpty () для платформ 1С-7.7 и 1С-8.x,
возвращающей признак пустого значения и флаг «битой ссылки» для произвольного значения.



В открывшемся окне в поле «Объект» через три точки выберем объект, по которому нужен анализ.


К примеру, нужно проверить, в каких документах вносились изменения тем или иным пользователем. Для этого в поле «Объект» выберем «Пользователь»:

Получите понятные самоучители по 1С бесплатно:


Открывается дополнительное окно, в котором указаны все пользователи данной программы. Выберем «Белкина Анна Григорьевна»:


По кнопке «Найти ссылки» программа выдает все справочники, документы, регистры, в которых записан выбранный нами пользователь.


Дополнительно есть возможность в полученных ссылках найти тот или иной документ, к примеру, «Начисление зарплаты», по кнопке «Найти».


В результате получим.


Т.е. в нашем случае под пользователем «Белкина Анна Григорьевна» был создан только один документ начисления зарплаты. Такая информация может понадобиться руководству для контроля за сотрудниками.

Также обработка будет полезна и в других случаях. Например, при дублировании номенклатуры (для удаления ненужного элемента) или поиска мест использования помеченных на удаление элементов справочников (для исправления учетных данных в базе).

Приветствую, коллеги! В данной статье будет проведён анализ того, как проводить проверку типа значения для некоторого справочника или документа, а также – в обратную сторону: как проверить, что тип значения принадлежит документации или справочникам и так далее.

Проверка типа значения у документов и справочников

Для начала следует оговорить то, что в конфигурациях 1С:Предприятие 8 один прикладной объект может реализовывать одновременно несколько типов значений. К примеру, в сравнении с прошлыми версиями 1С:Предприятие, где для решения некоторых задач необходим был тип значения «Документ», в 1С:Предприятие 8 подобные задачи могут решаться различными типами значений. Каждый тип отличается от другого своим предназначением. Например, тип значения «ДокументСсылка» выполняет функцию сохранения ссылок для объекта из информационной базы внутри реквизитов иных отличных объектов. А тип значения «ДокументОбъект» необходим для того, чтобы записывать и проводить удаление конкретной документации. Её один схожий по первичному названию, но иной по функционалу – это тип записи «ДокументВыборка», который предназначен для выполнения перебора по документам, которые состоят в информационной базе. Также есть множество иных типов записи, которые предназначены для совершения действий с документацией.

Также важно отметить, что в конфигурациях платформы 1С:Предприятие 8 не существует различий между понятиями «Вид» и «Тип». А это означает, что любой объект из метаданных имеет собственную подборку с типами, которые задействуются внутри встроенного языка для работы с объектом. Это означает, что, к примеру, при работе с конфигурацией не будет типа «ДокументСсылка», но будут иметься более конкретные типы, такие как «ДокументСсылка.Счёт» или «ДокументСсылка.Накладная» и так далее.

В конфигурациях 1С, чтобы производить работу с типами, нужно задействовать не строчное представление типов, а вид типа «Тип», внутри которого и задаётся конкретный тип записи. Чтобы присвоить значение типу, следует воспользоваться функцией «Тип()», параметром в которой и будет сам конкретный тип.

Для того чтобы узнать, какой тип у конкретной переменной, необходимо задействовать функцию «ТипЗнч()», а также воспользоваться вышеописанной функцией «Тип()», дабы получить тип, в соответствии с именем.

Для наглядности всего описанного ниже приведен пример получения типа значения:

Проверка принадлежности типа значения

Рассмотрим, как узнать, относится ли конкретный тип значения к документации или справочникам, или чему-то иному.

Объекты, которые отвечают за описание некоторых прикладных документов, имеют сразу несколько различных типов, необходимых для проведения операций с такими объектами метаданных. К примеру, если есть некоторый документ «Счёт», то он будет иметь такой набор типов значений: «ДокументСписок.Счёт», «ДокументОбъект.Счёт», «ДокументМенеджер.Счёт», «ДокументВыборка.Счёт» и «ДокументСсылка.Счёт».

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

Читайте также: