От обучения к работе

Учебный проект на 1С:
учёт заказов небольшой мастерской

Соберём одну законченную цепочку: клиент принёс заказ, оператор добавил работы, программа проверила строки, сохранила документ и показала печатную форму. Каждая глава даёт проверяемый результат.

Учебный заказ мастерской в 1С: клиент, две работы, суммы 1000 и 750, итог 1750
  • Объекты и форма с нуля
  • Проверка до записи
  • Печать сохранённого заказа
  • Сценарии для демонстрации в портфолио
Содержание

Глава 1. Зафиксируйте границы

Это авторский учебный проект, а не готовая программа для настоящей мастерской. Нет налогового учёта, складских движений, оплаты, разграничения ролей и фискальных документов. Печать — учебная ведомость заказа, не юридический бланк.

Правила простые: клиент выбран, есть хотя бы одна работа, у каждой работы выбрана услуга, количество больше нуля, цена неотрицательная. Бесплатная работа допустима. Сумма строки округляется до двух знаков; итог складывается из округлённых сумм строк.

Учебный заказ мастерской в 1С: клиент, две работы, суммы 1000 и 750, итог 1750
Вот предмет проекта: один клиент, две работы и общий итог 1750. Это реальный записанный документ в нашей учебной базе, показанный в автоматически созданной форме. Кнопку печати и оформление своей формы добавим отдельно; снимок не изображает готовое решение всех глав.

Глава 2. Создайте объекты

Создайте пустую файловую учебную базу и откройте конфигурацию. Выберите управляемое приложение. Добавьте подсистему «Мастерская». Справочники и документ ниже включите в эту подсистему, чтобы их команды были доступны в предприятии.

У справочников оставьте стандартные код и наименование, длину наименования задайте 100. У документа запретите проведение: в этом проекте он только записывается. Не добавляйте регистры, которые потом никто не заполняет.

Точная структура учебной конфигурации
ОбъектРеквизиты
Справочник КлиентыКод, Наименование
Справочник УслугиКод, Наименование
Документ ЗаказМастерскойКлиент: СправочникСсылка.Клиенты; СуммаЗаказа: Число(15,2)
Табличная часть РаботыУслуга: СправочникСсылка.Услуги; Количество: Число(10,3); Цена: Число(10,2); Сумма: Число(15,2)

Глава 3. Соберите форму

Создайте основную управляемую форму документа. Перетащите Объект.Клиент и табличную часть Объект.Работы в элементы формы. Выведите четыре колонки работ. Сумму строки и СуммаЗаказа сделайте доступными только для просмотра.

Оставьте штатную команду записи. Добавьте собственную команду «ПечатьЗаказа» и кнопку для неё. Пока не связывайте расчёт только с изменением поля: тогда программная запись могла бы сохранить другой итог. Главная проверка будет в модуле объекта.

Глава 4. Проверьте и рассчитайте перед записью

В модуле объекта документа создайте обработчик ПередЗаписью с тремя параметрами и вставьте код ниже. Это не модуль формы. Сначала проверяются все строки, и только после успешной проверки пересчитываются суммы.

При любой ошибке Отказ останавливает запись. Итог клиента не принимается на веру: сервер считает его заново. Если в документе уже есть этот обработчик, объедините логику в одной процедуре, а не создавайте вторую с тем же именем.

Модуль объекта документа ЗаказМастерской
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Не ЗначениеЗаполнено(Клиент) Тогда
        Сообщить("Выберите клиента.");
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    Если Работы.Количество() = 0 Тогда
        Сообщить("Добавьте хотя бы одну работу.");
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    Для Каждого Работа Из Работы Цикл
        Если Не ЗначениеЗаполнено(Работа.Услуга)
            Или Работа.Количество <= 0 Или Работа.Цена < 0 Тогда
            Сообщить("Проверьте услугу, количество и цену в строке "
                + Работа.НомерСтроки);
            Отказ = Истина;
            Возврат;
        КонецЕсли;
    КонецЦикла;
    СуммаЗаказа = 0;
    Для Каждого Работа Из Работы Цикл
        Работа.Сумма = Окр(Работа.Количество * Работа.Цена, 2);
        СуммаЗаказа = СуммаЗаказа + Работа.Сумма;
    КонецЦикла;
КонецПроцедуры

Глава 5. Покажите сохранённый заказ

В модуле формы разместите код печати. В свойстве «Действие» команды ПечатьЗаказа выберите одноимённый клиентский обработчик. Сначала документ должен быть записан; несохранённые изменения блокируют печать.

Сервер получает сохранённый объект и формирует табличный документ. Настройку ширины колонок и шрифта можно сделать следующим упражнением. Для первого результата достаточно проверить, что каждая работа появилась один раз, а итог совпал с записанным заказом.

Модуль управляемой формы документа
&НаКлиенте
Процедура ПечатьЗаказа(Команда)
    Если Модифицированность Или Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
        Сообщить("Сначала запишите заказ.");
        Возврат;
    КонецЕсли;
    ТабДок = ПечатьНаСервере();
    ТабДок.Показать("Заказ мастерской");
КонецПроцедуры

&НаСервере
Функция ПечатьНаСервере()
    Заказ = Объект.Ссылка.ПолучитьОбъект();
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Область(1, 1).Текст = "Учебный заказ № " + Заказ.Номер;
    ТабДок.Область(2, 1).Текст = "Клиент: " + Строка(Заказ.Клиент);
    ТабДок.Область(4, 1).Текст = "Работа";
    ТабДок.Область(4, 2).Текст = "Количество";
    ТабДок.Область(4, 3).Текст = "Цена";
    ТабДок.Область(4, 4).Текст = "Сумма";
    Номер = 5;
    Для Каждого Работа Из Заказ.Работы Цикл
        ТабДок.Область(Номер, 1).Текст = Строка(Работа.Услуга);
        ТабДок.Область(Номер, 2).Текст = Строка(Работа.Количество);
        ТабДок.Область(Номер, 3).Текст = Строка(Работа.Цена);
        ТабДок.Область(Номер, 4).Текст = Строка(Работа.Сумма);
        Номер = Номер + 1;
    КонецЦикла;
    ТабДок.Область(Номер, 3).Текст = "Итого";
    ТабДок.Область(Номер, 4).Текст = Строка(Заказ.СуммаЗаказа);
    Возврат ТабДок;
КонецФункции

Глава 6. Проверьте результат

Обновите конфигурацию базы данных. Добавьте клиента «Учебный клиент» и две услуги: «Чистка» и «Настройка». Создайте заказ: чистка 2 × 500 и настройка 1 × 750. Запишите, закройте и откройте заново. Ожидаются суммы 1000, 750 и итог 1750.

Нажмите печать: обе строки и 1750 должны совпасть. Затем измените количество, не записывая документ: печать должна попросить запись. После записи и повторного открытия проверьте новый итог.

Обязательные проверки проекта
СценарийОжидание
Нет клиента или строкОтказ в записи
Количество 0 или −1Отказ в записи
Цена −1Отказ в записи
Цена 0, количество 1Допустимая бесплатная работа
Количество 0,333, цена 1,00Сумма строки 0,33: произведение округляется до 2 знаков
Повторная запись без измененияИтог не удваивается
Закрытие и новое открытиеСтроки и итог сохранены

Глава 7. Опишите работу честно

В портфолио напишите: «Учебный проект: заказ мастерской. Создал справочники и документ, форму ввода, серверную проверку перед записью и печатную ведомость. Проверил ошибочный ввод, повторную запись и повторное открытие».

Приложите схему объектов, код двух модулей и список проверок с вашими результатами. Не называйте проект внедрением у заказчика. Для демонстрации используйте только учебные наименования, без телефонов и адресов настоящих людей.

Следующий самостоятельный шаг — добавить состояние заказа и запретить изменение закрытого заказа по согласованному правилу. Сначала запишите переходы состояний и проверки, затем меняйте код.

Самопроверка

Частые вопросы

Это полноценный бухгалтерский учёт?

Нет. Это законченный учебный сценарий ввода, расчёта, записи и печати заказа без бухгалтерских и складских движений.

Почему расчёт не только на форме?

Проверка в объекте документа защищает обычную запись независимо от того, как были заполнены поля формы.

Можно указать проект как коммерческий опыт?

Нет. Укажите его отдельным учебным проектом и покажите самостоятельно выполненную работу.

Первичные источники

Что проверить дополнительно

·

Полезный материал

Поделиться статьёй

Сохраните материал или отправьте его тому, кому он пригодится.

Шаг 5 из 5

Формы 1С: от первой кнопки до сохранения заказа

Следующий шаг

Хотите пройти путь с обратной связью?

В программе менторства есть теория, практика и разбор решений. Посмотрите, подходит ли такой формат вашей цели.

Посмотреть менторство →