«Локализация» значений констант для пользователей в 1С:7.7
Для каждого пользователя — свои значения констант. 🙂
- Описание
- Подробнее
Описание
Пришла в голову оригинальная мысль, проверил — работает.
// глобальный модуль, блок объявления переменных
Перем Константа;
Перем ТЗКонстанта Экспорт; // (12.12.09) для локальных модулей
// глобальный модуль, блок операторов
Пер = СоздатьОбъект("Периодический");
ДопПериод = 0;
Константа = СоздатьОбъект("ТаблицаЗначений");
Константа.НоваяСтрока();
Для М1 = 1 По Метаданные.Константа() Цикл
ИдКонстанты = Метаданные.Константа(М1).Идентификатор;
Константа.НоваяКолонка(ИдКонстанты);
Если Метаданные.Константа(М1).Периодический = 1 Тогда
// подключим эмуляцию методов периодических констант Получить() Установить()
// через СписокЗначений
СЗ = СоздатьОбъект("СписокЗначений");
Пер.ИспользоватьОбъект(ИДКонстанты);
Пер.ОбратныйПорядок(0);
Если Пер.ВыбратьЗначения() > 0 Тогда
Пер.ПолучитьЗначение();
ДатаНач = Пер.ДатаЗнач;
Пер.ОбратныйПорядок(1);
Пер.ВыбратьЗначения();
Пер.ПолучитьЗначение();
ДатаКон = Пер.ДатаЗнач + ДопПериод;
Для М2 = ДатаНач По ДатаКон Цикл
СЗ.Установить(М2,Пер.ЗначениеНаДату(М2));
КонецЦикла;
КонецЕсли;
Константа.УстановитьЗначение(1,М1,СЗ);
Иначе
Константа.УстановитьЗначение(1,М1,Const.ПолучитьАтрибут(ИдКонстанты));
КонецЕсли;
КонецЦикла;
// локализуем значения для пользователя ;)
Константа.ДатаЗапретаРедактирования = "Это дата запрета редактирования, однако.";
ТЗКонстанта = Константа; // (12.12.09) для локальных модулей
Естественно, после такого «надругательства» методы константы ПолучитьАтрибут() и УстановитьАтрибут() будут работать только в англоязычной версии.
Примечание (12.12.09). Эта подмена встроенного агрегатного типа на объявленную переменную может работать с обращением к ней только из текущего модуля, т.е. локальном модуле ее потребуется заново переопределить
Перем Константа;
Константа = ТЗКонстанта;