Как найти и настроить таблицу переоценки в 1С 7.7

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

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

Природа появления окна переоценки

Важно понимать, что окно, которое вы видите на экране, не является формой конкретного документа или справочника. Проанализируем ситуацию: в 1С 7.7 для вывода произвольных табличных данных часто используется универсальный механизм — модальный вызов специальной обработки с передачей в нее объекта ТаблицаЗначений. В большинстве типовых решений эта обработка называется ВопросСТаблицейЗначений.

Процесс выглядит следующим образом: программа программно создает таблицу в памяти, заполняет ее данными о расхождениях цен и «просит» универсальную форму отобразить эти данные пользователю.

Поиск программного кода в конфигураторе

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

  1. Откройте конфигуратор и найдите документ ПоступлениеТМЦ (или ПоступлениеТМЦРозница).
  2. Перейдите в Модуль Формы этого документа.
  3. Найдите процедуру ПроверкаОстатков() или ПроверитьРозничныеЦены(). В некоторых релизах вызов может быть вынесен в глобальный модуль, например, в функцию глПриПроведенииПереоценки().

Внутри этой процедуры мы увидим создание объекта типа ТаблицаЗначений. Код будет выглядеть примерно так:


ТЗПереоценка = СоздатьОбъект("ТаблицаЗначений");
ТЗПереоценка.НоваяКолонка("Номенклатура", "Справочник.Номенклатура");
ТЗПереоценка.НоваяКолонка("Количество", "Число",,,,10);
ТЗПереоценка.НоваяКолонка("ЦенаСтарая", "Число",,,"Цена (стар.)",10);
ТЗПереоценка.НоваяКолонка("ЦенаНовая", "Число",,,"Цена (нов.)",10);

Способ 1: Программное изменение ширины колонок

Самый простой и правильный способ расширить колонки — отредактировать параметры метода НоваяКолонка(). Рассмотрим синтаксис этого метода в 1С 7.7:

НоваяКолонка(Идентификатор, Тип, Длина, Точность, Заголовок, Ширина, Формат, Положение)

Шестой параметр отвечает за визуальную ширину колонки в символах. Проанализируем код и внесем правки для колонки с наименованием товара. Чтобы название было видно полностью, рекомендуется установить значение от 40 до 60:


// Было:
ТЗПереоценка.НоваяКолонка("Номенклатура", "Справочник.Номенклатура");

// Стало (увеличиваем ширину до 50 символов):
ТЗПереоценка.НоваяКолонка("Номенклатура", "Справочник.Номенклатура", , , "Наименование товара", 50);

Если в вашем коде колонки добавляются без указания параметров, 1С использует значения по умолчанию, которые часто оказываются слишком узкими. Вы также можете принудительно установить ширину уже созданной колонки перед вызовом формы, используя метод ВидимостьКолонки():


ТЗПереоценка.ВидимостьКолонки("Номенклатура", , 60); 
// Здесь 60 — это новая ширина колонки в средних символах шрифта

Способ 2: Настройка универсальной обработки

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

  1. В дереве метаданных найдите ветку Обработки.
  2. Найдите обработку с идентификатором ВопросСТаблицейЗначений.
  3. Откройте её форму.
  4. Найдите на форме элемент управления «Таблица значений» (обычно он имеет идентификатор ТаблЗначений).
  5. Зайдите в свойства этого элемента.
  6. Убедитесь, что установлен флажок «Изменяемый размер колонок». Если он снят, пользователь не сможет менять ширину вручную.
  7. Дополнительно можно увеличить ширину самой формы обработки в конфигураторе, чтобы таблица занимала больше места на экране при открытии.

Разбор процесса передачи данных

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


СЗПарам = СоздатьОбъект("СписокЗначений"); 
СЗПарам.Установить("Заголовок", "Переоценка остатков");
СЗПарам.Установить("ТекстВопроса", "На складе обнаружены остатки по другой цене. Переоценить?");
СЗПарам.Установить("ТаблЗначений", ТЗПереоценка);  
            
// Вызов модального окна универсальной обработки
ОткрытьФормуМодально("Обработка.ВопросСТаблицейЗначений", СЗПарам);

Здесь объект СЗПарам (Список значений) выступает контейнером. В самой обработке ВопросСТаблицейЗначений при открытии происходит обратное действие — данные из этого списка загружаются в элементы формы. Именно поэтому настройки колонок, сделанные вами в исходном документе, «пробрасываются» в это окно.

Почему отладчик может «проскакивать» это окно?

Если вы пытаетесь найти место вызова с помощью отладчика, помните особенность 1С 7.7: модальные формы часто прерывают пошаговую отладку или ведут себя некорректно при попытке зайти внутрь метода ОткрытьФормуМодально().

Совет: Ставьте точку останова на строке ТЗПереоценка = СоздатьОбъект("ТаблицаЗначений"). Когда выполнение остановится, воспользуйтесь окном «Табло» и введите там ТЗПереоценка.КоличествоКолонок() или попробуйте просмотреть структуру объекта. Это подтвердит, что вы нашли верное место в коде конфигурации.

Таким образом, для решения проблемы «узких колонок» в таблице переоценки достаточно либо разово увеличить числовой параметр ширины в коде документа, либо разрешить интерактивное изменение размеров в свойствах обработки ВопросСТаблицейЗначений.

← На главную