Обработка предназначена для сохранения и последующего использования настроек по-умолчанию для документов, работает в любой конфигурации 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;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Реквизиты.Сортировать("+Синоним");
Возврат Реквизиты;
КонецФункции