Добавление новых полей в существующие документы — одна из самых частых задач при адаптации типовых конфигураций 1С, таких как "Управление торговлей". Казалось бы, процедура стандартная: добавили реквизит в метаданные, вынесли на форму, и всё должно работать. Однако на практике программисты часто сталкиваются с ситуацией, когда в конфигураторе поле есть, а в режиме "Предприятие" оно отсутствует. В этой статье мы подробно разберем, как правильно добавить колонку "Штрихкод" в табличную часть документа "Приобретение товаров и услуг" и какие "подводные камни" могут помешать её отображению.
Первым делом нам необходимо создать сам контейнер для данных. Рассмотрим процесс добавления реквизита Штрихкод в табличную часть Товары. Проанализируем, какой тип данных лучше выбрать. Если мы планируем хранить только один штрихкод, тип Строка будет оптимальным. Однако помните, что в типовых решениях штрихкоды обычно хранятся в отдельном регистре сведений.
В дереве конфигурации находим документ ПриобретениеТоваровУслуг, переходим на вкладку "Данные", находим табличную часть Товары и добавляем новый реквизит. Указываем длину строки (обычно 13 или 128 символов для Code128).
После создания реквизита в объекте метаданных он не появится на форме автоматически (если не включено автозаполнение). Нам нужно открыть форму документа и выполнить следующие действия:
Объект, затем табличную часть Товары.Штрихкод и перетаскиваем его мышкой в структуру элементов формы, именно внутрь группы, представляющей таблицу Товары.Важный нюанс: Проверьте свойства созданного элемента формы. Путь к данным (ПутьКДанным) должен строго соответствовать нашему реквизиту, например: Объект.Товары.Штрихкод. Если вы создали реквизит формы (на вкладке "Реквизиты" формы), а не реквизит объекта, данные не будут сохраняться в базе данных после закрытия документа.
Если вы выполнили все действия, но колонка так и не появилась, одной из причин может быть закэшированность метаданных на стороне клиента. Платформа 1С оптимизирует работу, сохраняя структуру форм локально. Иногда эти данные не обновляются автоматически.
Рассмотрим, как принудительно обновить кэш. Самый простой способ — добавить параметр запуска в настройках информационной базы. В окне списка баз нажмите "Изменить", перейдите на последнюю вкладку и в поле "Дополнительные параметры запуска" впишите:
/ClearCache
Это заставит систему пересчитать структуру форм при следующем запуске. После успешного открытия документа параметр можно удалить.
В современных конфигурациях (УТ 11, ERP, КА 2) управление интерфейсом часто завязано на функциональные опции. Проанализируем ситуацию: если в настройках системы (раздел "НСИ и администрирование") выключена опция работы со штрихкодами, программа может программно скрывать любые поля, связанные с этой тематикой.
Выясним причину через конфигуратор. Проверьте свойство реквизита Функциональные опции. Если там указана какая-либо опция, убедитесь, что она включена в пользовательском режиме. В противном случае, даже наличие элемента на форме не гарантирует его видимость.
Программа 1С запоминает индивидуальные настройки каждого пользователя. Если вы или другой пользователь ранее заходили в меню "Еще — Изменить форму" и сохраняли настройки, то новые колонки, добавленные программистом позже, могут быть скрыты по умолчанию.
Чтобы исправить это, выполните в режиме "Предприятие" следующие действия:
Это сбросит настройки видимости и порядка колонок к тем, которые заданы в конфигураторе.
Часто в типовых решениях видимость колонок жестко прописана в коде модуля формы. Проанализируем процедуры ПриСозданииНаСервере или специальные вспомогательные методы, такие как УстановитьВидимостьУправлятьДоступностью.
Найдите в модуле формы код, который управляет элементами таблицы. Возможно, там есть цикл, который обходит все колонки и скрывает те, которые не входят в определенный массив. Пример кода, который может управлять видимостью:
&НаСервере
Процедура УстановитьВидимостьКолонок()
// Проверяем условие, например, права доступа или режим документа
Элементы.ТоварыШтрихкод.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьШтрихкоды");
КонецПроцедуры
Если вы добавляете колонку в учебных целях, убедитесь, что ваш новый элемент не скрывается подобными алгоритмами.
Просто добавить колонку недостаточно — она будет пустой. Чтобы штрихкод подтягивался автоматически при выборе номенклатуры, нам нужно дописать обработчик события. Разберем пример кода для события ПриИзменении номенклатуры в табличной части.
Для элемента формы ТоварыНоменклатура создайте событие "ПриИзменении" на клиенте и на сервере:
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
СтрокаТаблицы = Элементы.Товары.ТекущиеДанные;
Если СтрокаТаблицы <> Неопределено Тогда
СтрокаТаблицы.Штрихкод = ПолучитьШтрихкодНаСервере(СтрокаТаблицы.Номенклатура);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьШтрихкодНаСервере(НоменклатураСсылка)
// Обращаемся к типовому регистру сведений "ШтрихкодыНоменклатуры"
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", НоменклатураСсылка);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Штрихкод;
КонецЕсли;
Возврат "";
КонецФункции
Важно: При использовании расширений конфигурации (что является стандартом для "чистой" разработки), не забудьте добавить в расширение и реквизит табличной части, и саму форму, и необходимые программные модули. Это позволит избежать конфликтов при обновлении типовой конфигурации.
Подводя итог, можно сказать, что решение проблемы отсутствующей колонки всегда кроется в последовательной проверке: от физического наличия в метаданных до настроек прав (ролей) и программного кода. Очистка кэша — это эффективный, но не единственный метод борьбы с "невидимыми" реквизитами.