|
БП 3.0 При выборе Контрагента, нужно автоматически заполнить поле ввода Договор | ☑ | ||
---|---|---|---|---|
0
Валентиновый
naïve
20.05.24
✎
14:59
|
БП 3.0
Необходимо автоматически проставить договор в поле ввода Договор, при выборе Контрагента. Есть пустое поле ввода "Контрагент", и если выбрать контрагента, то в Поле ввода "Договор" происходит Отбор.Владелец(Объект.Контрагент), потому что это указано в свойствах поля СвязиПараметровВыбора. Но, договор не проставляется автоматически в поле ввода. Потому что, как я понимаю отбор происходит на форме Договоры. Получается нужно провалиться в поле ввода Договор и там будет отображаться уже отобранный нужный Договор с выбранным контрагентом. А что нужно сделать, чтобы при выборе контрагента, Договор отобразился в поле ввода Договоры сразу? |
|||
1
Лирик
20.05.24
✎
15:02
|
А если договоров пять, какой должен "отобразиться сразу"?
|
|||
2
Волшебник
20.05.24
✎
15:02
|
Назначьте его основным
|
|||
3
Лирик
20.05.24
✎
15:08
|
(2) А если назначенный основным не подходит по виду операции? Ну нужно же человека подвести к логическому финалу, что бы ТС понял свою задачу. )
|
|||
4
Волшебник
20.05.24
✎
15:09
|
(3) Человека ли?
|
|||
5
Лирик
20.05.24
✎
15:19
|
(4) Есть подозрения, что GPT на нас учится?
|
|||
6
Kigo_Kigo
20.05.24
✎
15:19
|
Вообще в БП 3 ЕМНИП Основной договор сам подставляется при выборе контрагента
|
|||
7
Волшебник
20.05.24
✎
15:21
|
(5) Ну вот смотрите, у него мерцает сущность:
поле ввода Договор поле ввода Договоры Поле ввода "Договор" |
|||
8
Валентиновый
naïve
20.05.24
✎
19:49
|
Есть два поля ввода: Контрагент, Договор.
Как я понял, договоры хранятся вот тут - Регистры сведений - ОсновныеДоговорыКонтрагента - там в измерениях стоит Организация, Контрагент, Вид договора, а в ресурсах - Договор. Мне нужно, Выбрать в поле ввода Контрагента, и после выбора автоматически должен подставиться договор. Как сейчас работает. Я выбираю Контрагента, затем проваливаюсь в поле выбора Договор и там вручную нажимаю на Договор - Он уже там отобран, потому что в свойствах поля стоит Отбор.Владелец(Объект.Контрагент) Я посмотрел справочник Контрагенты и обнаружил, что там не все договоры помечены как основные. Поэтому, если нет Основного Договора, есть ли возможность выводить не основной договор? (1) Лирик, я просмотрел список, везде один договор. Просто какието не помечены как основные, а какие-то помечены. (2) Волшебник, Как я понял этот пункт игнорируется , в базе будут неосновные договоры. (3) Лирик, все договоры на оказание услуг. Они подходят по Виду операции. (6) Kigo_Kigo, ну вот не подставляется. В поле ввода Договора выставлено СвязиПараметровВыбора - Отбор.Владелец(Объект.Контрагент) Я решил начать вот с чего, для поля ввода создать событие - ПриИзменении на Клиенте и на Сервере. Теперь хочу в Процедуре &НаСервере вытащить Договор, который уже отобран по Контрагенту. В поле ввода Договор, стоит же отбор. Подскажите, как реализовать? |
|||
9
Волшебник
20.05.24
✎
20:18
|
(8) Напишите такой алгоритм:
ДокОбъект.Договор = НайтиПодходящийДоговор(ДокОбъект); и где-то ниже/выше: Функция НайтиПодходящийДоговор(ДокОбъект) Экспорт //здесь учтите все условия, хотелки и пожелания... Договор = ... ; Возврат Договор; КонецФункции; |
|||
10
Валентиновый
naïve
20.05.24
✎
21:24
|
(9) Волшебник, вот исходя из моего кода (он пока не работает), осталось определить переменную ДокОбъект там, где на клиенте.
Код: &НаСервере
|
|||
11
Валентиновый
naïve
20.05.24
✎
21:26
|
(9) Волшебник, а как определить переменную ДокОбъект?
|
|||
12
Волшебник
20.05.24
✎
21:32
|
В Вашем коде перепутаны ДокОбъект и Контрагент (владелец договора)
|
|||
13
Волшебник
20.05.24
✎
21:33
|
ГДЕ | ОсновныеДоговорыКонтрагента.Контрагент = &ДокОбъект"; Запрос.УстановитьПараметр("ДокОбъект", ДокОбъект Вот здесь смешение сущностей |
|||
14
Валентиновый
naïve
20.05.24
✎
21:40
|
(13) Волшебник, так:
|ГДЕ | ОсновныеДоговорыКонтрагента.Контрагент = &ДокОбъект";
|
|||
15
Валентиновый
naïve
20.05.24
✎
21:41
|
(13) Волшебник, к форматированию поста нужно приноровиться конечно. Так:
| ГДЕ | ОсновныеДоговорыКонтрагента.Контрагент = &ДокОбъект"; Запрос.УстановитьПараметр("Контрагент", ДокОбъект); |
|||
16
Волшебник
20.05.24
✎
21:43
|
(15) ДокОбъект — это тип ДокументОбъект,
Контрагент - это СправочникСсылка.Контрагенты Они никак не могут быть равны. Если ищите по контрагенту, то передайте контрагента в запрос. ГДЕ ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент Запрос.УстановитьПараметр("Контрагент", ДокОбъект.Контрагент); |
|||
17
Валентиновый
naïve
20.05.24
✎
22:16
|
(16) Волшебник, вот здесь ругается, на все три ДокОбьект
&НаКлиенте
|
|||
18
Волшебник
20.05.24
✎
22:51
|
(17) Если переменная не определена, значит её не определили. Все сущности имеют свои причины возникновения и существования.
|
|||
19
Валентиновый
naïve
21.05.24
✎
12:57
|
(18) Волшебник, вот я внес правки. При выполнении программы появляется ошибка: Значение не является значением объектного типа (Контрагент)
Вот здесь - Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент); Вот мой код целиком: &НаСервереБезКонтекста Функция НайтиПодходящийДоговор(ДокументОбъект) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |ОсновныеДоговорыКонтрагента.Договор КАК Договор |ИЗ |РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента |ГДЕ |ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент"; Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда Договор = ВыборкаДетальныеЗаписи.Договор; КонецЕсли; Возврат Договор; КонецФункции //&НаСервере //Процедура КонтрагентПриИзмененииНаСервере() //Объект.Договор = НайтиПодходящийДоговор(ЭтотОбъект.ДокументОбъект); //тут я отображаю ДокОбъект в поле ввода Элементы.Договор //Элементы.Договор = Объект.Договор; //КонецПроцедуры &НаКлиенте Процедура КонтрагентПриИзменении(Элемент) Объект.Договор = НайтиПодходящийДоговор("ДокументОбъект"); //тут я отображаю ДокОбъект в поле ввода Элементы.Договор Элементы.Договор = Объект.Договор; КонецПроцедуры |
|||
20
Волшебник
21.05.24
✎
13:07
|
(19) Значит внутри "ДокументОбъект" нет поля "Контрагент".
Не надо обращаться к полям, которых нет. Это достаточно нагло. Существование полей надо предполагать на 100% или оформлять код в Попытка...Исключение. |
|||
21
Волшебник
21.05.24
✎
13:08
|
(19) Здесь вы передали в функцию строку, а не объект:
НайтиПодходящийДоговор("ДокументОбъект"); Следите за типами! |
|||
22
skafandr
21.05.24
✎
13:56
|
Вы пытаетесь автоматизировать бардак
Вариант 1 - сделать распоряжение менеджерам назначить основной договор и делать это при внесении нового клиента Вариант 2 - сделать обработку назначения основного договора у существующих и при создании первого договора у клиента |
|||
23
АгентБезопасной Нацио
21.05.24
✎
15:57
|
(22) неправда. Он не автоматизирует бардак - он его приумнножает!
|
|||
24
Лирик
21.05.24
✎
16:51
|
(22) (23) Не согласен, абсолютно внятная задача ускоряющая работу пользователя. Другой вопрос, что разработчики не додумали вопрос и сделали "основной договор". Например, если основным установлен договор с покупателем, естественно при выборе контрагента в документе поступления он не подойдет.
Алгоритм по заполнению договора при выборе контрагента должен быть следующим: -при выборе контрагента формируются параметры выбора договоров, -формируется запрос с фильтром по параметрам, -если выборка включает только один договор - он подставляется в реквизит "Договора". Просто, понятно, применимо в большинстве случаев. ИМХО. |
|||
25
Лирик
21.05.24
✎
16:56
|
+(24) Можно даже "поженить" этот алгоритм со стандартным:
-если выборка включает только один договор или в выборку попал Основной - он подставляется в реквизит "Договора". |
|||
26
Волшебник
21.05.24
✎
17:00
|
(24) Будет много ложных срабатываний, когда контрагент идёт на вторую сделку.
|
|||
27
Гена
гуру
21.05.24
✎
17:11
|
(23) Не так. Автор подставляет операционистку. Если за неё подставлять автоматом договор, то она будет проскакивать это поле быстрее лани. В результате все доки лягут на один договор.
|
|||
28
Лирик
21.05.24
✎
17:13
|
(26) Снова не согласен, зависит от параметров фильтра. Можно сделать, как вариант, параметр "ОдинДоговорОднаСделка" и при установке этого параметра в истину выбирать договоры по которым нет заказов (условно).
От задач зависит. У меня была задача, когда договор подставлялся исходя из доп. реквизита заказа. Причем мало того подставлялся, еще и автоматом создавался. Ну нужно было взаиморасчеты делить по этому признаку. Там вообще было менеджерам запрещено выбирать договор. |
|||
29
Волшебник
21.05.24
✎
17:13
|
(27) Кстати, это приводит к сложным ошибкам в дальнейшем.
Потому что договор из заказа идёт дальше в реализацию, потом в акт... Короче, ошибка в начале пути приводит к снежному кому и лавине ошибок позже. |
|||
30
Лирик
21.05.24
✎
17:16
|
(27) Или не дает операционистке ошибиться и ускоряет ее работу.
|
|||
31
Гена
гуру
21.05.24
✎
17:18
|
(29) Да. Автор, похоже, не знает женской психологии. Не будет никогда женщина менять заполненное поле при пулемётном наборе. А вот незаполненное поле воленс-ноленс заставит её выбирать )
|
|||
32
ДержиКод
21.05.24
✎
17:22
|
А если Договора нет?)
А что гласит регламент заведения договоров?) |
|||
33
Лирик
21.05.24
✎
17:25
|
(31) Следуя такой логике нужно убирать регистр "СчетаУчетаНоменклатуры", а то повадились, ручками, ручками. 10, 41, 43 и думаем, перед тем как сделать )
|
|||
34
lEvGl
гуру
21.05.24
✎
17:25
|
Скорее всего на этом этапе эта информация уже есть в базе, надо только ее достать. Если нет, то дайте просто форму выбора договора автоматом после выбора контрагента. Сокращение затрат умопомрачительное, как и начальная задача
|
|||
35
lEvGl
гуру
21.05.24
✎
17:27
|
(33) все с этим хорошо, не надо умничать и переназначить счета, указанные глав. бухом, если на то не было указаний. А если были, то идите, глав. бух, укажите счета и забудем об этом.
|
|||
36
Гена
гуру
21.05.24
✎
17:29
|
(33) Операционистка как правило не разбирается в счетах, поэтому пусть замГБ настраивает учёт.
(34) Хорошая мысль, мне нравится. |
|||
37
Гена
гуру
21.05.24
✎
17:36
|
(34) Причём сразу снимается проблема однодоговорного контрика: просто в форме выбора он будет сфокусирован один.
|
|||
38
Лирик
21.05.24
✎
17:36
|
(35) (36) Хорошо прописанный и автоматизированный алгоритм выбора договора точно так же имеет право на существование. Сказано при заказе с этого региона выбирать этот договор и не надо думать.
Ладно, каждый при своем. |
|||
39
lEvGl
гуру
21.05.24
✎
17:40
|
(36)(37) :)
(38) это лирика, конкретика у ТСа, в знании конкретно этой ситуации, есть там алгоритм или нет, хрен знает |
|||
40
ДержиКод
21.05.24
✎
17:45
|
А может нужно чтоб последний используемый договор подставлялся?)
|
|||
41
Bell
21.05.24
✎
22:05
|
(0) А бухгалтер у Вас есть? Не та автоматизация...
|
|||
42
Валентиновый
naïve
24.05.24
✎
13:09
|
Вот рабочий код:
Задача: При выборе контрагента автоматически заполнить поле договор. Договор может быть основным или не основным. Договоров может быть несколько, договор может быть помечен на удаление. Напомню есть два поля ввода: Контрагент (Путь к данным Объект.Контрагент), Договор (Путь к данным Объект.Договор). У поля ввода Договор, в свойствах стоит - СвязиПараметровВывода - Отбор.Владелец(Объект.Контрагент). Далее на поле ввода Контрагент стоит События - КонтрагентПриИзменении. Сам код в модуле формы:&НаСервере Функция ПолучитьОсновнойДоговор(Контрагент) Результат = Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 |ОсновныеДоговорыКонтрагента.Договор КАК Договор |ИЗ |РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента |ГДЕ |ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент"; Запрос.УстановитьПараметр("Контрагент", Контрагент); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда Результат = ВыборкаДетальныеЗаписи.Договор; КонецЕсли; //если основной договор не отмечен, то поищем среди всех договоров и если по данному виду он один и непомеченный на удаление, то возьмем его Если Результат.Пустая() Тогда Запрос.Текст = "ВЫБРАТЬ |МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Договор, |КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДоговорыКонтрагентов.Ссылка) КАК КоличествоДоговоров |ИЗ |Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов |ГДЕ |ДоговорыКонтрагентов.Владелец = &Контрагент |И НЕ ДоговорыКонтрагентов.ПометкаУдаления"; Запрос.УстановитьПараметр("Контрагент", Контрагент); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда Если ВыборкаДетальныеЗаписи.КоличествоДоговоров=1 Тогда Результат = ВыборкаДетальныеЗаписи.Договор; ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров=0 Тогда Сообщить("Договоров нет"); ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров>1 Тогда Результат = ВыборкаДетальныеЗаписи.Договор; ТекстОшибки = СтрШаблон("Для контрагента %1 подставлен первый договор из нескольких", Контрагент); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); КонецЕсли; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции &НаКлиенте Процедура КонтрагентПриИзменении(Элемент) Контрагент = Объект.Контрагент; Объект.Договор = ПолучитьОсновнойДоговор(Контрагент); КонецПроцедуры |
|||
43
Волшебник
24.05.24
✎
13:09
|
(42) Соблюдайте лесенку программного кода (отступы)
|
|||
44
DJ Anthon
24.05.24
✎
13:13
|
(42) а СрокДействия кто будет учитывать? а почему ты подставляешь первый попавшийся? а если единственный договор помечен на удаление? переделывай
|
|||
45
Мультук
гуру
24.05.24
✎
13:14
|
(42)
И где отбор по "Организация" ? И где отбор по "ВидДоговора" ? И есть еще такой момент как "Валюта" |Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов |ГДЕ |ДоговорыКонтрагентов.Владелец = &Контрагент |И НЕ ДоговорыКонтрагентов.ПометкаУдаления"; |РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента |ГДЕ |ОсновныеДоговорыКонтрагента.Контрагент = &Контрагент"; |
|||
46
Dmitrii
гуру
24.05.24
✎
13:54
|
(38) >> Хорошо прописанный и автоматизированный алгоритм выбора договора точно так же имеет право на существование
Вы каждый раз предлагаете какие-то неуниверсальные алгоритмы, применимые в каком-то отдельно взятом случае, но которые будут вредны и даже опасны (порождать цепочку неверно заполненных документов). В таком вопросе как автоматическое заполнение (по умолчанию) каких-то полей в документа, справочниках и т.п. мест для автоматизации уйма. Проблема в том, что все они (эти места для автоматизации) имеют довольно узкую специфику применения. То, что, по вашему, будет удобно одному может оказаться вредным для другого. В нашем случае (заполнение поля Договор в документе) предлагаемый алгоритм подойдёт тем, у кого с каждым контрагентом в один момент времени есть только один действующий договор соответствующего вида (с поставщиком/с покупателем/комиссии и т.п.). Как только у контрагента появляется несколько договоров, схема накрывается и получаем кучу ошибок в учёте, которые потом могут породить ошибки в оплатах/отгрузках по этим документам и т.д. Поэтому 1С в своих типовых конфигурациях и не идёт слишком далеко в такого рода автоматизации. В типовой БП 3.0 всё давно сделано в документе ПоступлениеТоваровУслуг всё давно сделано. При выборе контрагента заполняется договор, если есть основной договор с подходящими параметрами (вид/валюта/организация и пр.) или такой договор единственный. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |