Что имеем:
- Платформа 8.3.15.1700
- Конфигурация УТ 11.4.8.92
- Модуль БУС 7.0.1.17
- Битрикс 19.0.275
Есть в модуле обмена 1С-Битрикс интересная книпочка “Принудительная выгрузка картинок“, которую, по нашему некоторому опыту использования этой самой выгрузки, приходится вручную нажимать, чтобы эти самые картинки выгрузились ВСЕ.
При чем, по расписанию выполняется ПОЛНАЯ выгрузка (а не выгрузка изменений), но при определенных условиях некоторые картинки ну никак не хотят выгружаться (н-р, когда одна и та же картинка установлена у нескольких разных позиций номенклатуры).
Как временное решение проблемы, было решено использовать функционал принудительной выгрузки картинок (скорее всего, для этого он и был создан).
Чтобы на жмякание заветной книпочки не отвлекать Царя Администратора, проще всего вынести ее куда-нибудь на более видное место и отдать ее на растерзание контентщику сайта. И, как всегда, для этого ему понадобятся 100500 прав доступа. Почему? Потому что стандартной битриксовской роли “Разрешить слив базы дан.. “Роль по работе с БУС” недостаточно для осуществления выгрузки. Например, необходимо наличие у него прав доступа на справочники, заканчивающихся на *ПрикрепленныеФайлы
. И для этого, как бы это ни казалось логичным, недостаточно добавления ролей на чтение справочников, к которым и прикрепляются эти самые файлы (хотя в основном это так, НО НЕ ВЕЗДЕ). Короче, было решено использовать УстановитьПривилегированныйРежим()
.
Создаем в конфигурации:
1) Константу БитриксПланОбменаУмолч
, где укажем используемый для выгрузки Узел/план обмена.
Тип данных: ПланОбменаСсылка.Б_ОбменССайтом
2) Общую команду ЗапускПринудитОбменаБитрикс
. Добавляем ее в подсистему Битрикс.ОбменСИнтернетМагазином
. В модуле команды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПланОбменаПоУмолч = ПолучитьПланОбменаУмолч(); Если (ЗначениеЗаполнено(ПланОбменаПоУмолч)) Тогда ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("УзелОбмена", ПланОбменаПоУмолч); ПараметрыФормы.Вставить("ПринудительнаяПолноеОбновлениеДанныхТовара", Истина); ОткрытьФорму("ПланОбмена.Б_ОбменССайтом.Форма.ФормаВыполнениеОбмена", ПараметрыФормы); Иначе Сообщить("Не установлена константа ""Битрикс узел обмена по-умолчанию""", СтатусСообщения.Внимание); КонецЕсли; КонецПроцедуры &НаСервере Функция ПолучитьПланОбменаУмолч() Возврат Константы.Айкон_БитриксПланОбменаУмолч.Получить(); КонецФункции |
Создаем расширение и:
1) Создаем роль БитриксЗапускПринудитОбмена
, куда добавляем все созданные объекты.
Добавляем в расширение:
1) Константу БитриксПланОбменаУмолч
2) Команду ЗапускПринудитОбменаБитрикс
3) Реализуем запуск самого обмена в привилегированном режиме. Заменяем процедуру ОбщийМодуль.Б_ОбменССайтомСервер.ВыполнитьОбменИнтерактивно()
:
1 2 3 4 5 6 |
&Вместо("ВыполнитьОбменИнтерактивно") Процедура РасшБитрикс_ВыполнитьОбменИнтерактивно(ПараметрыОбмена, АдресРезультата) УстановитьПривилегированныйРежим(Истина); ПродолжитьВызов(ПараметрыОбмена, АдресРезультата); УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры |
Результат:
По хорошему, в расширение нужно вынести все. Но создание констант в расширениях должны будут запилить в платформах 8.3.16.*, а общую команду, созданную в расширении, у меня не получилось вынести на командную панель.