Отключить пользовательский макет. Переключает использование пользовательского макета на макет из конфигурации.
// Переключает использование пользовательского макета на макет из конфигурации.
// Применяется в случае, когда макет печатной формы конфигурации и/или алгоритм вывода изменены без поддержки обратной
// совместимости с макетом предыдущей версии конфигурации.
// Для использования в обработчиках обновления.
//
// В общем случае при внесении изменений в макеты и процедуры формирования печатных форм необходимо учитывать
// возможность того, что макеты могут быть изменены пользователями (т.е. взят за основу типовой макет из конфигурации
// и в него добавлен статический текст, изменен шрифт, цвет и другое оформление ячеек, которое не требует программной
// обработки со стороны алгоритмов конфигурации).
//
// Однако в ряде случаев точное следование порядку заполнения форм важнее, чем совместимость с возможными изменениями
// пользователя в макетах предыдущих версий (например, это справедливо для строго регламентированных печатных форм,
// при нарушении порядка их применения контролирующие органы могут накладывать штрафы, отказывать в проведении
// операций, в налоговых вычетах и т.п. - в них недопустимы сокращение количества полей на форме, перекомпоновка).
// Примерами таких форм являются счет-фактура, созданные на его основе УПД и УКД, кассовые ордера (КО-1 и КО-2),
// платежное поручение.
// Поэтому если у пользователя есть измененный макет, то при обновлении его следует отключать, чтобы эти печатные формы
// формировались корректно.
//
//
// Параметры:
// ПутьКМакету - Строка - полный путь к макету в формате:
// "Документ.<ИмяДокумента>.<ИмяМакета>"
// "Обработка.<ИмяОбработки>.<ИмяМакета>"
// "ОбщийМакет.<ИмяМакета>".
//
Процедура ОтключитьПользовательскийМакет(ПутьКМакету) Экспорт
ЧастиСтроки = СтрРазделить(ПутьКМакету, ".", Истина);
Если ЧастиСтроки.Количество() <> 2 И ЧастиСтроки.Количество() <> 3 Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден.'"), ПутьКМакету);
КонецЕсли;
ИмяМакета = ЧастиСтроки[ЧастиСтроки.ВГраница()];
ЧастиСтроки.Удалить(ЧастиСтроки.ВГраница());
ИмяВладельца = СтрСоединить(ЧастиСтроки, ".");
НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(ИмяВладельца);
НаборЗаписей.Отбор.ИмяМакета.Установить(ИмяМакета);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
Запись.Использование = Ложь;
КонецЦикла;
Если НаборЗаписей.Количество() > 0 Тогда
Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда
ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
Иначе
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
НаборЗаписей.Записать();
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ИспользуетсяПользовательскийМакет (БСП)
ПеренестиПользовательскиеМакеты (БСП)
ОтключитьНебезопасноеСодержимое (БСП)
ОтключитьПодсистемуВМоделиСервиса (БСП)
ОтключитьОбновлениеКлючейДоступа (БСП)
ОтключитьИспользованиеПланаОбмена (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)