В процессе работы с системой 1С:ERP Управление предприятием 2.4 специалисты часто сталкиваются с ситуацией, когда в типовых документах, таких как Этап производства, появляются дополнительные колонки, не предусмотренные стандартной конфигурацией. Одной из таких колонок является «Стоимость» в табличной части «Трудозатраты». Поскольку в типовом решении финансовая оценка работ происходит только в момент закрытия месяца, наличие оперативной стоимости в документе всегда свидетельствует о внесенных изменениях. В этой статье мы подробно разберем, как найти источник заполнения этой колонки и понять логику её работы.
Для начала проанализируем стандартное поведение системы. В типовой конфигурации 1С:ERP 2.4 (и более новых версиях) документ ЭтапПроизводства2_2 в табличной части Трудозатраты содержит информацию о виде работ, исполнителе и количестве (в часах или других единицах). Однако поле Стоимость в структуре метаданных документа отсутствует. Это связано с архитектурой программы: себестоимость выпуска, включая затраты на оплату труда, рассчитывается регламентным заданием «Расчет себестоимости» на основании данных регистра сведений Расценки работ сотрудников.
Если вы видите колонку «Стоимость» непосредственно в форме документа, значит, в вашей информационной базе реализован один из механизмов кастомизации. Рассмотрим основные варианты, где может «прятаться» этот функционал.
В современных версиях 1С:Предприятие расширения являются приоритетным способом внесения изменений. Проанализируем, как найти добавленный реквизит в расширении:
прф_Стоимость или ит_Стоимость.ЭтапПроизводства2_2 в этих расширениях. Если документ заимствован, развернем его табличную часть Трудозатраты. Именно там вы сможете увидеть добавленный реквизит.Если реквизит найден в расширении, его заполнение может происходить в модуле этого же расширения. Проанализируем обработчики событий в модуле формы или подписки на события ПриЗаписи или ПередЗаписью.
Бывают случаи, когда данные не сохраняются в базу данных, а рассчитываются «на лету» только для отображения пользователю. В этом случае реквизита нет ни в основном документе, ни в расширении как объекта метаданных. Разберем, как проверить наличие программного реквизита формы:
Если в поле «Путь к данным» указано просто Стоимость (без префикса Объект.Трудозатраты.), это означает, что реквизит создан программно в самой форме. Чтобы найти код, который его заполняет, нам необходимо изучить модуль формы в конфигураторе, обращая внимание на следующие процедуры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Здесь может добавляться реквизит формы программно
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// Здесь часто прописывается логика расчета стоимости при открытии документа
Для Каждого СтрокаТЗ Из Объект.Трудозатраты Цикл
// Пример возможного кода расчета:
СтрокаТЗ.Стоимость = РасчетСебестоимостиСервер.ПолучитьСтоимостьВидаРабот(СтрокаТЗ.ВидРабот, Объект.Дата);
КонецЦикла;
КонецПроцедуры
Система 1С:ERP позволяет добавлять новые поля без программирования через механизм дополнительных реквизитов и сведений. Выясним, не является ли «Стоимость» таким реквизитом:
Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения. Если для документа «Этап производства» (Трудозатраты) добавлен реквизит «Стоимость», он будет отображаться в форме. Однако стоит учитывать, что стандартный механизм доп. реквизитов не умеет сам рассчитывать значения (например, умножать количество на тариф). Если значение заполняется автоматически, значит, к доп. реквизиту «привязан» какой-то программный код в расширении.
Если вы не уверены, где именно хранятся данные, воспользуемся Консолью запросов. Это самый надежный способ проверить физическое наличие поля в таблицах базы данных. Рассмотрим алгоритм действий:
Документ.ЭтапПроизводства2_2.Трудозатраты.Важный нюанс: Чтобы увидеть поля из расширений в консоли, убедитесь, что вы используете современную версию консоли, которая работает в контексте текущего сеанса со всеми подключенными расширениями. Если поле имеет префикс, ищите его в конце списка полей таблицы.
Чаще всего логика заполнения стоимости в «Этапе производства» опирается на типовой регистр сведений РасценкиРаботСотрудников. Проанализируем пример кода, который может использоваться для получения этих данных:
Функция ПолучитьСтоимостьРаботы(ВидРабот, ДатаДокумента) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасценкиРаботСотрудниковСрезПоследних.Расценка КАК Расценка
|ИЗ
| РегистрСведений.РасценкиРаботСотрудников.СрезПоследних(&Период, ВидРабот = &ВидРабот) КАК РасценкиРаботСотрудниковСрезПоследних";
Запрос.УстановитьПараметр("Период", ДатаДокумента);
Запрос.УстановитьПараметр("ВидРабот", ВидРабот);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Расценка;
КонецЕсли;
Возврат 0;
КонецФункции
Если в вашем документе стоимость меняется сразу при выборе Вида работ или изменении Количества, ищите обработчики событий ПриИзменении на уровне элементов формы табличной части.
Если обычный поиск по конфигурации (Ctrl+Shift+F) по слову «Стоимость» выдает слишком много результатов или не выдает их вовсе, попробуем применить метод Замера производительности:
Этап производства.Проанализируем результаты замера: ищите функции, в названии которых встречаются слова Расчитать, Заполнить, Цена или Стоимость. Обращайте внимание на модули, путь к которым начинается с Расширение_.... Это позволит вам точно определить место, где инициализируется расчет.
Подведем итог: колонка «Стоимость» в трудозатратах ERP 2.4 — это всегда признак кастомизации. Она либо добавлена как реквизит в расширении (и тогда видна в консоли запросов), либо создана как программный элемент формы (и тогда она существует только в коде модуля формы). Использование инструментов отладки и внимательный анализ пути к данным в свойствах формы позволят вам быстро найти и при необходимости скорректировать логику её заполнения.