Помощь новичку, сделать автозаполение поля с условием
Уважаемые знатоки, здравствуйте! Я только начал изучать 1С и не могу решить одну задачу на 1С:Предприятие 8 учебная версия
Необходимо сделать так, чтобы при выборе поля "Покупатель", если у данного покупателя всего 1 контакт, то поле "Контактное Лицо" должно заполниться автоматически, иначе поле "Контактное Лицо" не заполняется автоматически. Я смог сделать так, чтобы автоматически выбирался основной контакт, но при наличие более одного контакта он все равно выбирается. Как осуществить это через запрос? Ведь при получении результата запроса у нас будет таблица, а как ее записывать потом поле тоже не очень понимаю. Помогите
Необходимо сделать так, чтобы при выборе поля "Покупатель", если у данного покупателя всего 1 контакт, то поле "Контактное Лицо" должно заполниться автоматически, иначе поле "Контактное Лицо" не заполняется автоматически. Я смог сделать так, чтобы автоматически выбирался основной контакт, но при наличие более одного контакта он все равно выбирается. Как осуществить это через запрос? Ведь при получении результата запроса у нас будет таблица, а как ее записывать потом поле тоже не очень понимаю. Помогите
Найденные решения
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА КоличествоКонтактов.ОдинКонтакт
| ТОГДА Контрагенты.КонтактноеЛицо
| ИНАЧЕ NULL
| КОНЕЦ КАК КонтактноеЛицо
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СвязиКонтрагентКонтакт.Контрагент КАК Контрагент,
| КОЛИЧЕСТВО(*) = 1 КАК ОдинКонтакт
| ИЗ
| РегистрСведений.СвязиКонтрагентКонтакт КАК СвязиКонтрагентКонтакт
|
| СГРУППИРОВАТЬ ПО
| СвязиКонтрагентКонтакт.Контрагент) КАК КоличествоКонтактов
| ПО (Контрагенты.Ссылка = КоличествоКонтактов.Контрагент)
|ГДЕ
| Контрагенты.Ссылка = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
КонтактноеЛицо = ВыборкаДетальныеЗаписи.КонтактноеЛицо; ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) все правильно! Только раз пользователь новичок, то правильнее было бы разбить выполнение функций на переменные, как указано в требованиях к разработке от фирмы 1С)
Чтобы сразу учились писать правильно, согласно документации)
Чтобы сразу учились писать правильно, согласно документации)
РезультатЗапррса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
КонтактноеЛицо = Выборка.КонтактноеЛицо;
КонецЕсли;
(5) верно) тогда:
Выбрать все
Выбрать все
КонтактноеЛицо = Неопределенно;
РезультатЗапроса = Запрос.Выполнить();
Результат = РезультатЗапроса.Выгрузить();
Если Результат.Количество() = 1 Тогда
КонтактноеЛицо = Результат[0]. КонтактноеЛицо;
КонецЕсли;
Показать
(6)
выдаёт ошибку, попробовал сделать по вашему, но без первой строки:
В итоге все равно заполняет только основной контакт, остальные игнорирует, если один контакт, но не основной, то он тоже не заполнится
КонтактноеЛицо = Неопределенно;
выдаёт ошибку, попробовал сделать по вашему, но без первой строки:
Процедура АтозаполнениеКонтактноеЛицо()
ЗапросНовый = Новый Запрос;
ЗапросНовый.Текст = "ВЫБРАТЬ
| Контрагенты.КонтактноеЛицо
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование = &Контрагент";
ЗапросНовый.УстановитьПараметр("Контрагент", Контрагент);
РезультатЗапроса = ЗапросНовый.Выполнить();
Результат = РезультатЗапроса.Выгрузить();
Если Результат.Количество()= 1
Тогда
КонтактноеЛицо = Результат[0].КонтактноеЛицо;
КонецЕсли;
КонецПроцедуры
ПоказатьВ итоге все равно заполняет только основной контакт, остальные игнорирует, если один контакт, но не основной, то он тоже не заполнится
(12) это реквизит справочника Контрагенты, получается им может быть только одно контактное лицо? Как тогда весь список контактов проверить... Кажется я понял почему у меня только основной контакт записывается. У меня большой трабл в том, что не работал в данной среде ещё, а тут целая конфигурация, сижу и кручу её, смотрю что куда
(15) что за конфигурация? Контактные лица хранятся скорее всего в регистре сведений, а не в реквизите справочника контрагенты. Ну или может контактные лица это справочник подчиненный как владельцу справочника контрагенты. По условию задания вам просто дан пример как это реализовано на форме элемента справочника контрагенты.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА КоличествоКонтактов.ОдинКонтакт
| ТОГДА Контрагенты.КонтактноеЛицо
| ИНАЧЕ NULL
| КОНЕЦ КАК КонтактноеЛицо
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СвязиКонтрагентКонтакт.Контрагент КАК Контрагент,
| КОЛИЧЕСТВО(*) = 1 КАК ОдинКонтакт
| ИЗ
| РегистрСведений.СвязиКонтрагентКонтакт КАК СвязиКонтрагентКонтакт
|
| СГРУППИРОВАТЬ ПО
| СвязиКонтрагентКонтакт.Контрагент) КАК КоличествоКонтактов
| ПО (Контрагенты.Ссылка = КоличествоКонтактов.Контрагент)
|ГДЕ
| Контрагенты.Ссылка = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
КонтактноеЛицо = ВыборкаДетальныеЗаписи.КонтактноеЛицо; Показать
(31)Ну сразу скажу тот запрос, который тут как решение стоит, неправильный, используйте как пример. Он помог разобраться в языке запросов. Вот консоль запросов, тут можно поковыряться в конфигурации и понять что вообще получаешь в запросе
Прикрепленные файлы:
Консоль запросов для управляемого приложения.epf
(32) А не подскажешь как должен выглядеть правильный запрос? Этот работает при условии, что КонтактноеЛицо это строка с переменным значением, тогда все правильно выводится в поле формы, но по заданию необходимо, чтобы КонтактноеЛицо было "ссылкой на соответствующий справочник". Как я не пробовал, когда ставишь контакному лицу тип ссылки на справочник Контрагенты вместо строки - по итогу ничего не выводит в поле формы вне зависимости от того сколько там контактных лиц. Встрял на этом пункте из за этого.
(18)
(18)
(35)
у реквизита КонтактноеЛицо какой тип должен быть? СправочникСсылка.КонтактныеЛица или СправочникСсылка.Контрагенты?
А не подскажешь как должен выглядеть правильный запрос? Этот работает при условии, что КонтактноеЛицо это строка с переменным значением, тогда все правильно выводится в поле формы, но по заданию необходимо, чтобы КонтактноеЛицо было "ссылкой на соответствующий справочник". Как я не пробовал, когда ставишь контакному лицу тип ссылки на справочник Контрагенты вместо строки - по итогу ничего не выводит в поле формы вне зависимости от того сколько там контактных лиц. Встрял на этом пункте из за этого.
у реквизита КонтактноеЛицо какой тип должен быть? СправочникСсылка.КонтактныеЛица или СправочникСсылка.Контрагенты?
(36)Вообще, думал изначально что СсылкаСправочник.Контрагенты нужно использовать, потому что именно при использовании формы этого справочника туда заносятся данные о новых компаниях и их контактных лицах.
Посмотрев повнимательнее понял, что реквизит справочника Контрагентов, в который как раз записываются и хранятся необходимые по заданию данные с ФИО контактных лиц, в свою очередь ссылается на, как раз, СсылкаСправочник.КонтактныеЛица.
Из этого следует что в наш реквизит, в документе, нужно указывать тип СсылкаСправочник.КонтактныеЛица
Ну, если я ничего не путаю конечно)
Посмотрев повнимательнее понял, что реквизит справочника Контрагентов, в который как раз записываются и хранятся необходимые по заданию данные с ФИО контактных лиц, в свою очередь ссылается на, как раз, СсылкаСправочник.КонтактныеЛица.
Из этого следует что в наш реквизит, в документе, нужно указывать тип СсылкаСправочник.КонтактныеЛица
Ну, если я ничего не путаю конечно)
(43) так там же вложенный запрос
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СвязиКонтрагентКонтакт.Контрагент КАК Контрагент,
| КОЛИЧЕСТВО(*) = 1 КАК ОдинКонтакт
| ИЗ
| РегистрСведений.СвязиКонтрагентКонтакт КАК СвязиКонтрагентКонтакт
|
| СГРУППИРОВАТЬ ПО
| СвязиКонтрагентКонтакт.Контрагент) КАК КоличествоКонтактов
| ПО (Контрагенты.Ссылка = КоличествоКонтактов.Контрагент) Показать
(19)Ну не совсем работу, я только хочу стажироваться, сначала идёт самостоятельное обучение с задачками. Раньше с механизмом запросов таким не сталкивался, ток в питоне с библиотекой pandas с датафреймами баловался. Смотрел вводы про запросы в 1с, но там на простых случаях объясняют, просто вытаскивают таблички с данными, а я не знал как тут быть. Если есть на примете какой-нибудь полезный материал для начала, то ссылки приветствуются ахах
(23) Обозначил процедуру с запросом, вызываю её в процедуре КонтрагентПриИзменении с передачей туда Контрагент ну или Объект.Контрагент, в итоге поле "Контактное лицо" заполняется только основным контактом(сам реквизит КонтактноеЛицо
ссылается на Контрагент.КонтактноеЛицо), пытался вывести результат запроса, выводит через сообщить пустую строку, я не так процедуру вызываю?
ссылается на Контрагент.КонтактноеЛицо), пытался вывести результат запроса, выводит через сообщить пустую строку, я не так процедуру вызываю?
(25)
Привет, я уже которую неделю над этим бьюсь, только сейчас наткнулся на это обсуждение и немного запутался, ты создал поле с "Путь к данным": Объект.КонтактноеЛицо, а сам Объект.КонтактноеЛицо - СправочникСсылка контактные лица? И вопрос по запросу, его вписывать в "ПриИзменении"? Можешь дать наводку как разобраться с этим запросами? Буду очень благодарен)
Привет, я уже которую неделю над этим бьюсь, только сейчас наткнулся на это обсуждение и немного запутался, ты создал поле с "Путь к данным": Объект.КонтактноеЛицо, а сам Объект.КонтактноеЛицо - СправочникСсылка контактные лица? И вопрос по запросу, его вписывать в "ПриИзменении"? Можешь дать наводку как разобраться с этим запросами? Буду очень благодарен)
Добрый день, не подскажите где в этой задаче мы создаем запрос? Перед изменением (Поля КонтактноеЛицо) или в какую процедуру? И еще вопрос, не могли бы вы мне объяснить логику запроса, который вы написали? Буду очень благодарен за ответ.
(34)
(34)
(25)
Привет, я уже которую неделю над этим бьюсь, только сейчас наткнулся на это обсуждение и немного запутался, ты создал поле с "Путь к данным": Объект.КонтактноеЛицо, а сам Объект.КонтактноеЛицо - СправочникСсылка контактные лица? И вопрос по запросу, его вписывать в "ПриИзменении"? Можешь дать наводку как разобраться с этим запросами? Буду очень благодарен)
Привет, я уже которую неделю над этим бьюсь, только сейчас наткнулся на это обсуждение и немного запутался, ты создал поле с "Путь к данным": Объект.КонтактноеЛицо, а сам Объект.КонтактноеЛицо - СправочникСсылка контактные лица? И вопрос по запросу, его вписывать в "ПриИзменении"? Можешь дать наводку как разобраться с этим запросами? Буду очень благодарен)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот