Как удалить лишние строки с характеристиками в документе «Установка цен номенклатуры» в 1С:УТ 11.5

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в современных редакциях 1С:Управление торговлей 11.5, ERP 2.5 или Комплексная автоматизация 2.5 пользователи часто сталкиваются с неочевидным поведением документа Установка цен номенклатуры. Одной из наиболее раздражающих проблем является невозможность удалить конкретные строки с характеристиками из табличной части. В этой статье мы подробно разберем, почему система блокирует это действие, к каким последствиям приводит игнорирование пустых строк и как решить задачу программным способом.

Анализ проблемы: почему строки не удаляются?

Для начала проанализируем внутреннюю механику работы формы документа. В отличие от большинства документов 1С, где используется стандартная табличная часть, в Установка цен номенклатуры реализован механизм, называемый «Дерево цен». Это динамическая структура данных, которая строится «на лету» для удобства отображения иерархии «Номенклатура — Характеристика».

Разработчики типового решения заложили жесткую логику: если в документ добавлена номенклатурная позиция, по которой ведется учет в разрезе характеристик, система обязана показать в дереве все существующие характеристики для этой позиции. Это сделано для того, чтобы пользователь видел полную картину ценообразования по объекту. Однако на практике это создает неудобства, когда нужно установить цену только для одной-двух характеристик из десятка существующих.

Рассмотрим основные причины блокировки удаления:

  1. Программный запрет в обработчике события: В коде формы прописана проверка, которая блокирует удаление любых строк, не являющихся «корневыми» (узлами номенклатуры).
  2. Индекс картинки: В дереве цен строки различаются по специальному реквизиту ИндексКартинки. Значение «0» обычно соответствует самой номенклатуре, а значение «2» — ее характеристикам. Типовой код разрешает манипуляции только с индексом «0».
  3. Условное оформление: Даже если вы попытаетесь разблокировать колонки, механизм условного оформления формы может принудительно устанавливать свойство ТолькоПросмотр для строк с характеристиками.

Риски регистрации нулевых цен

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

В последних релизах 1С:УТ 11.5 система при проведении документа считывает все видимые строки дерева. Если цена в строке не указана (пусто или 0), система может записать это нулевое значение в регистр сведений Цены номенклатуры. В дальнейшем это приведет к тому, что в заказах клиентов или чеках ККМ данный товар с этой конкретной характеристикой будет подтягиваться с ценой 0 руб., что чревато финансовыми потерями и ошибками в учете.

Стандартные методы, которые могут не сработать

Прежде чем переходить к программированию, кратко рассмотрим штатные команды:

Программное решение через расширение конфигурации

Теперь перейдем к самому надежному способу решения проблемы — доработке через расширение. Нам необходимо скорректировать логику обработчика события ДеревоЦенПередУдалением на форме документа УстановкаЦенНоменклатуры.

Разберем алгоритм действий по шагам:

  1. Создаем новое расширение (или используем существующее).
  2. Добавляем в расширение форму документа УстановкаЦенНоменклатуры.
  3. Находим на форме элемент ДеревоЦен и переходим к его событиям.
  4. Создаем обработчик ПередУдалением с типом вызова «Вместо» или «После» (в зависимости от версии конфигурации).

Посмотрим на пример кода, который позволит нам снимать блокировку удаления для строк с характеристиками (индекс картинки 2):


&НаКлиенте
Процедура Расш1_ДеревоЦенПередУдалением(Элемент, Отказ)
    // Получаем текущие данные строки, которую пользователь пытается удалить
    ТекущиеДанные = Элемент.ТекущиеДанные;
    
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    // Проверяем индекс картинки. 
    // В типовом коде стоит условие: Если ИндексКартинки <> 0 Тогда Отказ = Истина;
    // Мы переопределяем это поведение, разрешая удаление для характеристик (индекс 2)
    
    Если ТекущиеДанные.ИндексКартинки = 2 Тогда
        // Разрешаем удаление строки характеристики
        Отказ = Ложь; 
    КонецЕсли;
    
    // Важно: не забудьте про логику удаления узла номенклатуры (индекс 0), 
    // она должна оставаться стандартной или быть разрешена явно.
КонецПроцедуры

Однако просто разрешить удаление в обработчике события недостаточно. Часто колонки характеристик заблокированы через условное оформление. Проанализируем, как это исправить.

Работа с условным оформлением и свойством «Только просмотр»

Система динамически управляет доступностью полей. За это отвечает серверный метод НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры. Даже если вы уберете галочку ТолькоПросмотр в конфигураторе, программный код вернет её на место при открытии формы.

Чтобы полностью победить ограничение, необходимо в расширении также найти фрагмент кода, устанавливающий оформление, и изменить параметр ТолькоПросмотр с Истина на Ложь. Рассмотрим пример того, как это выглядит в модуле формы:


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

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

Альтернативный путь без программирования: Загрузка из Excel

Если вы не хотите вносить изменения в программный код, существует один «хитрый» способ обойти ограничения дерева цен. Это использование механизма загрузки из внешнего файла.

Алгоритм действий следующий:

  1. Подготовьте файл Excel, в котором будут только те пары «Номенклатура + Характеристика», для которых вы реально хотите установить цены.
  2. В документе Установка цен номенклатуры нажмите кнопку «Загрузить из внешнего файла».
  3. Загрузите данные.

В этом случае система создаст в модели данных формы только те строки, которые были в файле. Дерево цен не будет принудительно дозаполняться остальными характеристиками, так как механизм импорта работает в обход стандартного алгоритма подбора товаров. Это позволяет получить «чистый» документ без лишних строк и риска регистрации нулевых цен.

Резюме

Мы выяснили, что невозможность удаления строк в Установка цен номенклатуры — это не ошибка, а осознанное архитектурное решение методистов фирмы 1С, направленное на сохранение целостности данных о ценах. Тем не менее, для решения практических задач бизнеса мы можем:

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

← На главную