Как сделать активным флажок запроса цен в подборе номенклатуры 1С

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При оформлении складских и учетных документов в конфигурациях на обычных формах (в частности, в 1С:Бухгалтерии для Украины 1.2 и аналогичных решениях линейки 1С:Бухгалтерия 2.0) пользователи нередко сталкиваются с ситуацией, когда в окне подбора номенклатуры флажок «Запрашивать цену» недоступен для редактирования или перенесенные цены не отображаются в документе. Разберем по шагам, почему возникает эта блокировка и как программно включить доступность запроса цен и их видимость в табличной части документа.

Причины недоступности цен в подборе и документе

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

  1. Методология списания ТМЦ: В типовой конфигурации документ СписаниеТоваров при списании с оптового склада не требует указания цен, так как себестоимость рассчитывается платформой автоматически при проведении документа (по методу ФИФО или средней стоимости). Колонки с ценами и суммами по умолчанию скрыты для оптовых складов и активируются только для неавтоматизированных или розничных торговых точек (НТТ).
  2. Передача параметров в обработку подбора: Форма подбора является универсальной. Доступность элементов управления (включая флажки «Запрашивать цену» и «Запрашивать количество») проверяется в процедуре инициализации формы. Если документ не передает в структуре параметров признак ЕстьЦена = Истина, флажок цены блокируется и становится неактивным для пользователя.
  3. Видимость элементов на форме документа: Даже если форма подбора вернет значение цены, пользователь не увидит его в документе, если свойство видимости колонок табличной части установлено в значение Ложь.

Шаг 1. Передача параметра ЕстьЦена при открытии подбора

Рассмотрим модуль формы документа (например, СписаниеТоваров). За вызов окна подбора обычно отвечает процедура ДействиеПодбор или аналогичная обработка нажатия кнопки командной панели. Найдем процедуру инициализации подбора и проверим формирование структуры параметров.

В типовом варианте для оптового склада параметр ЕстьЦена устанавливается в значение Ложь или не передается вовсе. Изменим это поведение, принудительно указав истинность параметра:


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

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

Шаг 2. Настройка видимости колонок в табличной части документа

Разберем следующий важный момент: при возврате подобранных позиций в табличную часть Товары введенная цена должна быть видна на форме. В модуле формы документа найдем процедуру обновления видимости колонок (обычно это УстановитьВидимость или ПриОткрытии).

Посмотрим на типовой фрагмент, управляющий отображением цен и сумм в зависимости от типа склада:


Если НТТ Тогда
    // Поля суммы по документу и валюты для розничного склада
    ЭлементыФормы.Всего.Видимость = Истина;
    ЭлементыФормы.НадписьВсего.Видимость = Истина;
    Колонки.Сумма.Видимость = Истина;
    Колонки.Цена.Видимость = Истина;
    Колонки.Цена.ТекстШапки = НСтр("ru='Розн. цена (';uk='Роздр. ціна ('") + мВалютаРегламентированногоУчета + ")";
Иначе
    ЭлементыФормы.Всего.Видимость = Ложь;
    ЭлементыФормы.НадписьВсего.Видимость = Ложь;
    Колонки.Сумма.Видимость = Ложь;
    Колонки.Цена.Видимость = Ложь;
КонецЕсли;

// Включаем принудительную видимость колонки цены для всех типов складов
Колонки.Цена.Видимость = Истина;

Если необходимо, чтобы в документе также отображалась итоговая сумма по каждой строке, аналогичным образом включаем видимость для колонки Колонки.Сумма.Видимость = Истина.

Шаг 3. Проверка обработки результатов подбора

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

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


Процедура ОбработкаПодбора(СтруктураПодбора, ТабличнаяЧасть)
    
    // Добавление новой строки или поиск существующей
    СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
    СтрокаТабличнойЧасти.Номенклатура = СтруктураПодбора.Номенклатура;
    СтрокаТабличнойЧасти.Количество = СтруктураПодбора.Количество;
    
    // Заполняем цену из переданной структуры подбора
    Если СтруктураПодбора.Свойство("Цена") И ЗначениеЗаполнено(СтруктураПодбора.Цена) Тогда
        СтрокаТабличнойЧасти.Цена = СтруктураПодбора.Цена;
    КонецЕсли;
    
    // Расчет суммы строки
    СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
    
КонецПроцедуры

Важные рекомендации при доработке

  1. Проверка метаданных: Убедимся, что реквизиты Цена и Сумма физически присутствуют в табличной части объекта конфигурации, а не добавлены исключительно на форму. В противном случае при записи документа введенные значения цен не сохранятся в базе данных.
  2. Сброс пользовательских настроек подбора: Обработка подбора номенклатуры сохраняет положение переключателей и флажков («Запрашивать количество», «Запрашивать цену») в системном хранилище пользовательских настроек. Если после изменения программного кода флажок все еще не отмечен по умолчанию, пользователю достаточно один раз вручную установить галочку в форме подбора — при следующих вызовах система запомнит это состояние.
← На главную