Почему в документе поступления 1С неактивна галка «Цена включает НДС» и как ее разблокировать?

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

При работе в конфигурациях на платформе 1С:Предприятие 8.3 (таких как Управление торговлей 11, Комплексная автоматизация 2 или ERP Управление предприятием) пользователи и разработчики часто сталкиваются с неочевидным поведением интерфейса. Типичная проблема: в документе Приобретение товаров и услуг (или Поступление товаров и услуг) флаг «Цена включает НДС» отображается серым и недоступен для редактирования, хотя в других аналогичных документах или в новом тестовом документе этот флаг активен.

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

Бизнес-логика: почему блокируется флаг «Цена включает НДС»

Конфигурация 1С:Управление торговлей разработана с учетом жестких правил контроля торговых процессов. Возможность ручного изменения параметров налогообложения в документах закупки часто ограничивается системой, чтобы избежать ошибок пользователей и расхождений в учете. Рассмотрим основные причины блокировки реквизита на уровне логики конфигурации:

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

Технический нюанс: почему отладчик показывает Доступность = Истина

Многие начинающие программисты 1С заходят в тупик, когда при анализе формы через отладчик обращение к элементу Элементы.ЦенаВключаетНДС.Доступность возвращает Истина, но пользователь физически не может нажать на этот флажок. Разберем технические причины этого феномена управляемой платформы:

1. Использование Условного оформления управляемой формы. Механизм условного оформления позволяет динамически изменять визуальные свойства элементов на клиенте без непосредственного изменения свойств самого элемента в коде. Платформа может программно заблокировать элемент (сделать его доступным только для чтения) через коллекцию условного оформления. При этом в физических свойствах элемента формы свойство Доступность по-прежнему будет равно Истина.

Посмотрим на пример кода, который часто используется в типовых конфигурациях для управления условным оформлением формы в зависимости от флага НДС:


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

2. Блокировка на уровне родительской группы. В управляемом интерфейсе все элементы логически объединены в группы (страницы, подгруппы, панели). Если у родительской группы (например, у группы, содержащей настройки цен и валют, или у всей страницы формы) установлено свойство ТолькоПросмотр = Истина или Доступность = Ложь, то все вложенные элементы автоматически наследуют это состояние на экране. При этом прямой запрос к конкретному элементу в отладчике выдаст его индивидуальное состояние Доступность = Истина.

Пример программной блокировки родительской группы в коде модуля формы:


// Пример блокировки родительской группы элементов цен и валют
ЭтаФорма.Элементы.ГруппаЦеныИВалюта.ТолькоПросмотр = Истина;
// Конкретный флажок ЦенаВключаетНДС при этом сохраняет свойство Доступность = Истина,
// но визуально редактирование заблокировано для пользователя!

3. Поздняя инициализация интерфейса платформой. Изменение доступности элементов формы может происходить на разных этапах жизненного цикла формы. Если программист ставит точку останова только в обработчике ПриСозданииНаСервере, он может пропустить момент, когда доступность переопределяется позже — например, в обработчиках ПриЧтенииНаСервере, ПриОткрытии на клиенте или при вызове специализированных процедур общего модуля БСП (Библиотеки стандартных подсистем).

Как найти и победить проблему: пошаговое руководство

Для того чтобы разобраться, почему именно в вашем документе заблокирована галка «Цена включает НДС», выполним последовательный анализ ситуации.

Шаг 1. Анализируем связанные документы (бизнес-логика).

В первую очередь проверьте, создан ли текущий документ на основании другого документа. Перейдите на вкладку «Дополнительно» и проверьте наличие заполненного поля Заказ поставщику или изучите структуру подчиненности документа. Если заказ-основание присутствует, попробуйте изменить параметры НДС непосредственно в заказе.

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

Шаг 2. Проверяем настройки условного оформления формы.

Откроем конфигуратор, найдем форму документа ПриобретениеТоваровУслуг. На панели свойств формы перейдем на вкладку «Условное оформление». Проанализируем правила, добавленные разработчиками конфигурации. Если там присутствуют строки отбора, завязанные на доступность или только просмотр полей, связанных с НДС или ценами, мы найдем точное условие, при котором платформа блокирует реквизит.

Шаг 3. Ищем программное управление доступностью в коде модуля формы.

Выполним глобальный поиск по модулю формы (используя сочетание клавиш Ctrl + F в конфигураторе) по ключевому слову ЦенаВключаетНДС. Обратите особое внимание на процедуры, которые управляют доступностью элементов. Обычно в типовых решениях за это отвечают вызовы процедур из общих модулей, например:


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

Установите точки останова внутри процедур, где происходит анализ заполнения соглашения, договора или заказа-основания. Пройдите код пошагово (клавишей F11), обращая внимание на то, какие именно условия приводят к вызову кода блокировки доступности.

Шаг 4. Использование формы «Цены и валюта».

Помните, что во многих конфигурациях (включая УТ 11) прямое редактирование флагов НДС и валют на основной форме документа может быть ограничено умышленно. Вместо этого в шапке документа присутствует гиперссылка (например, «USD, Цена включает НДС» или аналогичная). При нажатии на нее открывается отдельная вспомогательная форма Цены и валюта. Попробуйте изменить флаг именно в этой всплывающей форме — зачастую настройки доступны для редактирования именно там, после чего они корректно переносятся обратно в основной документ.

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

← На главную