Новый документ в 1С 8.3 своими руками: от дерева метаданных до проведения и печати
Содержание
Новый документ в Конфигураторе 1С 8.3 создаётся так: откройте конфигурацию (Конфигурация → Открыть конфигурацию), в дереве метаданных щёлкните правой кнопкой по ветке «Документы» и выберите «Добавить». Откроется окно редактирования объекта: в нём по вкладкам задают имя, реквизиты, табличные части, нумерацию, движения, формы и макеты. Затем F7 (обновить конфигурацию
базы данных) — и документ появляется в базе.
Сам объект создаётся за минуту. Дальше начинается работа: чтобы документ проводился, печатался и был виден пользователям, нужно пройти ещё пять-шесть этапов. Все они расписаны ниже на сквозном примере — документе «Приход товара», который увеличивает остатки на складе.
Что подготовить до создания документа
Документ в 1С — это объект, который фиксирует хозяйственную операцию: у него всегда есть дата и номер, а при проведении он может менять данные регистров. Прежде чем открывать Конфигуратор, ответьте себе на четыре вопроса.
- 📌 Какие данные хранит шапка? Склад, контрагент, организация, комментарий.
- 📋 Нужна ли табличная часть? Для перечня товаров, услуг, сотрудников — да.
- 📊 Что документ меняет при проведении? Остатки, обороты, сведения. От этого зависит, какой регистр нужен.
- 🖨️ Нужна ли печатная форма? Накладная, акт, справка.
Проверьте и техническую сторону:
- Есть права администратора в базе и доступ к Конфигуратору.
- Сделана копия базы:
Администрирование → Выгрузить информационную базув Конфигураторе, файл.dt. Для выгрузки нужен монопольный режим — предупредите пользователей. - Справочники для ссылочных реквизитов уже существуют. В примере это «Номенклатура» и «Склады».
Если база на типовой конфигурации и та стоит на поддержке без возможности изменения, дерево метаданных будет закрыто для правок. Вариант первый — Конфигурация → Поддержка → Настройка поддержки → Включить возможность изменения. Это усложнит все будущие обновления типовой. Вариант второй, предпочтительный: создать документ в расширении конфигурации. В современных версиях платформы расширения умеют добавлять собственные документы, а типовая остаётся нетронутой.
Шаг 1. Создаём документ в дереве метаданных
- Запустите 1С в режиме «Конфигуратор» и откройте конфигурацию.
- В дереве найдите ветку «Документы», правый клик → «Добавить» (или выделите ветку и нажмите
Insert). - На вкладке «Основные» заполните имя и представления.
| Поле | Пример | Зачем |
|---|---|---|
| Имя | ПриходТовара | Идентификатор в коде. Без пробелов, не начинается с цифры |
| Синоним | Приход товара | Так документ видят пользователи |
| Представление объекта | Приход товара | Заголовок формы одного документа |
| Представление списка | Приходы товаров | Заголовок формы списка |
Имя выбирайте сразу удачное. Оно попадёт в код (Документы.ПриходТовара), в запросы, в права. Переименование позже затронет всё это.
Нумерация
На вкладке «Нумерация» задаются правила номера:
- Тип номера — «Строка» или «Число». Строка удобнее: в неё можно добавить префикс организации.
- Длина номера — с запасом. Девяти-одиннадцати символов хватает с префиксом.
- Периодичность — в пределах дня, месяца, квартала, года или непериодическая. «В пределах года» означает, что 1 января нумерация начнётся с 1.
- Автонумерация и Контроль уникальности — оставьте включёнными, иначе пользователи будут вводить номера вручную и получать дубли.
Подсистема
На вкладке «Подсистемы» отметьте раздел, где документ будет жить, например «Склад». Без этого документ не появится в командном интерфейсе, и пользователь его не найдёт.
Шаг 2. Реквизиты и табличная часть
Вкладка «Данные» — сердце документа. Здесь три зоны: реквизиты шапки, табличные части и стандартные реквизиты.
Стандартные реквизиты платформа создаёт сама: Дата, Номер, Проведен, ПометкаУдаления, Ссылка. Добавлять «Дата документа» вручную не нужно.
Реквизиты шапки для примера:
| Реквизит | Тип | Примечание |
|---|---|---|
| Склад | СправочникСсылка.Склады | Проверка заполнения: «Выдавать ошибку» |
| Комментарий | Строка (0 — неограниченная) | Для заметок |
| СуммаДокумента | Число (15, 2) | Итог по строкам |
Табличная часть «Товары» с реквизитами:
| Реквизит | Тип |
|---|---|
| Номенклатура | СправочникСсылка.Номенклатура |
| Количество | Число (15, 3) |
| Цена | Число (15, 2) |
| Сумма | Число (15, 2) |
💡 Свойство «Проверка заполнения» = «Выдавать ошибку» у реквизита — самый дешёвый способ не дать записать документ без склада. Код не нужен, платформа сама подсветит пустое поле.
Строку неограниченной длины (длина 0) не используйте для полей, по которым будут отбор и сортировка. Запросы с такими полями работают хуже, а сравнение придётся делать через ПОДСТРОКА.
Форма документа
На вкладке «Формы» нажмите кнопку с лупой у поля «Документа» — запустится конструктор формы. Он предложит выбрать реквизиты для размещения. Отметьте все и нажмите «Готово». Так же создайте форму списка. Если форм нет совсем, платформа построит их автоматически, но управлять ими вы не сможете.
Шаг 3. Движения документа по регистрам
Чтобы документ влиял на учёт, нужен регистр. Для остатков товаров — регистр накопления.
- В ветке «Регистры накопления» добавьте
ОстаткиТоваров, вид регистра — «Остатки». - Измерения:
Номенклатура,Склад. Ресурс:Количество. - Вернитесь в документ, вкладка «Движения». Установите «Проведение» = «Разрешить».
- В списке регистров отметьте
ОстаткиТоваров. Документ становится регистратором этого регистра. - Нажмите «Конструктор движений».
В конструкторе выберите регистр, источник данных — табличную часть «Товары», и нажмите «Заполнить выражения». Конструктор сам сопоставит поля по именам. Склад возьмётся из шапки. Тип движения — «Приход».
Результат — процедура в модуле объекта:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.ДобавитьПриход();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаТовары.Количество;
КонецЦикла;
КонецПроцедуры
На той же вкладке есть ещё два свойства, которые часто пропускают:
- Оперативное проведение — разрешает проводить документ «текущим моментом». Нужно для расходных документов с контролем остатков. Для прихода обычно не требуется.
- Удаление движений — что делать с движениями при отмене проведения и перепроведении. Значение по умолчанию подходит для большинства случаев: движения удаляются автоматически.
Шаг 4. Печатная форма документа
Печатная форма состоит из двух частей: макета (как выглядит) и кода (чем заполнить).
Макет
- Вкладка «Макеты» → «Добавить», тип — «Табличный документ», имя
Накладная. - Нарисуйте шапку: заголовок «Приход товара №… от …», склад.
- Выделите строки шапки и через меню
Таблица → Имена → Назначить имяназовите областьШапка. Так же создайте областиСтрокаиПодвал. - В ячейках, где будут значения, задайте заполнение «Параметр» в свойствах ячейки и имя параметра:
Номер,Дата,Номенклатура,Количество.
💡 Быстрый путь — Конструкторы → Конструктор печати в меню документа. Он сам создаст макет с областями и процедуру вывода. Потом макет можно доработать руками.
Код печати
В модуле менеджера документа добавьте экспортную функцию:
Функция СформироватьПечатнуюФорму(Ссылка) Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.ПриходТовара.ПолучитьМакет("Накладная");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьШапка.Параметры.Номер = Ссылка.Номер;
ОбластьШапка.Параметры.Дата = Формат(Ссылка.Дата, "ДФ=dd.MM.yyyy");
ТабДок.Вывести(ОбластьШапка);
Для Каждого СтрокаТЧ Из Ссылка.Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабДок;
КонецФункции
Затем на вкладке «Команды» создайте команду ПечатьНакладной. Тип параметра — ДокументСсылка.ПриходТовара, группа — командная панель формы. В модуле команды:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ТабДок = ПечатьНаСервере(ПараметрКоманды);
ТабДок.Показать("Приход товара");
КонецПроцедуры
&НаСервере
Функция ПечатьНаСервере(ДокументСсылка)
Возврат Документы.ПриходТовара.СформироватьПечатнуюФорму(ДокументСсылка);
КонецФункции
Параметры.Заполнить() переносит значения по совпадающим именам. Поэтому имена параметров в макете называйте так же, как реквизиты табличной части.
В типовых конфигурациях на БСП печать устроена иначе: через общую подсистему «Печать» и процедуры в модуле менеджера. Прямая команда, как выше, там работает, но не попадёт в стандартное подменю «Печать». Для типовой лучше повторить схему соседнего типового документа.
Шаг 5. Модуль объекта и модуль формы
У документа три места для кода, и путать их нельзя.
| Модуль | Где выполняется | Что туда писать |
|---|---|---|
| Модуль объекта | Сервер | Проведение, проверки, расчёт перед записью |
| Модуль формы | Клиент и сервер | Реакция на действия пользователя в форме |
| Модуль менеджера | Сервер | Печать, функции для работы с документами в целом |
Самые полезные события модуля объекта:
- ✍️
ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)— пересчитать итог, проверить данные. - 🧩
ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)— заполнить новый документ значениями по умолчанию или на основании другого. - ✅
ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)— сложные проверки, которые не решить флажком «Проверка заполнения». - 📄
ПриКопировании(ОбъектКопирования)— очистить то, что не должно копироваться.
Пример пересчёта итога:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаДокумента = Товары.Итог("Сумма");
КонецПроцедуры
В модуле формы — пересчёт суммы строки при смене количества. Обработчик создаётся из свойств поля таблицы, событие «ПриИзменении»:
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ТекСтрока = Элементы.Товары.ТекущиеДанные;
ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
КонецПроцедуры
Такой же обработчик повесьте на поле «Цена». Проверка на числах: 12 шт. × 150,50 = 1 806,00.
Права доступа
Шаг, без которого документ «есть, но его нет». Откройте нужную роль (Общие → Роли), найдите в ней документ и отметьте права: «Чтение», «Добавление», «Изменение», «Удаление», «Проведение», «Отмена проведения», а также интерактивные варианты этих прав. Регистру ОстаткиТоваров дайте хотя бы «Чтение», иначе проведение упадёт с ошибкой прав у обычного пользователя.
Шаг 6. Как протестировать новый документ
- Нажмите
F7— «Обновить конфигурацию базы данных». Платформа покажет список изменений структуры. Примите их. - Если база используется другими пользователями, а изменения требуют реструктуризации, обновление попросит монопольный доступ. Делайте это вне рабочего времени.
- Нажмите
F5— «Начать отладку». Откроется пользовательский режим. - Создайте документ, заполните пару строк, проведите.
- Проверьте движения: в форме документа через меню «Ещё» или через
Все функции → Регистры накопления → Остатки товаров. Команду «Все функции» включают вСервис и настройки → Параметры. - Распечатайте накладную и сверьте числа.
Для пошаговой проверки кода поставьте точку останова (F9) на строке в ОбработкаПроведения и проведите документ. Конфигуратор остановится, и вы увидите значения переменных. Табло (Отладка → Табло) покажет любое выражение, например Товары.Количество().
Перед передачей пользователям запустите Конфигурация → Проверка конфигурации: она найдёт синтаксические ошибки в модулях, ссылки на удалённые объекты и другие проблемы, которые иначе всплывут уже у бухгалтера.
Типичные ошибки при создании документа в Конфигураторе
Отдельно о дублях номеров. Если после загрузки данных из другой базы номера пошли «Приход 000000001» в двух документах одного года — проверьте, включён ли «Контроль уникальности» и совпадает ли периодичность с той, что была в источнике.