В процессе работы с конфигурацией «Бухгалтерия предприятия 3.0» многие разработчики и опытные пользователи замечают специфическое поведение системы при создании новых элементов справочников непосредственно из форм документов. Классический пример — создание договора прямо из формы документа Счет на оплату покупателю. Нажатие кнопки «Новый» (в поле выбора договора) приводит к мгновенному появлению записи в базе данных без привычного вопроса «Записать новый объект?» и без появления «звездочки» модифицированности в заголовке формы. Рассмотрим подробно, почему так происходит, какие технические механизмы за этим стоят и соответствует ли это стандартам разработки «1С».
Разберем ситуацию, описанную в обращении. При нажатии кнопки быстрого создания договора система не просто подставляет пустую ссылку, а выполняет процедуру создания и записи объекта на сервере. Проанализируем, почему форма счета при этом не помечается как измененная (модифицированная):
СправочникСсылка.ДоговорыКонтрагентов, заполняет его реквизиты по умолчанию и вызывает метод Записать().Модифицированность может не выставляться автоматически, если разработчик не предусмотрел это явно.Изменяет сохраняемые данные. Выясним его роль: если флаг установлен, платформа перед выполнением команды проверяет, изменена ли основная форма, и предлагает её записать. Однако это свойство влияет на текущий документ (Счет), а не на создаваемый объект (Договор).Посмотрим на пример кода, который часто используется в подобных кнопках для генерации наименования нового договора. В современных конфигурациях, базирующихся на Библиотеке стандартных подсистем (БСП), принято использовать универсальные функции для работы со строками. Проанализируем пример кода:
НаименованиеДоговора = "Счет %1 от %2";
НаименованиеДоговора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НаименованиеДоговора,
НомерДоговора,
Формат(ДатаДоговора, "ДЛФ=D"));
Использование функции СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку вместо простого сложения строк (конкатенации) продиктовано стандартами разработки «1С». Это необходимо для корректной локализации системы и предотвращения ошибок приведения типов. Даже если задача кажется тривиальной (сложить номер и дату), следование этому стандарту гарантирует стабильность кода при обновлении конфигурации.
Выясним причину такого поведения с точки зрения методологии учета. В 1С:Бухгалтерии реализована концепция упрощенного документооборота. Для многих малых предприятий каждый отдельный счет на оплату фактически является офертой (договором). Чтобы бухгалтер не тратил время на:
Разработчики внедрили функционал «быстрого создания». Система берет данные из текущего счета и в один клик формирует готовую карточку договора. Это повышает скорость работы, хотя и порождает риск появления «мусорных» записей, если пользователь нажал кнопку случайно.
Ситуация, когда пользователь «натыкал» лишних договоров, действительно существует. Поскольку объект записывается в базу данных сразу, простое закрытие формы счета без сохранения не удалит уже созданный в справочнике договор. Рассмотрим, как с этим бороться:
Изменяет сохраняемые данные. Если его выключить, система будет работать «тихо», но ответственность за консистентность данных полностью ляжет на ваш программный код.Мы проанализировали поведение системы и пришли к выводу, что отсутствие вопроса при создании нового договора в 1С:Бухгалтерии 3.0 — это не ошибка, а осознанное проектное решение. Оно направлено на минимизацию количества кликов (UX-дизайн) и автоматизацию рутинных операций. Программная запись объекта без пометки модифицированности формы владельца обусловлена спецификой работы серверных вызовов в управляемых формах.
Для разработчика важно помнить: при реализации подобных «быстрых кнопок» всегда стоит взвешивать удобство пользователя и чистоту базы данных. Использование стандартов БСП при формировании данных (как в примере с ПодставитьПараметрыВСтроку) является обязательным для обеспечения качества кода профессионального уровня.