Как на форму объекта добавить новый реквизит?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Добавление нового реквизита на форму объекта в 1С
Суть задачи
Реквизит — это атрибут объекта (документа, справочника, регистра), который хранится в БД. Добавление нового реквизита — это расширение структуры объекта с использованием конфигурации 1С:Предприятия.
Порядок добавления нового реквизита
Шаг 1: Добавить реквизит в конфигурацию
-
Откроем Конфигуратор (Сервис → Конфигуратор)
-
В дереве конфигурации находим нужный объект:
- Для документов: Документы → Название документа
- Для справочников: Справочники → Название справочника
- Для регистров: Регистры → Регистр
-
Щелчок правой кнопкой на реквизитах → Добавить реквизит
Пример для документа "ПриходнаяНакладная":
- Имя реквизита: СуммаНДС
- Синоним: "Сумма НДС"
- Тип: Число (целое: нет, точность: 15.2)
- Полнотекстовый поиск: нет
- Длина строки: по умолчанию
Шаг 2: Создать новую миграцию БД (Goose)
Все изменения структуры БД выполняются через миграции. Создаём SQL файл:
-- файл: migrations/0042_add_sums_nds_to_documents.sql
-- Добавляем колонку в таблицу документа
ALTER TABLE documents
ADD COLUMN sums_nds NUMERIC(15, 2) DEFAULT 0;
-- Комментарий для документирования
COMMENT ON COLUMN documents.sums_nds IS 'Сумма НДС';
Шаг 3: Обновить SQLAlchemy модель
Обновляем модель, чтобы она соответствовала схеме БД:
# backend/domain/documents/models.py
from decimal import Decimal
from sqlalchemy import Column, Numeric, String
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class Document(Base):
__tablename__ = 'documents'
id = Column(String, primary_key=True)
name = Column(String)
amount = Column(Numeric(15, 2))
sums_nds = Column(Numeric(15, 2), default=Decimal('0.00')) # ← новый реквизит
def calculate_total(self) -> Decimal:
return self.amount + self.sums_nds
Шаг 4: Добавить новое поле на форму (UI)
В Конфигураторе на форме объекта:
- Выбираем форму редактирования документа
- Перетаскиваем новый реквизит из дерева на форму
- Настраиваем визуальное представление:
- Ширина поля
- Выравнивание
- Шрифт (если нужно)
Способ 1: Через конструктор форм (графический)
Конфигуратор → Документ → ПриходнаяНакладная → Формы → ФормаДокумента → (двойной клик)
На форме:
- Перейти в режим редактирования
- Щелчок правой кнопкой на форме → Добавить поле
- Выбрать реквизит СуммаНДС из списка
- Расположить на нужное место
Способ 2: Через XML форму (программный)
Если форма создана программно, отредактируем XML:
<!-- ФормаДокумента.form.xml -->
<Form>
<AutoCommandBar>
<!-- команды формы -->
</AutoCommandBar>
<ChildItems>
<UsualGroup Name="GroupBasicInfo">
<ChildItems>
<!-- Поле суммы НДС -->
<LabelField Name="LabelSumsNds">
<DataPath>Object.SumsNds</DataPath>
<Title>Сумма НДС</Title>
</LabelField>
<InputField Name="InputSumsNds">
<DataPath>Object.SumsNds</DataPath>
<Type>NumericField</Type>
<Format>ЧДД.ДД</Format>
</InputField>
</ChildItems>
</UsualGroup>
</ChildItems>
</Form>
Способ 3: Через модули форм (по коду)
Если нужна сложная логика привязки:
// На форме в модуле
&НаСервере
Процедура ПриЧтенииДанныхСервер(Отмена, СтандартнаяОбработка)
// Инициализация нового реквизита
Если ЭтотОбъект.СуммаНДС = Неопределено Тогда
ЭтотОбъект.СуммаНДС = 0;
КонецЕсли;
КонецПроцедуры
// Автоматический расчёт НДС при изменении суммы
&НаКлиенте
Процедура СуммаПриИзменении(Элемент)
// Рассчитываем НДС (например, 18%)
Объект.СуммаНДС = Объект.Сумма * 0.18;
КонецПроцедуры
Важные шаги после добавления реквизита
-
Применить конфигурацию — F7 в конфигураторе
-
Запустить миграцию БД:
make migrate -
Проверить синхронизацию — убедиться, что:
- Миграция выполнена успешно
- Модель обновлена
- Форма корректно отображает новое поле
-
Обновить кэш в 1С:Предприятии:
- Закрыть все окна
- Сервис → Очистить кэш
- Перелогиниться
Практические рекомендации
Обязательно выполняй в таком порядке:
- Добавить реквизит в конфигурацию
- Создать миграцию БД (Goose)
- Обновить SQLAlchemy модель
- Добавить на форму UI элемент
- Протестировать логику
Типичные ошибки:
- ❌ Забыли создать миграцию → БД не обновится
- ❌ Не обновили модель → несоответствие с БД
- ❌ Добавили поле на форму, но не на объект → ошибка при сохранении
- ❌ Не очистили кэш → видят старые значения
Для типовых конфигураций (УТ, БУХ):
Используй встроенные расширения:
Сервис → Расширение конфигурации → новый реквизит для объекта
Это создаст расширение конфигурации вместо прямого редактирования, что безопаснее при обновлениях типовой конфигурации.
Правильный процесс добавления реквизита гарантирует целостность данных и нормальную работу приложения.