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