Установить стандартные настройки управляемой формы
По теме из базы знаний
- Консоль запросов для управляемых форм 8.3
- Вывод вариантов СКД в таблицы на управляемой форме
- Инструментарий для анализа и редактирования регистров 1С (Управляемые формы)
- "Бесшовная" интеграция с 1С: Документооборотом для стандартных конфигураций без управляемых форм (УПП, УТ 10.3, ЗУП 2.5 и пр.)
- Подсказка для строк динамического списка на управляемых формах
Найденные решения
У меня работает так: в процедуре ПриСозданииНаСервере
КлючОбъекта = "ВнешняяОбработка.ИмяОбработки.Форма.Форма/НастройкиОкна";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта,"", ИмяПользователя());
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
КлючОбъекта = "ВнешняяОбработка.ИмяОбработки.Форма.Форма/НастройкиОкна";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта,"", ИмяПользователя());
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
slvovich; bad_wag; Nerich; Aleksandr_Kotelnikov_mmc; AnPet; user717534; vakham; HalWin; kabantus; nikolasx; Apolonov-Erik; HystriX; natlens; ZDmitry83; Serg2000mr; blandinko; dav1984; user635795_aleksej.alex2011; s512; insurgut; AnddnA; stupidgamer; tancha_cha; Merkalov; rpgshnik; kalyaka; BigB; COMPER;
+28
–
Ответить
Перерыв весь инет. Почитав мнения людей и даже ответы разработчиков, сформировалось мнение... Подобное в платформе просто не реализовано.
Костыль как это все же сделать:
1) Как было предложены выше, все же стараться сделать форму одного размера. Заполнить чем-то пустое пространство, ну или что-то в этом роде.
2) Оказывается программно это можно сделать обычной горячей клавишей восстановления положения окна Alt+Shift+R
На виндовс можно добиться так
Но...Это комбинация срабатывает только когда форма реально открыта. Отследить это в процедурах формы 1С нельзя. ПриОткрытии дает признак, что форма уже открыта, но по факту она еще не отобразилась и этот код не отрабатывает. Пришло в голову подключить обработчик ожидания. Все отработало, но не очень красиво. Т.к. сначала все же открывается форма с проблемными размерами, а потом через секунду уже она становится нормальная.
Обидно, что подобное не реализовано. Всем спасибо за участие.
Костыль как это все же сделать:
1) Как было предложены выше, все же стараться сделать форму одного размера. Заполнить чем-то пустое пространство, ну или что-то в этом роде.
2) Оказывается программно это можно сделать обычной горячей клавишей восстановления положения окна Alt+Shift+R
На виндовс можно добиться так
Shell = Новый COMОбъект("WScript.Shell");
Shell.SendKeys("%+®"); // вызов Alt+Shift+R
Но...Это комбинация срабатывает только когда форма реально открыта. Отследить это в процедурах формы 1С нельзя. ПриОткрытии дает признак, что форма уже открыта, но по факту она еще не отобразилась и этот код не отрабатывает. Пришло в голову подключить обработчик ожидания. Все отработало, но не очень красиво. Т.к. сначала все же открывается форма с проблемными размерами, а потом через секунду уже она становится нормальная.
Обидно, что подобное не реализовано. Всем спасибо за участие.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Какова конечная цель? Зачем сбрасывать настройки, которые сделал пользователь в форме?
Может проще изначально запретить пользователям изменять форму, тогда она всегда будет иметь вид, который задал разработчик.
Может проще изначально запретить пользователям изменять форму, тогда она всегда будет иметь вид, который задал разработчик.
Попробуйте так:
// удаление для текущего пользователя
ХранилищеНастроекДанныхФорм.Удалить("<Полное имя формы>/НастройкиФормы");
// удаление для другого пользователя
ХранилищеНастроекДанныхФорм.Удалить("<Полное имя формы>/НастройкиФормы", , "ИвановИИ");
// если у формы установлено свойство "КлючНазначенияИспользования"
ХранилищеНастроекДанныхФорм.Удалить("<Полное имя формы>/<КлючНазначенияИспользования>/НастройкиФормы");
// пример полного имени формы
ИмяФормы = "Обработка.ВыгрузкаДанных.Форма.Форма1";
Показать
(4)
(5)
Пробовала. Даже удалила полностью все найтроки из этого хранилища. Все равно не работает. Это общая форма.
(2)
Нет, не проще. Используется общая форма. В ней есть много групп, которые необходимо в зависимости от отпределенных условий скрывать и показывать вновь. Так вот, когда, например, показываешь какую то группу, которая имеет большой размер, то сама форма расширяется. 1С это виидмо как то запоминанает. Но потом когда открываешь опять эту форму, то размер у нее меньше и пол формы просто с пустым пространством. Через эту ручную операцию все приходит в норму. Теперь это нужно сделать программно.
(5)
Пробовала. Даже удалила полностью все найтроки из этого хранилища. Все равно не работает. Это общая форма.
(2)
Нет, не проще. Используется общая форма. В ней есть много групп, которые необходимо в зависимости от отпределенных условий скрывать и показывать вновь. Так вот, когда, например, показываешь какую то группу, которая имеет большой размер, то сама форма расширяется. 1С это виидмо как то запоминанает. Но потом когда открываешь опять эту форму, то размер у нее меньше и пол формы просто с пустым пространством. Через эту ручную операцию все приходит в норму. Теперь это нужно сделать программно.
(7) ХранилищеСистемныхНастроек.Удалить("ОбщаяФорма.sendy_ФормаОплаты/Такси/НастройкиОкна", "", ПараметрыСеанса.ТекущийПользователь);
и так
ХранилищеНастроекДанныхФорм.Удалить("ОбщаяФорма.sendy_ФормаОплаты", "НастройкиФормы", ПараметрыСеанса.ТекущийПользователь);
На инфостарте скачала обработку, которая может просматривать и удалять настройки из этого хранилища. Так вот если это сделать, то в моей форме все равно ничего не меняется.
и так
ХранилищеНастроекДанныхФорм.Удалить("ОбщаяФорма.sendy_ФормаОплаты", "НастройкиФормы", ПараметрыСеанса.ТекущийПользователь);
На инфостарте скачала обработку, которая может просматривать и удалять настройки из этого хранилища. Так вот если это сделать, то в моей форме все равно ничего не меняется.
(11) Запустите эту обработку. Есть настройки с ключом объекта "ОбщаяФорма.sendy_ФормаОплаты/НастройкиФормы"?
Прикрепленные файлы:
ПолучитьНастройкиПользователя.epf
(16) Ну вот возьмите эту же обработку. Только что на коленке написал.
Удалите отображение, например, последних 2-х колонок таблицы через "Изменить форму...".
Обновите. Удалите настройку с ключом "ВнешняяОбработка.ПолучитьНастройкиПользователя.Форма.Форма/НастройкиФормы". Колонки появятся.
Удалите отображение, например, последних 2-х колонок таблицы через "Изменить форму...".
Обновите. Удалите настройку с ключом "ВнешняяОбработка.ПолучитьНастройкиПользователя.Форма.Форма/НастройкиФормы". Колонки появятся.
Прикрепленные файлы:
ПолучитьНастройкиПользователя.epf
(21) У меня работает так для внешней обработки:
&НаСервере
Процедура Команда1НаСервере()
ХранилищеСистемныхНастроек.Удалить("ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма/НастройкиФормы",, ИмяПользователя());
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
Показать
(27) Осмелюсь предположить, что дело здесь совсем не в сохраняемых настройках. Видимо, нужно указать форме, чтобы она пересчитала свои размеры в зависимости от видимых на ней элементов. Но как это сделать, я не знаю.
Не получится ли у Вас зайти с другой стороны и сделать форму всегда одного размера? Не использовать изменение видимости групп элементов, а менять их доступность, или же расположить элементы на страницах и программно переключать эти страницы?
Не получится ли у Вас зайти с другой стороны и сделать форму всегда одного размера? Не использовать изменение видимости групп элементов, а менять их доступность, или же расположить элементы на страницах и программно переключать эти страницы?
(45) Это шутка была. Просто случайно ошибся в коде. И заметил, что открытая форма, как обычно с пустым пространством вместо скрытых реквизитов, вдруг изменила свой размер на корректный, когда выскочила ошибка в одной из серверных процедур.
Вам помогло решение в (44)?
Вам помогло решение в (44)?
(37)Нашел на форуме. https://partners.v8.1c.ru/forum/t/1452456/m/1774859
Лехан Александр (1С, Москва) 27.11.2018 13:26
Командой "Установить стандартные настройки формы" сбрасываются два вида настроек:
"Настройки внешнего вида формы" - состав, свойство и взаимное расположение элементов формы (но не размеры)
"Размеры формы и элементов управления" - в т.ч. ширина колонок.
Чтобы сбросить программно первые, надо удалить из системного хранилища настройки с ключом объекта <Полное имя формы> + "/НастройкиФормы".
Вторые - ".../НастройкиОкна" (".../НастройкиОкнаВебКлиента").
Это поможет, только если форма еще не открыта.
Способа программно установить стандартную ширину колонок таблицы у открытой формы сейчас нет.
ПоказатьКомандой "Установить стандартные настройки формы" сбрасываются два вида настроек:
"Настройки внешнего вида формы" - состав, свойство и взаимное расположение элементов формы (но не размеры)
"Размеры формы и элементов управления" - в т.ч. ширина колонок.
Чтобы сбросить программно первые, надо удалить из системного хранилища настройки с ключом объекта <Полное имя формы> + "/НастройкиФормы".
Вторые - ".../НастройкиОкна" (".../НастройкиОкнаВебКлиента").
Это поможет, только если форма еще не открыта.
Способа программно установить стандартную ширину колонок таблицы у открытой формы сейчас нет.
(39) Теоретически, можно. Форма formCustomization.lf же это как-то делает. Только там используется какой-то странный объект "Customizer", который непонятно как инициализируется.
Ну и в (38) вроде бы решение.
Ну и в (38) вроде бы решение.
Прикрепленные файлы:
formCustomization.lf.epf
(42) Еще один способ, который у меня сработал. В обработчике создания формы попробуйте определять свойство формы "КлючСохраненияПоложенияОкна" уникальным строковым значением для каждого из возможных состояний формы. Что-то вроде такого:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...
// Считаем, что скрываемые группы передаются в форму с параметрами:
СкрыватьГруппу1 = ЭтотОбъект.Параметры.СкрытьПервуюГруппу;
СкрыватьГруппу2 = ЭтотОбъект.Параметры.СкрытьВторуюГруппу;
// В зависимости от параметров настраиваем элементы формы.
Элементы.Группа1.Видимость = Не СкрыватьГруппу1;
Элементы.Группа2.Видимость = Не СкрыватьГруппу2;
// И самое главное: для каждой пары значений параметров нужен свой уникальный ключ:
Если СкрыватьГруппу1 И СкрыватьГруппу2 Тогда
ЭтотОбъект.КлючСохраненияПоложенияОкна = "Первый";
ИначеЕсли Не СкрыватьГруппу1 И СкрыватьГруппу2 Тогда
ЭтотОбъект.КлючСохраненияПоложенияОкна = "Второй";
ИначеЕсли СкрыватьГруппу1 И Не СкрыватьГруппу2 Тогда
ЭтотОбъект.КлючСохраненияПоложенияОкна = "Третий";
ИначеЕсли Не СкрыватьГруппу1 И Не СкрыватьГруппу2 Тогда
ЭтотОбъект.КлючСохраненияПоложенияОкна = "Четвертый";
КонецЕсли;
// Можно дать менее осмысленные названия, но более коротким выражением:
ЭтотОбъект.КлючСохраненияПоложенияОкна =
"Группа1" + Формат(СкрыватьГруппу1, "БЛ=Вкл; БИ=Выкл") + "/" +
"Группа2" + Формат(СкрыватьГруппу2, "БЛ=Вкл; БИ=Выкл");
КонецПроцедуры
Показать
(51) Так здесь и настраиваются свойства формы, а именно "КлючСохраненияПоложенияОкна". Но оно будет работать, видимо, при фиксированных настройках видимости элементов. Т.е. их видимость определяется в момент открытия формы и не меняется до ее закрытия.
У Вас, как я понимаю, пользователи интерактивно меняют видимость элементов формы. С этим предложенный мной метод не поможет справится. Да и если я не ошибаюсь, разработчики специально уходят от такого поведения - перестроения формы при изменении видимости ее элементов. Т.о. сокращается количество серверных вызовов во время работы пользователя с интерфейсом формы.
Попробуйте таки предусмотреть интерфейс с оглядкой на то, что размеры формы меняться не будут. Заполните чем-нибудь свободное пространство.
У Вас, как я понимаю, пользователи интерактивно меняют видимость элементов формы. С этим предложенный мной метод не поможет справится. Да и если я не ошибаюсь, разработчики специально уходят от такого поведения - перестроения формы при изменении видимости ее элементов. Т.о. сокращается количество серверных вызовов во время работы пользователя с интерфейсом формы.
Попробуйте таки предусмотреть интерфейс с оглядкой на то, что размеры формы меняться не будут. Заполните чем-нибудь свободное пространство.
(51) Попробуйте такой код вставить в процедуру ПриСозданииНаСервере:
Это должно решить проблему. При каждом открытии формы, будет устанавливаться случайный адрес настроек положения окна. Соответственно, предыдущие настройки никогда не будут найдены и применены. В рамках сеанса они будут накапливаться в оперативной памяти при каждом открытии формы и записаны в ХранилищеСистемныхНастроек при закрытии программы. В следующем сеансе, когда форма будет открыта первый раз, они удалятся.
Минус в том, что строчка "Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор)" может отрабатывать довольно долго, так как будут получены все настройки пользователя, ведь мы не знаем точное имя ключа.
ИмяПользователя = ИмяПользователя();
Отбор = Новый Структура;
Отбор.Вставить("Пользователь", ИмяПользователя);
МассивУдалить = Новый Массив;
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
Пока Выборка.Следующий() Цикл
Если СтрНайти(Выборка.КлючОбъекта, ИмяФормы) > 0 Тогда
МассивУдалить.Добавить(Выборка.КлючОбъекта)
КонецЕсли;
КонецЦикла;
Для Каждого КлючОбъекта Из МассивУдалить Цикл
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта,,ИмяПользователя);
КонецЦикла;
КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор;
ПоказатьЭто должно решить проблему. При каждом открытии формы, будет устанавливаться случайный адрес настроек положения окна. Соответственно, предыдущие настройки никогда не будут найдены и применены. В рамках сеанса они будут накапливаться в оперативной памяти при каждом открытии формы и записаны в ХранилищеСистемныхНастроек при закрытии программы. В следующем сеансе, когда форма будет открыта первый раз, они удалятся.
Минус в том, что строчка "Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор)" может отрабатывать довольно долго, так как будут получены все настройки пользователя, ведь мы не знаем точное имя ключа.
(53)
1) У меня ошибка вылезла.
Ошибка преобразования данных XDTO: Значение: {http://v8.1c.ru/8.1/data/ui/style }НедоступныеДанныеЦвет
2) я же уже говороила, что я обработкой (с таким же кодом) смотрела все настройки, что у меня там хранятся. Удаляла полностью все по текущему пользователю, да и вообще все. Не приходит форма в исходное положение.
ИмяПользователя = ИмяПользователя();
Отбор = Новый Структура;
Отбор.Вставить("Пользователь", ИмяПользователя);
МассивУдалить = Новый Массив;
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
Пока Выборка.Следующий() Цикл
Если СтрНайти(Выборка.КлючОбъекта, ИмяФормы) > 0 Тогда
МассивУдалить.Добавить(Выборка.КлючОбъекта)
КонецЕсли;
КонецЦикла;
Отбор = Новый Структура;
Отбор.Вставить("Пользователь", ИмяПользователя);
МассивУдалить = Новый Массив;
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
Пока Выборка.Следующий() Цикл
Если СтрНайти(Выборка.КлючОбъекта, ИмяФормы) > 0 Тогда
МассивУдалить.Добавить(Выборка.КлючОбъекта)
КонецЕсли;
КонецЦикла;
1) У меня ошибка вылезла.
Ошибка преобразования данных XDTO: Значение: {
2) я же уже говороила, что я обработкой (с таким же кодом) смотрела все настройки, что у меня там хранятся. Удаляла полностью все по текущему пользователю, да и вообще все. Не приходит форма в исходное положение.
Перерыв весь инет. Почитав мнения людей и даже ответы разработчиков, сформировалось мнение... Подобное в платформе просто не реализовано.
Костыль как это все же сделать:
1) Как было предложены выше, все же стараться сделать форму одного размера. Заполнить чем-то пустое пространство, ну или что-то в этом роде.
2) Оказывается программно это можно сделать обычной горячей клавишей восстановления положения окна Alt+Shift+R
На виндовс можно добиться так
Но...Это комбинация срабатывает только когда форма реально открыта. Отследить это в процедурах формы 1С нельзя. ПриОткрытии дает признак, что форма уже открыта, но по факту она еще не отобразилась и этот код не отрабатывает. Пришло в голову подключить обработчик ожидания. Все отработало, но не очень красиво. Т.к. сначала все же открывается форма с проблемными размерами, а потом через секунду уже она становится нормальная.
Обидно, что подобное не реализовано. Всем спасибо за участие.
Костыль как это все же сделать:
1) Как было предложены выше, все же стараться сделать форму одного размера. Заполнить чем-то пустое пространство, ну или что-то в этом роде.
2) Оказывается программно это можно сделать обычной горячей клавишей восстановления положения окна Alt+Shift+R
На виндовс можно добиться так
Shell = Новый COMОбъект("WScript.Shell");
Shell.SendKeys("%+®"); // вызов Alt+Shift+R
Но...Это комбинация срабатывает только когда форма реально открыта. Отследить это в процедурах формы 1С нельзя. ПриОткрытии дает признак, что форма уже открыта, но по факту она еще не отобразилась и этот код не отрабатывает. Пришло в голову подключить обработчик ожидания. Все отработало, но не очень красиво. Т.к. сначала все же открывается форма с проблемными размерами, а потом через секунду уже она становится нормальная.
Обидно, что подобное не реализовано. Всем спасибо за участие.
(56) У меня сработало вот так
Правда это не решает мою задачу, но может вам поможет. Пусть и поздно.
Выборка = ХранилищеСистемныхНастроек.Выбрать();
Пока Выборка.Следующий() Цикл
Если Найти(Выборка.КлючОбъекта, "Документ.БюджетированиеВРегламентнойОперации.Форма.ФормаДокумента") <> 0 Тогда
ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, Выборка.КлючНастроек, Выборка.Пользователь);
КонецЕсли;
КонецЦикла;
ПоказатьПравда это не решает мою задачу, но может вам поможет. Пусть и поздно.
Или вот так можно:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КлючОбъекта="Отчет.<ИмяОтчета>/<ИмяВариантаОтчета>/ТекущиеПользовательскиеНастройки";
СброситьПоложениеОкна(КлючОбъекта,ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
КонецПроцедуры
&НаСервере
Процедура СброситьПоложениеОкна(КлючОбъекта,ИмяПользователя)
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта,"", ИмяПользователя);
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
КонецПроцедуры
Показать
У меня работает так: в процедуре ПриСозданииНаСервере
КлючОбъекта = "ВнешняяОбработка.ИмяОбработки.Форма.Форма/НастройкиОкна";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта,"", ИмяПользователя());
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
КлючОбъекта = "ВнешняяОбработка.ИмяОбработки.Форма.Форма/НастройкиОкна";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта,"", ИмяПользователя());
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
slvovich; bad_wag; Nerich; Aleksandr_Kotelnikov_mmc; AnPet; user717534; vakham; HalWin; kabantus; nikolasx; Apolonov-Erik; HystriX; natlens; ZDmitry83; Serg2000mr; blandinko; dav1984; user635795_aleksej.alex2011; s512; insurgut; AnddnA; stupidgamer; tancha_cha; Merkalov; rpgshnik; kalyaka; BigB; COMPER;
+28
–
Ответить
(59) Огромное спасибище!
Постоянно мучаюсь с разным отображением у пользователей одной и той же формы, отредактированной в расширении.
Причем даже под одной и той же учеткой при запуске в режиме отладки может быть правильное отображение, а в обычном режиме - неправильное. И наоборот.
И, главное, удаление сохраненных настроек пользователя не помогает.
И удаление кэша БД на пользовательской машине не помогает.
И удаление устаревших версий расширений не помогает.
Возможно, нужно чистить кэш сеансовых данных на сервере... Это еще не пробовала.
Пока буду спасаться Вашим решением. Еще раз спасибо!
Постоянно мучаюсь с разным отображением у пользователей одной и той же формы, отредактированной в расширении.
Причем даже под одной и той же учеткой при запуске в режиме отладки может быть правильное отображение, а в обычном режиме - неправильное. И наоборот.
И, главное, удаление сохраненных настроек пользователя не помогает.
И удаление кэша БД на пользовательской машине не помогает.
И удаление устаревших версий расширений не помогает.
Возможно, нужно чистить кэш сеансовых данных на сервере... Это еще не пробовала.
Пока буду спасаться Вашим решением. Еще раз спасибо!
Для обоих вариантов управляемого интерфейса работает вот такое. Удаление срабатывает первом открытии формы при старте сеанса. В рамках сеанса настройки положения окна сохраняются.
Устанавливать КлючСохраненияПоложенияОкна, как в (59) не стоит, если не хотите потом тонны элементов в хранилище настроек, которые надо все обходить и вычищать.
КлючиОбъектов = Новый Массив;
КлючиОбъектов.Добавить(СтрШаблон("%1/НастройкиОкнаТонкогоКлиента", ИмяФормы));
КлючиОбъектов.Добавить(СтрШаблон("%1/Такси/НастройкиОкнаТонкогоКлиента", ИмяФормы));
Для Каждого КлючОбъекта Из КлючиОбъектов Цикл
ХранилищеСистемныхНастроекУдалить(КлючОбъекта, "", ИмяПользователя);
КонецЦикла;
Устанавливать КлючСохраненияПоложенияОкна, как в (59) не стоит, если не хотите потом тонны элементов в хранилище настроек, которые надо все обходить и вычищать.
(70)
Бывают Случаи Когда Очень Надо сбросить настройки при открытии чего либо каждый раз
Если Рассуждать логически то делается Так.
КлючСохраненияПоложенияОкна
Бывают Случаи Когда Очень Надо сбросить настройки при открытии чего либо каждый раз
Если Рассуждать логически то делается Так.
КлючСохраненияПоложенияОкна1 = "КЛЮЧИК1";
КлючСохраненияПоложенияОкна2 = "КЛЮЧИК2";
Отбор.Вставить("КлючОбъекта", "ЖурналДокументов.ЖурналДокументы.Форма.ФормаСписка/КЛЮЧИК1/Такси/НастройкиОкнаТонкогоКлиента");
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
ХранилищеСистемныхНастроек.Удалить КЛЮЧИК1
Получили = КЛЮЧИК1
Отбор.Вставить("КлючОбъекта", "ЖурналДокументов.ЖурналДокументы.Форма.ФормаСписка/КЛЮЧИК2/Такси/НастройкиОкнаТонкогоКлиента");
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
ХранилищеСистемныхНастроек.Удалить КЛЮЧИК2
Получили = КЛЮЧИК2
*************
Если Получили = КЛЮЧИК1 Тогда
КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна2;
Иначе
КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна1;
Показать
(71)
Предыдущий Вариант не прокатил.
Пришлось делать из стандартной обработки и запуск в фоне, чтобы избежать зависаний.
Предыдущий Вариант не прокатил.
Пришлось делать из стандартной обработки и запуск в фоне, чтобы избежать зависаний.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Общ.ЗапускОчисткиВФонеФормы_НаСервере(ЭтаФорма);
КлючСохраненияПоложенияОкна = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_");
КонецПроцедуры
ПоказатьПроцедура ЗапускОчисткиВФонеФормы_НаСервере(эф) Экспорт
ТекстФоновойПроцедуры = "Общ.СброситьРазмерыИПоложениеОкна2(ИмяФормы);";
ИмяКл = "СброситьРазмерыИПоложениеОкна2";
_ИмяФормы = эф.ИмяФормы;
Попытка
ИмяФормы2 = эф.ИмяФормы;
Исключение
ИмяФормы2 = эф;
КонецПопытки;
//Сообщить("ИмяФормы2="+СокрЛП(ИмяФормы2));
ТекущаяяСреда = ВРЕГ(СокрЛП(_ПолучитьТекущуюСредуВыполнения()));
//Сообщить("ТекущаяяСреда="+СокрЛП(ТекущаяяСреда));
Пользователь = Пользователи.АвторизованныйПользователь();
Если ВРЕГ(Пользователь) = "ТОВАРОВЕД" Тогда
ЗаписьЖурналаРегистрации("СброситьРазмерыИПоложениеОкна2", УровеньЖурналаРегистрации.Информация,,,"Запуск Фонового Задания
|"+_ИмяФормы);
Идентификатор = ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры,Новый Структура("ИмяФормы,ИмяКлючаЗадания",_ИмяФормы,ИмяКл));
//ЗаписьЖурналаРегистрации(
// НСтр("ru = 'Запуск Фона'", ОбщегоНазначения.КодОсновногоЯзыка()),
// УровеньЖурналаРегистрации.Ошибка,,,
// ОбработкаОшибок.ПодробноеПредставлениеОшибки(Идентификатор));
//Сообщить("Идентификатор = "+СокрЛП(Идентификатор));
ИначеЕсли ИмяФормы2 = "Обработка.РабочееМестоКассира.Форма.ФормаРМК" Тогда
Если ВРЕГ(Пользователь) = "АДМИНИСТРАТОР" и ТекущаяяСреда = "ТОЛСТЫЙ КЛИЕНТ" Тогда
//Сообщить("Тут");
ЗаписьЖурналаРегистрации("СброситьРазмерыИПоложениеОкна2", УровеньЖурналаРегистрации.Информация,,,"Запуск Фонового Задания
|"+_ИмяФормы);
Идентификатор = ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры,Новый Структура("ИмяФормы,ИмяКлючаЗадания",_ИмяФормы,ИмяКл));
//ЗаписьЖурналаРегистрации(
// НСтр("ru = 'Запуск Фона'", ОбщегоНазначения.КодОсновногоЯзыка()),
// УровеньЖурналаРегистрации.Ошибка,,,
// ОбработкаОшибок.ПодробноеПредставлениеОшибки(Идентификатор));
//Сообщить("Идентификатор = "+СокрЛП(Идентификатор));
КонецЕсли;
КонецЕсли;
//Идентификатор = ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры, ЭтаФорма, Новый Структура("ИмяКлючаЗадания", ИмяКл), ЭтаФорма);
КонецПроцедуры
ПоказатьПроцедура СброситьРазмерыИПоложениеОкна2(Форма) Экспорт
Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда
Возврат;
КонецЕсли;
Попытка
ИмяФормы = Форма.ИмяФормы;
Исключение
ИмяФормы = Форма;
КонецПопытки;
НовыйКлючСохраненияПоложенияОкна = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_");
//Сообщить("НовыйКлючСохраненияПоложенияОкна:"+НовыйКлючСохраненияПоложенияОкна);
КлючОбъектаХранения = ИмяФормы + "/ВременныеКлючиСохраненияПоложенияОкна";
ИмяПользователя = ИмяПользователя();
НачалоДня = НачалоДня(ТекущаяУниверсальнаяДата());
ГраницаУстаревания = НачалоДня - 2*24*60*60;
//ГраницаУстаревания = НачалоДня - 1*24*60*60; //Юра
//Сообщить("ТекущаяУниверсальнаяДата:"+СокрЛП(ТекущаяУниверсальнаяДата()));
//Сообщить("ГраницаУстаревания:"+СокрЛП(ГраницаУстаревания));
Ключи = ХранилищеСистемныхНастроек.Загрузить(КлючОбъектаХранения);
Если ТипЗнч(Ключи) = Тип("Соответствие") Тогда
ИменаНастроек = Новый Массив;
ИменаНастроек.Добавить("/НастройкиОкнаТонкогоКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаТонкогоКлиента");
ИменаНастроек.Добавить("/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/НастройкиОкнаМобильногоКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаМобильногоКлиента");
ТекущиеКлючи = Новый Соответствие(Новый ФиксированноеСоответствие(Ключи));
Для Каждого КлючИЗначение Из ТекущиеКлючи Цикл
ТекущийДень = КлючИЗначение.Ключ;
Если ТипЗнч(ТекущийДень) <> Тип("Дата") Тогда
Ключи = Неопределено;
Прервать;
КонецЕсли;
Если ТекущийДень > ГраницаУстаревания Тогда
Продолжить;
КонецЕсли;
КлючиТекущегоДня = КлючИЗначение.Значение;
Если ТипЗнч(КлючиТекущегоДня) <> Тип("Массив") Тогда
Ключи = Неопределено;
Прервать;
КонецЕсли;
Для Каждого ТекущийКлюч Из КлючиТекущегоДня Цикл
НачалоКлючаОбъекта = ИмяФормы + "/" + ТекущийКлюч;
Для Каждого ИмяНастройки Из ИменаНастроек Цикл
Сообщить("*Уд " + НачалоКлючаОбъекта + ИмяНастройки);
ХранилищеСистемныхНастроек.Удалить(НачалоКлючаОбъекта + ИмяНастройки, "", ИмяПользователя);
КонецЦикла;
КонецЦикла;
Ключи.Удалить(ТекущийДень);
КонецЦикла;
КонецЕсли;
ОчиститьСтарыеКлючи = ТипЗнч(Ключи) <> Тип("Соответствие");
//ОчиститьСтарыеКлючи = Истина; //Юра Удаляет лишние Все Лишние Ключи
Если ОчиститьСтарыеКлючи Тогда
Ключи = Новый Соответствие;
КонецЕсли;
КлючиДня = Ключи.Получить(НачалоДня);
Если ТипЗнч(КлючиДня) <> Тип("Массив") Тогда
КлючиДня = Новый Массив;
Ключи.Вставить(НачалоДня, КлючиДня);
КонецЕсли;
КлючиДня.Добавить(НовыйКлючСохраненияПоложенияОкна);
ХранилищеСистемныхНастроек.Сохранить(КлючОбъектаХранения,, Ключи);
Попытка
Форма.КлючСохраненияПоложенияОкна = НовыйКлючСохраненияПоложенияОкна;
Исключение
КонецПопытки;
Если Не ОчиститьСтарыеКлючи Тогда
Возврат;
КонецЕсли;
Отбор = Новый Структура("Пользователь", ИмяПользователя);
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
//Выборка = ХранилищеСистемныхНастроек.Выбрать();
КлючПоискаРусский = "НастройкиОкнаТонкогоКлиента"; // @Non-NLS
КлючПоискаАнглийский = "ThinClientWindowSettings";
Пока Истина Цикл
Попытка
ЕстьСледующей = Выборка.Следующий();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Ошибка выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
Прервать;
КонецПопытки;
Если Не ЕстьСледующей Тогда
Прервать;
КонецЕсли;
Если Не СтрНачинаетсяС(Выборка.КлючОбъекта, ИмяФормы)
Или Выборка.КлючНастроек <> ""
Или Выборка.КлючОбъекта = КлючОбъектаХранения Тогда
Продолжить;
КонецЕсли;
ЧастиКлючаОбъекта = СтрРазделить(Выборка.КлючОбъекта, "/");
Если ЧастиКлючаОбъекта.Количество() < 2 Тогда
Продолжить;
КонецЕсли;
ПоследняяЧастьКлюча = ЧастиКлючаОбъекта[ЧастиКлючаОбъекта.ВГраница()];
Если СтрНайти(ПоследняяЧастьКлюча, КлючПоискаРусский) > 0
Или СтрНайти(ПоследняяЧастьКлюча, КлючПоискаАнглийский) > 0 Тогда
//ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, "", ИмяПользователя);
Сообщить("*Уд 2 " + НачалоКлючаОбъекта + ИмяНастройки+" Выборка.КлючОбъекта="+СокрЛП(Выборка.КлючОбъекта));
ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, "", );
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
//Модуль ФоновоеВыполнение
Процедура ЗапускОчисткиВФонеФормы_НаСервере(эф) Экспорт
ТекстФоновойПроцедуры = "Общ.СброситьРазмерыИПоложениеОкна2(ИмяФормы);";
ИмяКл = "СброситьРазмерыИПоложениеОкна2";
_ИмяФормы = эф.ИмяФормы;
Попытка
ИмяФормы2 = эф.ИмяФормы;
Исключение
ИмяФормы2 = эф;
КонецПопытки;
//Сообщить("ИмяФормы2="+СокрЛП(ИмяФормы2));
ТекущаяяСреда = ВРЕГ(СокрЛП(_ПолучитьТекущуюСредуВыполнения()));
//Сообщить("ТекущаяяСреда="+СокрЛП(ТекущаяяСреда));
Пользователь = Пользователи.АвторизованныйПользователь();
Если ВРЕГ(Пользователь) = "ТОВАРОВЕД" Тогда
ЗаписьЖурналаРегистрации("СброситьРазмерыИПоложениеОкна2", УровеньЖурналаРегистрации.Информация,,,"Запуск Фонового Задания
|"+_ИмяФормы);
Идентификатор = ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры,Новый Структура("ИмяФормы,ИмяКлючаЗадания",_ИмяФормы,ИмяКл));
//ЗаписьЖурналаРегистрации(
// НСтр("ru = 'Запуск Фона'", ОбщегоНазначения.КодОсновногоЯзыка()),
// УровеньЖурналаРегистрации.Ошибка,,,
// ОбработкаОшибок.ПодробноеПредставлениеОшибки(Идентификатор));
//Сообщить("Идентификатор = "+СокрЛП(Идентификатор));
ИначеЕсли ИмяФормы2 = "Обработка.РабочееМестоКассира.Форма.ФормаРМК" Тогда
Если ВРЕГ(Пользователь) = "АДМИНИСТРАТОР" и ТекущаяяСреда = "ТОЛСТЫЙ КЛИЕНТ" Тогда
//Сообщить("Тут");
ЗаписьЖурналаРегистрации("СброситьРазмерыИПоложениеОкна2", УровеньЖурналаРегистрации.Информация,,,"Запуск Фонового Задания
|"+_ИмяФормы);
Идентификатор = ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры,Новый Структура("ИмяФормы,ИмяКлючаЗадания",_ИмяФормы,ИмяКл));
//ЗаписьЖурналаРегистрации(
// НСтр("ru = 'Запуск Фона'", ОбщегоНазначения.КодОсновногоЯзыка()),
// УровеньЖурналаРегистрации.Ошибка,,,
// ОбработкаОшибок.ПодробноеПредставлениеОшибки(Идентификатор));
//Сообщить("Идентификатор = "+СокрЛП(Идентификатор));
КонецЕсли;
КонецЕсли;
//Идентификатор = ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры, ЭтаФорма, Новый Структура("ИмяКлючаЗадания", ИмяКл), ЭтаФорма);
КонецПроцедуры
Показать
(72)
Дополнение.
Дополнение.
//Модуль ФоновоеВыполнение
Функция КлючПотока(Имя) Экспорт
Возврат Имя;
КонецФункции
Функция ЗапуститьФоновоеВыполнение(ТекстПроцедуры, СтруктураПараметров=Неопределено) Экспорт
//
//Сообщить("ТекстПроцедуры ="+ТекстПроцедуры);
//Сообщить(СтруктураПараметров.Параметр1);
//Сообщить(СтруктураПараметров.Параметр2);
//Сообщить("СтруктураПараметров.ИмяКлючаЗадания=" + СокрЛП(СтруктураПараметров.ИмяКлючаЗадания));
Ключ = КлючПотока(СтруктураПараметров.ИмяКлючаЗадания);
ПараметрыВыполнения = Новый Массив;
ПараметрыВыполнения.Добавить(ТекстПроцедуры);
ПараметрыВыполнения.Добавить(СтруктураПараметров);
Попытка
ТекЗадание = ФоновыеЗадания.Выполнить("ФоновоеВыполнение.ФоноваяПроцедура", ПараметрыВыполнения, Ключ);
Возврат ТекЗадание;
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Процедура ФоноваяПроцедура(ТекстМодуля, ПараметрыВыполнения) Экспорт
ПолныйТекстМодуля = "";
Для Каждого ТекПараметр Из ПараметрыВыполнения Цикл
ПолныйТекстМодуля = ПолныйТекстМодуля+ТекПараметр.Ключ+"=ПараметрыВыполнения."+ТекПараметр.Ключ+";"+Символы.ПС;
КонецЦикла;
//ПолныйТекстМодуля = ПолныйТекстМодуля+"ТабПП"+"=ПараметрыВыполнения."+"ТабПП"+";"+Символы.ПС;
ПолныйТекстМодуля = ПолныйТекстМодуля + ТекстМодуля;
//Сообщить("ПолныйТекстМодуля ="+ПолныйТекстМодуля);
#Если МобильноеПриложениеКлиент или МобильноеПриложениеСервер Тогда
#Иначе
ТекСтр = Новый ТекстовыйДокумент;
ТекСтр.ДобавитьСтроку("********************");
ТекСтр.ДобавитьСтроку(ПолныйТекстМодуля);
ТекСтр.ДобавитьСтроку("********************");
ТекСтр.Записать("C:\1\1111111.txt");
#КонецЕсли
Выполнить(ПолныйТекстМодуля);
КонецПроцедуры
Функция НайтиЗадание(Идентификатор) Экспорт
// Считывает состояние фонового задания по переданному идентификатору.
//
// Параметры:
// Идентификатор - УникальныйИдентификатор - Идентификатор фонового задания.
//
// Возвращаемое значение:
// Неопределено - Задание не найдено.
// Структура - Сведения о задании.
// * Выполняется - Булево - Истина когда фоновое задание еще выполняется.
// * Успешно - Булево - Истина когда сеанс фонового задания завершился без ошибок.
// * Ошибка - Строка, ИнформацияОбОшибке, Неопределено - Описание ошибки.
//
УстановитьПривилегированныйРежим(Истина);
Результат = Новый Структура("Выполняется, Успех, Ошибка", Ложь, Ложь, Неопределено);
Если Идентификатор = Неопределено Тогда
Возврат Результат;
КонецЕсли;
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);
Если Задание = Неопределено Тогда
Возврат Результат;
КонецЕсли;
Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Результат.Выполняется = Истина;
Иначе
Результат.Выполняется = Ложь;
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Результат.Успех = Истина;
Иначе
Результат.Успех = Ложь;
Результат.Ошибка = Задание.ИнформацияОбОшибке;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот