|
|
|
Что быстрее - константы или предопределенные элементы. | ☑ | ||
|---|---|---|---|---|
|
0
Гений 1С
гуру
19.10.08
✎
22:54
|
Т.е. если я в коде хочу получить значение К или ПЭ, что быстрее?
|
|||
|
1
MishaSan
19.10.08
✎
22:55
|
Замер производительности тебе в помощь :)
|
|||
|
2
GROOVY
модератор
19.10.08
✎
22:59
|
Константы и предопределенные элементы настолько разные сущности что сравнивать их нельзя. Значения констант хранятся в одной таблице с единственной строкой, а предопределенные элементы фактически ничем не отличаются от обычных, а следовательно для получения значения необходимо найти запись в таблице справочника => константы в этом отношении быстрее.
|
|||
|
3
Mort
19.10.08
✎
23:00
|
Ты в цикле пицот тыщ раз получаешь предопределенный элемент. Чо надо оптимизировать то ?
|
|||
|
4
Mort
19.10.08
✎
23:05
|
Кстати Гений у меня к тебе идея, ты вроде как вложенными формами интересовался? Я готовил интересную реализацию сей задачи, могу поделится, дальше над ней работать нет времени, но в родительскую форму переносятся все элементы дочерней, все правильно реагируют. Для вложения формы достаточно следующих условий:
на родительской форме должна быть панель приемник с именем [твоёимя], реквизит произвольного вида с именем [твоёимя] и вызов в при открытии. В дочерней форме все события extern (т.е экспорт) и скопипастить блок функций. Если интересно могу отослать. |
|||
|
5
Mort
19.10.08
✎
23:06
|
Прекрасно отрабатывет вложенные формы с панелями и можно (по теории не проверял) вкладывать вложенные формы во вложенные.
|
|||
|
6
Mort
19.10.08
✎
23:09
|
Только для каждого вида элемента надо написать корректное копирование свойств, пока готовы кнопки, поля ввода, флажки, панели, почти таблицы и командные панели. Новые элементы в коде дописываются по мере развития.
|
|||
|
7
Гений 1С
гуру
19.10.08
✎
23:10
|
(4) У меня уже вложенные формы реализованы достаточно качественно.
Чтобы одна форма вложилась в другую достаточно разместить на форме панель и назвать ее DYNAF_ИмяВложеннойФормы. Все. Весь функционал подхватывается. Ну и естесвенно, моим парсером пропарсить все формы, чтобы поддерживалась расширенная обработка событий. ;-) Можешь конечно выслать, но я думаю у меня круче. Кроме того, у меня можно использовать единственный экземпляр вложенной формы для всех форм, где она используется, т.е. это экономия памяти. |
|||
|
8
Гений 1С
гуру
19.10.08
✎
23:11
|
(6) Аналогичная ситуация... Мне ВФ сильно помогли в написании функционала ПИМ - раньше я корячился, теперь свободно юзаю собственные элементы управления.
|
|||
|
9
Гений 1С
гуру
19.10.08
✎
23:12
|
(3) я думаю, что выбрать для хранения предопределенных элементов - константы (хочу их) или предопределенные элементы.
|
|||
|
10
Злобный Йожег
19.10.08
✎
23:13
|
Системные часы по-любому быстрее...
|
|||
|
11
Mort
19.10.08
✎
23:13
|
(7) Где можно посмотреть?
|
|||
|
12
Mort
19.10.08
✎
23:14
|
И что значит пропарсить все формы?
|
|||
|
13
Mort
19.10.08
✎
23:15
|
Как у тебя может быть один экземпляр формы для всех вложений, если она может быть в состояниях (текущая страница панели например?)
|
|||
|
14
Mort
19.10.08
✎
23:16
|
И у тебя вложенные формы специально написанные, или функционал позволяет подхватывать любую форму (объекта документа например) внеся в неё небольшие изменения есть?
|
|||
|
15
GROOVY
модератор
19.10.08
✎
23:19
|
ребята чувствую нашли друг друга...
|
|||
|
16
Mort
19.10.08
✎
23:20
|
(15) хорош глумиться
|
|||
|
17
Господин ПЖ
19.10.08
✎
23:22
|
рыбак рыбака видит издалека...
|
|||
|
18
vde69
19.10.08
✎
23:25
|
параметры сеанса юзай. а если надо между сеансами хранить то регист сведений
|
|||
|
19
Mort
19.10.08
✎
23:26
|
(17) Ну предложи чо нить умное по вопросу, разъясни рыбаку. Я вопрос задал не с фиксином брататься, а задачу решить. Нет предложений - не флуди.
|
|||
|
20
GROOVY
модератор
19.10.08
✎
23:31
|
(18) Да это быстрее констант и справочников. Кроме того храниться на клиенте.
|
|||
|
21
vde69
19.10.08
✎
23:33
|
(20) я-то знаю, а вот Гений видимо нет :)
|
|||
|
22
GROOVY
модератор
19.10.08
✎
23:36
|
(21) Не трогай его, он придумывает вложенные формы. Жесть ждет гения при выходе УП.
|
|||
|
23
Mort
19.10.08
✎
23:38
|
Оптимизация, это конечно здорово. Только ещё лучше когда она применяется там где надо. Есть ещё читабельность, структурность, модульность. Если оптимизация не покрывает потери трёх описанных компонент, нафиг она нужна. Приведите пример создания параметра сеанса заменяющего предопределенные элементы справочника, только для улучшения быстродействия. Приведете достойный пример, признаю Вашу рульность.
|
|||
|
24
Mort
19.10.08
✎
23:47
|
(22) Герб Саттер. Сложные задачи на C++:
Какое наибольшее количество плюсов(+) могут быть расположены подряд, без пробелов в корректной проге на C++? Мда, нахер об этом страдать? В чем прикол? Вот выйдет новый Яп, там не будет дебильных вопросов. |
|||
|
25
Гений 1С
гуру
20.10.08
✎
00:36
|
сча выложу на инфостарт очередную версию пим, в старой версии механизм форм не такой удобный. шас. погодь
http://infostart.ru/projects/1085/download.php?file=4040 Вот здесь можно посмотреть вложенные формы. ;-) Например в справочнике задач или контактов или веб-страниц. |
|||
|
26
Гений 1С
гуру
20.10.08
✎
00:39
|
(12) выгрузить модули, обработать их обработкой (я вставляю лично заглушки для всех событий и вызов инициализатора формы), а затем загрузить обратно - это я называю пропарсить
|
|||
|
27
Гений 1С
гуру
20.10.08
✎
00:41
|
(14) вложенные формы специально прописанные, но можно в принципе исполозовать готовую, если обращение к элементам формы заменить на П.Элементы и явно прописать связь элементов с данными, т.е. не использовать явно свойство Данные элементов.
имеется ввиду, что вложенная форма содержит только код, а данные ее хранятся в форме-владельце, то бишь поэтому если создается 100 форм, использующих вложенную, то создается только 1 экземпляр вложенной формы. ;-) |
|||
|
28
Гений 1С
гуру
20.10.08
✎
00:42
|
(18) 1с не рекомендует использовать большое количество параметров сеанса. ;-)
|
|||
|
29
Mort
20.10.08
✎
00:42
|
(26) Блин. Вот эт гимор. Модули обработкой менять. А не легче по принципу ООП в форме держать базовый экземпляр и наследовать его обработчики (перегружать их)
|
|||
|
30
Mort
20.10.08
✎
00:43
|
Блин, а чем твой файл открывать, у него расширения нет нифига.
|
|||
|
31
Гений 1С
гуру
20.10.08
✎
00:43
|
(20)(21) я че-то не понял, чо значит быстрее. Разве предопределенные элементы не хранятся в конфигурации в виде метаданных? то бишь они по любому быстрее, чем константы. ;-) че то я туплю сегодня. ;-)
|
|||
|
32
Гений 1С
гуру
20.10.08
✎
00:45
|
(29) Как ты это будешь делать на практике? Не могу себе представить. Если что, то механизм добавления новых элементов в 1с тормознутый, так что создание формы с большим числом элементов чисто программно довольно медленный.
|
|||
|
33
Гений 1С
гуру
20.10.08
✎
00:45
|
(30) написано же - DT
|
|||
|
34
GROOVY
модератор
20.10.08
✎
00:50
|
(26) Слыхал такое "назначение обработчиков"?
|
|||
|
35
Mort
20.10.08
✎
00:50
|
Не, туфта. Моя тема круче. Во первой, в форме содержится реквизит который содержит экземпляр своей дочерней формы, который отображается в родительской с помощью деструктивного анализа (1 раз при открытии). Дальше обычная виндовая тема: получаем событие, передаем состояние вложенного объекта в базу, вызываем базовый обработчик, копируем свойства в близнец на форме. Самое зачетное (и я уверен у тебя этого нет) можно редактировать дочернюю форму (добавлять события, элементы и т.д. без постоянного парсинга, от которого у рядового прогера ужи заложит.
|
|||
|
36
Mort
20.10.08
✎
00:51
|
И твоя тема решает формы вложенные в другие формы?
|
|||
|
37
GROOVY
модератор
20.10.08
✎
00:51
|
(31) Предопределенные элементы хранятся отдельно от данных. В данных только их копия, точнее клоны. Посему обращение к ним равносильно обращению к обычным элементам справочника.
|
|||
|
38
Гений 1С
гуру
20.10.08
✎
00:53
|
(34) Если это намек на подписку, то на события ФОРМЫ пока еще подписок не сделали. ;-)
|
|||
|
39
Гений 1С
гуру
20.10.08
✎
00:53
|
(37) Когда я пишу Если Валюта = Справочники.Валюты.Доллар, то обращения к БД не происходит, понимаешь о чем я.
|
|||
|
40
Гений 1С
гуру
20.10.08
✎
00:55
|
(35) ну круче, значит круче. ;-) меня и так устраивает. Деструктивный анализ работает довольно долго, на практике у тебя нормально по скорости выходит? Вышли какой-нибудь работающий демо пример.
Вложение во вложенную пока не делал, мне и так хватает. ;-) |
|||
|
41
Гений 1С
гуру
20.10.08
✎
00:56
|
(35) поясни как ты транслируешь события главной формы в дочернюю. ;-)
|
|||
|
42
GROOVY
модератор
20.10.08
✎
00:56
|
(38) Это совсем другой намек...
(39) Видно у тебя платформа лучше. Попробуй данные этого элемента выбрать, код там или наименование... |
|||
|
43
Mort
20.10.08
✎
00:57
|
Жесть. У тебя формы вложенные надо разрабатывать шоп-ц. У меня просто в ЛЮБОЙ форме достаточно все обработчики сделать "экспорт". Кстати для добавления функционала вложенных форм достаточно скопировать 1 общий модуль и все.
Один косяк, привязки вложенной формы почти работали, но помешала хрень которая восстанавливает размеры форм при открытии... Может скоро найду решение. У тебя таких вопросов и в помине нет. |
|||
|
44
Mort
20.10.08
✎
01:03
|
Т.е моя концепция позволяет сделать форму в готовой конфе в которой закладки справочники, справочник такой-то, справочник такой то. Когда прогер делает, что в некой форме списка справочника некоторые строки выводятся другим цветом, у меня в форме все эти изменения видны, прогер не думает про парсеры. Это концепция ООП, а ты предлагаешь хрень.
|
|||
|
45
Mort
20.10.08
✎
01:07
|
Кстати о задаче про плюсы. Офигенная задача. Кто-то может ответить?
|
|||
|
46
Mort
20.10.08
✎
01:08
|
(41) Рабочая прога с реальным примером на работе, завтра открою тему. Мыло твоего не вижу чтобы выслать.
|
|||
|
47
Mort
20.10.08
✎
01:14
|
(41) Я в родительскую форму добавляю список функций обрабтчиков ВСЕХ возможных обработчиков элементов (блок не слабый, десятки функций, не надо тереть что время компиляции сыграет роль) И на двойники элементов в родительской назначаю эти функции, а по элементу-аргументу вычисляю кто в моей дочерней форме должен отреагировать (ведь мои родительские элементы-копии названы [твоеимя]_имяэлементадочернейформы (совсем забыл, "твоеимя" не должно содержать "_") и вызываем обработчик в нашей базовой реквизите-форме.
|
|||
|
48
Mort
20.10.08
✎
01:23
|
Т.е если в дочерней форме на кнопке "Кнопка1" назначет обработчик "КнопкаЙоптНажатие", то мы в родительской форме создаем элемент "Панель1_Кнопка1" с событием ОбработчикВложеннойФормыНажатие (эта функция одна на все нажатия всех элементов вложенных форм. Я не говорил что у меня можно вкладывать сколько угодно форм?) Эта функция через имя параметра "Элемент" во первых, получает имя реквизита вложенной формы (где она хранится) во вторых имя элемента вложенной формы. Ну и конечно сам вид события и его параметры (отказ, стандартнаяобработка и т.д.). Узнаем какая функция привязана к элементу дочерней функции на это событие и
РодительскаяФорма.ПанельДочернейФормы.КнопкаЙоптНажатие(ЭлементДочернейФормы) После этого считываем состояния всех элементов дочерней в родительскую. Ведь по кнопке можно изменить поле, ограничение типа или заголовок другого элемента. |
|||
|
49
ado
20.10.08
✎
01:23
|
(45) Пять?
|
|||
|
50
Гений 1С
гуру
20.10.08
✎
01:25
|
(42) об этом речь не идет. для того, чтобы получить ссылку предопределенного, обращение к базе не идет.
|
|||
|
51
Гений 1С
гуру
20.10.08
✎
01:26
|
(42) тогда поясни какой намек, а то я не понял
Вот кстати код одной вложенной формы: //Ключ Событие Функция Событие(П) Экспорт Если П.Событие = "Соединение" Тогда П.Данные.Вставить("Объект", П.Объект); П.Данные.Вставить("ОписательКатегорий", ); П.Данные.Вставить("КатегорииОбъекта", ); П.Данные.Вставить("КатегорииОбъектаНачало", ); ИначеЕсли П.Событие = "ПриОткрытии" ИЛИ П.Событие = "ПослеЗаписи" Тогда //Чтение данных и повторное чтение данных из объекта П.Данные.КатегорииОбъекта = пимПолучитьКатегорииОбъектов(Новый Структура("Дата, Ссылки", ТекущаяДата(), П.Данные.Объект.Ссылка)).ВыгрузитьКолонку("Категория"); П.Данные.КатегорииОбъектаНачало = обСкопироватьМассив(П.Данные.КатегорииОбъекта); //Устанавливаем текст категории ОтобразитьКатегории(П); ИначеЕсли П.Событие = "ПриЗаписи" Тогда Если НЕ П.Отказ Тогда пимКатегории.пимЗаписатьКатегории(П.Данные.Объект, П.Данные.КатегорииОбъектаНачало, П.Данные.КатегорииОбъекта); КонецЕсли; ИначеЕсли П.Событие = "ОбработкаВыбора" И обСтруктураСвойство(П.ЗначениеВыбора, "ВидЗначения") = "ИзвещениеОтРедактораПризнаков" Тогда Если ТипЗнч(П.ЗначениеВыбора)=Тип("Структура") И П.ЗначениеВыбора.Свойство("ТипПризнака") И П.ЗначениеВыбора.ТипПризнака="Категория" Тогда П.Данные.КатегорииОбъекта.Очистить(); Для Каждого Стр ИЗ П.ЗначениеВыбора.ТаблицаКонечная Цикл Если Стр.Флаг=Перечисления.пимДаНетНеопределено.Да Тогда П.Данные.КатегорииОбъекта.Добавить(Стр.Категория); КонецЕсли; КонецЦикла; ОтобразитьКатегории(П); КонецЕсли; //Если ТипЗнч(П.ИсточникВыбора)=Тип("Форма") И П.ИсточникВыбора.КлючФормы = ГуидВыбора Тогда //КонецЕсли; ИначеЕсли П.Имя = "ПолеКатегорий" И П.Событие = "ОкончаниеВводаТекста" Тогда ПолеКатегорийОкончаниеВводаТекста(П); ИначеЕсли П.Имя = "ПолеКатегорий" И П.Событие = "НачалоВыбора" Тогда ПолеКатегорийНачалоВыбора(П); КонецЕсли; КонецФункции Функция ОтобразитьКатегории(П) //Устанавливаем текст категории П.Данные.ОписательКатегорий = пимРедакторСпискаТекстом.НаборВСтроку(Новый Структура("Элементы", П.Данные.КатегорииОбъекта)); П.Элементы.ПолеКатегорий.Значение = П.Данные.ОписательКатегорий.Представление; КонецФункции Процедура ПолеКатегорийОкончаниеВводаТекста(П) //Проверяем, поменялся ли текст Если СокрЛП(П.Текст) = П.Данные.ОписательКатегорий.Представление Тогда Возврат; КонецЕсли; РезКатегорииОбъекта = Новый Массив(); //Нужно проверить, какие категории были введены в поле ПРазбивка = пимРедакторСпискаТекстом.СтрокуВНабор(Новый Структура("Представление", П.Текст)); Для Каждого Эл ИЗ ПРазбивка.СтроковыеЭлементы Цикл //По строке ищем в таблице соответстие СтрокиТЗ = П.Данные.ОписательКатегорий.Элементы.НайтиСтроки(Новый Структура("Представление", Эл.Представление)); //Если найдено, подставляем найденную категорию //!!! Пока не обыгрывается, если будет несколько одинаковых категорий, потом Если СтрокиТЗ.Количество()>0 Тогда РезКатегорииОбъекта.Добавить(СтрокиТЗ[0].Элемент); Продолжить; КонецЕсли; //Если не найдено, тогда ищем по части наименования СтрокаПоиска = Эл.Представление; ТЗПоиск = обБыстрыйЗапрос( "ВЫБРАТЬ | пимКатегории.Ссылка, | пимКатегории.Наименование КАК Наименование |ИЗ | Справочник.пимКатегории КАК пимКатегории |ГДЕ | пимКатегории.Наименование ПОДОБНО ""%"" + &Поиск + ""%"" | |УПОРЯДОЧИТЬ ПО | Наименование" , Новый Структура("Поиск", СтрокаПоиска)); //Если не найдено ни одного элемента, предупредим об этом потом пользователя Если ТЗПоиск.Количество() = 0 Тогда Предупреждение("По части наименования """ + СтрокаПоиска + """ не найдена категория!"); Продолжить; КонецЕсли; //Если найден элемент, его и используем Если ТЗПоиск.Количество() = 1 Тогда РезКатегорииОбъекта.Добавить(ТЗПоиск[0].Ссылка); Продолжить; КонецЕсли; //Если найдено несколько элементов или не одного, предлагаем пользователю выбор Выбор = ТЗПоиск.ВыбратьСтроку("Выберите категорию, соответстующую элементу: "+СтрокаПоиска); Если Выбор = Неопределено Тогда Предупреждение("По части наименования """ + СтрокаПоиска + """ не сделан выбор категории!"); Иначе РезКатегорииОбъекта.Добавить(Выбор.Ссылка); КонецЕсли; КонецЦикла; П.Данные.КатегорииОбъекта = РезКатегорииОбъекта; ОтобразитьКатегории(П); КонецПроцедуры Процедура ПолеКатегорийНачалоВыбора(П) ГуидВыбора = обУникальныйИдентификатор(); Ф=Обработки.пимРедакторПризнаков.ПолучитьФорму(,П.Форма, ГуидВыбора); Ф.флОдноЗначение=Истина; ПризнакСтр=Ф.Признаки.Добавить(); ПризнакСтр.Имя="Категория"; ПризнакСтр.Тип=Новый ОписаниеТипов(обМассивИзЗначения(Тип("СправочникСсылка.пимКатегории"))); Ф.ТипПризнака="Категория"; Ф.ТаблицаИсходная.Колонки.Добавить("Категория"); Для Каждого Эл ИЗ П.Данные.КатегорииОбъекта Цикл НовСтр=Ф.ТаблицаИсходная.Добавить(); НовСтр.Ссылка=обДатьТочнуюСсылку(П.Данные.Объект); НовСтр.Категория=Эл; КонецЦикла; Ф.Открыть(); КонецПроцедуры |
|||
|
52
Mort
20.10.08
✎
01:28
|
(49) Ого! Тяжелая артиллерия подтянулась :). Можно изворотиться на больше. Намного. Честно говоря я сам не решил. Я то и в плюсах не силен. Но можно. Особенно помня что компилер действует по принципу жадности, хавает как можно больше, посему нельзя писать
template<class T = X<Y>> надо писать: template<class T = X<Y> > ибо >> расценивается как сдвиг |
|||
|
53
Гений 1С
гуру
20.10.08
✎
01:30
|
(48) мальчик. отдыхай. Ты просто рисуешь вложенную форму, а ее поведение описываешь в родительской.
Если ты вставишь вложенную форму Х в форму А и Б, то тебе придется описывать поведение вложенной формы в формах А и Б. У меня достаточно просто разместить реквизт типа панель и не нужно никакого кодинга на родительской форме. а парсинг делается только раз для всех форм и дает много других бонусов типа перехвата событий всех форм в одном месте (а-ля подписка). |
|||
|
54
Гений 1С
гуру
20.10.08
✎
01:31
|
а вопросы привязок я тоже решал и решил более-менее успешно. ;-)
|
|||
|
55
Гений 1С
гуру
20.10.08
✎
01:32
|
(48) короче я думал у тебя че то толковое, а у тебя детский сад. ;-)
посмотри мою конфу, почеши репу... ;-) |
|||
|
56
ado
20.10.08
✎
01:33
|
(52) Да какая тут тяжелая ... я на плюсах вообще только пару простейших лаб делал. Так навскидку сказал. Что пять можно, точно знаю, а вот что получится, если больше, не очень представляю.
|
|||
|
57
Гений 1С
гуру
20.10.08
✎
01:34
|
(53) Вот ты мне скажи друг, обработчики событий у тебя описываются во вложенной форме, ок. Как она узнает, что ей надо работать не со своим элементом, а с элементом, который скопирован на мастер-форму.
|
|||
|
58
Mort
20.10.08
✎
01:39
|
(53) Насчёт мальчика, ты это.. , не груби незнакомым мужчинам, советую взять на вооружение. В родительскую надо просто скопипастить блок функций не залезая в них, а экземпляр вложенной формы работает со своими элементами, как базовый класс не лезет в наследники. А элементы на форме есть отражение элементов базы. Короче я рассмотрю твой код, завтра к полудню найдемся на форуме и посмотрим у кого длиннее.
|
|||
|
59
Mort
20.10.08
✎
01:42
|
(56) Можно скока угодно.
class A { A& operator++(){return *this;} A& operator+(){return *this;} }; Пишем: A a; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++a; - вернет a |
|||
|
60
ado
20.10.08
✎
01:51
|
(59) Красиво ... вот за это я и не люблю С++ ;-)
|
|||
|
61
Гений 1С
гуру
20.10.08
✎
03:01
|
(58) Гыгыгы... А если код поменяется вложенной формы, опять скопипастить? Естественно, длиннее у меня, я уже сейчас вижу все ляпы твоего решения. Вы батенька на программиста учились или так? (без обид, просто интересно)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |