Выгрузка данных номеров телефона физлица из ЗУП

1. user2132139 09.03.25 23:34 Сейчас в теме
Доброго времени суток. Я относительно недвно начал свой долгий путь 1сника. Столкнулся со следующей проблемой, буду рад, если кто поможет
Стоит следующая задача: есть запрос, который вытягивает данные номеров телефона у физлица и записывает их в массив.(мобильный, домашний и рабочий). В массиве, соответсвенно, 3 элемента. Если у физлица заполнены все телефоны, то все работает без проблем. Если же у человека отсутствует домашний телефон, тогда элемент массива должен быть пустым. Но что-то в коде не работает и элемент [1] имеет значение [2], и элемент 2 имеет пустое значени

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ФизическиеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона
		|ИЗ
		|	Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
		|ГДЕ
		|	ФизическиеЛицаКонтактнаяИнформация.Ссылка.ИНН = &ИНН
		|	И ФизическиеЛицаКонтактнаяИнформация.Тип = &Тип
		|
		|УПОРЯДОЧИТЬ ПО
		|	ФизическиеЛицаКонтактнаяИнформация.НомерСтроки";
			
	Запрос.УстановитьПараметр("ИНН", ЭлементСписка.ИНН);
	Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Телефоны = Новый Массив(3);
	Телефоны[0] = "";
	Телефоны[1] = "";
	Телефоны[2] = "";
	
	Счетчик = 0;
	Пока ВыборкаДетальныеЗаписи.Следующий() И Счетчик < 3 Цикл
			Телефоны[Счетчик] = ВыборкаДетальныеЗаписи.НомерТелефона;
			Счетчик = Счетчик + 1;
	КонецЦикла;
        
        Сообщить("Телефон1:" + Телефоны[0]);
	Сообщить("Телефон2:" + Телефоны[1]);
	Сообщить("Телефон3:" + Телефоны[2]);
Показать


В файлах прикрепленно визуальная проблема. Надеюсь, смогу решить)
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
22. user2132139 10.03.25 16:30 Сейчас в теме
(1) Собственно, решение было следующее
Запросом вытягиваем номер телефона и вид.
 |ГДЕ
        |	ФизическиеЛицаКонтактнаяИнформация.Ссылка.ИНН = &ИНН
        |	И ФизическиеЛицаКонтактнаяИнформация.Тип = &Тип

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

И получаем как результат запись в файле с названием телефона и его данными.
Спасибо всем, кто что-то предлагал!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
22. user2132139 10.03.25 16:30 Сейчас в теме
(1) Собственно, решение было следующее
Запросом вытягиваем номер телефона и вид.
 |ГДЕ
        |	ФизическиеЛицаКонтактнаяИнформация.Ссылка.ИНН = &ИНН
        |	И ФизическиеЛицаКонтактнаяИнформация.Тип = &Тип

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

И получаем как результат запись в файле с названием телефона и его данными.
Спасибо всем, кто что-то предлагал!
23. user2107191 10.03.25 16:32 Сейчас в теме
(22) То есть ты реально три раза запускаешь запрос??? Судя по условию "ГДЕ..."

PS. Главное - успеть свое говнорешение отметить как правильное. Гордость прям разрывает барабанные перепонки?
24. user2132139 10.03.25 16:36 Сейчас в теме
(23)
(23) я отметил это решение как правильное, потому что вижу единственный такой путь. если у тебя есть другой рабочий способ решения, то пожалуйста, присылай! я его отмечу
этот способ работает, может быть тяжелым, но работает!
25. user2107191 10.03.25 16:38 Сейчас в теме
(24) То есть ты даже не заметил моего вопроса? Шикарно.
26. user2132139 10.03.25 16:41 Сейчас в теме
(25) вопрос я вижу, про запуск трижды запроса.
я человек, который все это пока познает. запросы, как мне кажется, не такая уж и простая тема.
если ты видишь ошибку, то можешь сказать, как ее решить? как не запускать запрос 3 раза, а 1
27. user2107191 10.03.25 17:00 Сейчас в теме
(26) А ты почитай вчерашние каменты полностью. Может натолкнет на мысль.
Вот эта хрень у тебя откуда? У тебя в запросе нет такого.
Если ВыборкаДетальныеЗаписи.Вид
28. user2132139 10.03.25 17:05 Сейчас в теме
(27)
то есть предлагаешь сделать так:
 |ГДЕ
 |ФизическиеЛицаКонтактнаяИнформация.Ссылка.ИНН = &ИНН
30. user2107191 10.03.25 17:27 Сейчас в теме
(28) У тебя так и было изначально. Какого хера ты потом добавил новое условие - я хз.
29. user2132139 10.03.25 17:16 Сейчас в теме
(27)
Запрос = Новый Запрос;
    	Запрос.Текст = 
        "ВЫБРАТЬ
        |	ФизическиеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона,
        |	ФизическиеЛицаКонтактнаяИнформация.Вид КАК Вид
        |ИЗ
        |	Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
        |ГДЕ
        |	ФизическиеЛицаКонтактнаяИнформация.Ссылка.ИНН = &ИНН
Показать


это текст моего запроса. отсюда берется вид и проверяется его значение
31. user2107191 10.03.25 17:27 Сейчас в теме
32. user2132139 10.03.25 17:29 Сейчас в теме
(31) хорошо, нетрудно. но теперь он будет запускаться один раз или также 3?
33. user2107191 10.03.25 17:38 Сейчас в теме
(32) Он вообще то не сам запускается.
34. user2132139 10.03.25 17:41 Сейчас в теме
(33) хорошо, тогда может следует как-то изменить выборку?
35. user2107191 10.03.25 17:47 Сейчас в теме
(34) Что тебя в ней смущает?
36. user2132139 10.03.25 17:48 Сейчас в теме
(35) заменить пока на если? мб это что-то изменит
37. user2107191 10.03.25 17:53 Сейчас в теме
(36) Хмм... А замени Пока на Возврат. Вдруг это что-то изменит?
2. user2107191 09.03.25 23:39 Сейчас в теме
А что ты хотел-то? В базе две записи. В результате запроса, соответственно, - тоже.
С чего вдруг твой цикл должен вторую запись из запроса заносить в третий элемент твоего массива?
3. user2132139 09.03.25 23:44 Сейчас в теме
(2) я пишу код для выгрузки данных в xml. в моем понимании должно выгружаться 3 телефона, если какой-то из них не указан, то должна быть пустая строка.
я хочу, чтобы было примерно в таком формате:
Телефон1:82222222222
Телефон2:
Телефон3:83333333333
4. user2107191 09.03.25 23:46 Сейчас в теме
(3)
в моем понимании должно выгружаться 3 телефона
Как ты своё личное понимание про три телефона объяснил базе, в которой нет третьего телефона?
Ну вот нет его!
5. user2132139 09.03.25 23:54 Сейчас в теме
(4) хорошо, представим такую ситуацию: у физлица заполнен только домашний телефон. соответсвенно, я делаю xml элмент со значением этого телефона. Но как потом базе-приемнику объяснить, что это именно домашний телефон, а не рабочий?
в этом идет и вся загвостка...
я планировал, что в xml будет 3 элемента с номерами телефона, которые есть. и уже при чтении определенного узла брался нужный номер
6. user2107191 09.03.25 23:57 Сейчас в теме
(5) А как ты собирался до этого в базе приёмника определять тип телефона?
7. user2132139 10.03.25 00:02 Сейчас в теме
(6) я думал так:
<Телефон1> 81111111111</Телефон1>
<Телефон2> 81111111112</Телефон2>
<Телефон3> 81111111122</Телефон3>
где телефон1 - мобильный, 2-домашний, 3 - рабочий
писать код для базы-приемника пока не пробовал. считаю, что надо сначала это довести до ума
8. user2107191 10.03.25 00:04 Сейчас в теме
(7) С чего ты вдруг так решил, что под номером 1 будет именно рабочий и так далее?
Ты как то это обеспечил, или надеешься, что запрос сам выдаст тебе номера в нужном тебе порядке?
10. user2132139 10.03.25 00:07 Сейчас в теме
(8) получается, что надеился)
может вы видите какое-то решение?
11. user2107191 10.03.25 00:08 Сейчас в теме
(10) Нет решения, поверь мне.
Всё тлен.
Жизнь боль.
14. user2132139 10.03.25 00:20 Сейчас в теме
(8) цифры я поставил для удобства
вопрос больше стоит в том, как правильно поставить тэги, чтобы они соответствовали значению омера
15. user2107191 10.03.25 00:25 Сейчас в теме
(14) Да это вообще не вопрос. Рабочему телефону поставь тег "#рабочий", например.
16. user2132139 10.03.25 00:44 Сейчас в теме
(15)
(15)
хорошо, сделать теги "рабочий" и тп проблемы нет. я не вижу решения, как сделать так, чтобы в значение этот тега вносился именно этот телефон. видимо, моих знаний пока не хватает для этого...
возможно, стоит сделать 3 разных запроса, и где-то как условие указать, что это рабочий и тп
17. user2107191 10.03.25 01:26 Сейчас в теме
(16) Что мешает сделать в одном?
9. KirillHome 5 10.03.25 00:06 Сейчас в теме
(5)
Но как потом базе-приемнику объяснить, что это именно домашний телефон, а не рабочий?


По виду контактной информации?
Справочники.ВидыКонтактнойИнформации.ТелефонДомашнийФизическиеЛица
Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйФизическиеЛица
Справочники.ВидыКонтактнойИнформации.ТелефонРабочийФизическиеЛица
12. user2132139 10.03.25 00:13 Сейчас в теме
(9) скорее всего так и буду, надо будет посмотреть
но все равно стоит вопрос, как сделать так, чтобы у выгруженного телефона был его статус(домашний и тп)
13. user2107191 10.03.25 00:16 Сейчас в теме
(12) О! Наблюдаю шевеление извилин!
Это радует.
18. nomad_irk 81 10.03.25 07:53 Сейчас в теме
(12) выгрузить вместе со значением номера его вид, не?
19. user2107191 10.03.25 07:55 Сейчас в теме
(18) Ну что ты! Я так ждал, что человек сам дойдет до того, что в запросе, однако, можно выгружать несколько полей.
Ну да ладно. Ему все равно еще разбираться - что это за поля, как их интерпретировать, и что с ними потом делать.
А потом "еще полдня бегать, чтобы фотографию отдать".
20. nomad_irk 81 10.03.25 08:00 Сейчас в теме
(19) ....ему еще делать так, чтобы в XML номера были в нужном ему порядке :)
21. user2107191 10.03.25 08:01 Сейчас в теме
(20) ... а мы ему потом четвертый вид номера в карточку добавим!
Оставьте свое сообщение

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