gifts2017

"Локализация" значений констант для пользователей в 1С:7.7

Опубликовал Михаил Семенов (Shaman100M) в раздел Программирование - Практика программирования

Для каждого пользователя - свои значения констант. :)

Пришла в голову оригинальная мысль, проверил - работает.

 // глобальный модуль, блок объявления переменных
Перем Константа;                       
Перем ТЗКонстанта Экспорт;  // (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). Эта подмена встроенного агрегатного типа на объявленную переменную может работать с обращением к ней только из текущего модуля, т.е.   локальном модуле ее потребуется заново переопределить

Перем Константа;        


Константа = ТЗКонстанта;              

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Jers (Jers) 09.09.09 18:15
Действительно надругательство :)
2. Alxd (salexdv) 09.09.09 23:08
3. Михаил Семенов (Shaman100M) 10.09.09 11:05
скорее, муляж :)

Из всех глобальных атрибутов, похоже, "Константа" лучше всего эмулируется, однако, увлекаться этим не стоит. ))
4. Артур Аюханов (artbear) 10.09.09 18:03
C помощью 1С++ и спец.класса можно заставить работать и все методы встроенного объекта :)
5. Артур Аюханов (artbear) 10.09.09 18:07
Что-то подобное я получал при работе над 1С++, но автору все равно заслуженный плюс.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа