22 января 2016 г.

1СОшибка Объект не найден ОсновнойДоговорКонтрагента

Звонит бухгалтер:
"Ой у меня обработка не работает"
Залезаю посмотреть и вижу сабж.
Открываю конфигуратор, и вижу, точнее не вижу объекта ОсновнойДоговорКонтрагента О_о


Оказывается в декабрьских релизах (проверена на БП3.0) был удален объект, добавили УдалитьОсновнойДоговорКонтрагента.
1С это аргументирует тем, что в будущем можно будет указывать основной договор с отбором (например по организации).
Ну а нам как быть, как выяснить основной договор, если в справочнике контрагенты никак не фиксируется сие?

Сначала я попробовал сделать запрос, уже наполовину завершил, и тут задумался, а как они устанавливают основной договор (возможность то осталась), копал копал и наткнулся на:
В общих модулях появился модуль РаботаСДоговорамиКонтрагентовБП в котором, есть замечательная функция УстановитьДоговорКонтрагента.
Название поражает, т.к. "Установить" в данном контексте двойственно, но оно выполняет свою функцию.
Вот что написали 1С-вцы в комментарии:

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

//Раньше

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

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

//Говорим пусто

КонецЕсли;



//Теперь

ДоговорКонтрагента=Неопределено;

РезультатОсновнойДоговор=РаботаСДоговорамиКонтрагентовБП.УстановитьДоговорКонтрагента(ДоговорКонтрагента,СсылкаНаКонтрагент,Организация);

Если НЕ РезультатОсновнойДоговор Тогда

//Говорим пусто

КонецЕсли;


И соответственно появилась функция, которая делает договор основным УстановитьОсновнойДоговорКонтрагента() в том же модуле.

Комментариев нет:

Отправка комментария