Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > 1С: Проблемы и решения > договор контрагента |
Автор: ^D^ima 01.03.17, 12:37 |
Бух 3.0, не вытаскивается договор контрагента. делаю так: ФормаКонтрагент - справочник.ссылка.контрагент <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> &НаКлиенте Процедура Сформировать(Команда) НайтиДоговорКонтрАгента(ФормаКонтрагент); КонецПроцедуры &НаСервере Процедура НайтиДоговорКонтрАгента(ФормаКонтрагент) КАгент = Новый Структура; КАгент.Вставить("Контрагент",ФормаКонтрагент); ФормаДоговор = РегистрыСведений.ОсновныеДоговорыКонтрагента.Получить(ТекущаяДата(),КАгент)[0]; КонецПроцедуры Пишет "несоответствие типов" |
Автор: evGenius 01.03.17, 13:26 |
Откуда взялась ФормаКонтрагент? Кусок кода можно? |
Автор: ^D^ima 01.03.17, 13:44 |
evGenius Это реквизит на форме, не более того. ____________.zip (, : 122) |
Автор: kosten 01.03.17, 13:47 |
И какой тип попадает в твою функцию? |
Автор: ^D^ima 01.03.17, 13:50 |
справочник.ссылка.контрагент, я написал. Или для регистров сведений нужны все реквизиты? Там их 3 |
Автор: kosten 01.03.17, 13:51 |
Это строка. Ты уверен, что по строке сработает поиск договора? Раз ругается на несоответствие типов, то скорее всего надо ссылку на контрагента передавать. Добавлено У меня открылось, как строка. |
Автор: ^D^ima 01.03.17, 13:58 |
Нет, как ссылка 1.png (, : 555) |
Автор: evGenius 01.03.17, 14:06 |
Ты в ФормаДоговор пытаешься запись регистра запихнуть. Надо дописать что-то типа".Договор". |
Автор: ^D^ima 01.03.17, 14:12 |
evGenius Я делаю вообще сообщить, то-же самое <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> &НаСервере Процедура НайтиДоговорКонтрАгента(ФормаОрганизация,ФормаКонтрагент) Сообщить(ФормаКонтрагент); КАгент = Новый Структура; КАгент.Вставить("Организация",ФормаОрганизация); КАгент.Вставить("Контрагент",ФормаКонтрагент); КАгент.Вставить("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПокупателем); Сообщить(РегистрыСведений.ОсновныеДоговорыКонтрагента.Получить(ТекущаяДата(),КАгент)[0]); КонецПроцедуры |
Автор: evGenius 01.03.17, 14:15 |
Так а как программа будет сообщать запись регистра? |
Автор: ^D^ima 01.03.17, 14:41 |
Я думаю что должна сообщить, так-же как и ссылку на контрагента. Ошибка все-равно в чем-то другом, через отладчик не вычислить сообщение ____________________.png (, : 586) |
Автор: evGenius 01.03.17, 15:14 |
Проблема в том, что регистр сведений непериодический, у метода Получить() не должно быть параметра-даты, только отбор. Добавлено <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> &НаСервере Процедура НайтиДоговорКонтрАгента(ФормаОрганизация,ФормаКонтрагент) КАгент = Новый Структура; КАгент.Вставить("Организация",ФормаОрганизация); КАгент.Вставить("Контрагент",ФормаКонтрагент); КАгент.Вставить("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПокупателем); ФормаДоговор = РегистрыСведений.ОсновныеДоговорыКонтрагента.Получить(КАгент)[0].Договор; КонецПроцедуры |
Автор: ^D^ima 02.03.17, 06:09 |
А это тогда о чем? ____________________.png (, : 580) |
Автор: ^D^ima 02.03.17, 06:47 |
ошибка все-равно остается: Error.png (, : 578) |
Автор: ^D^ima 02.03.17, 10:27 |
В итоге сделал так: Ид другого справочника взял данные. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ДоговорКонтрАгента = новый Запрос; ДоговорКонтрАгента.Текст = "ВЫБРАТЬ | ДоговорыКонтрагентов.Ссылка |ИЗ | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов |ГДЕ | ДоговорыКонтрагентов.Владелец = &Владелец | И ДоговорыКонтрагентов.Организация = &Организация"; ДоговорКонтрАгента.УстановитьПараметр("Организация",ФормаОрганизация); ДоговорКонтрАгента.УстановитьПараметр("Владелец",ФормаКонтрагент); Выборка = ДоговорКонтрАгента.Выполнить().Выбрать(); Выборка.Следующий(); ФормаДоговор=Выборка.ссылка; Вместо запроса пытался сделать структуру, не получилось. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> КАгент = Новый Структура; КАгент.Вставить("Организация",ФормаОрганизация); КАгент.Вставить("Владелец",ФормаКонтрагент); ФормаДоговор = Справочники.ДоговорыКонтрагентов.ПолучитьДанныеВыбора(КАгент); Ещё одно непонятное: В справочнике ДоговорКонтрАгента нет реквизита Владелец. - Я не наблюдаю его визуально. проверил все реквизиты, нигде нет ни названия "Владелец" ни ссылки на контрагента у других реквизитов. - Этот код <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ругается на Неверно указан реквизит. При этом такой код:ФормаДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("Владелец",ФормаКонтрагент); <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ФормаДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("Организация",ФормаОрганизация); Сообщить(ФормаДоговор.Владелец); Отрабатывает на ура. Т.е в запросе можно указать это реквизит, сообщить его можно, но найти по нему нельзя(его и нет в справочнике в принципе). Откуда вашу **** взялся этот Владелец??????? |
Автор: evGenius 02.03.17, 10:42 |
Владелец - это хитрый реквизит, не совсем реквизит, как и Родитель. По нему нельзя так искать. Он появляется, когда справочник подчиняется другому. Добавлено Попозже вечером напишу как правильно сделать процедуру поиска договора, сейчас под рукой БП3 нет. |
Автор: ^D^ima 02.03.17, 11:32 |
Как же 1-ка меня нервирует... Почему в конфигураторе нет документа "Оказание производственных услуг", а в 1-ке он откуда-то берется. Вопрос откуда и как его тогда программно создавать? Docs.jpg (, : 558) |
Автор: evGenius 02.03.17, 12:06 |
Это синоним. Встаем в конфигураторе на корень "Документы", Ctrl+F - ищем по синониму. |
Автор: evGenius 03.03.17, 05:34 |
Я бы сделал так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Функция ПолучитьДоговорКонтрагента(Контрагент, Организация, ВидДоговора) // сначала ищем основной ЗапросПоиска = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОсновныеДоговорыКонтрагента.Договор |ИЗ | РегистрСведений.ОсновныеДоговорыКонтрагента КАК ОсновныеДоговорыКонтрагента |ГДЕ | ОсновныеДоговорыКонтрагента.Контрагент = &Владелец | ОсновныеДоговорыКонтрагента.ВидДоговора = &ВидДоговора | И ОсновныеДоговорыКонтрагента.Организация = &Организация"); ЗапросПоиска.УстановитьПараметр("Организация", Организация); ЗапросПоиска.УстановитьПараметр("Владелец", Контрагент); ЗапросПоиска.УстановитьПараметр("ВидДоговора", ВидДоговора); ВыборкаПоиска = ЗапросПоиска.Выполнить().Выбрать(); Если ВыборкаПоиска.Следующий() Тогда Возврат ВыборкаПоиска.Договор; КонецЕсли; // ну раз нет основного, то первый попавшийся ЗапросПоиска = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ДоговорыКонтрагентов.Ссылка |ИЗ | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов |ГДЕ | ДоговорыКонтрагентов.Владелец = &Владелец | И ДоговорыКонтрагентов.Организация = &Организация | И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора | И НЕ ДоговорыКонтрагентов.ПометкаУдаления"); ЗапросПоиска.УстановитьПараметр("Организация", Организация); ЗапросПоиска.УстановитьПараметр("Владелец", Контрагент); ЗапросПоиска.УстановитьПараметр("ВидДоговора", ВидДоговора); ВыборкаПоиска = ЗапросПоиска.Выполнить().Выбрать(); Если ВыборкаПоиска.Следующий() Тогда Возврат ВыборкаПоиска.Ссылка; КонецЕсли; // ну нету раз Возврат Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); КонецФункции |
Автор: ^D^ima 03.03.17, 07:06 |
evGenius Спасибо, я примерно так и сделал. |