1С 8 3 ссылка

  • автор:

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

Применение метода в 1С 8.3

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

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

  1. Создаем контрагента;

    НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент(); НовыйКонтрагент.Наименование = «ОАО БАЛТИКА НЕВА»;

  2. Устанавливаем ему ссылку с помощью уникального идентификатора (как бы резервируем его для нового элемента);

    НовыйКонтрагентСсылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор); НовыйКонтрагент.УстановитьСсылкуНового(НовыйКонтрагентСсылка);

  3. Записываем элемент в справочнике «Представители», устанавливая зарезервированную ссылку в нужный реквизит;

    НовыйПредставитель = Справочники.Представители.СоздатьЭлемент(); НовыйПредставитель.ОбменДанными.Загрузка = Истина; НовыйПредставитель.Наименование = «Сергей»; НовыйПредставитель.Компания = НовыйКонтрагентСсылка; НовыйПредставитель.Записать();

  4. Заполняем реквизит только что созданным представителем и записываем контрагента в базу.

    НовыйКонтрагент.Представитель = НовыйПредставитель.Ссылка; НовыйКонтрагент.Записать();

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

Язык 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С или создать с нуля:
СправочникОбъект = СправочникСсылка.ПолучитьОбъект();
СправочникОбъект = Справочники.ИмяСправочника.СоздатьЭлемент();

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

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

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

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

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

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

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

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

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

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

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

Реквизиты

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

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

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

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

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

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

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

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

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

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

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *