Как найти источник данных для колонки «Стоимость» в трудозатратах документа «Этап производства» в 1С:ERP 2.4?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

В процессе работы с системой 1С:ERP Управление предприятием 2.4 специалисты часто сталкиваются с ситуацией, когда в типовых документах, таких как Этап производства, появляются дополнительные колонки, не предусмотренные стандартной конфигурацией. Одной из таких колонок является «Стоимость» в табличной части «Трудозатраты». Поскольку в типовом решении финансовая оценка работ происходит только в момент закрытия месяца, наличие оперативной стоимости в документе всегда свидетельствует о внесенных изменениях. В этой статье мы подробно разберем, как найти источник заполнения этой колонки и понять логику её работы.

Анализ типового решения и выявление доработок

Для начала проанализируем стандартное поведение системы. В типовой конфигурации 1С:ERP 2.4 (и более новых версиях) документ ЭтапПроизводства2_2 в табличной части Трудозатраты содержит информацию о виде работ, исполнителе и количестве (в часах или других единицах). Однако поле Стоимость в структуре метаданных документа отсутствует. Это связано с архитектурой программы: себестоимость выпуска, включая затраты на оплату труда, рассчитывается регламентным заданием «Расчет себестоимости» на основании данных регистра сведений Расценки работ сотрудников.

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

Вариант 1: Расширение конфигурации

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

  1. Откроем список расширений в режиме конфигуратора (меню «Конфигурация» — «Расширения конфигурации»).
  2. Обратим внимание на префиксы. Если поле добавлено через расширение, оно, скорее всего, имеет уникальный префикс, например, прф_Стоимость или ит_Стоимость.
  3. Проверим заимствование документа ЭтапПроизводства2_2 в этих расширениях. Если документ заимствован, развернем его табличную часть Трудозатраты. Именно там вы сможете увидеть добавленный реквизит.

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

Вариант 2: Вычисляемый реквизит формы

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

  1. Зайдем в документ в режиме «1С:Предприятие».
  2. Нажмем кнопку «Еще» — «Изменить форму».
  3. В дереве элементов найдем колонку «Стоимость» и посмотрим на свойство Путь к данным.

Если в поле «Путь к данным» указано просто Стоимость (без префикса Объект.Трудозатраты.), это означает, что реквизит создан программно в самой форме. Чтобы найти код, который его заполняет, нам необходимо изучить модуль формы в конфигураторе, обращая внимание на следующие процедуры:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Здесь может добавляться реквизит формы программно
КонецПроцедуры

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

Вариант 3: Механизм дополнительных реквизитов

Система 1С:ERP позволяет добавлять новые поля без программирования через механизм дополнительных реквизитов и сведений. Выясним, не является ли «Стоимость» таким реквизитом:

Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения. Если для документа «Этап производства» (Трудозатраты) добавлен реквизит «Стоимость», он будет отображаться в форме. Однако стоит учитывать, что стандартный механизм доп. реквизитов не умеет сам рассчитывать значения (например, умножать количество на тариф). Если значение заполняется автоматически, значит, к доп. реквизиту «привязан» какой-то программный код в расширении.

Как использовать консоль запросов для поиска

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

  1. Запустим консоль запросов в режиме «1С:Предприятие».
  2. В конструкторе запроса выберем таблицу Документ.ЭтапПроизводства2_2.Трудозатраты.
  3. Посмотрим список доступных полей. Если среди них есть «Стоимость», значит, это реальный реквизит объекта.

Важный нюанс: Чтобы увидеть поля из расширений в консоли, убедитесь, что вы используете современную версию консоли, которая работает в контексте текущего сеанса со всеми подключенными расширениями. Если поле имеет префикс, ищите его в конце списка полей таблицы.

Связь с регистром «Расценки работ сотрудников»

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


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

Если в вашем документе стоимость меняется сразу при выборе Вида работ или изменении Количества, ищите обработчики событий ПриИзменении на уровне элементов формы табличной части.

Рекомендации по поиску «невидимого» кода

Если обычный поиск по конфигурации (Ctrl+Shift+F) по слову «Стоимость» выдает слишком много результатов или не выдает их вовсе, попробуем применить метод Замера производительности:

  1. Откройте форму документа Этап производства.
  2. Включите замер производительности в конфигураторе (Отладка — Замер производительности).
  3. Измените количество в строке трудозатрат или перевыберите вид работ (чтобы сработал пересчет).
  4. Остановите замер и проанализируйте дерево вызовов.

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

Подведем итог: колонка «Стоимость» в трудозатратах ERP 2.4 — это всегда признак кастомизации. Она либо добавлена как реквизит в расширении (и тогда видна в консоли запросов), либо создана как программный элемент формы (и тогда она существует только в коде модуля формы). Использование инструментов отладки и внимательный анализ пути к данным в свойствах формы позволят вам быстро найти и при необходимости скорректировать логику её заполнения.

← На главную