Создать документ в 1С 8.3 с табличной частью и печатной формой
Пошаговое руководство по созданию документа в 1С 8.3: реквизиты, табличная часть с автоподстановкой цены, пересчетом суммы и печатной формой с сортировкой. Примеры кода для 1с документы, 1с табличная часть и 1с печатная форма.
Как реализовать вторую часть задания по работе с документами в 1С: создание документа с реквизитами, табличной частью и печатной формой?
Описание задания:
1. Справочники (первая часть выполнена):
- Товары:
- Основное представление: наименование (длина 100).
- Реквизит: Цена (15.2).
- Перед записью: проверка уникальности наименования, при дубликате — запрет записи с сообщением.
- Клиенты:
- Основное представление: наименование (длина 100).
2. Документы (вторая часть):
- Реквизиты: Клиент (справочник «Клиенты»).
- Табличная часть: Товар (справочник «Товары»), Цена, Кол-во, Сумма.
- При выборе товара: автоматическая подстановка цены из справочника.
- При изменении количества или цены: пересчет суммы.
- Печатная форма накладной: строки упорядочиваются по выбору пользователя (по возрастанию):
- по длине наименования товара;
- по наименованию товара;
- по цене.
Правильно ли понимать, что во второй части нужно создать новый документ на основе указанных справочников с этими реквизитами и функционалом? Как это реализовать шаг за шагом в 1С?
В 1С 8.3 создание документа с реквизитами, табличной частью и печатной формой — это стандартная задача для типовых конфигураций вроде БП или УТ. Вы правильно поняли: на базе справочников “Товары” и “Клиенты” нужно в конфигураторе добавить новый документ (скажем, “ЗаказКлиента”), с реквизитом “Клиент”, ТЧ “Товары” (Товар, Цена, Кол-во, Сумма), автоподстановкой цены из справочника, пересчетом суммы и макетом накладной с сортировкой строк по длине наименования, наименованию или цене. Всё реализуется через события форм, модули объекта и табличный документ — займёт пару часов, если конфигурация не заблокирована.
Содержание
- Создание документа в конфигураторе 1С 8.3
- Добавление реквизитов и табличной части документа
- Автоподстановка цены при выборе товара в табличной части
- Пересчет суммы при изменении кол-ва или цены
- Настройка формы документа для работы с табличной частью
- Создание макета печатной формы накладной
- Сортировка строк в печатной форме по выбору пользователя
- Тестирование и распространенные ошибки
- Источники
- Заключение
Создание документа в конфигураторе 1С 8.3
Сначала откройте конфигуратор 1С — это база всего. Перейдите в ветку “Документы”, правой кнопкой — “Добавить”. Назовите его “ЗаказКлиента” (или как в задании), нумерация по организации, стандартные флаги: “Вводится на основании” отключите пока, “Проведение” — “Разрешить”.
Почему именно так? Документы 1С 8.3 хранят движения по регистрам, но для вашего случая хватит базовой структуры без регистров — просто реквизиты и ТЧ. Сохраните, обновите конфигурацию. Теперь документ появится в предприятии: “Продажи” → “Заказы клиентов” (настройте в подсистемах).
А если справочники уже есть? Идеально — ссылки на них подставятся автоматически. По данным rbs-crm.ru, табличные части в документах создаются как вложенные объекты, что упрощает жизнь.
Добавление реквизитов и табличной части документа
В свойствах документа кликните “Реквизиты” — добавьте “Клиент” типа СправочникСсылка.Клиенты. Далее “Табличные части” → “Добавить” → “Товары”. В ней колонки:
- Товар:
СправочникСсылка.Товары - Цена:
Число, длина 15, точность 2 - Кол-во:
Число, 10, 3 (или по заданию) - Сумма:
Число, 15, 2
Сохраните. Это основа 1с табличная часть — она как мини-таблица с методами вроде Очистить(), Добавить(). В модуле объекта документа (правой кнопкой → “Открыть модуль”) можно уже программно заполнять:
Процедура ОбработкаПроведения(Отказ, Режим)
// Пока пусто, но позже добавим
КонецПроцедуры
Из skillbox.ru видно: для ТЧ используют похожий синтаксис на ТаблицуЗначений, с циклами по строкам.
Хотите ускорить? Скопируйте структуру из типового “Реализация товаров” — там уже есть ТЧ “Товары”.
Автоподстановка цены при выборе товара в табличной части
Вот где 1с табличная часть программно оживает. Создайте форму документа: свойства документа → “Формы” → “ФормаДокумента” → “Создать”. В форме перетащите реквизиты и ТЧ на форму — 1С сам сделает поля ввода.
Для поля “Товар” в ТЧ (элемент формы ТоварыТовар) свойства → События → “ПриИзменении” или “ОбработкаВыбора”:
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ЗначениеЗаполнено(ТекущиеДанные.Товар) Тогда
ТекущиеДанные.Цена = ПолучитьЦенуТовара(ТекущиеДанные.Товар);
ТоварыТоварыПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор());
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьЦенуТовара(Товар)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Цена ИЗ Справочник.Товары ГДЕ Ссылка = &Товар";
Запрос.УстановитьПараметр("Товар", Товар);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Это тянет цену из справочника. Аналогично 4dk.ru — запрос к регистру цен, но для справочника проще.
Пересчет суммы при изменении кол-ва или цены
Просто: для полей Цена и Кол-во в ТЧ добавьте “ПриИзменении”:
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
ТекущиеДанные.Сумма = ТекущиеДанные.Цена * ТекущиеДанные.КолВо;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКолВоПриИзменении(Элемент)
// Аналогично, пересчет Сумма
КонецПроцедуры
На сервере обновите клиент: вызовите серверную процедуру. Для итогов в подвале ТЧ (свойства ТЧ → Итоги) — Сумма с “Сумма”. Теперь 1с заполнение табличной части автоматическое. По tnsoft.ru, такие обработки копируют данные из других ТЧ, но здесь хватит событий.
А если много строк? Цикл по ТЧ пересчитает все:
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.КолВо;
КонецЦикла;
Настройка формы документа для работы с табличной частью
Форма — ключ к удобству 1с строка табличной части. Добавьте реквизит формы “ИтогСумма” (Число). В “ПриИзменении” ТЧ:
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
РассчитатьИтог();
КонецПроцедуры
&НаСервере
Процедура РассчитатьИтог()
Объект.ИтогСумма = Объект.Товары.Итог("Сумма");
КонецПроцедуры
Команда “Заполнить” — подберите товары обработкой. Для 1с табличная часть добавить кнопку “Добавить строку”: НоваяСтрока = Объект.Товары.Добавить();.
Из itsvsem.ru видно: типовые документы так и работают — события на клиенте, логика на сервере.
Создание макета печатной формы накладной
1с макет печатной формы — в свойствах документа “Макеты” → “Добавить” → “ТабличныйДокумент”. Откройте дизайнер: шапка с “Клиент”, таблица для ТЧ, подвал с итогом.
В модуле менеджера документа (не объекта!) процедура Печать:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Код для заполнения
КонецПроцедуры
Или проще — внешняя обработка: 1cvp.ru рекомендует для типовых. В “Печать” создайте ТабДок, скопируйте ТЧ:
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Клиент = Документ.Клиент;
ТабДок.Вывести(ОбластьШапка);
Для строк ТЧ — цикл с сортировкой (далее).
Сортировка строк в печатной форме по выбору пользователя
Добавьте в форму реквизит “Сортировка” (Строка: “ДлинаНаименования”, “Наименование”, “Цена”). Кнопка “Печать” передаст параметр.
В процедуре Печать на сервере:
ТоварыПечать = Документ.Товары.Выгрузить();
ТоварыПечать.Сортировать(ПараметрыПечати.Сортировка); // "Цена Возр" и т.д.
Для Каждого Строка Из ТоварыПечать Цикл
Если Сортировка = "ДлинаНаименования" Тогда
Строка.Длина = СтрДлина(Строка.Товар.Наименование);
ТоварыПечать.Сортировать("Длина Возр");
КонецЕсли;
// Вывод в ТабДок
ОбластьСтрока.Параметры.Заполнить(Строка);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Для длины — вычисляемая колонка в ТаблицеЗначений. По efsol.ru, в ERP так добавляют макеты без типовых правок. Пользователь выбирает в форме — и вуаля, строки упорядочены по возрастанию.
Тестирование и распространенные ошибки
Создайте тестовый заказ: клиент, добавьте товары — цена подставится? Сумма пересчитается? Печать с разными сортировками? Проверьте в отладчике (F9 на процедурах).
Ошибки:
- Клиентские события не видят серверные данные — используйте
ЭтотОбъект.Объект. - Сортировка не работает — проверьте имена колонок.
- Печать не появляется — зарегистрируйте в “ПечатныеФормы” справочника.
Из 42clouds.com — для нетиповых случаев “Операция вручную”, но ваш документ типовой.
Обновите конфигурацию, запустите предприятие — готово!
Источники
- Klerk.ru: Счет-фактура в 1С
- ItsVsem.ru: Поступление товаров в 1С
- 42Clouds.com: Операция вручную
- BuhSoft.ru: Учет ТМЦ
- TnSoft.ru: Заполнение ТЧ
- Skillbox.ru: Таблица значений
- EfSol.ru: Печатные формы ERP
- 1CVP.ru: Печатные формы
- 4DK.ru: Автозаполнение цен
- 42Clouds.com: Установка цен
- RBS-CRM.ru: Табличная часть
Заключение
Реализация документа 1С с табличной частью, автоподстановкой и печатной формой — это комбо из конфигуратора, клиент-серверных событий и макетов, как в типовых решениях. Вы получите полноценную накладную с сортировкой — протестируйте на паре заказов, и задание сдано. Если конфигурация заблокирована, используйте расширение или внешние обработки, чтобы не трогать типовой код. Удачи в 1С-разработке!