Помощь новичку, сделать автозаполение поля с условием

1. user1812494 10.07.22 20:38 Сейчас в теме
Уважаемые знатоки, здравствуйте! Я только начал изучать 1С и не могу решить одну задачу на 1С:Предприятие 8 учебная версия
Необходимо сделать так, чтобы при выборе поля "Покупатель", если у данного покупателя всего 1 контакт, то поле "Контактное Лицо" должно заполниться автоматически, иначе поле "Контактное Лицо" не заполняется автоматически. Я смог сделать так, чтобы автоматически выбирался основной контакт, но при наличие более одного контакта он все равно выбирается. Как осуществить это через запрос? Ведь при получении результата запроса у нас будет таблица, а как ее записывать потом поле тоже не очень понимаю. Помогите
Найденные решения
18. custer 11.07.22 08:12 Сейчас в теме
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВЫБОР
		|		КОГДА КоличествоКонтактов.ОдинКонтакт
		|			ТОГДА Контрагенты.КонтактноеЛицо
		|		ИНАЧЕ NULL
		|	КОНЕЦ КАК КонтактноеЛицо
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			СвязиКонтрагентКонтакт.Контрагент КАК Контрагент,
		|			КОЛИЧЕСТВО(*) = 1 КАК ОдинКонтакт
		|		ИЗ
		|			РегистрСведений.СвязиКонтрагентКонтакт КАК СвязиКонтрагентКонтакт
		|		
		|		СГРУППИРОВАТЬ ПО
		|			СвязиКонтрагентКонтакт.Контрагент) КАК КоличествоКонтактов
		|		ПО (Контрагенты.Ссылка = КоличествоКонтактов.Контрагент)
		|ГДЕ
		|	Контрагенты.Ссылка = &Контрагент";
	
	Запрос.УстановитьПараметр("Контрагент", Контрагент);   
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	ВыборкаДетальныеЗаписи.Следующий();
	
	КонтактноеЛицо = ВыборкаДетальныеЗаписи.КонтактноеЛицо;
Показать
BAD_1ucky; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 10.07.22 20:57 Сейчас в теме
(1) Новички должны уважать старожил и приходить, как к врачу с анализами с пробами.
3. ignorant 10.07.22 21:05 Сейчас в теме
(1)
будет таблица

"ВЫБРАТЬ ПЕРВЫЕ 1 " в запросе будет 1 строка.
Таблица не нужна
Выборка = Запрос.Выполнить().Выбрать():
Если Выборка.Следующий() Тогда
   КонтактноеЛицо = Выборка.КонтактноеЛицо;
КонецЕсли;
4. custer 10.07.22 21:41 Сейчас в теме
(3) все правильно! Только раз пользователь новичок, то правильнее было бы разбить выполнение функций на переменные, как указано в требованиях к разработке от фирмы 1С)
Чтобы сразу учились писать правильно, согласно документации)
 РезультатЗапррса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Следующий() Тогда
   КонтактноеЛицо = Выборка.КонтактноеЛицо;
КонецЕсли;
33. DesertPunk 19.08.22 10:45 Сейчас в теме
У тебя уже есть на руках выборка. Её же можно и на количество проверить. Получается, что если Выборка.Количество () = 1 — данные выборки цепляем автоматически. Если же иное количество — заворачиваем данные выборки в список значений. В таком случае основным всегда будет единственный контакт.
5. RustamZz 10.07.22 23:08 Сейчас в теме
(3) (4) В задании по-другому: если больше одного, то поле должно быть пустым.
6. custer 10.07.22 23:17 Сейчас в теме
(5) верно) тогда:
Выбрать все

КонтактноеЛицо = Неопределенно;

РезультатЗапроса = Запрос.Выполнить();

Результат = РезультатЗапроса.Выгрузить();

Если Результат.Количество() = 1 Тогда
   КонтактноеЛицо = Результат[0]. КонтактноеЛицо;
КонецЕсли;
Показать
7. RustamZz 10.07.22 23:29 Сейчас в теме
(6) Я новичкам пытаюсь дать удочку, даже невод. А вы рыбьей мордой в харю ему тычите. Забери меня дедушка отсюда.
FatPanzer; custer; +2 Ответить
8. FatPanzer 10.07.22 23:57 Сейчас в теме
(7) Я обычно показываю направление к сараю, в котором есть удочка...
EVKash; RustamZz; +2 Ответить
9. FatPanzer 11.07.22 00:09 Сейчас в теме
(6) На первой строчке ошибка не выскакивает, все нормально?
10. user1812494 11.07.22 01:34 Сейчас в теме
(6)
КонтактноеЛицо = Неопределенно;

выдаёт ошибку, попробовал сделать по вашему, но без первой строки:
Процедура АтозаполнениеКонтактноеЛицо()
        ЗапросНовый = Новый Запрос;
        ЗапросНовый.Текст = "ВЫБРАТЬ
                                        |    Контрагенты.КонтактноеЛицо
                                        |ИЗ
                                        |    Справочник.Контрагенты КАК Контрагенты
                                        |ГДЕ
										|    Контрагенты.Наименование = &Контрагент";
		
		ЗапросНовый.УстановитьПараметр("Контрагент", Контрагент);
        РезультатЗапроса = ЗапросНовый.Выполнить();
		Результат = РезультатЗапроса.Выгрузить();
        
        Если Результат.Количество()= 1
            Тогда        
                    КонтактноеЛицо = Результат[0].КонтактноеЛицо;
        КонецЕсли;
КонецПроцедуры
Показать

В итоге все равно заполняет только основной контакт, остальные игнорирует, если один контакт, но не основной, то он тоже не заполнится
11. user1812494 11.07.22 01:38 Сейчас в теме
(10) и да, у меня поле "Контактное Лицо" ссылается на Справочник.Контрагенты.КонтактноеЛицо, в этом может быть проблема?
12. custer 11.07.22 05:55 Сейчас в теме
(11)
(10) а контактное лицо это реквизит справочника или табличная часть? Если это реквизит справочника, то как тут может быть заполнено больше 1?
14. user1812494 11.07.22 06:30 Сейчас в теме
(12) это реквизит справочника Контрагенты, получается им может быть только одно контактное лицо? Как тогда весь список контактов проверить... Кажется я понял почему у меня только основной контакт записывается. У меня большой трабл в том, что не работал в данной среде ещё, а тут целая конфигурация, сижу и кручу её, смотрю что куда
15. user1812494 11.07.22 06:36 Сейчас в теме
(12) А проделать мне это нужно в форме документа ЗаказПокупателя
Прикрепленные файлы:
16. custer 11.07.22 07:04 Сейчас в теме
(15) что за конфигурация? Контактные лица хранятся скорее всего в регистре сведений, а не в реквизите справочника контрагенты. Ну или может контактные лица это справочник подчиненный как владельцу справочника контрагенты. По условию задания вам просто дан пример как это реализовано на форме элемента справочника контрагенты.
17. user1812494 11.07.22 07:18 Сейчас в теме
(16)Управление Нашей Фирмой ред 1.6 учебная
18. custer 11.07.22 08:12 Сейчас в теме
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВЫБОР
		|		КОГДА КоличествоКонтактов.ОдинКонтакт
		|			ТОГДА Контрагенты.КонтактноеЛицо
		|		ИНАЧЕ NULL
		|	КОНЕЦ КАК КонтактноеЛицо
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			СвязиКонтрагентКонтакт.Контрагент КАК Контрагент,
		|			КОЛИЧЕСТВО(*) = 1 КАК ОдинКонтакт
		|		ИЗ
		|			РегистрСведений.СвязиКонтрагентКонтакт КАК СвязиКонтрагентКонтакт
		|		
		|		СГРУППИРОВАТЬ ПО
		|			СвязиКонтрагентКонтакт.Контрагент) КАК КоличествоКонтактов
		|		ПО (Контрагенты.Ссылка = КоличествоКонтактов.Контрагент)
		|ГДЕ
		|	Контрагенты.Ссылка = &Контрагент";
	
	Запрос.УстановитьПараметр("Контрагент", Контрагент);   
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	ВыборкаДетальныеЗаписи.Следующий();
	
	КонтактноеЛицо = ВыборкаДетальныеЗаписи.КонтактноеЛицо;
Показать
BAD_1ucky; +1 Ответить
26. Sugar22 18.08.22 15:55 Сейчас в теме
(18) Куда вставлять? Можно скриншотами? Я третий день в 1С и ничего не понимаю :((((
28. user1812494 18.08.22 20:05 Сейчас в теме
(26)А что вам вообще нужно сделать, похожий запрос?
31. Sugar22 19.08.22 00:00 Сейчас в теме
(28)
То же самое задание. Я просто пока не понимаю куда нажимать. Интуитивно работаю
Где что открыть и куда вставить
32. user1812494 19.08.22 00:24 Сейчас в теме
(31)Ну сразу скажу тот запрос, который тут как решение стоит, неправильный, используйте как пример. Он помог разобраться в языке запросов. Вот консоль запросов, тут можно поковыряться в конфигурации и понять что вообще получаешь в запросе
Прикрепленные файлы:
Консоль запросов для управляемого приложения.epf
42. custer 17.11.22 07:27 Сейчас в теме
51. neutrinos_vision 12.07.23 10:00 Сейчас в теме
(42)
не выяснили в чем ошибка кода, выделенного как правильный ответ?
52. custer 12.07.23 10:04 Сейчас в теме
50. neutrinos_vision 11.07.23 16:22 Сейчас в теме
(32)
а есть правильное решение?
работаю над аналогичной задачкой по сборнику
53. user1880116 12.07.23 10:34 Сейчас в теме
(50)
работаю над аналогичной задачкой
А сам что-нибудь уже сделал?
54. neutrinos_vision 12.07.23 11:09 Сейчас в теме
(53)
само собой)
но парочка вещей не работает из-за непонимания взаимосвязи документов
35. YA_310316411 21.10.22 08:12 Сейчас в теме
(32) А не подскажешь как должен выглядеть правильный запрос? Этот работает при условии, что КонтактноеЛицо это строка с переменным значением, тогда все правильно выводится в поле формы, но по заданию необходимо, чтобы КонтактноеЛицо было "ссылкой на соответствующий справочник". Как я не пробовал, когда ставишь контакному лицу тип ссылки на справочник Контрагенты вместо строки - по итогу ничего не выводит в поле формы вне зависимости от того сколько там контактных лиц. Встрял на этом пункте из за этого.
(18)
36. custer 21.10.22 09:01 Сейчас в теме
(35)
А не подскажешь как должен выглядеть правильный запрос? Этот работает при условии, что КонтактноеЛицо это строка с переменным значением, тогда все правильно выводится в поле формы, но по заданию необходимо, чтобы КонтактноеЛицо было "ссылкой на соответствующий справочник". Как я не пробовал, когда ставишь контакному лицу тип ссылки на справочник Контрагенты вместо строки - по итогу ничего не выводит в поле формы вне зависимости от того сколько там контактных лиц. Встрял на этом пункте из за этого.


у реквизита КонтактноеЛицо какой тип должен быть? СправочникСсылка.КонтактныеЛица или СправочникСсылка.Контрагенты?
37. YA_310316411 21.10.22 17:22 Сейчас в теме
(36)Вообще, думал изначально что СсылкаСправочник.Контрагенты нужно использовать, потому что именно при использовании формы этого справочника туда заносятся данные о новых компаниях и их контактных лицах.
Посмотрев повнимательнее понял, что реквизит справочника Контрагентов, в который как раз записываются и хранятся необходимые по заданию данные с ФИО контактных лиц, в свою очередь ссылается на, как раз, СсылкаСправочник.КонтактныеЛица.
Из этого следует что в наш реквизит, в документе, нужно указывать тип СсылкаСправочник.КонтактныеЛица
Ну, если я ничего не путаю конечно)
38. YA_310316411 21.10.22 22:04 Сейчас в теме
(36)
(37)
Поменял со СправочникСсылка.Контрагент на СправочникСсылка.КонтактноеЛицо – заработало как надо) Спасибо за подсказку!
39. user1873630 17.11.22 00:26 Сейчас в теме
(18)

ВЫБРАТЬ
КОГДА КоличествоКонтактов.ОдинКонтакт


вы отдельно создавали обьект КоличествоКонтактов?
(18)
40. user1873630 17.11.22 00:30 Сейчас в теме
(18)

ВЫБРАТЬ
КОГДА КоличествоКонтактов.ОдинКонтакт


вы отдельно создавали обьект КоличествоКонтактов?
41. custer 17.11.22 07:24 Сейчас в теме
(40) объект? Где ты увидел объект?
43. user1873630 17.11.22 16:58 Сейчас в теме
(41)
Тогда чем у вас является КоличествоКонтактов?
Это отдельно созданный реквизит или что-то другое?
я не очень понимаю к чему пренадежит вырожение КоличествоКонтактов.ОдинКонтакт в запросе
(41)
44. custer 17.11.22 17:16 Сейчас в теме
(43) так там же вложенный запрос
|ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |            СвязиКонтрагентКонтакт.Контрагент КАК Контрагент,
        |            КОЛИЧЕСТВО(*) = 1 КАК ОдинКонтакт
        |        ИЗ
        |            РегистрСведений.СвязиКонтрагентКонтакт КАК СвязиКонтрагентКонтакт
        |        
        |        СГРУППИРОВАТЬ ПО
        |            СвязиКонтрагентКонтакт.Контрагент) КАК КоличествоКонтактов
        |        ПО (Контрагенты.Ссылка = КоличествоКонтактов.Контрагент)
Показать
45. user1873630 17.11.22 17:22 Сейчас в теме
(44) я разобрался. недавно начал с запросами рабоать и еще не все до конца понимаю.
спасибо за ответ.
19. custer 11.07.22 08:42 Сейчас в теме
(17) А ты не тестовое задание выполняешь при приеме на работу?)
20. user1812494 11.07.22 08:58 Сейчас в теме
(19)Ну не совсем работу, я только хочу стажироваться, сначала идёт самостоятельное обучение с задачками. Раньше с механизмом запросов таким не сталкивался, ток в питоне с библиотекой pandas с датафреймами баловался. Смотрел вводы про запросы в 1с, но там на простых случаях объясняют, просто вытаскивают таблички с данными, а я не знал как тут быть. Если есть на примете какой-нибудь полезный материал для начала, то ссылки приветствуются ахах
21. custer 11.07.22 09:47 Сейчас в теме
(20) насчет ссылок не знаю что посоветовать. Вот пособие есть https://its.1c.ru/db/pubdevguide83
Только на ИТС доступ нужен. Можешь в гугле посмотреть пособия М.Г. Радченко, Е.Ю. Хрусталева по 1С
22. user1812494 11.07.22 12:44 Сейчас в теме
(21)ещё дурацкий вопрос, путь к данным реквизита Контактное лицо это Объект.КонтактноеЛицо?
23. custer 11.07.22 12:57 Сейчас в теме
(22) из модулей справочника Контрагенты - да. Из других модулей через Контрагент.КонтактноеЛицо.
24. user1812494 12.07.22 01:48 Сейчас в теме
(23) Обозначил процедуру с запросом, вызываю её в процедуре КонтрагентПриИзменении с передачей туда Контрагент ну или Объект.Контрагент, в итоге поле "Контактное лицо" заполняется только основным контактом(сам реквизит КонтактноеЛицо
ссылается на Контрагент.КонтактноеЛицо), пытался вывести результат запроса, выводит через сообщить пустую строку, я не так процедуру вызываю?
25. user1812494 12.07.22 02:41 Сейчас в теме
(24) А всё, запрос работает, я разобрался, спасибо огромное!
47. Reen 05.12.22 15:10 Сейчас в теме
(25)
Привет, я уже которую неделю над этим бьюсь, только сейчас наткнулся на это обсуждение и немного запутался, ты создал поле с "Путь к данным": Объект.КонтактноеЛицо, а сам Объект.КонтактноеЛицо - СправочникСсылка контактные лица? И вопрос по запросу, его вписывать в "ПриИзменении"? Можешь дать наводку как разобраться с этим запросами? Буду очень благодарен)
13. custer 11.07.22 05:57 Сейчас в теме
(9)
(10) ошибся, неопределено с одной «н»
29. BAD_1ucky 18.08.22 20:35 Сейчас в теме
(10) Можешь какой-то контакт дать, где с тобой связаться? Почту или что-то такое, к примеру? Застрял на этом моменте
30. пользователь 18.08.22 21:35
Сообщение было скрыто модератором.
...
27. Sugar22 18.08.22 15:59 Сейчас в теме
(18) Куда вставлять? Можно скриншотами? Я третий день в 1С и ничего не понимаю :((((
34. custer 19.08.22 14:38 Сейчас в теме
49. Reen 07.12.22 22:38 Сейчас в теме
Добрый день, не подскажите где в этой задаче мы создаем запрос? Перед изменением (Поля КонтактноеЛицо) или в какую процедуру? И еще вопрос, не могли бы вы мне объяснить логику запроса, который вы написали? Буду очень благодарен за ответ.

(34)
46. smirnova_a 17.11.22 18:44 Сейчас в теме
(27)скорее всего при открытии формы
48. Reen 05.12.22 15:12 Сейчас в теме
(25)
Привет, я уже которую неделю над этим бьюсь, только сейчас наткнулся на это обсуждение и немного запутался, ты создал поле с "Путь к данным": Объект.КонтактноеЛицо, а сам Объект.КонтактноеЛицо - СправочникСсылка контактные лица? И вопрос по запросу, его вписывать в "ПриИзменении"? Можешь дать наводку как разобраться с этим запросами? Буду очень благодарен)
Оставьте свое сообщение

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