Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Договор Контрагента ??? (8.1)  (Прочитано 25554 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vic
Интересующийся

kg
Offline Offline
Пол: Мужской

« : 22-08-2014 07:47 » 

Как в 8.1 в табличную часть документа вызвать соответствующий Договор контрагента, причем Основной?

Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-08-2014 10:04 » 

Строка.ДоговорКонтрагента = Строка.Контрагент.ОсновнойДоговор;

Это все, что можно посоветовать из описания задачи
Записан
vic
Интересующийся

kg
Offline Offline
Пол: Мужской

« Ответ #2 : 22-08-2014 12:03 » 

Это все, что можно посоветовать из описания задачи
Задачка, то вроде простая -  выбираем Контрагента в соседней ячейке  появляется его договор (Основной)
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 26-08-2014 14:28 » 

Конфигурация, платформа (режим: управляемые/обычные формы), версии?
Что пытался делать (код)?
Записан
vic
Интересующийся

kg
Offline Offline
Пол: Мужской

« Ответ #4 : 26-08-2014 17:29 » 

Конфигурация, платформа (режим: управляемые/обычные формы), версии?
Что пытался делать (код)?
8.1, стандартная конфигурация
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 29-08-2014 06:13 » 

Ты с Кыргызстана, я с Украины, сайт в России. Какая из конфигураций "стандартная"?
Вот типовые решения для России: http://v8.1c.ru/solutions/applied_solutions.htm
Вот локализованные решения: http://v8.1c.ru/regional/RegionalSolutions.htm
Мне тебе для всех "стандартных" ответы давать? (как минимум 5-6 различных схем данных контрагент-договор в них используется)

Добавлено через 46 секунд:
И где код? Где попытки найти решение?
« Последнее редактирование: 29-08-2014 11:25 от Kivals » Записан
vic
Интересующийся

kg
Offline Offline
Пол: Мужской

« Ответ #6 : 29-08-2014 08:46 » 

Ты с Кыргызстана, я с Украины, сайт в России. Какая из конфигураций "стандартная"?
У нас Российская, вроде как, только налоговый кодекс наш.
В моей при изменении Контрагента и его договор в шапке формы документа вызывается:

УправлениеВзаиморасчетами.ПриИзмененииЗначенияКонтрагента(ЭтотОбъект,мСписокВидовДоговоров);
В других другое решение?

Я раскопал саму процедуру в Общем модуле, но она тож не подошла, зато подошла для формы РегистраСведений. а вот от туда что то тож никак договр не выходит, или к ниму нужен спецподход?
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 29-08-2014 11:40 » 

Если у тебя в конфигурации есть документ ЗаказПокупателя - то проверь что там вызывается при изменении контрагента.
Также во многих конфигурациях в справочнике Контрагенты есть реквизит ОсновнойДоговорКонтрагента - только не забудь проверить Организацию договора, если учет ведется по нескольким организациям.

И версию желательно писать полностью - см. скриншот:

* sc-20140829143358.png (41.07 Кб - загружено 580 раз.)
Записан
vic
Интересующийся

kg
Offline Offline
Пол: Мужской

« Ответ #8 : 29-08-2014 12:32 » 

Движки то одинаковые, а вот такого документа нет, можно глянуть его форму?


Добавлено через 22 минуты и 22 секунды:
Значение не является значением объектного типа

Вот об этом спотыкаются все более или менее подходящие идеи и  конструкции
« Последнее редактирование: 29-08-2014 12:54 от vic » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 29-08-2014 13:47 » 

В бухгалтерии можно посмотреть документ СчетНаОплатуПокупателю
Вот выдержка из БУ для Украины:
Документ.СчетНаОплатуПокупателю.ФормаДокумента
Код: (1C v8)
// Процедура - обработчик события "ПриИзменении" поля ввода контрагента.
//
Процедура КонтрагентПриИзменении(Элемент)

        // Выполняем общие действия для всех документов при изменении Контрагент.
        ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(ЭтотОбъект,мСписокВидовДоговоров);

        ПриИзмененииДоговора();

КонецПроцедуры // КонтрагентПриИзменении()
ОбщийМодуль.ЗаполнениеДокументов
Код: (1C v8)
// Процедура выполняет общие действия при изменнении контрагента
//
// Параметры:
//  ДокументОбъект - объект редактируемого документа,
//
Процедура ПриИзмененииЗначенияКонтрагента(ДокументОбъект,СписокВидовДоговоров = Неопределено,СтруктураДополнительныхПараметров = Неопределено,
                                              НаименованиеРеквизитаДоговора = "", НаименованиеРеквизитаКонтрагента = "") Экспорт

        Если НЕ ЗначениеЗаполнено(НаименованиеРеквизитаКонтрагента) Тогда
            НаименованиеРеквизитаКонтрагента = "Контрагент";
        КонецЕсли;
        Если НЕ ЗначениеЗаполнено(НаименованиеРеквизитаДоговора) Тогда
            НаименованиеРеквизитаДоговора = "ДоговорКонтрагента";
        КонецЕсли;
       
        МетаданныеДокумента = ДокументОбъект.Метаданные();

        Если ОбщегоНазначения.ЕстьРеквизитДокумента(НаименованиеРеквизитаДоговора, МетаданныеДокумента) Тогда
               
                УправлениеВзаиморасчетами.УстановитьДоговорКонтрагента(ДокументОбъект[НаименованиеРеквизитаДоговора],
                                                                        ДокументОбъект[НаименованиеРеквизитаКонтрагента],
                                                                        ДокументОбъект["Организация"],
                                                                        СписокВидовДоговоров,
                                                                        СтруктураДополнительныхПараметров);

        КонецЕсли;

        Если ОбщегоНазначения.ЕстьРеквизитДокумента("Сделка", МетаданныеДокумента)
                И НЕ ТипЗнч(ДокументОбъект.Сделка) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
               
                ДокументОбъект.Сделка = Неопределено;
               
        КонецЕсли;

КонецПроцедуры // ПриИзмененииЗначенияКонтрагента()
ОбщийМодуль.УправлениеВзаиморасчетами
Код: (1C v8)
// Получает договор контрагента по умолчанию с учетом условий отбора. Возвращается основной договор или единственный или пустая ссылка
//
// Параметры
//  ВладелецДоговора    –     <СправочникСсылка.Контрагенты>
//                                                      Контрагент, договор которого нужно получить
//  ОрганизацияДоговора      –     <СправочникСсылка.Организации>
//                                                      Организация, договор которой нужно получить
//  СписокВидовДоговора      –     <Массив> или <СписокЗначений>, состоящий из значений типа <ПеречислениеСсылка.ВидыДоговоровКонтрагентов>
//                                                      Нужные виды договора
//  СтруктураПараметров      –     <Структура>
//                                                      Структура дополнительных параметров отбора договоров по реквизитам.
//                                                      Элементы структуры СтруктураПараметров:
//                                                      Ключ - имя реквизита договора, Значение - еще одна структура
//                                                     
//                                                      Элементы структуры, которая находится в Значение:
//                                                      Ключ - "ЗначениеОтбора", Значение - значение реквизита договора для отбора. Обязательный элемент.
//                                                      Ключ - "ВидСравненияОтбора", Значение - <ВидСравнения>. Необязательный элемент, по умолчанию ВидСравнения.Равно
//
// Возвращаемое значение:
//   <СправочникСсылка.ДоговорыКонтрагентов> – найденный счет или пустая ссылка
//
Функция УстановитьДоговорКонтрагента(ДоговорКонтрагента,ВладелецДоговора, ОрганизацияДоговора, СписокВидовДоговора=неопределено, СтруктураПараметров = Неопределено) Экспорт

        НовыйДоговор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();

        Запрос = Новый Запрос;
        ТекстЗапроса =
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2
        |       ДоговорыКонтрагентов.Ссылка,
        |       ВЫБОР
        |               КОГДА СправочникВладелец.Ссылка ЕСТЬ НЕ NULL
        |                       ТОГДА 1
        |               ИНАЧЕ 2
        |       КОНЕЦ КАК Приоритет
        |ИЗ
        |       Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
        |               ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК СправочникВладелец
        |               ПО ДоговорыКонтрагентов.Владелец = СправочникВладелец.Ссылка
        |                       И ДоговорыКонтрагентов.Ссылка = СправочникВладелец.ОсновнойДоговорКонтрагента
        |ГДЕ
        |       &ТекстФильтра
        |
        |УПОРЯДОЧИТЬ ПО
        |       Приоритет"
;
       
        Запрос.УстановитьПараметр("ВладелецДоговора", ВладелецДоговора);
        Запрос.УстановитьПараметр("ОрганизацияДоговора", ОрганизацияДоговора);
        Запрос.УстановитьПараметр("СписокВидовДоговора", СписокВидовДоговора);
       
        ТекстФильтра = "
        |       ДоговорыКонтрагентов.Владелец = &ВладелецДоговора
        |       И ДоговорыКонтрагентов.Организация = &ОрганизацияДоговора
        |       И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ"

        +?(СписокВидовДоговора<>неопределено,"
        |       И ДоговорыКонтрагентов.ВидДоговора В (&СписокВидовДоговора)"
,"");
       
        Если ТипЗнч(СтруктураПараметров) = Тип("Структура") Тогда
                Для каждого Параметр Из СтруктураПараметров Цикл
                        ИмяРеквизита = Параметр.Ключ;
                        СтруктураОтбора = Параметр.Значение;
                        ВидСравненияЗапроса = ПолучитьВидСравненияДляЗапроса(СтруктураОтбора);
                        ТекстФильтра = ТекстФильтра + "
                        |       И ДоговорыКонтрагентов."
+ ИмяРеквизита + " " + ВидСравненияЗапроса + " (&" + ИмяРеквизита + ")";
                        Запрос.УстановитьПараметр(ИмяРеквизита, СтруктураОтбора.ЗначениеОтбора);
                КонецЦикла;
        КонецЕсли;
       
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстФильтра", ТекстФильтра);
       
        Запрос.Текст = ТекстЗапроса;
        Результат = Запрос.Выполнить();
       
        Если Не Результат.Пустой() Тогда
       
                Выборка = Результат.Выбрать();
                Выборка.Следующий();
               
                НайденОсновнойДоговор = Выборка.Приоритет = 1;
                НайденОдинДоговор     = Выборка.Количество() = 1;
               
                Если НайденОсновнойДоговор ИЛИ НайденОдинДоговор Тогда
                        НовыйДоговор = Выборка.Ссылка;
                КонецЕсли;
       
        КонецЕсли;
       
        Если (ДоговорКонтрагента.Владелец<>ВладелецДоговора ИЛИ ДоговорКонтрагента.Организация<>ОрганизацияДоговора) ИЛИ (не ЗначениеЗаполнено(ДоговорКонтрагента)) Тогда
                ДоговорКонтрагента = НовыйДоговор;
                Возврат Истина;
        Иначе
                Возврат Ложь;
        КонецЕсли;
       
КонецФункции // ПолучитьДоговорКонтрагента()
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines