При изучении основ разработки в системе 1С:Предприятие 8 по учебному пособию Максима Радченко многие начинающие разработчики сталкиваются с неожиданным поведением интерфейса на 12-м занятии. Суть проблемы заключается в том, что в табличной части документа ОказаниеУслуги рядом со стандартными полями Количество, Цена и Сумма внезапно появляется колонка Стоимость. Это вызывает путаницу, так как в интерфейсе, описанном в книге на данный момент, этого поля быть не должно.
В рамках данной статьи мы подробно разберем, почему система ведет себя именно так, проанализируем взаимосвязь метаданных и визуальных форм, а также изучим способы приведения интерфейса в соответствие с учебным планом.
Для начала проанализируем ситуацию с точки зрения архитектуры платформы. Появление поля Стоимость на 12-м занятии не является ошибкой программы. Это закономерный результат изменений, которые вносятся в конфигурацию при переходе к разделу бухгалтерского учета. Рассмотрим основные факторы, влияющие на это:
ОказаниеУслуги по новым регистрам. Если в процессе настройки регистра накопления (например, «Продажи» или «ОстаткиМатериалов») или регистра бухгалтерии был добавлен ресурс Стоимость, система может автоматически предложить добавить соответствующий реквизит в документ для хранения этих данных.ПереченьНоменклатуры в дереве метаданных, при следующем открытии или обновлении формы конструктор может «вытянуть» новое поле на экран.Сумма и Стоимость. В контексте учебника Радченко:
Сумма — это выручка (Цена × Количество), которую платит клиент.Стоимость — это себестоимость товара или материала, которая списывается со склада в рамках бухгалтерских проводок.Выясним причину появления поля в вашем конкретном случае. Скорее всего, при настройке проведения документа по регистру вы добавили реквизит Стоимость непосредственно в табличную часть объекта ОказаниеУслуги, чтобы записывать туда результат расчета себестоимости, и система отобразила его на форме.
Если реквизит в данных (в табличной части документа) вам необходим для программных расчетов, но вы не хотите показывать его пользователю (чтобы форма соответствовала образцу в книге), рассмотрим самый простой способ — изменение видимости или удаление элемента из состава элементов формы.
Выполним следующие шаги:
ОказаниеУслуги.ФормаДокумента.СписокНоменклатуры или ПереченьНоменклатуры).ПереченьНоменклатурыСтоимость (имя может немного отличаться).Del или выберем пункт Удалить в контекстном меню. Это действие удалит колонку только с визуального интерфейса, при этом сам реквизит в данных документа останется доступным для программного обращения.Важный момент: Если вы хотите оставить возможность вернуть колонку позже, вместо удаления можно просто снять галочку в свойстве Видимость на панели свойств выбранного элемента формы.
Проанализируем ситуацию глубже. Если колонка Стоимость вам не нужна даже для хранения данных, ее следует удалить из самой структуры объекта. Посмотрим, как это сделать правильно:
Документ.ОказаниеУслуги.ПереченьНоменклатуры и развернем ее реквизиты.Стоимость, которого нет в инструкциях к текущему шагу книги, выделим его и нажмем Удалить.После удаления реквизита из объекта система выдаст предупреждение о том, что данное поле используется на форме. Согласимся с обновлением формы. После этого лишняя колонка исчезнет автоматически.
Как отмечалось в сообщениях форума, часто путаница возникает из-за смешивания товаров и услуг в одной таблице. В учебнике Радченко на определенных этапах предлагается разделять номенклатуру по типам. Рассмотрим логику этого процесса:
Для товаров актуальна себестоимость (которую часто называют стоимостью), так как они имеют материальное выражение и числятся на складе. Для услуг понятие материальной себестоимости в том же виде отсутствует, поэтому колонка Стоимость в таблице услуг обычно не требуется.
Проверим код в модуле документа, который отвечает за расчет. Часто при заполнении цен используется подобная логика:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// Пример программного расчета, где может фигурировать стоимость
Для Каждого СтрокаТЧ Из ТекущийОбъект.ПереченьНоменклатуры Цикл
// Если поле Стоимость создано ошибочно, оно может заполняться здесь
// СтрокаТЧ.Стоимость = СтрокаТЧ.Количество * СтрокаТЧ.Цена;
КонецЦикла;
КонецПроцедуры
Если вы обнаружили подобный код, который обращается к реквизиту Стоимость, убедитесь, что вы не перепутали его с реквизитом Сумма. В типовых решениях и учебных примерах Сумма — это то, что мы выставляем покупателю, а Стоимость — это учетный показатель предприятия.
Чтобы в будущем избежать появления «лишних» элементов, проанализируем правила работы с конструктором. Когда вы создаете форму «с нуля», 1С предлагает выбрать реквизиты, которые будут на ней отображаться. Однако при ручном добавлении реквизитов в объект метаданных после того, как форма уже была создана, автоматического добавления на форму не происходит, пока вы не воспользуетесь командой Разместить на форме или не перетащите реквизит из правой панели редактора формы (закладка Реквизиты) в левую (закладка Элементы).
Рассмотрим ситуацию, когда поле появилось «само собой». Это случается, если вы использовали стандартную команду Установить стандартные настройки в контекстном меню формы в конфигураторе. Система сбрасывает все ваши ручные правки и выводит на экран все реквизиты, существующие в объекте на данный момент.
Подведем итог: Для исправления отображения в 12-м занятии Радченко вам необходимо:
Стоимость результатом вашей ошибки при создании реквизитов табличной части.ФормаДокумента.Таким образом, мы выяснили, что лишняя колонка — это не технический сбой, а следствие гибкости платформы 1С:Предприятие 8, которая старается синхронизировать структуру данных с пользовательским интерфейсом. Внимательное управление составом элементов формы позволит вам всегда держать интерфейс приложения в чистоте и порядке.