Форма вместо ячейки: правка справочников, документов и регистров через диалог в 1С 8.3

· 9 мин

Содержание

Чтобы установить редактирование в диалоге для справочника в 1С 8.3, откройте его в конфигураторе, перейдите на закладку «Формы» и в свойстве «Редактирование» выберите «В диалоге». После обновления конфигурации базы данных элементы будут открываться в отдельной форме, а не править прямо в строке списка.

Типичная ситуация: пользователь меняет цену в справочнике прямо в ячейке, задевает соседнюю колонку и не замечает. Диалоговый режим убирает такие случайности: все поля видны в карточке, а запись идёт только по кнопке. Ниже — настройка для справочников, документов и регистров, управление из кода и связка с внешними обработками. Всё описанное относится к платформе 8.3 и управляемым формам.

Чем диалог отличается от правки в списке

В 1С данные можно редактировать двумя способами:

  • 📝 В списке — значение меняется прямо в ячейке таблицы, как в Excel. Быстро, но видны только колонки списка.
  • 🪟 В диалоге — по двойному щелчку или F2 открывается отдельная форма с полным набором реквизитов, проверками и кнопкой «Записать и закрыть».
КритерийВ спискеВ диалоге
Скорость вводаВысокая, удобно для 2-3 полейНиже, нужно открыть форму
Видны все реквизитыНет, только колонкиДа
Риск случайной правкиВышеНиже
Проверки при вводеТолько те, что в форме спискаВся логика формы объекта
Где уместноПростые справочники: единицы, валюты, видыКонтрагенты, номенклатура, договоры, строки со множеством полей

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

Как включить редактирование в диалоге для справочника

Способ редактирования задаётся в метаданных объекта. Пользователь в режиме «Предприятие» поменять его не может, только разработчик в конфигураторе.

  1. Откройте конфигуратор и дерево конфигурации.
  2. Найдите справочник, дважды щёлкните по нему, чтобы открыть окно редактирования объекта.
  3. Перейдите на закладку «Формы».
  4. В поле «Редактирование» выберите одно из значений: «В диалоге», «В списке» или «Обоими способами».
  5. Сохраните изменения и выполните Конфигурация → Обновить конфигурацию базы данных (F7).
  6. Запустите «Предприятие» и проверьте: двойной щелчок по элементу должен открыть форму.

Это же свойство есть у планов видов характеристик. В коде его можно прочитать, например, для проверки в обработке:

Если Метаданные.Справочники.Номенклатура.СпособРедактирования = СпособРедактирования.ВДиалоге Тогда
	Сообщить("Номенклатура редактируется только в форме элемента");
КонецЕсли;

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

Что выбрать для разных справочников:

  • 🟢 «В диалоге» — по умолчанию для большинства справочников с 5 и более реквизитами.
  • 🟡 «Обоими способами» — когда нужна быстрая правка наименования в списке, но иногда и полная карточка.
  • 🔵 «В списке» — для коротких классификаторов: единицы измерения, причины списания, статусы.

Если для справочника не создана своя форма элемента, платформа сгенерирует её автоматически. Для диалогового режима этого достаточно, но при 15-20 реквизитах автоформу лучше заменить своей: сгруппировать поля по закладкам.

Диалоговый режим для документов и их табличных частей

Сам документ всегда открывается в отдельной форме, отдельного переключателя у него нет. Вопрос обычно о табличной части: строки товаров по умолчанию правятся прямо в таблице формы документа.

Если в строке десяток колонок (номенклатура, характеристика, серия, количество, цена, скидка, ставка НДС, склад, комментарий), правка в ячейках неудобна. Решение — отдельная форма строки.

Шаг 1. Создайте форму строки

  1. В дереве конфигурации откройте документ, закладку «Формы».
  2. Добавьте новую форму, тип «Форма» (произвольная).
  3. Создайте реквизиты формы под поля строки: Номенклатура, Количество, Цена, Сумма.
  4. Выведите их на форму, добавьте кнопку «ОК».

В модуле формы строки:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры);
КонецПроцедуры

&НаКлиенте
Процедура ОК(Команда)
	Результат = Новый Структура("Номенклатура, Количество, Цена, Сумма",
		Номенклатура, Количество, Цена, Количество * Цена);
	Закрыть(Результат);
КонецПроцедуры

Чтобы ЗаполнитьЗначенияСвойств сработал, параметры формы с такими же именами должны быть объявлены на закладке «Параметры» формы строки.

Шаг 2. Перехватите начало изменения в форме документа

В таблице Товары формы документа назначьте обработчик события ПередНачаломИзменения:

&НаКлиенте
Процедура ТоварыПередНачаломИзменения(Элемент, Отказ)
	Отказ = Истина;
	ТекДанные = Элемент.ТекущиеДанные;
	ПараметрыФормы = Новый Структура("Номенклатура, Количество, Цена",
		ТекДанные.Номенклатура, ТекДанные.Количество, ТекДанные.Цена);
	Оповещение = Новый ОписаниеОповещения("ПослеРедактированияСтроки",
		ЭтотОбъект, Элемент.ТекущаяСтрока);
	ОткрытьФорму("Документ.ПоступлениеТоваров.Форма.ФормаСтроки", ПараметрыФормы,
		ЭтотОбъект, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ПослеРедактированияСтроки(Результат, ИдентификаторСтроки) Экспорт
	Если Результат = Неопределено Тогда
		Возврат; // пользователь закрыл форму без ОК
	КонецЕсли;
	Строка = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
	ЗаполнитьЗначенияСвойств(Строка, Результат);
	Модифицированность = Истина;
КонецПроцедуры

Отказ = Истина отменяет правку в ячейке, вместо неё открывается диалог. Идентификатор строки передаётся в оповещение, поэтому данные вернутся именно в ту строку, которую открывали, даже если пользователь успел сменить сортировку.

Для новых строк тот же приём вешается на событие ПередНачаломДобавления: отменяете стандартное добавление, открываете форму, а в оповещении вызываете Объект.Товары.Добавить().

Записи регистров сведений и накопления

Регистр сведений

У независимого регистра сведений есть форма записи. Если своей формы нет, платформа создаёт её автоматически, и запись из списка открывается в отдельном окне.

Чтобы диалог был удобнее:

  • 🧩 создайте собственную форму записи и назначьте её основной в свойствах регистра на закладке «Формы»;
  • 🔒 в форме списка поставьте таблице флаг «Только просмотр», тогда правка в ячейке будет недоступна и останется только открытие формы записи;
  • 📅 для периодического регистра выведите поле «Период» первым, чтобы пользователь сразу видел, с какой даты действует значение.

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

Регистр накопления

Записи регистра накопления не правят напрямую: их формирует документ-регистратор при проведении. Изменить их можно двумя путями:

  1. Исправить сам документ и перепровести его. Это основной и самый безопасный путь: движения пересчитаются по правилам конфигурации.
  2. Ручная корректировка движений. В 1С:Бухгалтерии 8 в форме документа есть кнопка Дт/Кт (просмотр проводок и движений). В открывшемся окне ставится флаг «Ручная корректировка», после чего движения можно править.

После ручной корректировки документ не перезаполнит движения при повторном проведении, пока флаг стоит. Если позже исправите сам документ, движения останутся старыми. Отмечайте такие документы в комментарии.

Управление редактированием из кода

Свойство «Редактирование» в метаданных во время работы не меняется. Зато форму можно настраивать на лету: кому разрешить правку в ячейке, а кому только диалог или просмотр.

Основные свойства таблицы формы:

СвойствоЧто делает
ТолькоПросмотрЗапрещает любую правку в таблице
ИзменятьСоставСтрокРазрешает или запрещает добавление и удаление строк
ИзменятьПорядокСтрокРазрешает перемещение строк вверх и вниз
ТолькоПросмотр у колонкиБлокирует правку конкретной колонки

Пример: правка цен в ячейках доступна только пользователю с ролью «Полные права», остальные видят колонку закрытой. В рабочей конфигурации вместо этой роли проверяйте свою роль или право.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	МожноМенятьЦены = РольДоступна("ПолныеПрава");
	Элементы.ТоварыЦена.ТолькоПросмотр = Не МожноМенятьЦены;
	Элементы.Товары.ИзменятьСоставСтрок = Не Объект.Проведен;
КонецПроцедуры

Вторая строка запрещает добавлять и удалять строки в проведённом документе. Пользователь сначала отменит проведение, затем внесёт правки — так меньше шансов испортить уже учтённые данные.

Переключать режим можно и по условию строки. В обработчике ПередНачаломИзменения проверяйте текущие данные: простые строки правьте в ячейке, а строки, например, с маркируемым товаром, открывайте в диалоге с дополнительными полями.

&НаКлиенте
Процедура ТоварыПередНачаломИзменения(Элемент, Отказ)
	Если Элемент.ТекущиеДанные.ТребуетсяДиалог Тогда
		Отказ = Истина;
		ОткрытьФормуСтроки(Элемент.ТекущаяСтрока);
	КонецЕсли;
КонецПроцедуры

Здесь ТребуетсяДиалог — ваш реквизит строки или вычисляемый признак, а ОткрытьФормуСтроки — процедура с кодом открытия формы из предыдущего раздела.

Где такая гибридная схема окупается:

  • 📦 строки с маркируемым товаром — в диалоге показываются коды маркировки и серии, которых нет в колонках;
  • 💰 строки с ручной скидкой — диалог требует указать причину скидки и не даст закрыть форму без неё;
  • 🧮 строки с пересчётом единиц — в форме видно, сколько штук в упаковке и какое количество получится в базовой единице.

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

Что делать, если диалог не открывается или правки теряются

Диагностика: выберите симптом

Отдельный случай — типовая конфигурация на поддержке. Чтобы не снимать её с поддержки, форму строки и обработчик ПередНачаломИзменения делают в расширении: заимствуют форму документа, добавляют свой обработчик события таблицы и новую форму в расширении. Расширения конфигурации доступны с платформы 8.3.6, их загрузка и применение выполняются в Администрирование → Печатные формы, отчеты и обработки → Расширения в 1С:Бухгалтерии 8.

Внешние обработки для правки данных через форму

Если менять конфигурацию нельзя вовсе, диалог для массовой или сложной правки выносят во внешнюю обработку. В конфигурациях на БСП (1С:Бухгалтерия 8, ЗУП 3, УТ 11) для этого есть механизм дополнительных обработок.

Как подключить:

  1. Откройте Администрирование → Печатные формы, отчеты и обработки, включите флаг «Дополнительные отчеты и обработки».
  2. Перейдите по ссылке «Дополнительные отчеты и обработки», нажмите «Добавить из файла» и выберите .epf.
  3. В карточке обработки укажите размещение: к каким документам или справочникам она привязана.
  4. Запишите карточку. В форме объекта появится команда обработки.

Вид обработки задаётся в её модуле, в функции СведенияОВнешнейОбработке(). Для правки данных подходят два вида:

  • 🧾 Заполнение объекта — команда появляется в форме документа и меняет его данные: например, открывает диалог подбора и заполняет табличную часть.
  • 🛠 Дополнительная обработка — отдельная форма, где пользователь отбирает объекты и правит реквизиты пачкой.

Типовой сценарий: бухгалтеру нужно поменять ставку НДС у 300 позиций номенклатуры. Править каждую карточку в диалоге долго, правка в списке не даст доступа к ставке. Обработка с формой «отбор → новое значение → применить» решает задачу за минуту и оставляет справочник в диалоговом режиме для остальной работы.

Для разовых массовых правок в БСП уже есть встроенная обработка «Групповое изменение реквизитов». Её команда «Изменить выделенные» доступна в списках многих справочников и документов. Проверьте её, прежде чем писать свою.

Частые вопросы

Можно ли включить редактирование в диалоге без конфигуратора?
Для справочника нет: способ редактирования задаётся в метаданных. Без изменения конфигурации можно только перехватить правку в расширении или вынести её во внешнюю обработку.
Влияет ли режим редактирования на права пользователей?
Нет. Права задаются ролями. Режим определяет лишь, где идёт правка: в строке списка или в отдельной форме. Если у пользователя нет права «Изменение», он не изменит объект ни там, ни там.
Почему в веб-клиенте форма строки открывается в отдельной вкладке?
Так задан режим открытия окна. Укажите РежимОткрытияОкнаФормы.БлокироватьОкноВладельца, тогда форма откроется поверх документа.
Сохранится ли настройка после обновления типовой конфигурации?
Если меняли свойство в основной конфигурации, при обновлении оно может прийти из поставки и потребует ручного сравнения. Настройки в расширении переживают обновление, но после него проверьте, что заимствованная форма не изменилась.
Работает ли форма строки в мобильном клиенте?
Да, приём с ОткрытьФорму и оповещением подходит и для мобильного клиента. Форму строки делайте компактной, в одну колонку.