Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 19:12

Запросы

Автор ilnur75, 14 июн 2016, 19:19

0 Пользователей и 1 гость просматривают эту тему.

ilnur75

Ситуация следующая.
Учебная конфигурация 8.3.
п.1. Справочник КонтактныеЛица , владелец его спр.Контрагенты.
п.2. справочник Агенты, владелец его Клиенты.

пытаюсь в одном документе составить код с запросами для разных полей формы документа в обработчике событий  ПриИзменении...

по пункту 1 сделал программно обработчик событий поля ПриИзмененииКонтактногоЛица(на сервере и на клиенте), работает выборка контактных лиц из справочника Контрагенты по принадлежности к текущему контрагенту.

по пункту 2 . аналогично всё делаю для Агента и Клиента , но при выборе Клиента выходит форма списка всех  агентов , т.е. без принадлежности к текущему клиенту. Код ниже:

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

Запрос.УстановитьПараметр("Ссылка", Объект.Клиент);
Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Объект.Клиент = Объект.Агент.Ссылка.Владелец;
КонецЦикла;
КонецПроцедуры

 
Что в этом коде надо исправить или дописать?

Golickoff

Цитата: ilnur75 от 14 июн 2016, 19:19
п.2. справочник Агенты, владелец его Клиенты.
Если я понял правильно, Агенты и Клиенты -- это два разных справочника. Тогда становится неясно, почему вы делаете выборку с отбором по ссылке, вставляя ссылку на элемент другого справочника.
...
|ГДЕ
| Агенты.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Объект.Клиент);
...

То есть, параметр "Ссылка" является ссылкой на объект другого справочника. Реквизит "Ссылка" для каждого справочника является ссылкой на элемент текущего справочника, а не какого-либо другого. Вы можете сделать отбор по владельцу, написав в запросе "ГДЕ Агенты.Владелец = &Ссылка" и указав тот же параметр, что используете сейчас. Тогда вы получите только тех агентов, владельцем которых является текущий клиент, а цикл после запроса потеряет свой смысл. В общем, я так и не понял чего вы пытаетесь добиться.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

LexaK

Ребята, что-то не пойму.
А на фига вы весь этот геморрой городите?
на формах, тем более управляемых, есть отличный механизм связи полей по владельцам и прочим настройкам отбора.
В общем и программировать ни чего не надо, тем более с таким программированием.
см. рис. да ли любую реальную базу откройте посмотрите примеры настройки связи полей на форме. :befhbt:
если помогло нажмите: Спасибо!

vitasw

LexaK, ваш ответ не в тему. ТС хочет, чтоб мог выбрать любого агента и в "клиент" подтянулся владелец. Ваши настройки позволяют выбирать агента только в подчинении владельца, а этого как раз и не нужно, нужна обратная операция.

LexaK

vitasw,
Цитировать..., нужна обратная операция.

Какая Обратная операция? например, при выборе договора, просто тупо написать

Контраент = ВыбранныеДоговор.Владелец;

какие здесь запросы нужны? не понимаю. :dfbsdfbsdf:
если помогло нажмите: Спасибо!

vitasw

снимаю свои замечания. согласен.

ilnur75

Цитата: LexaK от 15 июн 2016, 10:40на формах, тем более управляемых, есть отличный механизм связи полей по владельцам и прочим настройкам отбора.
Оказывается не всегда этот механизм действует так как надо. Например, на используемой мной учебной конфигурации в явном виде связи параметров сразу не определяются, надо открыть вспомогательный список и там выбрать и т.д. и т.д.

Поэтому у меня был вопрос с тем как связи параметров описать программно(скрины прилагаются).
Нет возможности допуска к реальным типовым конфигурациям 1с , там все равно этот код не написан.
Если желаете помочь, то научите составить этот код по условиям в 1 посте.
&НаСервере
Процедура КлиентПриИзмененииНаСервере()

// напишите пож-та рабочий код чтобы при выборе:
//  1 . Для поля Контрагент - в поле Контактные лицо выпадал список контактных лиц, подчиненный текущему контрагенту
//  2 . Для поля Клиент - в поле Контактное лицо выпадал список контактных лиц, подчиненный текущему клиенту.
// справочник "Контактные Лица" подчинен справочникам "Контрагенты" и "Клиенты" (см.скрин)
// свойство Связи параметров не работают!!! (см.скрин).
КонецПроцедуры
   


vitasw

Правильно - это не писать код, а пользоваться встроенными возможностями платформы.

LexaK

Цитировать
    //  1 . Для поля Контрагент - в поле Контактные лицо выпадал список контактных лиц, подчиненный текущему контрагенту
    //  2 . Для поля Клиент - в поле Контактное лицо выпадал список контактных лиц, подчиненный текущему клиенту.

ну надо хотя бы немного логику включать, вы путаетесь даже в элементарно постановленной задаче
почему-то вы себе видите задачу так, изображаю поля в квадратных скобах, нет времени формы рисовать

ваш вариант:

[Клиент]
[Контрагент]
        где-то         [КонтактноеЛицо]

как вы хотите в одно поле КонтактноеЛицо воткнуть два лица (по одному на клиента и контрагента) ? отсюда и бардак в вашей голове!

нужна такая схема полей

[Клиент] - [КонтактноеЛицоКлиента]
[Контрагент] - [КонтактноеЛицоКонтрагента]

или

[Клиент/Контрагент(составной тип)] - [КонтактноеЛицо]

ВСЕ, при такой схеме первое поле Клиент/Контрагент является владельцем для второго поля !
(в вашей картинке в связях параметров нужно оставить одну связь)
если помогло нажмите: Спасибо!

ilnur75

Цитата: LexaK от 16 июн 2016, 09:38[Клиент/Контрагент(составной тип)] -
как такой тип устанавливается для владельцев?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск