Как реализовать тестовое задание по учету товаров, цен и резервов в 1С 8.3 с нуля?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При вступлении на путь разработчика 1С часто встречается классическое тестовое задание: создать небольшую систему для складского учета. В этой статье мы разберем, как спроектировать архитектуру такой системы, какие объекты метаданных использовать и ответим на главный вопрос новичков — можно ли обойтись без программирования.

Можно ли выполнить задание без написания кода?

Сразу проясним важный момент: выполнить полноценное задание по оперативному учету без использования встроенного языка 1С невозможно. Хотя платформа предоставляет мощные визуальные инструменты для создания справочников и форм, бизнес-логика (проведение документов, контроль остатков, автоматический расчет цен) описывается строго в программных модулях. Рассмотрим подробнее, где именно потребуется код:

  1. Обработка проведения: Код необходим для записи движений в регистры накопления. Без этого отчеты будут пустыми.
  2. Контроль остатков: Чтобы программа не позволяла продать товар, которого нет на складе, нужно написать запрос к регистру в модуле документа.
  3. Автоматизация форм: Подстановка актуальной цены при выборе товара в накладной требует обращения к регистру сведений через программный код.

Проектирование структуры данных

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

Справочники:

Регистры (сердце системы):

Реализация документов и логики проведения

Разберем по шагам, какие документы нам нужны и как они должны влиять на регистры. Для поступления, списания и продажи мы будем использовать механизм проведения.

1. Поступление и оприходование: Эти документы должны делать "Приход" в регистр ОстаткиТоваров. Рассмотрим пример кода в модуле объекта документа:


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

2. Продажа товаров (Реализация): Здесь ситуация сложнее. Нам нужно не только сделать "Расход" по остаткам, но и проверить, хватает ли товара. Выясним причину, почему это важно: без контроля остатков система позволит продать бесконечное количество товара, что приведет к "отрицательным остаткам".

Реализация резервирования товара

Резервирование — это блокировка товара под конкретного клиента. Проанализируем самый надежный способ реализации этой функции через отдельный документ ЗаказПокупателя.

  1. При проведении Заказа создается движение "Приход" в регистр ТоварыВРезерве.
  2. При создании Продажи на основании заказа, документ должен делать "Расход" одновременно из ОстаткиТоваров и ТоварыВРезерве.
  3. Доступный остаток в отчете будет вычисляться как: ОстаткиТоваров.Остаток - ТоварыВРезерве.Остаток.

Работа с ценами номенклатуры

Для установки цен создадим документ УстановкаЦен. Он будет записывать данные в периодический регистр сведений. Это позволит нам хранить историю: например, знать, что до понедельника товар стоил 100 рублей, а после — 120.

Чтобы цена автоматически подставлялась в документ продажи при выборе товара, в модуле формы документа Реализация в событии ПриИзменении для поля Номенклатура нужно прописать получение актуальной цены:


&НаСервере
Функция ПолучитьАктуальнуюЦену(АктуальнаяДата, ВыбраннаяНоменклатура, ВыбранныйВидЦены)
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номенклатура", ВыбраннаяНоменклатура);
    ПараметрыОтбора.Вставить("ВидЦены", ВыбранныйВидЦены);
    
    ЗначенияРесурсов = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(АктуальнаяДата, ПараметрыОтбора);
    Если ЗначенияРесурсов.Количество() > 0 Тогда
        Возврат ЗначенияРесурсов[0].Цена;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции

Построение отчетов через СКД

Система компоновки данных (СКД) позволяет создавать сложные отчеты практически без программирования, используя визуальный конструктор запросов. Разберем создание основных отчетов:

Ведомость по товарам: Используем виртуальную таблицу ОстаткиИОбороты регистра ОстаткиТоваров. Она автоматически предоставит поля: НачальныйОстаток, Приход, Расход и КонечныйОстаток. Вам останется только вывести их в настройки отчета.

Остатки и доступность: В конструкторе запроса нужно соединить две таблицы: ОстаткиТоваров.Остатки и ТоварыВРезерве.Остатки. Соединение выполняется по полю Номенклатура (Левое соединение, чтобы видеть даже те товары, на которые нет резерва). Поле "Доступно" рассчитывается в самом запросе как разность ресурсов двух таблиц.

Прайс-лист: Здесь мы обращаемся к таблице ЦеныНоменклатуры.СрезПоследних. Это гарантирует, что в отчет попадут только самые свежие цены на дату формирования отчета.

Советы для успешного выполнения тестового задания

Рассмотрим несколько нюансов, которые покажут ваш профессионализм:

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

← На главную