Программирование

Создать документ в 1С 8.3 с табличной частью и печатной формой

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

1 ответ 1 просмотр

Как реализовать вторую часть задания по работе с документами в 1С: создание документа с реквизитами, табличной частью и печатной формой?

Описание задания:

1. Справочники (первая часть выполнена):

  • Товары:
  • Основное представление: наименование (длина 100).
  • Реквизит: Цена (15.2).
  • Перед записью: проверка уникальности наименования, при дубликате — запрет записи с сообщением.
  • Клиенты:
  • Основное представление: наименование (длина 100).

2. Документы (вторая часть):

  • Реквизиты: Клиент (справочник «Клиенты»).
  • Табличная часть: Товар (справочник «Товары»), Цена, Кол-во, Сумма.
  • При выборе товара: автоматическая подстановка цены из справочника.
  • При изменении количества или цены: пересчет суммы.
  • Печатная форма накладной: строки упорядочиваются по выбору пользователя (по возрастанию):
  • по длине наименования товара;
  • по наименованию товара;
  • по цене.

Правильно ли понимать, что во второй части нужно создать новый документ на основе указанных справочников с этими реквизитами и функционалом? Как это реализовать шаг за шагом в 1С?

В 1С 8.3 создание документа с реквизитами, табличной частью и печатной формой — это стандартная задача для типовых конфигураций вроде БП или УТ. Вы правильно поняли: на базе справочников “Товары” и “Клиенты” нужно в конфигураторе добавить новый документ (скажем, “ЗаказКлиента”), с реквизитом “Клиент”, ТЧ “Товары” (Товар, Цена, Кол-во, Сумма), автоподстановкой цены из справочника, пересчетом суммы и макетом накладной с сортировкой строк по длине наименования, наименованию или цене. Всё реализуется через события форм, модули объекта и табличный документ — займёт пару часов, если конфигурация не заблокирована.


Содержание


Создание документа в конфигураторе 1С 8.3

Сначала откройте конфигуратор 1С — это база всего. Перейдите в ветку “Документы”, правой кнопкой — “Добавить”. Назовите его “ЗаказКлиента” (или как в задании), нумерация по организации, стандартные флаги: “Вводится на основании” отключите пока, “Проведение” — “Разрешить”.

Почему именно так? Документы 1С 8.3 хранят движения по регистрам, но для вашего случая хватит базовой структуры без регистров — просто реквизиты и ТЧ. Сохраните, обновите конфигурацию. Теперь документ появится в предприятии: “Продажи” → “Заказы клиентов” (настройте в подсистемах).

А если справочники уже есть? Идеально — ссылки на них подставятся автоматически. По данным rbs-crm.ru, табличные части в документах создаются как вложенные объекты, что упрощает жизнь.


Добавление реквизитов и табличной части документа

В свойствах документа кликните “Реквизиты” — добавьте “Клиент” типа СправочникСсылка.Клиенты. Далее “Табличные части” → “Добавить” → “Товары”. В ней колонки:

  • Товар: СправочникСсылка.Товары
  • Цена: Число, длина 15, точность 2
  • Кол-во: Число, 10, 3 (или по заданию)
  • Сумма: Число, 15, 2

Сохраните. Это основа 1с табличная часть — она как мини-таблица с методами вроде Очистить(), Добавить(). В модуле объекта документа (правой кнопкой → “Открыть модуль”) можно уже программно заполнять:

bsl
Процедура ОбработкаПроведения(Отказ, Режим)
 // Пока пусто, но позже добавим
КонецПроцедуры

Из skillbox.ru видно: для ТЧ используют похожий синтаксис на ТаблицуЗначений, с циклами по строкам.

Хотите ускорить? Скопируйте структуру из типового “Реализация товаров” — там уже есть ТЧ “Товары”.


Автоподстановка цены при выборе товара в табличной части

Вот где 1с табличная часть программно оживает. Создайте форму документа: свойства документа → “Формы” → “ФормаДокумента” → “Создать”. В форме перетащите реквизиты и ТЧ на форму — 1С сам сделает поля ввода.

Для поля “Товар” в ТЧ (элемент формы ТоварыТовар) свойства → События → “ПриИзменении” или “ОбработкаВыбора”:

bsl
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
 ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
 Если ЗначениеЗаполнено(ТекущиеДанные.Товар) Тогда
 ТекущиеДанные.Цена = ПолучитьЦенуТовара(ТекущиеДанные.Товар);
 ТоварыТоварыПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор());
 КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьЦенуТовара(Товар)
 Запрос = Новый Запрос;
 Запрос.Текст = "ВЫБРАТЬ Цена ИЗ Справочник.Товары ГДЕ Ссылка = &Товар";
 Запрос.УстановитьПараметр("Товар", Товар);
 Выборка = Запрос.Выполнить().Выбрать();
 Если Выборка.Следующий() Тогда
 Возврат Выборка.Цена;
 Иначе
 Возврат 0;
 КонецЕсли;
КонецФункции

Это тянет цену из справочника. Аналогично 4dk.ru — запрос к регистру цен, но для справочника проще.


Пересчет суммы при изменении кол-ва или цены

Просто: для полей Цена и Кол-во в ТЧ добавьте “ПриИзменении”:

bsl
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
 ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
 ТекущиеДанные.Сумма = ТекущиеДанные.Цена * ТекущиеДанные.КолВо;
КонецПроцедуры

&НаКлиенте
Процедура ТоварыКолВоПриИзменении(Элемент)
 // Аналогично, пересчет Сумма
КонецПроцедуры

На сервере обновите клиент: вызовите серверную процедуру. Для итогов в подвале ТЧ (свойства ТЧ → Итоги) — Сумма с “Сумма”. Теперь 1с заполнение табличной части автоматическое. По tnsoft.ru, такие обработки копируют данные из других ТЧ, но здесь хватит событий.

А если много строк? Цикл по ТЧ пересчитает все:

bsl
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
 СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.КолВо;
КонецЦикла;

Настройка формы документа для работы с табличной частью

Форма — ключ к удобству 1с строка табличной части. Добавьте реквизит формы “ИтогСумма” (Число). В “ПриИзменении” ТЧ:

bsl
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
 РассчитатьИтог();
КонецПроцедуры

&НаСервере
Процедура РассчитатьИтог()
 Объект.ИтогСумма = Объект.Товары.Итог("Сумма");
КонецПроцедуры

Команда “Заполнить” — подберите товары обработкой. Для 1с табличная часть добавить кнопку “Добавить строку”: НоваяСтрока = Объект.Товары.Добавить();.

Из itsvsem.ru видно: типовые документы так и работают — события на клиенте, логика на сервере.


Создание макета печатной формы накладной

1с макет печатной формы — в свойствах документа “Макеты” → “Добавить” → “ТабличныйДокумент”. Откройте дизайнер: шапка с “Клиент”, таблица для ТЧ, подвал с итогом.

В модуле менеджера документа (не объекта!) процедура Печать:

bsl
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
 // Код для заполнения
КонецПроцедуры

Или проще — внешняя обработка: 1cvp.ru рекомендует для типовых. В “Печать” создайте ТабДок, скопируйте ТЧ:

bsl
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Клиент = Документ.Клиент;
ТабДок.Вывести(ОбластьШапка);

Для строк ТЧ — цикл с сортировкой (далее).


Сортировка строк в печатной форме по выбору пользователя

Добавьте в форму реквизит “Сортировка” (Строка: “ДлинаНаименования”, “Наименование”, “Цена”). Кнопка “Печать” передаст параметр.

В процедуре Печать на сервере:

bsl
ТоварыПечать = Документ.Товары.Выгрузить();
ТоварыПечать.Сортировать(ПараметрыПечати.Сортировка); // "Цена Возр" и т.д.

Для Каждого Строка Из ТоварыПечать Цикл
 Если Сортировка = "ДлинаНаименования" Тогда
 Строка.Длина = СтрДлина(Строка.Товар.Наименование);
 ТоварыПечать.Сортировать("Длина Возр");
 КонецЕсли;
 // Вывод в ТабДок
 ОбластьСтрока.Параметры.Заполнить(Строка);
 ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

Для длины — вычисляемая колонка в ТаблицеЗначений. По efsol.ru, в ERP так добавляют макеты без типовых правок. Пользователь выбирает в форме — и вуаля, строки упорядочены по возрастанию.


Тестирование и распространенные ошибки

Создайте тестовый заказ: клиент, добавьте товары — цена подставится? Сумма пересчитается? Печать с разными сортировками? Проверьте в отладчике (F9 на процедурах).

Ошибки:

  • Клиентские события не видят серверные данные — используйте ЭтотОбъект.Объект.
  • Сортировка не работает — проверьте имена колонок.
  • Печать не появляется — зарегистрируйте в “ПечатныеФормы” справочника.

Из 42clouds.com — для нетиповых случаев “Операция вручную”, но ваш документ типовой.

Обновите конфигурацию, запустите предприятие — готово!


Источники

  1. Klerk.ru: Счет-фактура в 1С
  2. ItsVsem.ru: Поступление товаров в 1С
  3. 42Clouds.com: Операция вручную
  4. BuhSoft.ru: Учет ТМЦ
  5. TnSoft.ru: Заполнение ТЧ
  6. Skillbox.ru: Таблица значений
  7. EfSol.ru: Печатные формы ERP
  8. 1CVP.ru: Печатные формы
  9. 4DK.ru: Автозаполнение цен
  10. 42Clouds.com: Установка цен
  11. RBS-CRM.ru: Табличная часть

Заключение

Реализация документа 1С с табличной частью, автоподстановкой и печатной формой — это комбо из конфигуратора, клиент-серверных событий и макетов, как в типовых решениях. Вы получите полноценную накладную с сортировкой — протестируйте на паре заказов, и задание сдано. Если конфигурация заблокирована, используйте расширение или внешние обработки, чтобы не трогать типовой код. Удачи в 1С-разработке!

Авторы
Проверено модерацией
Модерация