БП 3.0 Необходимо автоматически проставить договор в поле ввода Договор, при выборе Контрагента.
Есть пустое поле ввода Контрагент, и если в нем выбрать контрагента, то в поле ввода договор происходит Отбор.Владелец(Объект.Контрагент), потому что это указано в свойствах поля СвязиПараметровВыбора. Но, договор не проставляется автоматически в поле ввода. Получается нужно провалиться в поле ввода Договор и там будет отображаться уже отобранный нужный Договор по контрагенту. А что нужно сделать, чтобы при выборе контрагента, Договор отобразился в поле ввода Договоры сразу?
Как я понял, договоры хранятся вот тут - Регистры сведений - ОсновныеДоговорыКонтрагента - там в измерениях стоит Организация, Контрагент, Вид договора, а в ресурсах - Договор.
Как сейчас работает. Я выбираю Контрагента, затем проваливаюсь в поле выбора Договор и там вручную нажимаю на Договор - он уже там отобран по контрагенту, потому что в свойствах поля стоит Отбор.Владелец(Объект.Контрагент).
Я посмотрел справочник Контрагенты и обнаружил, что там не все договоры помечены как основные. Поэтому, если нет Основного Договора, тогда есть ли возможность выводить не основной договор? Так же везде фигурирует только один договор. Просто он с пометкой основной или без пометки.
Прошу помощи реализовать автоматическое подставление Договора при выборе контрагента.
Как я понял, договоры хранятся вот тут - Регистры сведений - ОсновныеДоговорыКонтрагента - там в измерениях стоит Организация, Контрагент, Вид договора, а в ресурсах - Договор.
Как сейчас работает. Я выбираю Контрагента, затем проваливаюсь в поле выбора Договор и там вручную нажимаю на Договор - он уже там отобран по контрагенту, потому что в свойствах поля стоит Отбор.Владелец(Объект.Контрагент).
Я посмотрел справочник Контрагенты и обнаружил, что там не все договоры помечены как основные. Поэтому, если нет Основного Договора, тогда есть ли возможность выводить не основной договор? Так же везде фигурирует только один договор. Просто он с пометкой основной или без пометки.
Прошу помощи реализовать автоматическое подставление Договора при выборе контрагента.
По теме из базы знаний
Найденные решения
Вот рабочий код:
Задача: При выборе контрагента автоматически заполнить поле договор. Договор может быть основным или не основным. Договоров может быть несколько, договор может быть помечен на удаление.
Напомню есть два поля ввода: Контрагент (Путь к данным Объект.Контрагент), Договор (Путь к данным Объект.Договор).
У поля ввода Договор, в свойствах стоит - СвязиПараметровВывода - Отбор.Владелец(Объект.Контрагент).
Далее на поле ввода Контрагент стоит События - КонтрагентПриИзменении.
Сам код в модуле формы:
Задача: При выборе контрагента автоматически заполнить поле договор. Договор может быть основным или не основным. Договоров может быть несколько, договор может быть помечен на удаление.
Напомню есть два поля ввода: Контрагент (Путь к данным Объект.Контрагент), Договор (Путь к данным Объект.Договор).
У поля ввода Договор, в свойствах стоит - СвязиПараметровВывода - Отбор.Владелец(Объект.Контрагент).
Далее на поле ввода Контрагент стоит События - КонтрагентПриИзменении.
Сам код в модуле формы:
&НаСервере
Функция ПолучитьОсновнойДоговор(Контрагент)
Результат = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
|ОсновныеДоговорыКонтрагента.Договор КАК Договор
|ИЗ
|РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента
|ГДЕ
|ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Результат = ВыборкаДетальныеЗаписи.Договор;
КонецЕсли;
//если основной договор не отмечен, то поищем среди всех договоров и если по данному виду он один и непомеченный на удаление, то возьмем его
Если Результат.Пустая() Тогда
Запрос.Текст =
"ВЫБРАТЬ
|МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Договор,
|КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДоговорыКонтрагентов.Ссылка) КАК КоличествоДоговоров
|ИЗ
|Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
|ДоговорыКонтрагентов.Владелец = &Контрагент
|И НЕ ДоговорыКонтрагентов.ПометкаУдаления";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Если ВыборкаДетальныеЗаписи.КоличествоДоговоров=1 Тогда
Результат = ВыборкаДетальныеЗаписи.Договор;
ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров=0 Тогда
Сообщить("Договоров нет");
ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров>1 Тогда
Результат = ВыборкаДетальныеЗаписи.Договор;
ТекстОшибки = СтрШаблон("Для контрагента %1 подставлен первый договор из нескольких", Контрагент);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
Контрагент = Объект.Контрагент;
Объект.Договор = ПолучитьОсновнойДоговор(Контрагент);
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Вот такой код я написал (он пока не работает). При выполнении программы появляется ошибка: Значение не является значением объектного типа (Контрагент)
Вот здесь - Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент);
Вот мой код целиком:
Вот здесь - Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент);
Вот мой код целиком:
&НаСервереБезКонтекста
Функция НайтиПодходящийДоговор(ДокументОбъект) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ОсновныеДоговорыКонтрагента.Договор КАК Договор
|ИЗ
|РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента
|ГДЕ
|ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Договор = ВыборкаДетальныеЗаписи.Договор;
КонецЕсли;
Возврат Договор;
КонецФункции
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
Объект.Договор = НайтиПодходящийДоговор("ДокументОбъект");
//тут я отображаю Объект.Договор; в поле ввода Элементы.Договор
Элементы.Договор = Объект.Договор;
КонецПроцедуры
Показать
Вот рабочий код:
Задача: При выборе контрагента автоматически заполнить поле договор. Договор может быть основным или не основным. Договоров может быть несколько, договор может быть помечен на удаление.
Напомню есть два поля ввода: Контрагент (Путь к данным Объект.Контрагент), Договор (Путь к данным Объект.Договор).
У поля ввода Договор, в свойствах стоит - СвязиПараметровВывода - Отбор.Владелец(Объект.Контрагент).
Далее на поле ввода Контрагент стоит События - КонтрагентПриИзменении.
Сам код в модуле формы:
Задача: При выборе контрагента автоматически заполнить поле договор. Договор может быть основным или не основным. Договоров может быть несколько, договор может быть помечен на удаление.
Напомню есть два поля ввода: Контрагент (Путь к данным Объект.Контрагент), Договор (Путь к данным Объект.Договор).
У поля ввода Договор, в свойствах стоит - СвязиПараметровВывода - Отбор.Владелец(Объект.Контрагент).
Далее на поле ввода Контрагент стоит События - КонтрагентПриИзменении.
Сам код в модуле формы:
&НаСервере
Функция ПолучитьОсновнойДоговор(Контрагент)
Результат = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
|ОсновныеДоговорыКонтрагента.Договор КАК Договор
|ИЗ
|РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента
|ГДЕ
|ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Результат = ВыборкаДетальныеЗаписи.Договор;
КонецЕсли;
//если основной договор не отмечен, то поищем среди всех договоров и если по данному виду он один и непомеченный на удаление, то возьмем его
Если Результат.Пустая() Тогда
Запрос.Текст =
"ВЫБРАТЬ
|МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Договор,
|КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДоговорыКонтрагентов.Ссылка) КАК КоличествоДоговоров
|ИЗ
|Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
|ДоговорыКонтрагентов.Владелец = &Контрагент
|И НЕ ДоговорыКонтрагентов.ПометкаУдаления";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Если ВыборкаДетальныеЗаписи.КоличествоДоговоров=1 Тогда
Результат = ВыборкаДетальныеЗаписи.Договор;
ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров=0 Тогда
Сообщить("Договоров нет");
ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров>1 Тогда
Результат = ВыборкаДетальныеЗаписи.Договор;
ТекстОшибки = СтрШаблон("Для контрагента %1 подставлен первый договор из нескольких", Контрагент);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
Контрагент = Объект.Контрагент;
Объект.Договор = ПолучитьОсновнойДоговор(Контрагент);
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот