Как изменить цены в коммерческом предложении 1С:УТ 11 при выбранном виде цен?

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

В процессе работы с конфигурацией 1С:Управление торговлей (редакция 11) или аналогичными решениями на платформе 1С 8.3 (ERP, Комплексная автоматизация) пользователи часто сталкиваются с ситуацией, когда цена в документе «Коммерческое предложение» или «Заказ клиента» заблокирована для редактирования. Программа выводит сообщение: «Для редактирования цены выберите вид цены...». Это происходит из-за того, что в документе установлен конкретный вид цен (например, «Цена приобретения» или «Оптовая»), который по правилам системы должен рассчитываться автоматически, а не правиться вручную. Если позиций в документе много, ручное изменение каждой строки становится невозможным.

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

Причина блокировки цен в документах

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

Блокировка включается в следующих случаях:

  1. В настройках выбранного вида цен не установлен флаг «Разрешить ручное изменение».
  2. В информационной базе настроены типовые соглашения с клиентами, которые строго регламентируют использование конкретных видов цен.
  3. У пользователя недостаточно прав для «Отклонения от цен продажи».

Способ 1. Использование типового механизма «Изменить цены»

Прежде чем приступать к написанию кода или внешних обработок, рассмотрим штатный функционал программы, который позволяет решить задачу массово. В табличной части «Товары» многих документов 1С:УТ 11 присутствует кнопка «Изменить» (или «Цены и скидки» -> «Изменить цены»).

Проанализируем шаги для массового изменения:

  1. Нажмем кнопку «Изменить» над таблицей товаров. Откроется помощник «Изменение таблицы товаров».
  2. В выпадающем меню выберем команду «Установить вид цен».
  3. В поле выбора оставим значение пустым или выберем «Произвольная».
  4. Нажмем «Выполнить», а затем «Перенести в документ».

После этого поле ВидЦены во всех строках будет очищено, и система позволит редактировать цены вручную, так как они перейдут в статус «произвольных».

Способ 2. Программное решение через внешнюю обработку

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

Рассмотрим пример кода, который можно разместить в команде внешней обработки или расширения. Основная задача — установить поле ВидЦены в значение ПустаяСсылка. Посмотрим на реализацию цикла:


Для Каждого СтрокаТовара Из Объект.Товары Цикл
    Если ЗначениеЗаполнено(СтрокаТовара.ВидЦены) Тогда
        СтрокаТовара.ВидЦены = Справочники.ВидыЦен.ПустаяСсылка();
    КонецЕсли;
КонецЦикла;

Важно помнить, что простое присвоение пустой строки "" может привести к ошибке несоответствия типов, так как поле ВидЦены ожидает объект типа СправочникСсылка.ВидыЦен. Именно использование метода ПустаяСсылка() является наиболее корректным с точки зрения архитектуры 1С.

Разбор технической ошибки «Отсутствует отображение для типа ДанныеФормыЭлементКоллекции»

При попытке самостоятельного написания кода разработчики часто сталкиваются с ошибкой: Ошибка отображения типов: Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'. Разберем, почему она возникает.

Ситуация обычно выглядит так: вы пытаетесь передать конкретную строку таблицы (объект UI) с клиента на сервер напрямую в процедуру. Однако тип ДанныеФормыЭлементКоллекции существует только в контексте формы и не может быть корректно сериализован для передачи на сервер «как есть».

Как исправить ситуацию:

  1. Выполняйте обработку всей коллекции Объект.Товары непосредственно в серверной процедуре.
  2. Если нужно обработать только одну строку, передавайте её Идентификатор или Индекс, а на сервере находите эту строку в коллекции Объект.Товары.НайтиПоИдентификатору().

Рассмотрим пример правильного вызова:


&НаКлиенте
Процедура ОчиститьВидЦенНаКлиенте()
    ОчиститьВидЦенНаСервере();
КонецПроцедуры

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

Способ 3. Проверка прав доступа и настроек Вида цен

Если программная очистка поля ВидЦены не помогает, и поле все равно остается недоступным для редактирования, проанализируем настройки прав пользователя. В 1С:УТ 11 существует механизм Дополнительных прав пользователей.

Выполним следующую проверку:

  1. Перейдем в раздел НСИ и администрирование — Настройка пользователей и прав.
  2. Выберем Дополнительные права пользователей.
  3. Найдем пункт «Отклонение от цен продажи» в разделе продаж.
  4. Убедимся, что данный флаг установлен для пользователя. Если флаг снят, программа будет запрещать любое изменение цены, которое отличается от установленного прайс-листа, даже если вид цены не выбран.

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

Резюме

Для решения проблемы массового редактирования цен в документах 1С:УТ 11 мы рекомендуем следующий алгоритм действий:

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

← На главную