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