Обработка предназначена для сохранения и последующего использования настроек по-умолчанию для документов, работает в любой конфигурации 1С, платформы 7.7:
Файл можно использовать в меню дополнительных действий. При открытии в параметр нужно передавать список, где первый параметр "Контекст" - это контекст открытой формы документа, второй параметр "Действие" - значения могут быть: "Загрузить" и "Сохранить"
Настройки сохраняются в каталог пользователя, на 1 вид документа может быть неограниченное количество настроек. При сохранении настройки можно отметить галочками какие значения будут загружаться.
Eсли в обработку передан параметр "Действие": "Сохранить", то открывается форма:
В обработке дополнительно можно настроить список реквизитов-исключений, которые не будут попадать в список настроек.
Для работы обработки необходимо в глобальный модуль добавить две функции:
глМенюФункция глМеню(Стр,Ном=0,Тип=1,Кол1="",Кол2="") Экспорт //Возвращает выбранное значение из подстраеваемого меню или "" //значения для меню можно передавать строкой с разделителями или списком //Ном - будет содержать номер строки СП = СоздатьОбъект("СписокЗначений"); Если ТипЗначенияСтр(Стр) = "СписокЗначений" Тогда Стр.Выгрузить(СП); ИначеЕсли ТипЗначенияСтр(Стр) = "ТаблицаЗначений" Тогда Если Стр.КоличествоКолонок() = 0 Тогда Возврат ""; КонецЕсли; Если Стр.КоличествоСтрок() = 0 Тогда Возврат ""; КонецЕсли; Для Сч = 1 По Стр.КоличествоСтрок() Цикл Попытка СП.ДобавитьЗначение(Стр.ПолучитьЗначение(Сч,?(ПустаяСтрока(Кол1) = 1,1,Кол1)),Стр.ПолучитьЗначение(Сч,?(ПустаяСтрока(Кол2) = 1,1,Кол2))); Исключение КонецПопытки; КонецЦикла; ИначеЕсли ТипЗначенияСтр(Стр) = "Строка" Тогда СП.ИзСтрокиСРазделителями(Стр); Иначе Возврат ""; КонецЕсли; Выб = ""; Если СП.ВыбратьЗначение(Выб,,Ном,10,Тип) = 1 Тогда Возврат Выб; КонецЕсли; Возврат ""; КонецФункции
Функция глСписокРеквизитовДокумента(ИмяДок,Общие=1,Шапка=1,ТЧ=1) Экспорт // возвращает таблицу значений списка реквизитов с их параметрами Реквизиты = СоздатьОбъект("ТаблицаЗначений"); Реквизиты.НоваяКолонка("ИД"); Реквизиты.НоваяКолонка("Синоним","Строка"); Реквизиты.НоваяКолонка("Тип","Строка"); Реквизиты.НоваяКолонка("Вид","Строка"); Реквизиты.НоваяКолонка("Длина","Число"); Реквизиты.НоваяКолонка("Точность","Число"); Реквизиты.НоваяКолонка("Статус","Число",1,0); // 1 - общий, 2 - Шапка, 3 - ТЧ Реквизиты.ВидимостьКолонки("ИД",0); Если ПустоеЗначение(ИмяДок) = 0 Тогда Если Общие = 1 Тогда Для Сч=1 По Метаданные.ОбщийРеквизитДокумента() Цикл Реквизиты.НоваяСтрока(); Реквизиты.ИД = Метаданные.ОбщийРеквизитДокумента(Сч).Идентификатор; Реквизиты.Синоним = Метаданные.ОбщийРеквизитДокумента(Сч).Синоним; Если ПустоеЗначение(СокрЛП(Реквизиты.Синоним)) = 1 Тогда Реквизиты.Синоним = Реквизиты.ИД; КонецЕсли; Реквизиты.Тип = Метаданные.ОбщийРеквизитДокумента(Сч).Тип; Реквизиты.Вид = Метаданные.ОбщийРеквизитДокумента(Сч).Вид; Реквизиты.Длина = Метаданные.ОбщийРеквизитДокумента(Сч).Длина; Реквизиты.Точность = Метаданные.ОбщийРеквизитДокумента(Сч).Точность; Реквизиты.Статус = 1; КонецЦикла; КонецЕсли; Если Шапка = 1 Тогда Для Сч=1 По Метаданные.Документ(ИмяДок).РеквизитШапки() Цикл Реквизиты.НоваяСтрока(); Реквизиты.ИД = Метаданные.Документ(ИмяДок).РеквизитШапки(Сч).Идентификатор; Реквизиты.Синоним = Метаданные.Документ(ИмяДок).РеквизитШапки(Сч).Представление(); Если ПустоеЗначение(СокрЛП(Реквизиты.Синоним)) = 1 Тогда Реквизиты.Синоним = Реквизиты.ИД; КонецЕсли; Реквизиты.Тип = Метаданные.Документ(ИмяДок).РеквизитШапки(Сч).Тип; Реквизиты.Вид = Метаданные.Документ(ИмяДок).РеквизитШапки(Сч).Вид; Реквизиты.Длина = Метаданные.Документ(ИмяДок).РеквизитШапки(Сч).Длина; Реквизиты.Точность = Метаданные.Документ(ИмяДок).РеквизитШапки(Сч).Точность; Реквизиты.Статус = 2; КонецЦикла; КонецЕсли; Если ТЧ = 1 Тогда Для Сч=1 По Метаданные.Документ(ИмяДок).РеквизитТабличнойЧасти() Цикл Реквизиты.НоваяСтрока(); Реквизиты.ИД = Метаданные.Документ(ИмяДок).РеквизитТабличнойЧасти(Сч).Идентификатор; Реквизиты.Синоним = Метаданные.Документ(ИмяДок).РеквизитТабличнойЧасти(Сч).Представление(); Если ПустоеЗначение(СокрЛП(Реквизиты.Синоним)) = 1 Тогда Реквизиты.Синоним = Реквизиты.ИД; КонецЕсли; Реквизиты.Тип = Метаданные.Документ(ИмяДок).РеквизитТабличнойЧасти(Сч).Тип; Реквизиты.Вид = Метаданные.Документ(ИмяДок).РеквизитТабличнойЧасти(Сч).Вид; Реквизиты.Длина = Метаданные.Документ(ИмяДок).РеквизитТабличнойЧасти(Сч).Длина; Реквизиты.Точность = Метаданные.Документ(ИмяДок).РеквизитТабличнойЧасти(Сч).Точность; Реквизиты.Статус = 3; КонецЦикла; КонецЕсли; КонецЕсли; Реквизиты.Сортировать("+Синоним"); Возврат Реквизиты; КонецФункции