Как найти Метод в Синтакс-помощнике, зная тип Объекта, и как работает метод Записать в управляемой форме

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разбираем иерархию расширений управляемой формы

Когда мы открываем модуль управляемой формы и пишем код, контекст ЭтотОбъект типизируется платформой как УправляемаяФорма (или ФормаКлиентскогоПриложения в отладчике). Однако это лишь базовый "каркас". В зависимости от того, какой объект является основным реквизитом формы, платформа динамически дополняет форму специфическими методами и свойствами.

Рассмотрим подробнее структуру в Синтакс-помощнике. Чтобы найти методы, специфичные для формы документа, нам нужно пройти по следующему пути:

  1. Интерфейс (управляемый)
  2. Управляемая форма
  3. Расширение объектов (здесь собраны общие методы для документов, справочников и т.д.)
  4. Или более узко: Расширение справочников / Расширение документов.

Важно понимать: слово "Расширение" в данном контексте СП не имеет отношения к расширениям конфигурации (файлам .cfe). Это термин объектно-ориентированного проектирования, принятый в 1С для обозначения того, что базовая форма "расширяется" функционалом конкретного прикладного объекта. Именно поэтому метод Записать() вы не найдете в корневом разделе УправляемаяФорма, но он будет присутствовать в разделе Расширение управляемой формы для документов.

Анализируем метод Записать() на клиенте

В коде модуля формы вызов метода Записать() без явного указания объекта (как в примере ниже) означает обращение к самой форме:


&НаКлиенте
Процедура Выгрузить(Команда)
    // Вызов метода записи самой формы
    Записать(); 
КонецПроцедуры

Выясним причину, по которой этот метод возвращает значение Булево. Многие начинающие разработчики игнорируют возвращаемое значение, однако это плохая практика. Метод возвращает Истина, если запись прошла успешно, и Ложь, если возникли ошибки (например, не заполнено обязательное поле или сработал отказ в процедуре ПередЗаписью). Правильнее обрабатывать результат следующим образом:


&НаКлиенте
Процедура Выгрузить(Команда)
    ПараметрыЗаписи = Новый Структура();
    Если Записать(ПараметрыЗаписи) Тогда
        Сообщить("Данные успешно сохранены.");
        // Продолжаем выполнение логики, например, выгрузку
    Иначе
        Сообщить("Не удалось записать документ, выгрузка отменена.");
    КонецЕсли;
КонецПроцедуры

Порядок событий при записи: цепочка выполнения

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

  1. ПередЗаписью (на клиенте): здесь выполняется проверка данных перед отправкой на сервер. Если установить параметр Отказ = Истина, процесс остановится.
  2. ПередЗаписью (на сервере в модуле формы): данные уже на сервере, но транзакция еще не началась.
  3. ОбработкаПроверкиЗаполнения: системная или программная проверка обязательных реквизитов.
  4. ПередЗаписью (в модуле Объекта): начало транзакции базы данных. Здесь работает код самого документа.
  5. ПриЗаписи (в модуле Объекта): данные записываются в таблицы БД, но транзакция еще не зафиксирована.
  6. ПриЗаписи (на сервере в модуле формы): финальные действия в контексте формы.
  7. ПослеЗаписи (на клиенте): транзакция завершена, форма обновлена, можно выводить уведомления пользователю.

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

Лайфхаки для работы с Синтакс-помощником

Посмотрим, как можно ускорить поиск нужной информации, не перелистывая сотни папок вручную:

  1. Быстрый переход (Ctrl + F1): Поставьте курсор на имя метода в коде и нажмите Ctrl + F1. Если метод принадлежит нескольким типам объектов, 1С покажет список. Выбирайте тот вариант, где в пути указано слово "расширение", если работаете в форме.
  2. Поиск по справке: В окне Синтакс-помощника используйте вкладку "Поиск". Вводите "Записать управляемая форма", чтобы сразу отфильтровать лишние упоминания метода у других объектов (например, у регистров или почтовых сообщений).
  3. Типизация в расширениях конфигурации: Если вы создаете новый документ непосредственно в расширении (Adaptation), помните, что для платформы его форма ничем не отличается от стандартной. Все правила поиска методов в СП остаются прежними.

Важные замечания по созданию объектов в расширениях

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

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

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

Итоги

Мы выяснили, что для успешного поиска методов в 1С необходимо четко разделять контекст выполнения. Если вы находитесь в управляемой форме документа, ваш основной инструмент в СП — это раздел "Расширение управляемой формы для документа". Понимание иерархии объектов 1С позволяет не только быстрее писать код, но и эффективно использовать встроенные механизмы платформы для записи и обработки данных.

← На главную