В процессе работы с типовыми конфигурациями на платформе 1С:Предприятие 7.7, такими как «Торговля и Склад» (редакция 9.2), пользователи часто сталкиваются с появлением информационных окон при проведении документов. Одним из наиболее востребованных, но труднодоступных для настройки элементов является таблица переоценки остатков. Обычно это окно возникает в момент проведения документа «Поступление ТМЦ» на розничный склад, если цена поступления отличается от текущей розничной цены.
Проблема заключается в том, что стандартная ширина колонок (особенно для колонки «Номенклатура») часто оказывается недостаточной для длинных наименований. Разберем подробно, где искать этот механизм и как его модифицировать.
Важно понимать, что окно, которое вы видите на экране, не является формой конкретного документа или справочника. Проанализируем ситуацию: в 1С 7.7 для вывода произвольных табличных данных часто используется универсальный механизм — модальный вызов специальной обработки с передачей в нее объекта ТаблицаЗначений. В большинстве типовых решений эта обработка называется ВопросСТаблицейЗначений.
Процесс выглядит следующим образом: программа программно создает таблицу в памяти, заполняет ее данными о расхождениях цен и «просит» универсальную форму отобразить эти данные пользователю.
Чтобы изменить внешний вид таблицы, нам необходимо найти место, где она формируется. Рассмотрим по шагам, где именно в конфигурации «Торговля и Склад» (ТиС) находится этот блок:
ПоступлениеТМЦ (или ПоступлениеТМЦРозница).ПроверкаОстатков() или ПроверитьРозничныеЦены(). В некоторых релизах вызов может быть вынесен в глобальный модуль, например, в функцию глПриПроведенииПереоценки().Внутри этой процедуры мы увидим создание объекта типа ТаблицаЗначений. Код будет выглядеть примерно так:
ТЗПереоценка = СоздатьОбъект("ТаблицаЗначений");
ТЗПереоценка.НоваяКолонка("Номенклатура", "Справочник.Номенклатура");
ТЗПереоценка.НоваяКолонка("Количество", "Число",,,,10);
ТЗПереоценка.НоваяКолонка("ЦенаСтарая", "Число",,,"Цена (стар.)",10);
ТЗПереоценка.НоваяКолонка("ЦенаНовая", "Число",,,"Цена (нов.)",10);
Самый простой и правильный способ расширить колонки — отредактировать параметры метода НоваяКолонка(). Рассмотрим синтаксис этого метода в 1С 7.7:
НоваяКолонка(Идентификатор, Тип, Длина, Точность, Заголовок, Ширина, Формат, Положение)
Шестой параметр отвечает за визуальную ширину колонки в символах. Проанализируем код и внесем правки для колонки с наименованием товара. Чтобы название было видно полностью, рекомендуется установить значение от 40 до 60:
// Было:
ТЗПереоценка.НоваяКолонка("Номенклатура", "Справочник.Номенклатура");
// Стало (увеличиваем ширину до 50 символов):
ТЗПереоценка.НоваяКолонка("Номенклатура", "Справочник.Номенклатура", , , "Наименование товара", 50);
Если в вашем коде колонки добавляются без указания параметров, 1С использует значения по умолчанию, которые часто оказываются слишком узкими. Вы также можете принудительно установить ширину уже созданной колонки перед вызовом формы, используя метод ВидимостьКолонки():
ТЗПереоценка.ВидимостьКолонки("Номенклатура", , 60);
// Здесь 60 — это новая ширина колонки в средних символах шрифта
Если вы хотите, чтобы пользователь мог самостоятельно раздвигать колонки мышкой прямо в окне вопроса (что по умолчанию часто запрещено), нужно внести изменения в саму обработку, которая выводит таблицу. Выясним, как это сделать:
ВопросСТаблицейЗначений.ТаблЗначений).Посмотрим на пример того, как данные передаются в это модальное окно. Проанализируем фрагмент кода, который отвечает за запуск окна:
СЗПарам = СоздатьОбъект("СписокЗначений");
СЗПарам.Установить("Заголовок", "Переоценка остатков");
СЗПарам.Установить("ТекстВопроса", "На складе обнаружены остатки по другой цене. Переоценить?");
СЗПарам.Установить("ТаблЗначений", ТЗПереоценка);
// Вызов модального окна универсальной обработки
ОткрытьФормуМодально("Обработка.ВопросСТаблицейЗначений", СЗПарам);
Здесь объект СЗПарам (Список значений) выступает контейнером. В самой обработке ВопросСТаблицейЗначений при открытии происходит обратное действие — данные из этого списка загружаются в элементы формы. Именно поэтому настройки колонок, сделанные вами в исходном документе, «пробрасываются» в это окно.
Если вы пытаетесь найти место вызова с помощью отладчика, помните особенность 1С 7.7: модальные формы часто прерывают пошаговую отладку или ведут себя некорректно при попытке зайти внутрь метода ОткрытьФормуМодально().
Совет: Ставьте точку останова на строке ТЗПереоценка = СоздатьОбъект("ТаблицаЗначений"). Когда выполнение остановится, воспользуйтесь окном «Табло» и введите там ТЗПереоценка.КоличествоКолонок() или попробуйте просмотреть структуру объекта. Это подтвердит, что вы нашли верное место в коде конфигурации.
Таким образом, для решения проблемы «узких колонок» в таблице переоценки достаточно либо разово увеличить числовой параметр ширины в коде документа, либо разрешить интерактивное изменение размеров в свойствах обработки ВопросСТаблицейЗначений.