Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Для Альфа (число прочтений - 7046 )
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Для Альфа
17. Сентября 2017 :: 05:50
Печать  
Добрый день, Алексей!
Во-первых, восторг и благодарность за Ваш труд в создании и поддержке компоненты FormEx.
О себе: не проф, пишу немного для себя и только в 1с77 (ранее использовал Ассемблер, Клиппер, Дельфи и т.п). Набор 1с77+FormEx+1сpp+GflAx в общем более менее, скорее более удовлетворяют практически все потребности в БД. Учитывая свое убеждение, что в программировании невозможных препятствий не существует, давно мучил вопрос, который я хотел задать. Вы написали замечательный метод многоуровневого меню ВыбратьЗначение(). Но что Вас подвигло пойти по пути криворуких авторов 1с. В методе отсутствует вставка в меню полноцветных картинок 16х16? А также отсутствует возможность сделать элемент меню недоступным для выбора. Это существенно ограничивает возможность использования данного метода.
Если возможно, хотелось бы иметь доработанный метод без вышеуказанных недостатков.

С уважением, Сергей.
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #1 - 18. Сентября 2017 :: 07:38
Печать  
Формат картинок такой из-за того, что используются внутренние средства 1С для их хранения (объект Картинка).
Недоступным пункт меню можно сделать, установив пометку в списке значений, служащим основой для меню.
Ну и разделитель можно поставить, добавив "-" в список:
           сзМеню.ДобавитьЗначение("-","-");
  

FormEx developer
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Для Альфа
Ответ #2 - 25. Сентября 2017 :: 15:09
Печать  
Только после третьего уровня вложенности у меня картинки уже не рисуются. И не хватает возврата строкового представления выбранного пункта меню. Нужно для логирования выбора.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Сервис.ОткрытьПлавающуюФорму()
Ответ #3 - 28. Сентября 2017 :: 14:04
Печать  
Алексей, посмотри, пожалуйста, что можно сделать с бордюром?

Используется для вызова:
Сервис.ОткрытьПлавающуюФорму(...);

и в самой форме:
Окно.WindowsStyle(Форма,2);

Проблема с прорисовкой бордюра наблюдается только в Windows XP.


« Последняя редакция: 28. Сентября 2017 :: 21:20 - recop »  
Наверх
 
IP записан
 
vadim2009
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Ярославль
Зарегистрирован: 28. Сентября 2017
Пол: Мужской
Re: Для Альфа
Ответ #4 - 28. Сентября 2017 :: 19:29
Печать  
Добрый вечер, Алексей! Огромное спасибо за FormEx! Давно пользуюсь Вашей компонентой.
Сегодня обновил ее (2.0.5.109) до последней версии 2.0.5.128, перестала работать раскраска списков значений. Судя по всему, не срабатывает метод Сервис.ПерехватОтрисовкиСписков(1), потому что он все время возвращает ноль. Проверьте, пожалуйста...
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервис.ОткрытьПлавающуюФорму()
Ответ #5 - 29. Сентября 2017 :: 11:37
Печать  
recop писал(а) 28. Сентября 2017 :: 14:04:
Алексей, посмотри, пожалуйста, что можно сделать с бордюром?

Используется для вызова:
Сервис.ОткрытьПлавающуюФорму(...);

и в самой форме:
Окно.WindowsStyle(Форма,2);

Проблема с прорисовкой бордюра наблюдается только в Windows XP.


http://imglink.ru/pictures/28-09-17/b763dc4c3caf54412a5fe242a79636bf.jpg


С плавающей формой ничего не поделать. Там все нужно переделывать полностью.
  

FormEx developer
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #6 - 29. Сентября 2017 :: 11:39
Печать  
vadim2009 писал(а) 28. Сентября 2017 :: 19:29:
Добрый вечер, Алексей! Огромное спасибо за FormEx! Давно пользуюсь Вашей компонентой.
Сегодня обновил ее (2.0.5.109) до последней версии 2.0.5.128, перестала работать раскраска списков значений. Судя по всему, не срабатывает метод Сервис.ПерехватОтрисовкиСписков(1), потому что он все время возвращает ноль. Проверьте, пожалуйста...


Я сам этот функционал сейчас не использую. Вроде как не должен был задеть последними правками. Если не сложно, то мне помог бы тестовый пример, где можно было бы посмотреть.
  

FormEx developer
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #7 - 29. Сентября 2017 :: 12:26
Печать  
alyuev писал(а) 25. Сентября 2017 :: 15:09:
Только после третьего уровня вложенности у меня картинки уже не рисуются. И не хватает возврата строкового представления выбранного пункта меню. Нужно для логирования выбора.


Про картинку не подтверждаю.
Строковое представление - это узкая задача. Его можно получить из списка значений, который является основой меню.
  

FormEx developer
Наверх
www  
IP записан
 
vadim2009
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Ярославль
Зарегистрирован: 28. Сентября 2017
Пол: Мужской
Re: Для Альфа
Ответ #8 - 29. Сентября 2017 :: 19:43
Печать  
АЛьФ писал(а) 29. Сентября 2017 :: 11:39:
vadim2009 писал(а) 28. Сентября 2017 :: 19:29:
Добрый вечер, Алексей! Огромное спасибо за FormEx! Давно пользуюсь Вашей компонентой.
Сегодня обновил ее (2.0.5.109) до последней версии 2.0.5.128, перестала работать раскраска списков значений. Судя по всему, не срабатывает метод Сервис.ПерехватОтрисовкиСписков(1), потому что он все время возвращает ноль. Проверьте, пожалуйста...


Я сам этот функционал сейчас не использую. Вроде как не должен был задеть последними правками. Если не сложно, то мне помог бы тестовый пример, где можно было бы посмотреть.


Вот код тестовой обработки, на форме только элемент управления "Список значений" СЗРасшифровка. Проверил, на старой версии 2.0.5.109 работает, на последней - нет.

Код
Выбрать все
Перем Сервис, Таймаут, ТаймерВыхода, ТаймерСчетчика, Заголовок;


// Возвращает значение цвета в десятичном виде
Функция глЦветЧ(R, G, B) Экспорт

    Если (R < 0) ИЛИ (R > 255) ИЛИ (G < 0) ИЛИ (G > 255) ИЛИ (B < 0) ИЛИ (B > 255) Тогда
        Возврат 0;
	Иначе
		Возврат R + G * 256 + B * 256 * 256;
    КонецЕсли;

КонецФункции //глЦветЧ()


//
Функция СписокЦветов()

    СЗ = СоздатьОбъект("СписокЗначений");
	СЗ.ДобавитьЗначение(глЦветЧ(255, 200, 200), "Цвет светло-красный");
	СЗ.ДобавитьЗначение(глЦветЧ(255,   0,   0), "Цвет красный");
	СЗ.ДобавитьЗначение(глЦветЧ(255, 255, 200), "Цвет светло-желтый");
	СЗ.ДобавитьЗначение(глЦветЧ(255, 255, 125), "Цвет желтый");
	СЗ.ДобавитьЗначение(глЦветЧ(255, 150, 255), "Цвет фиолетовый");
	СЗ.ДобавитьЗначение(глЦветЧ(180, 180, 180), "Цвет серый");

	Возврат СЗ;

КонецФункции //СписокЦветов()


//
Функция ПолучитьРасшифровкуЦветов()

	СЗЦвета = СписокЦветов();
    СЗ = СоздатьОбъект("СписокЗначений");
	Для Сч = 1 По СЗЦвета.РазмерСписка() Цикл
		Описание = "";
		Цвет = СЗЦвета.ПолучитьЗначение(Сч, Описание);
		СЗ.ДобавитьЗначение(Цвет, Описание +
					РазделительСтрок + "BRUSH[" + Цвет + "]BRUSH_S[" + Цвет + "]FONT_S[0]");
	КонецЦикла;

	Возврат СЗ;

КонецФункции //ПолучитьРасшифровкуЦветов()


//
Процедура ВыходПоТаймеру()

	Форма.Закрыть();

КонецПроцедуры //ВыходПоТаймеру()


//
Процедура Счетчик()

	Таймаут = Таймаут - 1;

	Форма.Заголовок(Заголовок + " (" + Таймаут + ")");

КонецПроцедуры //ВыходПоТаймеру()


// Предопределенная процедура ПриОткрытии().
Процедура ПриОткрытии()

	Попытка
		Сервис = СоздатьОбъект("Сервис");
	Исключение
		ЗагрузитьВнешнююКомпоненту("FormEx.dll");
		Сервис = СоздатьОбъект("Сервис");
	КонецПопытки;

	Сервис.ПерехватОтрисовкиСписков(1);

	СЗ = ПолучитьРасшифровкуЦветов();
	СЗ.Выгрузить(СЗРасшифровка);

	СтрВерсия = "";
	Сервис.Версия(СтрВерсия);

	Заголовок = "Список цветов. FormEx " + СтрВерсия;
	Форма.Заголовок(Заголовок);

	Таймаут = 60;
	Если ПустоеЗначение(Таймаут) = 0 Тогда
	    ТаймерВыхода = СоздатьОбъект("Таймер");
		ТаймерВыхода.ЗадатьОбработчикВМодулеФормы(Контекст, "ВыходПоТаймеру");
		ТаймерВыхода.Запустить(Таймаут * 1000);
	    ТаймерСчетчика = СоздатьОбъект("Таймер");
		ТаймерСчетчика.ЗадатьОбработчикВМодулеФормы(Контекст, "Счетчик");
		ТаймерСчетчика.Запустить(1000);
		Таймаут = Таймаут - 1;
	КонецЕсли;

КонецПроцедуры //ПриОткрытии()

 


  
Наверх
 
IP записан
 
vadim2009
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Ярославль
Зарегистрирован: 28. Сентября 2017
Пол: Мужской
Re: Для Альфа
Ответ #9 - 29. Сентября 2017 :: 19:47
Печать  
Теперь, наверное, могу уже ссылку на тестовую обработку (раскраска списка значений) выложить https://yadi.sk/d/4bu8OCoP3NLNvz
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #10 - 02. Октября 2017 :: 11:42
Печать  
Поправил раскраску списков. Там почему-то был заремарен код включения раскраски. Видать что-то тестировал и забыл обратно включить.
Можно скачать сборку 129 на dorex.pro
  

FormEx developer
Наверх
www  
IP записан
 
vadim2009
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Ярославль
Зарегистрирован: 28. Сентября 2017
Пол: Мужской
Re: Для Альфа
Ответ #11 - 02. Октября 2017 :: 18:00
Печать  
АЛьФ писал(а) 02. Октября 2017 :: 11:42:
Поправил раскраску списков. Там почему-то был заремарен код включения раскраски. Видать что-то тестировал и забыл обратно включить.
Можно скачать сборку 129 на dorex.pro

Алексей, все заработало, спасибо! У меня на основании раскраски списков выводится справочная информация, что означает каждый цвет в различных таблицах, что-то типа легенды...
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Для Альфа
Ответ #12 - 03. Октября 2017 :: 13:35
Печать  
Цитата:
Его можно получить из списка значений, который является основой меню.


Конечно, так и сделал. Немного заморочливо только с вложенными подменю, но рекурсия, конечно, спасает. Так что это пожелание факультативное.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Для Альфа
Ответ #13 - 03. Октября 2017 :: 13:49
Печать  
На счет картинок во вложенном меню - меня на 94 версии не работает уже на третьем уровне вложенности.

Вставьте здесь свой путь к картинке, и пробуйте этот пример:
Код (C++)
Выбрать все
Картинки=СоздатьОбъект("Картинка");
Картинки.Загрузить(глПутьККартинкам+"1317.bmp");

СпМеню=СоздатьОбъект("СписокЗначений");
СпМеню.ДобавитьЗначение(1,"[icon:1] "+"Пункт 1");
	СпМеню2=СоздатьОбъект("СписокЗначений");
	СпМеню2.ДобавитьЗначение(21,"[icon:1] "+"Пункт 21");
		СпМеню3=СоздатьОбъект("СписокЗначений");
		СпМеню3.ДобавитьЗначение(31,"[icon:1] "+"Пункт 31");
			СпМеню4=СоздатьОбъект("СписокЗначений");
			СпМеню4.ДобавитьЗначение(41,"[icon:1] "+"Пункт 41");
				СпМеню5=СоздатьОбъект("СписокЗначений");
				СпМеню5.ДобавитьЗначение(51,"[icon:1] "+"Пункт 51");
				СпМеню5.ДобавитьЗначение(52,"[icon:1] "+"Пункт 52");
			СпМеню4.ДобавитьЗначение(СпМеню5,"Пункт 42");
		СпМеню3.ДобавитьЗначение(СпМеню4,"Пункт 32");
	СпМеню2.ДобавитьЗначение(СпМеню3,"Пункт 22");
СпМеню.ДобавитьЗначение(СпМеню2,"Пункт 2");
Сервис=СоздатьОбъект("Сервис");Выб=-1;
Сервис.ВыбратьЗначение(СпМеню,Выб,,0,2,Картинки);
 


  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
vadim2009
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Ярославль
Зарегистрирован: 28. Сентября 2017
Пол: Мужской
Re: Для Альфа
Ответ #14 - 03. Октября 2017 :: 17:08
Печать  
alyuev писал(а) 03. Октября 2017 :: 13:49:
На счет картинок во вложенном меню - меня на 94 версии не работает уже на третьем уровне вложенности.


Проверил на 129 версии, все работает... https://yadi.sk/i/B0aIDOet3NSVWT
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Для Альфа
Ответ #15 - 05. Октября 2017 :: 07:26
Печать  
Алексей, всё же с плавающей формой стоит ли ждать доработку?
Очень удобный функционал, расширяет информативность основной формы.
Поведение методов объекта Окна вообще не предсказуемо. Например, Окно.РазмерОкна(...) выбрасывает форму в центр экрана. Зато после применения метода пропадают проблемы с рамкой. Печаль...

С уважением, Сергей.
« Последняя редакция: 05. Октября 2017 :: 09:21 - recop »  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #16 - 05. Октября 2017 :: 10:15
Печать  
recop писал(а) 05. Октября 2017 :: 07:26:
Алексей, всё же с плавающей формой стоит ли ждать доработку?


Нет. Слишком большой объем работы.
  

FormEx developer
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Для Альфа
Ответ #17 - 11. Октября 2017 :: 11:47
Печать  
АЛьФ
В 2.0.5.129 и 2.0.5.129 опять сломалось событие ПослеОткрытия в модальном режиме, в 2.0.5.124 работало.
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #18 - 12. Октября 2017 :: 06:54
Печать  
Djelf писал(а) 11. Октября 2017 :: 11:47:
АЛьФ
В 2.0.5.129 и 2.0.5.129 опять сломалось событие ПослеОткрытия в модальном режиме, в 2.0.5.124 работало.


Вроде не трогал даже близко. Можешь пример сворганить?
  

FormEx developer
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Для Альфа
Ответ #19 - 12. Октября 2017 :: 09:08
Печать  
АЛьФ писал(а) 12. Октября 2017 :: 06:54:
Djelf писал(а) 11. Октября 2017 :: 11:47:
АЛьФ
В 2.0.5.129 и 2.0.5.129 опять сломалось событие ПослеОткрытия в модальном режиме, в 2.0.5.124 работало.


Вроде не трогал даже близко. Можешь пример сворганить?


Да, странное это событие - то появляется, то исчезает.

События формы https://cloud.mail.ru/public/F9WA/bwy4FvZvK
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #20 - 12. Октября 2017 :: 11:10
Печать  
Djelf писал(а) 12. Октября 2017 :: 09:08:
АЛьФ писал(а) 12. Октября 2017 :: 06:54:
Djelf писал(а) 11. Октября 2017 :: 11:47:
АЛьФ
В 2.0.5.129 и 2.0.5.129 опять сломалось событие ПослеОткрытия в модальном режиме, в 2.0.5.124 работало.


Вроде не трогал даже близко. Можешь пример сворганить?


Да, странное это событие - то появляется, то исчезает.

События формы https://cloud.mail.ru/public/F9WA/bwy4FvZvK


Хм... странно.
  

FormEx developer
Наверх
www  
IP записан
 
frantsuz
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 23. Ноября 2017
Re: Для Альфа
Ответ #21 - 23. Ноября 2017 :: 08:40
Печать  
Добрый день, Алексей! Огромное спасибо за FormEx!

Возник вопрос:
Если в обработчике "ПриНачалеБлокировкиОбъекта", установить СтатусВозврата в 0, должны проходить дальнейшие операции с этим объектом, запись, проведение документа, открытие в режиме редактирования и т.д?

Хочу на этот обработчике построить контроль доступа по статусу документа.
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #22 - 23. Ноября 2017 :: 11:52
Печать  
frantsuz писал(а) 23. Ноября 2017 :: 08:40:
Возник вопрос:
Если в обработчике "ПриНачалеБлокировкиОбъекта", установить СтатусВозврата в 0, должны проходить дальнейшие операции с этим объектом, запись, проведение документа, открытие в режиме редактирования и т.д?

Хочу на этот обработчике построить контроль доступа по статусу документа.


Нет. Эта процедура вызывается уже после блокировки объекта. И только в случае успешной блокировки.
Т.е. если системе удалось заблокировать объект, то вызывается эта процедура.
  

FormEx developer
Наверх
www  
IP записан
 
frantsuz
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 23. Ноября 2017
Re: Для Альфа
Ответ #23 - 24. Ноября 2017 :: 02:36
Печать  
АЛьФ писал(а) 23. Ноября 2017 :: 11:52:
frantsuz писал(а) 23. Ноября 2017 :: 08:40:
Возник вопрос:
Если в обработчике "ПриНачалеБлокировкиОбъекта", установить СтатусВозврата в 0, должны проходить дальнейшие операции с этим объектом, запись, проведение документа, открытие в режиме редактирования и т.д?

Хочу на этот обработчике построить контроль доступа по статусу документа.


Нет. Эта процедура вызывается уже после блокировки объекта. И только в случае успешной блокировки.
Т.е. если системе удалось заблокировать объект, то вызывается эта процедура.


Понятно. А можно ли, каким то образом, из этой процедуры прервать выполнение дальнейших операций с объектом?
Например, мы захватили объект, прочитали его свойства и пришли к выводу, что этот объект изменять (записывать, проводить, открывать) нельзя. Как запретить все эти действия?
Изменения через интерфейс, при открытии формы объекта, с помощью Formex, контролировать достаточно просто. Универсальная обработка, там, вроде-бы, в 5 строчек всего...
А вот как контролировать доступ через программную обработку?
П.С. Я в курсе, что можно запрещать открытие внешних обработок. Просто ищу красивое решение.

  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для Альфа
Ответ #24 - 24. Ноября 2017 :: 11:05
Печать  
frantsuz писал(а) 24. Ноября 2017 :: 02:36:
АЛьФ писал(а) 23. Ноября 2017 :: 11:52:
frantsuz писал(а) 23. Ноября 2017 :: 08:40:
Возник вопрос:
Если в обработчике "ПриНачалеБлокировкиОбъекта", установить СтатусВозврата в 0, должны проходить дальнейшие операции с этим объектом, запись, проведение документа, открытие в режиме редактирования и т.д?

Хочу на этот обработчике построить контроль доступа по статусу документа.


Нет. Эта процедура вызывается уже после блокировки объекта. И только в случае успешной блокировки.
Т.е. если системе удалось заблокировать объект, то вызывается эта процедура.


Понятно. А можно ли, каким то образом, из этой процедуры прервать выполнение дальнейших операций с объектом?
Например, мы захватили объект, прочитали его свойства и пришли к выводу, что этот объект изменять (записывать, проводить, открывать) нельзя. Как запретить все эти действия?
Изменения через интерфейс, при открытии формы объекта, с помощью Formex, контролировать достаточно просто. Универсальная обработка, там, вроде-бы, в 5 строчек всего...
А вот как контролировать доступ через программную обработку?
П.С. Я в курсе, что можно запрещать открытие внешних обработок. Просто ищу красивое решение.



Через эту процедуру никак не получился.
Надо что-то другое придумывать.
  

FormEx developer
Наверх
www  
IP записан
 
frantsuz
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 23. Ноября 2017
Re: Для Альфа
Ответ #25 - 27. Ноября 2017 :: 03:28
Печать  
АЛьФ писал(а) 24. Ноября 2017 :: 11:05:
frantsuz писал(а) 24. Ноября 2017 :: 02:36:
АЛьФ писал(а) 23. Ноября 2017 :: 11:52:
frantsuz писал(а) 23. Ноября 2017 :: 08:40:
Возник вопрос:
Если в обработчике "ПриНачалеБлокировкиОбъекта", установить СтатусВозврата в 0, должны проходить дальнейшие операции с этим объектом, запись, проведение документа, открытие в режиме редактирования и т.д?

Хочу на этот обработчике построить контроль доступа по статусу документа.


Нет. Эта процедура вызывается уже после блокировки объекта. И только в случае успешной блокировки.
Т.е. если системе удалось заблокировать объект, то вызывается эта процедура.


Понятно. А можно ли, каким то образом, из этой процедуры прервать выполнение дальнейших операций с объектом?
Например, мы захватили объект, прочитали его свойства и пришли к выводу, что этот объект изменять (записывать, проводить, открывать) нельзя. Как запретить все эти действия?
Изменения через интерфейс, при открытии формы объекта, с помощью Formex, контролировать достаточно просто. Универсальная обработка, там, вроде-бы, в 5 строчек всего...
А вот как контролировать доступ через программную обработку?
П.С. Я в курсе, что можно запрещать открытие внешних обработок. Просто ищу красивое решение.



Через эту процедуру никак не получился.
Надо что-то другое придумывать.


Понял. Вышел из положения тем, что "ПриНачалеБлокировкиОбъекта" делаю бэкап данных объекта, потом, в случае чего, откатываюсь.
Спасибо.
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Для Альфа
Ответ #26 - 27. Ноября 2017 :: 08:45
Печать  
Делай Перехватчиком в обработке события ПриОткрытии. Там вызывай функцию проверки и возращай 0, если нельзя что-либо делать с объектом.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
frantsuz
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 23. Ноября 2017
Re: Для Альфа
Ответ #27 - 27. Ноября 2017 :: 09:19
Печать  
alyuev писал(а) 27. Ноября 2017 :: 08:45:
Делай Перехватчиком в обработке события ПриОткрытии. Там вызывай функцию проверки и возращай 0, если нельзя что-либо делать с объектом.


Не отработает при программной записи документа.
По условию задачи, нужно было запретить редактирование документа по значению реквизитов через интерфейс и через (любую) обработку.
Постановка и решение задачи здесь:
http://source1s.ru/publ/1cv77/ogranichenie_dostupa_k_dokumentam_1s_predprijatie_....
С позволения модераторов, конечно...
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Для Альфа
Ответ #28 - 11. Января 2018 :: 10:46
Печать  
frantsuz писал(а) 27. Ноября 2017 :: 09:19:
alyuev писал(а) 27. Ноября 2017 :: 08:45:
Делай Перехватчиком в обработке события ПриОткрытии. Там вызывай функцию проверки и возращай 0, если нельзя что-либо делать с объектом.


Не отработает при программной записи документа.
По условию задачи, нужно было запретить редактирование документа по значению реквизитов через интерфейс и через (любую) обработку.
Постановка и решение задачи здесь:
http://source1s.ru/publ/1cv77/ogranichenie_dostupa_k_dokumentam_1s_predprijatie_....
С позволения модераторов, конечно...


Мне кажется, что можно и через Событие_ОбработкаПроведения. Правда ПриНачалеРаботыСистемы приходится пользоваться обработкой, чтоб подключить перехват проведения на все документы.
Код (C++)
Выбрать все
Перем Информатор;

Функция гПолучитьПерехватываемыеДокументы()
	сРез="";

	Для й=1 По Метаданные.Документ() Цикл
		МетаДок=Метаданные.Документ(й);
		стрМетаДокВид=МетаДок.Идентификатор;
		сРез=сРез+"
		|	чикСобытийПроведения);";
	КонецЦикла;

	Возврат сРез;
КонецФункции

Процедура __ПодключитьПерехватчики()
	Перехватчик=СоздатьОбъект("Перехватчик");
	ПерехватчикСобытийГМОбъект=СоздатьОбъект("ТПерехватчик");
	Перехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватчикСобытийГМОбъект);

	Модуль=СоздатьОбъект("ВыполняемыйМодуль");
	ТекстМодуля="
	|Процедура __ПодключитьПерехватчикиПроведения()
	|	Перехватчик=СоздатьОбъект(""Перехватчик"");
	|	ПерехватчикСобытийПроведения=СоздатьОбъект(""ТПерехватчик"");"
	+гПолучитьПерехватываемыеДокументы()+"
	|КонецПроцедуры";

	//Сообщить(ТекстМодуля);
	Модуль.НазначитьКонтекст(глВзятьКонтекст(Контекст));
	Модуль.УстановитьМодуль(ТекстМодуля);
	Модуль.КомпилироватьМодуль();
	Модуль.ВыполнитьМодуль();
	Модуль.ПрисоединитьТекущийМодуль();
	Модуль.__ПодключитьПерехватчикиПроведения();
КонецПроцедуры

Сообщить("Регистрация перехватчиков");

НастройкиВК = СоздатьОбъект("УправлениеНастройками");
НастройкиВК.Установить("ПерехватитьСобытияГК",1);
НастройкиВК.Установить("Отладка",0);

Информатор=СоздатьОбъект("Информатор");
лЭтотКонт=глВзятьКонтекст(Контекст);

__ПодключитьПерехватчики();

 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать