7.7 Выбор договора из клиента

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем SCtYL, 14 дек 2010.

  1. TopicStarter Overlay
    SCtYL
    Offline

    SCtYL

    Регистрация:
    20 сен 2010
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Имеется документ, в нём реквизиты: Клиент(Справочник.Клиент) и Договора (документ договоров, в этом документе выбирается номер договора, дата и клиент из справочника клиентов). Как сделать так, чтобы при выборе клиента автоматически выставлялся в реквизит "договора" последний договор данного клиента, а в случае выбора договора выводились только договора данного клиента? Буду очень благодарным за ответы. Жду с нетерпением.
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Не совсем понятна суть:
    Пиши алгоритм выбора и подстановки нужного договора

    А по этому поводу
    Обрати внимание на поле "Связан с" в свойствах колонки на закладке "Дополнительно".

    Как пример - документ "Выписка" типовой бухгалтерии.
    Реквизиты ТЧ Субконто 1-3
  3. TopicStarter Overlay
    SCtYL
    Offline

    SCtYL

    Регистрация:
    20 сен 2010
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    По первому пункту пытался сделать так:
    Код:
    Процедура ДогКлиент()
    Дог=СоздатьОбъект("Документ.Договора");
    Дог.НайтиПоРеквизиту(Клиент,Клиент,1);
    ДоговораКлиентов=Дог.ТекущийЭлемент();
    КонецПроцедуры
    
    Где 1-ый клиент - реквизит клиент в документе договора; 2-ой клиент - реквизит клиент в этом документе.
    Здесь не делал выбора по последнему договору, т.к. и это не заработало.
    По поводу вышего предложения насчёт 2-го пункта сейчас попробую.
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Что за конфигурация?
    Почему Договора это документ?
    Метаданные 1С нужно использовать по назначению.


    Неверное использование метода. Так работать не будет.

    Глянь в синтакс-помощнике. Обратит внимание на типы параметров, они точно будут разные.
  5. Diego
    Offline

    Diego Любитель 1С Команда форума

    Регистрация:
    3 апр 2009
    Сообщения:
    966
    Симпатии:
    2
    Баллы:
    29
    Сделать запрос для отбора всех договоров этого клиента.
    Из него отобрать "последний" по Вашим правилам (последний по дате или последний по номеру договора?)

    По второму вопросу: в форме документа у поля ввода "Договор" установите "Связь по владельцу - Клиент"
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Если нужно найти последний договор по контрагенту и договор это документ, то так:
    Код:
    Док=СоздатьОбъект("Документ.Договора");
    Док.ОбратныйПорядок(1);
    Док.ВыбратьПоЗначению(,,"Клиент",Клиент);
    Если Док.ПолучитьДокумент()=1 Тогда
    Сообщить("Это последний договор "+Док);
    КонецЕсли;
    
    
    Клиент д.б. или общим реквизитом или графой отбора...
  7. TopicStarter Overlay
    SCtYL
    Offline

    SCtYL

    Регистрация:
    20 сен 2010
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Договора документ потому что так сказали сделать. Насчёт метода это понятно, он для справочников и строк в них, я как бы пример написал, вот я и спрашиваю потому что не знаю как сделать.
    Вот и подскажите как это сделать.
    Ведь это не неопределенный реквизит, а документ, как в нём сделать связь?
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Если это документ - пример выше
  9. TopicStarter Overlay
    SCtYL
    Offline

    SCtYL

    Регистрация:
    20 сен 2010
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Выводит:"Док.ВыбратьПоЗначению(,,"Клиент",Клиент);
    {Документ.ПоручениеКлиента.Форма.Модуль(20)}: Объект - документ определенного вида!"
    Не подскажите как сделать через общий реквизит, графу отбора?
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Упс... Действительно. Надо так
    Код:
    Док=СоздатьОбъект("Документ");
    
    
    
    2) В конфигураторе:
    Конфигурация-Журналы-Графа отбора-Новая-
    Имя "Клиент". Вид документа и реквизит - думаю разберетесь
  11. TopicStarter Overlay
    SCtYL
    Offline

    SCtYL

    Регистрация:
    20 сен 2010
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Как раз хотел поинтересоваться как работать с графой отбора, создать то понятно, но как ее применять? По первому пункту спасибо помогло.
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    вы ее уже применили используя ВыбратьПоЗначению))))
  13. TopicStarter Overlay
    SCtYL
    Offline

    SCtYL

    Регистрация:
    20 сен 2010
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Точно (= Может вы мне еще и подскажите как сделать так, чтобы выводились договора только по этому клиенту при выборе вручную? =)
  14. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    В документе ПоручениеКлиента:
    Код:
    Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога, ФлагСтандОбр)
    Если ИдентЭлемДиалога = "Договор" Тогда
    ТекКлиент = Клиент;
    ОткрытьПодбор("Журнал.Договора", "", ТекКлиент, 0);
    ФлагСтандОбр = 0;
    КонецЕсли;
    КонецПроцедуры
    
    
    Код модуля формы журнала документов Договора:
    Код:
    Процедура ПриОткрытии()
    ТекКлиент= Форма.Параметр;
    УстановитьОтбор("Клиент", ТекКлиент);
    КонецПроцедуры
    
    
    Ну и ОбработкаПодбора в ПоручениеКлиента.

    P.S. Хотя подбор скорее всего вам не подойдет.
  15. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Поищу код, когда-то что-то похожее делал (по памяти не помню).
  16. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Я бы делал через список значений.
  17. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Что я когда-то делал (задача была по выбору заявки клиента):

    1. Общий журнал документов УчетЗаявок_Общ.
    Посмотреть вложение 6075
    2. Графа отбора КонтрагентЗаявка.
    Посмотреть вложение 6076
    3. Экспортная переменная глобального модуля глКонтрагентЗаявка.
    4. Код в документе:
    Код:
    Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога, ФлагСтандОбр)
    Если ИдентЭлемДиалога = "Заявка" Тогда
    ФлагСтандОбр = 0;
    
    глКонтрагентЗаявка = Контрагент;
    Док = СоздатьОбъект("Документ");
    Док.Выбрать("Выберите документ заявки", "Журнал.УчетЗаявок_Общ");
    Если Док.Выбран() = 1 Тогда
    Заявка = Док.ТекущийДокумент();
    КонецЕсли;
    глКонтрагентЗаявка = "";
    КонецЕсли;
    КонецПроцедуры
    
    
    5. Код в журнале документов:
    Код:
    Процедура ПриОткрытии()
    Перем ТекКонтр;
    
    ТекКонтр = ПолучитьПустоеЗначение("Справочник.Клиенты");
    Если ТипЗначенияСтр(глКонтрагентЗаявка) = "Справочник" Тогда
    Если глКонтрагентЗаявка.Вид() = "Клиенты" Тогда
    ТекКонтр = глКонтрагентЗаявка.ТекущийЭлемент();
    КонецЕсли;
    КонецЕсли;
    
    УстановитьОтбор("КонтрагентЗаявка", ТекКонтр);
    КонецПроцедуры
    
    
    Как-то так.

    Вложения:

    • 0012.PNG
      0012.PNG
      Размер файла:
      14,2 КБ
      Просмотров:
      36
    • 0011.PNG
      0011.PNG
      Размер файла:
      12,2 КБ
      Просмотров:
      35
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Если не нужно просматривать содержимое - проще все же через список значений... Заполнять при начале выбора.
  19. TopicStarter Overlay
    SCtYL
    Offline

    SCtYL

    Регистрация:
    20 сен 2010
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Сделал вот так:
    Добавил в модуль документа:
    Код:
     Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога, ФлагСтандОбр)
    Если ИдентЭлемДиалога = "Договор" Тогда
    ФлагСтандОбр = 0;
    глКлиент = Клиент;
    Док = СоздатьОбъект("Документ");
    Док.Выбрать("Выберите документ заявки", "Журнал.Договора");
    Если Док.Выбран() = 1 Тогда
    Договор = Док.ТекущийДокумент();
    КонецЕсли;
    глКлиент = "";
    КонецЕсли;
    КонецПроцедуры
    
    Добавил в модуль журнала договора:

    Код:
    Процедура ПриОткрытии()
    Перем ТекКонтр;
    ТекКонтр = ПолучитьПустоеЗначение("Справочник.Клиенты");
    Если ТипЗначенияСтр(глКлиент) = "Справочник" Тогда
    Если глКлиент.Вид() = "Клиенты" Тогда  
    ТекКонтр = глКлиент.ТекущийЭлемент();
    КонецЕсли;
    КонецЕсли;
    УстановитьОтбор("Клиент", ТекКонтр);
    КонецПроцедуры
    
    В глобальный модуль добавил переменную глКлиент
    На что при выбирании документа он выводит:
    УстановитьОтбор("Клиент", ТекКонтр);
    {Журнал.Договора.Форма.ФормаСписка.Модуль(12)}: Неверное имя реквизита!

    Не подскажите в чём соль?
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Журнал у вас какого вида?

Поделиться этой страницей