Где находится документ «Передача сырья в переработку» в конфигураторе 1С:Бухгалтерия?

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

При получении задач по доработке конфигурации «1С:Бухгалтерия предприятия 3.0» начинающие разработчики часто сталкиваются с неочевидной архитектурной особенностью платформы. Получив задание настроить или изменить документ «Передача сырья в переработку», программист открывает конфигуратор, пытается найти его через глобальный поиск или в дереве метаданных, но не обнаруживает объекта с таким именем.

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

Архитектурная концепция: почему документа нет в метаданных?

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

Физической сущностью в конфигураторе для операции передачи давальческого сырья является документ Документ.ПередачаТоваров. Именно он отвечает за регистрацию всех движений по передаче материальных ценностей сторонним контрагентам без перехода права собственности.

Ключевой реквизит: ВидОперации

Разделение логики проведения, внешнего вида форм и состава печатных форм внутри документа Документ.ПередачаТоваров осуществляется программно в зависимости от значения реквизита ВидОперации.

Рассмотрим структуру этого механизма подробнее:

  1. Реквизит ВидОперации имеет ссылочный тип данных и указывает на перечисление Перечисление.ВидыОперацийПередачаТоваров.
  2. Для отражения передачи сырья переработчику используется значение перечисления ВПереработку (в кодовой базе это записывается как Перечисления.ВидыОперацийПередачаТоваров.ВПереработку).
  3. Если документ используется для передачи тары или других операций, реквизиту присваиваются иные значения этого же перечисления.

Как работает общая команда и открытие списков документов

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

  1. В ветке метаданных конфигуратора перейдем по пути: Общие -> Общие команды. Там находится команда с именем ОбщаяКоманда.ПередачаСырьяВПереработку.
  2. При нажатии пользователем на гиперссылку команды в интерфейсе «1С:Предприятие» система не просто открывает форму списка документов, а выполняет программный перехват.
  3. Программа открывает стандартную форму списка Документ.ПередачаТоваров.Форма.ФормаСписка, но сразу же применяет жесткий (фиксированный) отбор к динамическому списку формы по условию: ВидОперации = Перечисления.ВидыОперацийПередачаТоваров.ВПереработку.
  4. Благодаря этому механизму пользователь видит в открывшемся окне только документы, связанные с давальческим сырьем, хотя физически работает со списком документов передачи товаров.

Динамическое поведение формы документа

Проанализируем, как система перестраивает форму документа при его создании и редактировании. В самом документе Документ.ПередачаТоваров создана универсальная управляемая форма ФормаДокумента.

При создании нового документа из отфильтрованного списка (например, по кнопке «Создать») в форму передаются параметры автозаполнения. Система автоматически инициализирует реквизит ВидОперации значением ВПереработку.

В процессе открытия на сервере (в обработчике события ПриСозданииНаСервере) выполняется программный анализ текущего вида операции. В зависимости от этого форма динамически меняет свое состояние:

Практические советы по программной работе для разработчика

Если перед вами стоит задача разработать отчет по переданному сырью, выполнить пакетную загрузку документов из внешних систем или доработать логику проведения, вам необходимо следовать строгим правилам работы с документом Документ.ПередачаТоваров.

Написание запросов для получения данных

При написании запросов к базе данных вы не сможете обратиться к несуществующей таблице «ПередачаСырьяВПереработку». Вам всегда необходимо выбирать данные из таблицы передач товаров, обязательно накладывая условие на вид операции. Игнорирование этого правила приведет к тому, что в ваш отчет или обработку попадут совершенно другие операции (например, передача тары), что повлечет за собой искажение данных.

Рассмотрим пример правильного построения запроса в конфигураторе:


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

Программное создание и проведение документа

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

Разберем детальный пример программного создания документа передачи сырья в переработку:


// Шаг 1. Создаем объект нового документа
НовыйДокумент = Документы.ПередачаТоваров.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701020304");

// Шаг 2. Заполняем вид операции (это критически важно для работы обработчиков заполнения!)
НовыйДокумент.ВидОперации = Перечисления.ВидыОперацийПередачаТоваров.ВПереработку;

// Шаг 3. Инициализируем заполнение по умолчанию (заполнение счетов учета)
// Это автоматически проставит счет учета (например, 10.01) и счет передачи (10.07)
НовыйДокумент.Заполнить(Неопределено);

// Шаг 4. Наполняем табличную часть материалами
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000045");
НоваяСтрока.Количество = 150;

// При необходимости перезаписываем счета учета вручную, если это требуется по бизнес-логике
НоваяСтрока.СчетУчета = ПланыСчетов.Хозрасчетный.СырьеИМатериалы;
НоваяСтрока.СчетПередачи = ПланыСчетов.Хозрасчетный.МатериалыПереданныеВПереработку;

// Шаг 5. Записываем и проводим документ в базе данных
Попытка
    НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    ЗаписьЖурналаРегистрации("ПрограммноеСозданиеДокументов",
        УровеньЖурналаРегистрации.Ошибка,
        ,
        ,
        ОписаниеОшибки());
КонецПопытки;

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

← На главную