В процессе разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда метод, доступный в коде управляемой формы, отсутствует в описании базового типа УправляемаяФорма в Синтакс-помощнике (СП). Особенно это заметно при работе с методом Записать(). Проанализируем, почему так происходит, как устроена иерархия объектов в 1С и как быстро находить нужную информацию.
Когда мы открываем модуль управляемой формы и пишем код, контекст ЭтотОбъект типизируется платформой как УправляемаяФорма (или ФормаКлиентскогоПриложения в отладчике). Однако это лишь базовый "каркас". В зависимости от того, какой объект является основным реквизитом формы, платформа динамически дополняет форму специфическими методами и свойствами.
Рассмотрим подробнее структуру в Синтакс-помощнике. Чтобы найти методы, специфичные для формы документа, нам нужно пройти по следующему пути:
Важно понимать: слово "Расширение" в данном контексте СП не имеет отношения к расширениям конфигурации (файлам .cfe). Это термин объектно-ориентированного проектирования, принятый в 1С для обозначения того, что базовая форма "расширяется" функционалом конкретного прикладного объекта. Именно поэтому метод Записать() вы не найдете в корневом разделе УправляемаяФорма, но он будет присутствовать в разделе Расширение управляемой формы для документов.
В коде модуля формы вызов метода Записать() без явного указания объекта (как в примере ниже) означает обращение к самой форме:
&НаКлиенте
Процедура Выгрузить(Команда)
// Вызов метода записи самой формы
Записать();
КонецПроцедуры
Выясним причину, по которой этот метод возвращает значение Булево. Многие начинающие разработчики игнорируют возвращаемое значение, однако это плохая практика. Метод возвращает Истина, если запись прошла успешно, и Ложь, если возникли ошибки (например, не заполнено обязательное поле или сработал отказ в процедуре ПередЗаписью). Правильнее обрабатывать результат следующим образом:
&НаКлиенте
Процедура Выгрузить(Команда)
ПараметрыЗаписи = Новый Структура();
Если Записать(ПараметрыЗаписи) Тогда
Сообщить("Данные успешно сохранены.");
// Продолжаем выполнение логики, например, выгрузку
Иначе
Сообщить("Не удалось записать документ, выгрузка отменена.");
КонецЕсли;
КонецПроцедуры
Для глубокого понимания работы метода Записать() из формы, разберем по шагам, какие события и в какой последовательности вызываются платформой. Это критически важно для отладки сложных систем:
Отказ = Истина, процесс остановится.Обратите внимание: если вы вызовете Объект.Записать() на сервере (напрямую у данных, а не у формы), то клиентские события формы (такие как ПослеЗаписи) не сработают. Используйте метод формы, если вам нужно полноценное взаимодействие с интерфейсом.
Посмотрим, как можно ускорить поиск нужной информации, не перелистывая сотни папок вручную:
Ctrl + F1. Если метод принадлежит нескольким типам объектов, 1С покажет список. Выбирайте тот вариант, где в пути указано слово "расширение", если работаете в форме.Проанализируем ситуацию из сообщения пользователя, который создает новый документ внутри расширения. Хотя платформа это позволяет, следует учитывать риски:
Во-первых, при удалении расширения или критическом сбое базы данных, данные объектов, созданных в расширении, могут быть безвозвратно утеряны, так как они хранятся в отдельных физических таблицах. Во-вторых, использование таких объектов в планах обмена или сложных определяемых типах может быть ограничено версией платформы.
Если задача позволяет, старайтесь создавать структуру данных (документы, справочники) в основной конфигурации, а в расширениях лишь дорабатывать логику их форм.
Мы выяснили, что для успешного поиска методов в 1С необходимо четко разделять контекст выполнения. Если вы находитесь в управляемой форме документа, ваш основной инструмент в СП — это раздел "Расширение управляемой формы для документа". Понимание иерархии объектов 1С позволяет не только быстрее писать код, но и эффективно использовать встроенные механизмы платформы для записи и обработки данных.