свернуть

Настройки по-умолчанию для документов, 1С 7.7

Обработка предназначена для сохранения и последующего использования настроек по-умолчанию для документов, работает в любой конфигурации 1С, платформы 7.7:

Файл можно использовать в меню дополнительных действий. При открытии в параметр нужно передавать список, где первый параметр "Контекст" - это контекст открытой формы документа, второй параметр "Действие" - значения могут быть: "Загрузить" и "Сохранить"

Настройки сохраняются в каталог пользователя, на 1 вид документа может быть неограниченное количество настроек. При сохранении настройки можно отметить галочками какие значения будут загружаться.

Eсли в обработку передан параметр "Действие": "Сохранить", то открывается форма:


сохранить/загрузить настройки по-умолчанию для документов 1С 7.7

  1. название документа
  2. существующие настройки
  3. количество реквизитов участвующих в настройках
  4. таблица с отмеченными реквизитами и их значениями

В обработке дополнительно можно настроить список реквизитов-исключений, которые не будут попадать в список настроек.

Для работы обработки необходимо в глобальный модуль добавить две функции:

глМеню
Функция глМеню(Стр,Ном=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;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	Реквизиты.Сортировать("+Синоним");
	Возврат Реквизиты;
КонецФункции