РегистрыСведений.КонтактнаяИнформация.Получить

1. jimli 7 17.07.19 12:16 Сейчас в теме
Туплю...
Вызов функций:
ВернутьАдрес(ДокСсылка.Организация, Перечисления.ТипыКонтактнойИнформации.Адрес, Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации)
ВернутьКонтакт(ДокСсылка.Организация, Перечисления.ТипыКонтактнойИнформации.Телефон)

Сам код функций. Первая отрабатывает, все ок.
Функция ВернутьАдрес(Объект, Тип, Вид)
	Адр = РегистрыСведений.КонтактнаяИнформация.Получить(Новый Структура("Объект, Тип, Вид", Объект, Тип, Вид)); 
	ПолныйАдр = "";
	Если не Адр = Неопределено тогда
		ПолныйАдр = адр.представление;
	конецесли; 
	возврат ПолныйАдр;
конецфункции  
Показать



Здесь пытаюсь вернуть все телефоны, не указывая вида. Пробовала по-разному, не получается...



Функция ВернутьКонтакт(Объект, Тип, Вид = Неопределено)
	Контакт = РегистрыСведений.КонтактнаяИнформация.Получить(Новый Структура("Объект, Тип, Вид", Объект, Тип, Вид)); 
	пКонтакт = "";
	Если не Контакт = Неопределено тогда
		пКонтакт = Контакт.представление;
	конецесли; 
	возврат пКонтакт;
конецфункции 
Показать


В Вид мне не нужно ничего вставлять
По теме из базы знаний
Найденные решения
10. jimli 7 17.07.19 12:57 Сейчас в теме
Результат :-)
Спасибо всем!
Процедура ЗаписатьКонтактыВXML(ЗаписьXML, Объект)
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("Контакт");
	
	Запрос = новый запрос;
	запрос.Текст = "ВЫБРАТЬ
	               |	КонтактнаяИнформация.Представление
	               |ИЗ
	               |	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
	               |ГДЕ
	               |	КонтактнаяИнформация.Объект = &Объект
	               |	И КонтактнаяИнформация.Тип = &Тип";
	запрос.УстановитьПараметр("Объект", Объект);
	запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
	
	рез = запрос.Выполнить();
	если не рез.Пустой() тогда
		выборка = рез.Выбрать();
		пока выборка.Следующий() цикл
			если не выборка.Представление = "" тогда
				КонтактИнфо = выборка.Представление;
			КонецЕсли;
		КонецЦикла;
		ЗаписьXML.ЗаписатьАтрибут("ЭлПочта", КонтактИнфо);
	КонецЕсли;

	запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);
	
	рез = запрос.Выполнить();
	если не рез.Пустой() тогда
		выборка = рез.Выбрать();
		пока выборка.Следующий() цикл
			если не выборка.Представление = "" тогда
				КонтактИнфо = выборка.Представление;
			КонецЕсли;
		КонецЦикла;
		ЗаписьXML.ЗаписатьАтрибут("Тлф", КонтактИнфо);
	КонецЕсли;

	ЗаписьXML.ЗаписатьКонецЭлемента(); // Контакт
		
КонецПроцедуры
Показать
4. YannikAlx 43 17.07.19 12:31 Сейчас в теме
(2) Пишите запрос = так будет и вам понятнее и работать будет универсально
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. jimli 7 17.07.19 12:25 Сейчас в теме
Да, на последнюю функцию пишет ошибку:
{ВнешняяОбработка.Test.МодульОбъекта(416)}: Ошибка при вызове метода контекста (Выбрать)
Контакт = РегистрыСведений.КонтактнаяИнформация.Выбрать(Новый Структура("Объект, Тип, Вид", Объект, Тип, Вид));

Недопустимое значение параметра (параметр номер '1')
4. YannikAlx 43 17.07.19 12:31 Сейчас в теме
(2) Пишите запрос = так будет и вам понятнее и работать будет универсально
5. jimli 7 17.07.19 12:33 Сейчас в теме
(4)
(2)
Кстати да, хороший совет. Час убила на красивую запись, результат нулевой...
6. YannikAlx 43 17.07.19 12:37 Сейчас в теме
(5) Красота в программировании только мешает!
Самые быстрые тексты - не красивые....
Кстати вы в курсе что программый код в одну строку работает быстрее чем форматированный текст?
8. catena 110 17.07.19 12:43 Сейчас в теме
(6)
Кстати вы в курсе что программый код в одну строку работает быстрее чем форматированный текст?
Ну зачем вводить девочку в заблуждение? Поверит же, над ней потом смеяться будут.
9. YannikAlx 43 17.07.19 12:54 Сейчас в теме
(8)Век живи, век учись , но помирать все равно дураком....
Всегда есть тайные знания для каждого...
Вам по секрету открою-
http://www.gilev.ru/forum/viewtopic.php?f=18&t=1158
https://infostart.ru/public/71130/#Pro_cikly_v_odnu_stroku
https://forum.mista.ru/topic.php?id=659371&page=2

Да море ссылок и тем...
Странно, что они прошли мимо вас
12. catena 110 17.07.19 13:04 Сейчас в теме
(9)Они не прошли мимо меня. Но если уж выдаете эту информацию, то ее надо объяснять: откуда и на сколько эта экономия происходит. А то я правда разбирала как-то конфигурацию альтернативно-одаренной личности. С модулями в одну строчку и без больших букв. Оптимизаторы.
18. YannikAlx 43 17.07.19 13:10 Сейчас в теме
(12) это не оптимизаторы...
Это вполне может быть результат обфускации.
там еще кроме одной строки и названия переменных полностью бредовые
20. catena 110 17.07.19 13:11 Сейчас в теме
(18)Нене, там вполне читабельный код, ручками написанный. Результаты обфускации я видела, тут человек свято верил в это ускорение.
13. catena 110 17.07.19 13:05 Сейчас в теме
(9)
А эта ветка у меня даже в закладках, оказывается) Орефков с Чистяковым там обосновательно зацепили.
16. YannikAlx 43 17.07.19 13:08 Сейчас в теме
(13) Вот видите как иногда полезно обновлять мозг....
Я еще раз повторяю - не призываю к абурду...

Но в одну строку по любому быстрее - это факт, с которым спорить просто глупо!
Другое дело , что ради читабельности мы жертвуем быстродействием.
19. catena 110 17.07.19 13:10 Сейчас в теме
(16)
Я еще раз повторяю - не призываю к абурду...
А я еще раз повторяю, что надо приводить цифры с подобными фактами. Стоимость и выгоду этой "оптимизации"
22. YannikAlx 43 17.07.19 13:14 Сейчас в теме
(19) Ну так цифры же внутри ссылок, или вам лень их открыть?

а=0;
ее=текущаядата();
Пока а<100000000 Цикл
а=а+1;
КонецЦикла;
Сообщить(текущаядата()-ее);

а=0;ее=текущаядата();Пока а<100000000 Цикл а=а+1;КонецЦикла;Сообщить(текущаядата()-ее);


а=0;ее=текущаядата();while а<100000000 do а=а+1;enddo;message(текущаядата()-ее);


результат времени :
396,
44,
45
24. spacecraft 17.07.19 13:51 Сейчас в теме
(22) а теперь тоже самое без отладчика. Цифры будут другие. Да, ускорение будет, но не в столько раз.
Использовать можно, но не везде. Во многих местах ускорение будет мизерным, а читаемость ухудшится принципиально.
25. YannikAlx 43 17.07.19 13:55 Сейчас в теме
(24) речь идет о Принципиальном вопросе - ДА или НЕТ!
не идет здесь речь о читабельности!
Вы вчитайтесь то хоть в суть ...
5 раз написано, что народ не понимает именно сути, что ДА - быстрее.
А на сколько быстрее какая разница!
И читабельность никто не отменял. Но не про нее речь!

А в некоторых местах ускорение может достигать 200% !
Но еще раз говорю - дело не в количественной оценке ускорения а в качественной, то есть форматированный текст всегда медленнее. Ну зато красив и читабелен!
26. spacecraft 17.07.19 13:58 Сейчас в теме
(25) Тогда не приводите конкретные цифры. Привели, будьте добры отвечать за них. Иначе вы вводите в заблуждение, что это приводит в 10 кратному увеличению скорости выполнения.
А если указать, что на очень больших итерациях увеличение составит максимум 20%, а при небольших разница будет не ощутима, то и вывод будет совсем другой.
27. YannikAlx 43 17.07.19 14:10 Сейчас в теме
(26) вы устойчиво не желаете читать все и только выдергиваете вам видимо удобную информацию...
Таким методом даже близко к истине не подойдете...
Я привел сначала ссылку, все эти цифры - ТАМ!
Народ попросил конкретных цифр я оттуда их скопировал для тех кому лень читать все...
За чужие цифры я не могу нести ответственности!
А вот за принципиальное знание в одну строку - ДА быстрее , я несу полную ответственность, ибо это Истина, которую никто еще не опрооверг.
А высказывания, что типа это не хорошая истина, потому что она мне не нравится, или она истина но "не для меня" , потому что разницу при вычислении 2х2=4 мерять нечем - это все равно что отрицать сферичность Земли. (ну она же не идеальная сфера и тп и тд - но ведь и не чемодан!)
29. spacecraft 17.07.19 14:16 Сейчас в теме
(27) я не опровергал сам факт ускорения. Я опровергаю цифры, которые вы привели. Не важно, что там, откуда вы их взяли они изначально не правильные. Привели их вы.
Если утверждать, что от земли до луны далеко и привести цифры 1 парсек, то это нормально? Само же утверждение "Далеко" верно...
30. YannikAlx 43 17.07.19 15:17 Сейчас в теме
(24) Результат мой
а=0;
ее=текущаядата();
Пока а<1000000000Цикл
а=а+1;
КонецЦикла;
Сообщить(текущаядата()-ее);

а=0;ее=текущаядата();Пока а<1000000000Цикл а=а+1;КонецЦикла;Сообщить(текущаядата()-ее); 


761
556
31. acanta 17.07.19 15:32 Сейчас в теме
(30) отладка на сервере включена?
32. YannikAlx 43 17.07.19 15:38 Сейчас в теме
33. spacecraft 17.07.19 16:49 Сейчас в теме
(30) Вот. ~27% только разница, а не на порядок. И это при 1 млрд итерации.
Можете еще проверить при 1000 итераций и сравнить.
34. YannikAlx 43 17.07.19 17:08 Сейчас в теме
(33) а еще можно в 1С 2х2 вычислять - очень быстро будет...
У нас в месяц несколько миллионов документов...

И закрытие месяца длится сутками!
А тут всего полчаса покрутила
Думаете там меньше миллиарда операций?
И при наших реальных масштабах как раз и выходит именно порядок то есть разница в 100%
35. spacecraft 17.07.19 17:15 Сейчас в теме
(34) ясно. С математикой у вас совсем никак... "на порядок" это в 10 раз, т.е. 1000%. Это раз.
Уже определили, что простейший цикл с 1 млрд итерация дает увеличение на 27%. Вы же утверждаете про 100 %. Это два.
Сам цикл как в примере никогда не используется. В нем есть еще разные операции. Причем могут быть и ресурсоемкие. При этом разница выполнения может нивелироваться за счет ресурсоемкости логики в цикле. Но тут точно ничего нельзя сказать определенно без самого кода.
36. YannikAlx 43 18.07.19 09:39 Сейчас в теме
(35) Я уже давно понял, что вам бы лишь бы побазарить...
28. acanta 17.07.19 14:12 Сейчас в теме
(22) это что, потому что дата вычисляется, а не время?
11. jimli 7 17.07.19 13:01 Сейчас в теме
(6) читала. Синтаксис python мне нравится определенно. Но иногда стоит пожертвовать миллисекундами ради простоты чтения кода.
Здесь кстати тоже шла не по пути запроса из-за простоты записи и скорости отбора. Не учла необходимость полного заполнения при поиске по регистрам (7)
14. YannikAlx 43 17.07.19 13:05 Сейчас в теме
(11) Я не призываю к абсурду!
Ясно что простота кода при начальной разработке на первом месте, а о быстродействии начинаешь думать уже во вторую очередь, когда все взлетело.
Но иметь в виду стоит всегда, что 1С в одну строку работает быстрее... просто знать это...
А то как показала эта тема многие делают круглые глаза... )))))
17. catena 110 17.07.19 13:09 Сейчас в теме
(14)
Но иметь в виду стоит всегда, что 1С в одну строку работает быстрее... просто знать это...
Ну да. По секунде на лярд строк. УПП общий модуль УправлениеПроизводствомДвиженияПоРегистрам - меньше 15000 строк. Да ваша 1С за эту секунду экономии сдохнет же)))
21. YannikAlx 43 17.07.19 13:12 Сейчас в теме
(17) тут уже дело принципа - быстрее? ДА или НЕТ ?
Попробуйте без философии...

Все же просто скажете НЕТ - ответ очевидно верный ...
Остальное бла бла бла
15. acanta 17.07.19 13:06 Сейчас в теме
(6) код без комментариев быстрее чем с комментариями, скомпилированный быстрее интерпретатора и т.д.
7. catena 110 17.07.19 12:41 Сейчас в теме
(2)Что-то у вас текст в функции и в ошибке разный.

Час убила на красивую запись

А надо было всего лишь почитать синтаксис-помощник

В переданной структуре должны содержаться те измерения, по которым должны быть отфильтрованы записи. В элементе структуры задается имя и значение отбора. Должны указываться значения для всех измерений.
Параметр обязателен для регистров, имеющих измерения.
3. YannikAlx 43 17.07.19 12:30 Сейчас в теме
запросом включив все телефонные виды информации в список значений и с отбором по вхождению в этот список
10. jimli 7 17.07.19 12:57 Сейчас в теме
Результат :-)
Спасибо всем!
Процедура ЗаписатьКонтактыВXML(ЗаписьXML, Объект)
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("Контакт");
	
	Запрос = новый запрос;
	запрос.Текст = "ВЫБРАТЬ
	               |	КонтактнаяИнформация.Представление
	               |ИЗ
	               |	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
	               |ГДЕ
	               |	КонтактнаяИнформация.Объект = &Объект
	               |	И КонтактнаяИнформация.Тип = &Тип";
	запрос.УстановитьПараметр("Объект", Объект);
	запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
	
	рез = запрос.Выполнить();
	если не рез.Пустой() тогда
		выборка = рез.Выбрать();
		пока выборка.Следующий() цикл
			если не выборка.Представление = "" тогда
				КонтактИнфо = выборка.Представление;
			КонецЕсли;
		КонецЦикла;
		ЗаписьXML.ЗаписатьАтрибут("ЭлПочта", КонтактИнфо);
	КонецЕсли;

	запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);
	
	рез = запрос.Выполнить();
	если не рез.Пустой() тогда
		выборка = рез.Выбрать();
		пока выборка.Следующий() цикл
			если не выборка.Представление = "" тогда
				КонтактИнфо = выборка.Представление;
			КонецЕсли;
		КонецЦикла;
		ЗаписьXML.ЗаписатьАтрибут("Тлф", КонтактИнфо);
	КонецЕсли;

	ЗаписьXML.ЗаписатьКонецЭлемента(); // Контакт
		
КонецПроцедуры
Показать
23. acanta 17.07.19 13:18 Сейчас в теме
А без исходных текстов?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот