Рассмотрим частую задачу, с которой сталкиваются пользователи и разработчики при работе в старых редакциях конфигурации 1С:Управление торговлей 11.0. Суть проблемы заключается в необходимости массово установить или изменить определенный реквизит (например, Преселлер) сразу для большого количества элементов справочника Контрагенты. Ситуация усложняется тем, что при попытке запустить стандартную обработку платформа может выдавать ошибки или вообще отказываться ее открывать.
Разберем по шагам все доступные способы решения этой задачи, начиная от самых простых пользовательских механизмов и заканчивая приемами разработчиков. Проанализируем ситуацию и выясним причину, по которой штатные средства иногда дают сбой, а также посмотрим на примеры кода.
Самый простой и быстрый метод в управляемых формах, который не требует поиска внешних файлов или написания кода. Посмотрим на пример того, как использовать встроенный функционал платформы непосредственно из формы списка.
Контрагенты в режиме предприятия.Shift и кликните на первый и последний элемент диапазона. Если нужен точечный выбор, зажмите Ctrl и кликайте по нужным строкам. Чтобы выбрать всех, можно использовать сочетание Ctrl + A.Преселлер), установите галочку напротив него, выберите новое значение и нажмите кнопку выполнения.Этот способ идеально подходит для оперативного решения задачи, когда нужно обновить данные для обозримого количества контрагентов.
Как справедливо отметили участники обсуждения, написать простой код для массового изменения справочника зачастую быстрее, чем искать подходящую внешнюю обработку. Напишем небольшую процедуру, которая выберет всех контрагентов (или контрагентов по определенному условию) и установит им нужное значение. Выполнить этот код можно в любой внешней обработке.
Рассмотрим подробнее пример кода, который решает задачу:
Процедура УстановитьПреселлераКонтрагентам(НужныйПреселлер)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Преселлер <> &НужныйПреселлер
| И Контрагенты.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("НужныйПреселлер", НужныйПреселлер);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектКонтрагента = Выборка.Ссылка.ПолучитьОбъект();
ОбъектКонтрагента.Преселлер = НужныйПреселлер;
Попытка
ОбъектКонтрагента.Записать();
Исключение
Сообщить("Ошибка записи контрагента: " + Выборка.Ссылка + " - " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Такой подход максимально контролируем. Мы выбираем только тех контрагентов, у которых значение еще не установлено, избегая тем самым лишних перезаписей и нагрузки на базу данных.
Если вам требуется сложный отбор, а писать код нет времени, классическим решением для старых баз является внешняя обработка от 1С под названием "Универсальные подбор и обработка объектов" (обычно поставляется на дисках ИТС). Однако, с ней есть один важный нюанс — она написана под обычные формы.
Разберем, как запустить ее в УТ 11.0, которая работает на управляемых формах:
В открывшемся интерфейсе обычного приложения вы сможете открыть скачанную обработку через меню "Файл - Открыть", выбрать справочник Контрагенты, настроить любые фильтры и на вкладке "Обработки" выбрать изменение реквизитов.
Проанализируем ситуацию с ошибкой: "Самостоятельное использование формы не предусмотрено". В УТ 11.0 присутствует встроенная служебная обработка ГрупповоеИзменениеОбъектов. Если попытаться вызвать ее напрямую через меню "Все функции" (или "Функции для технического специалиста"), вы увидите эту ошибку.
Выясним причину: архитектура данной обработки в ранних версиях БСП (Библиотеки стандартных подсистем) спроектирована так, что она ожидает передачу контекста (списка ссылок) при открытии. Именно поэтому она работает только тогда, когда вызывается программно из формы списка справочника (возвращаемся к Способу 1).
Если вам критически нужен отдельный интерфейс групповой обработки под тонкий клиент, рекомендуем последовать совету с форума: выгрузить аналогичную обработку "Групповое изменение реквизитов" из более новых релизов БСП (например, из актуальной версии Бухгалтерии предприятия или современной УТ) и открыть ее в вашей базе как внешнюю (Файл -> Открыть).
Если вы запустили групповое изменение объектов, но не можете найти реквизит Преселлер в списке доступных для редактирования полей, вам необходимо включить дополнительные настройки.
Разберем по шагам настройку видимости:
Важно: Всегда следите за тем, чтобы в момент выполнения массового изменения карточки редактируемых контрагентов не были открыты у других пользователей. Платформа 1С использует механизм пессимистических блокировок. Если карточка открыта для редактирования другим менеджером, групповая обработка выдаст ошибку транзакции и не сможет записать новые данные для заблокированного элемента. Рекомендуется проводить массовые изменения в монопольном режиме или в моменты минимальной активности пользователей.