Новый документ в 1С 8.3: от строки в дереве метаданных до первого проведения
Содержание
Чтобы создать документ
в конфигураторе 1С, откройте конфигурацию (Конфигурация → Открыть конфигурацию), в дереве метаданных щёлкните правой кнопкой по ветке «Документы» и выберите «Добавить». Откроется окно редактирования объекта: в нём задают имя, реквизиты, табличные части, нумерацию, регистры для движений и формы. Затем пишут процедуру проведения в модуле объекта, выдают права в ролях и обновляют конфигурацию базы данных клавишей F7.
Порядок общий для платформы 8.3 и не зависит от конфигурации: так же документ создаётся и в пустой учебной базе, и в доработанной Бухгалтерии. Разница только в том, где вы его создаёте. В типовой конфигурации на поддержке новый объект лучше добавлять в расширение, а не в основную конфигурацию.
Подготовка: где создавать документ и что продумать заранее
Перед первым кликом решите три вопроса. От них зависит, сколько переделок будет потом.
- 🗂 Где хранить доработку. В своей конфигурации — прямо в основной. В типовой (БП 3.0, ЗУП 3.1, УТ 11) — в расширении: собственные документы в расширениях поддерживают актуальные версии платформы, и обновления типовой не затрут вашу работу. Добавление в основную конфигурацию требует включить возможность изменения и усложняет каждое обновление.
- 📐 Что документ фиксирует. Шапка — то, что одно на весь документ (организация, контрагент, склад). Табличная часть — то, что повторяется строками (товары, сотрудники, услуги).
- 📊 Какие регистры он двигает. Документ без движений — просто карточка с номером и датой. Если нужны остатки или обороты, регистр накопления лучше создать до документа: тогда его можно сразу отметить на закладке «Движения».
Перед изменением рабочей базы сделайте выгрузку (Администрирование → Выгрузить информационную базу, файл .dt) или копию каталога файловой базы. Обновление структуры базы данных необратимо без резервной копии.
Шаг 1. Добавляем документ в дерево метаданных
- Запустите базу в режиме «Конфигуратор» и откройте конфигурацию через
Конфигурация → Открыть конфигурацию. Для расширения —Конфигурация → Расширения конфигурации, выберите нужное и откройте его. - Найдите в дереве ветку «Документы», щёлкните правой кнопкой → «Добавить». То же делает клавиша
Insertпри выделенной ветке. - В открывшемся окне на закладке «Основные» заполните имя, синоним и комментарий.
Имя — идентификатор для кода, без пробелов и с заглавными буквами внутри: ПоступлениеМатериалов. Синоним — то, что видит пользователь: «Поступление материалов». Платформа сама подставляет синоним из имени, разбивая его по заглавным буквам, но проверьте результат.
Для понятного интерфейса заполните ещё два поля на этой же закладке:
| Поле | Пример | Где видно пользователю |
|---|---|---|
| Представление объекта | Поступление материалов | Заголовок формы документа |
| Представление списка | Поступления материалов | Заголовок формы списка и команда в разделе |
Если документ создаётся в расширении, платформа добавит к имени префикс расширения (например, Расш1_). Префикс задают в свойствах расширения один раз — поменяйте его на осмысленный до того, как создадите первые объекты.
Шаг 2. Основные свойства документа: подсистемы, нумерация, проведение
Подсистемы
На закладке «Подсистемы» отметьте раздел, в котором документ должен появиться (например, «Склад»). Без этого пользователь найдёт документ только через «Все функции». Команда «Все функции» включается в параметрах клиентского приложения флажком «Отображать команду «Все функции»».
Нумерация
Закладка «Нумерация» определяет, как документу присваивается номер.
- 🔢 Тип номера — Строка или Число. Строковый номер позволяет добавлять префикс организации или узла обмена, поэтому типовые конфигурации используют именно его.
- 📏 Длина номера — сколько символов отводится под номер вместе с префиксом. Короткая длина быстро кончается: при длине 5 и префиксе из двух символов остаётся три цифры, то есть 999 документов.
- 📅 Периодичность — в пределах чего номер уникален: непериодический, в пределах года, квартала, месяца или дня. Для первичных документов чаще всего выбирают «В пределах года».
- ✅ Контроль уникальности и Автонумерация — оставьте включёнными, если нет особой причины.
Если несколько видов документов должны идти в одной сквозной нумерации, создайте в ветке «Общие» объект «Нумератор» и укажите его в поле «Нумератор».
Проведение
На закладке «Движения» задайте, может ли документ проводиться.
| Свойство | Значение | Когда выбирать |
|---|---|---|
| Проведение | Разрешить | Документ двигает регистры или участвует в отчётах как проведённый |
| Проведение | Запретить | Документ-заявка, служебная записка, договор |
| Оперативное проведение | Разрешить | Нужен контроль остатков «на текущий момент» при проведении текущей датой |
| Удаление движений | Удалять автоматически | Подходит почти всегда: при перепроведении старые движения стираются платформой |
В этом же списке отметьте регистры, по которым документ будет делать записи. Отмеченный регистр получает документ в качестве регистратора, а у документа появляется коллекция Движения.<ИмяРегистра>.
Шаг 3. Реквизиты и табличные части документа
Перейдите на закладку «Данные». Стандартные реквизиты — Номер, Дата, Проведен, ПометкаУдаления, Ссылка — создавать не нужно, они есть у любого документа.
Реквизиты шапки
Добавьте реквизиты кнопкой «Добавить» над списком «Реквизиты». Для каждого в палитре свойств (Alt+Enter) задайте:
- 🏷 Тип — ссылка на справочник (
СправочникСсылка.Контрагенты), число с длиной и точностью, строка, дата, булево. Если реквизит может хранить значения разных типов, отметьте «Составной тип данных». - ⚠️ Проверка заполнения — «Выдавать ошибку», если без значения документ записывать нельзя. Платформа сама проверит поле и выведет сообщение.
- 🔗 Связи параметров выбора — например, договор выбирается только по указанному контрагенту.
Табличная часть
Кнопка «Добавить табличную часть», затем внутри неё — реквизиты строк. Для поступления материалов типовой набор такой:
| Реквизит | Тип | Комментарий |
|---|---|---|
| Номенклатура | СправочникСсылка.Номенклатура | Проверка заполнения: выдавать ошибку |
| Количество | Число (15, 3) | Три знака после запятой — для кг и метров |
| Цена | Число (15, 2) | |
| Сумма | Число (15, 2) | Пересчитывается в форме или в модуле |
Свойство «Индексировать» нужно реквизитам, по которым будут часто отбирать документы в запросах (склад, контрагент). Индекс на каждом поле подряд только замедляет запись.
Длину числовых реквизитов задавайте с запасом сразу. Увеличить её потом можно, но это перестроение таблицы при обновлении структуры, а на большой базе оно идёт долго.
Шаг 4. Формы документа: основная, списка и выбора
Без собственных форм документ всё равно открывается: платформа строит их автоматически. Своя форма нужна, когда хочется управлять расположением полей, добавить пересчёт суммы или кнопки.
- Откройте закладку «Формы» и нажмите кнопку с лупой (или «Добавить») рядом со строкой «Документа».
- В конструкторе формы выберите тип «Форма документа» и отметьте, какие реквизиты и табличные части вывести.
- Нажмите «Готово». Форма появится в ветке документа и станет основной.
Таким же образом создаются форма списка и форма выбора. Форма списка позволяет добавить колонки «Контрагент» и «Сумма», которых нет в автоматическом списке.
В открытой форме основной реквизит называется Объект — это данные документа. Чтобы пересчитывать сумму в строке, выделите в элементах формы поле «Количество» табличной части, в палитре свойств найдите событие «ПриИзменении» и создайте обработчик:
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ТекСтрока = Элементы.Товары.ТекущиеДанные;
ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
КонецПроцедуры
Тот же обработчик назначьте и полю «Цена». Директива &НаКлиенте здесь уместна: расчёт простой и не требует обращения к базе.
Шаг 5. Модуль документа: проведение, заполнение, проверки
Модуль объекта открывается на закладке «Прочее» кнопкой «Модуль объекта» или через контекстное меню документа в дереве. Здесь живёт логика, которая работает при любой записи, а не только из формы.
Обработка проведения
Самый быстрый путь — кнопка «Конструктор движений» на закладке «Движения». Он сопоставит поля регистра и документа и сгенерирует процедуру. Вот как выглядит результат для регистра остатков с измерением «Номенклатура» и ресурсом «Количество»:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиМатериалов.Записывать = Истина;
Для Каждого ТекСтрока Из Товары Цикл
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Номенклатура = ТекСтрока.Номенклатура;
Движение.Количество = ТекСтрока.Количество;
КонецЦикла;
КонецПроцедуры
Флаг Записывать = Истина говорит платформе записать набор движений после завершения процедуры. Явно вызывать Записать() не нужно, если в свойствах документа выбран режим записи движений «Записывать выбранные».
Другие частые обработчики
| Обработчик | Когда срабатывает | Для чего |
|---|---|---|
ОбработкаЗаполнения | Новый документ, ввод на основании | Подставить склад, организацию, строки из документа-основания |
ОбработкаПроверкиЗаполнения | Перед записью при проверке | Свои проверки сверх флага «Выдавать ошибку» |
ПередЗаписью | Перед каждой записью | Пересчитать итоговую сумму документа |
ПриКопировании | Копирование документа | Очистить поля, которые не должны переноситься |
Пример итоговой суммы в ПередЗаписью:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаДокумента = Товары.Итог("Сумма");
КонецПроцедуры
Здесь СуммаДокумента — реквизит шапки типа Число (15, 2), который нужно заранее создать на закладке «Данные».
Для отказа от проведения при нехватке остатков установите Отказ = Истина и выведите сообщение через Сообщить() или объект СообщениеПользователю. Проведение откатится целиком, частично записанных движений не останется.
Шаг 6. Права, обновление базы и отладка нового документа
Права в ролях
Новый документ по умолчанию не виден никому, кроме ролей с флагом «Устанавливать права для новых объектов». Откройте нужную роль в ветке Общие → Роли, найдите документ и отметьте права: чтение, добавление, изменение, проведение, отмена проведения, интерактивные действия. Есть второй путь — закладка «Права» в окне самого документа: там видно все роли сразу.
Обновление конфигурации базы данных
Нажмите F7 или выберите Конфигурация → Обновить конфигурацию базы данных. Платформа покажет список изменений структуры — проверьте, что в нём нет ничего лишнего, и примите. Если в базе работают пользователи, обновление может потребовать монопольного доступа или динамического обновления; лучше делать это в нерабочее время.
Отладка
Перед запуском проверьте код: Ctrl+F7 выполняет синтаксический контроль открытого модуля, а Конфигурация → Проверка конфигурации ищет ошибки во всей конфигурации. Затем:
- Поставьте точку останова на строке
Для Каждого ТекСтрока Из Товары ЦиклклавишейF9. - Нажмите
F5(Отладка → Начать отладку) — откроется 1С:Предприятие в режиме отладки. - Создайте документ, заполните строки и нажмите «Провести».
- Выполнение остановится в конфигураторе. Шагайте
F10(без захода в процедуры) илиF11(с заходом), а значения переменных смотрите в табло или наведением курсора.
После проведения откройте регистр через «Все функции» или из отчёта и убедитесь, что движения легли с правильными количествами и датой. В панели навигации формы проведённого документа появляются ссылки на регистры, по которым он сделал записи: так удобно проверить движения, не выходя из документа.
Частые ошибки и как их избежать
Частые вопросы
Можно ли создать документ без программирования?
Чем документ отличается от справочника?
Как переименовать документ, если в базе уже есть данные?
Можно ли добавить документ в типовую конфигурацию без снятия с поддержки?
Как сделать ввод нового документа на основании другого?
ОбработкаЗаполнения: параметр ДанныеЗаполнения содержит ссылку на основание.