• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Запрос

  • Автор темы VlasovSergey
  • Дата начала
V

VlasovSergey

Доброго времени суток.
(Платформа 8.1 "Управление торговлей" 10.3
у меня есть запрос,но почему то он не работает,подскажите пожалуйста что тут не так.

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
|ВЫРАЗИТЬ (КонтактнаяИнформация.Представление КАК Строка(100)) КАК ФактическийАдресКонтрагента
|ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
|ПО КонтактнаяИнформация.Объект=Контрагент.Наименование
|И КонтактнаяИнформация.Тип=Значение(Перечисление.ТипыКонтактнойИнформации.Адрес)
|И КонтактнаяИнформация.Вид=Значение(Справочник.ВидыКонтактнойИнформации.Фактически
йАдресКонтрагента)";

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() > 0 Тогда
Выборка.Следующий();
ЭлементыФормы.ФактическийАдрес.Значение = Выборка.ФактическийАдрес;
Иначе
ЭлементыФормы.ФактическийАдрес.Значение = "Не найден";
КонецЕсли;
 
P

puh14

Скорее всего у тебя

|И КонтактнаяИнформация.Тип=Значение(Перечисление.ТипыКонтактнойИнформации.Адрес)
|И КонтактнаяИнформация.Вид=Значение(Справочник.ВидыКонтактнойИнформации.Фактически

всё гробят.

Поставь лучше

|Где КонтактнаяИнформация.Тип=Значение(Перечисление.ТипыКонтактнойИнформации.Адрес
|И КонтактнаяИнформация.Вид=Значение(Справочник.ВидыКонтактнойИнформации.Фактически
йАдресКонтрагента


апдейт - ой я мир - КонтактнаяИнформация.Объект=Контрагент.Наименование
, вот что гробит. Объект - это ссылка на справочник контрагенты, а не наименование элемента

"Мир".... Гм -антигадин сработал.
 
V

VlasovSergey

Выдает ошибку:Ошибка при вызове метода контекста (Выполнить): {(5, 32)}: Поле не найдено "Контрагент.Наименование"

вот эта строчка глюченая
|ПО КонтактнаяИнформация.Объект=Контрагент.Наименование

и не знаю что с ней сделать
 
P

puh14

Ты петаешся сравнить ссылку со строкой, правильно писать Контрагент.ссылка
 
V

VlasovSergey

токо что пробовал,и все равно выдает ошибку

{Документ.ДоверенностиВОрганы.Форма.ФормаДокумента(17)}: Ошибка при вызове метода контекста (Выполнить): {(5, 32)}: Поле не найдено "Контрагент.Ссылка"
ПО КонтактнаяИнформация.Объект=<<?>>Контрагент.Ссылка
Выборка = Запрос.Выполнить().Выбрать();
 
P

puh14

Ну так ты таблицу переобозвал, надо писать не контрагент.ссылка, а контрагенты.ссылка. Кстати - при чем тут документ? этот запрос выберет все заполненные фактические адреса для всех контрагентов их имеющих. Тебе нужен адрес конкретного контрагента?
 
V

VlasovSergey

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

puh14

смотри функцию УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(Объект, ТипАдреса = "")

нафига велосипед изобретать?
 
V

VlasovSergey

в России не ищут легких путей))))голову токо себе ломаю)))
 
V

VlasovSergey

теперь выдает вот что

{Документ.ДоверенностиВОрганы.Форма.ФормаДокумента(17)}: Ошибка при вызове метода контекста (Выполнить): {(7, 37)}: Неверные параметры "Справочник.ВидыКонтактнойИнформации.ФактическийАдресКонтрагента"
И КонтактнаяИнформация.Вид=Значение(<<?>>Справочник.ВидыКонтактнойИнформации.ФактическийАдресКонтрагента)
Выборка = Запрос.Выполнить().Выбрать();


:)
 
P

puh14

Значит нет у тебя предопределенного элемета с таким именем. А есть ФактАдресКонтрагента и ЮрАдресКонтрагента.

А вообще достаточно написать адресконтрагентастрокой = УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(ссылкаНаКонт
рагента, "Фактический");
 
V

VlasovSergey

извеняюсь конечно за глупый вопрос где написать эту функцию(что то не пойму)?(((

УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(ссылкаНаКонт
рагента, "Фактический");
 
P

puh14

Значит так - это стандартная функция, живущая в общем модуле УправлениеКонтактнойИнформацией. Ты ей скармиливааешь контрагента и каакой параметр хочешь получить а она возвращает некую строку. Куда ты потом приткнешь эту строку - это уже твое дело. можешь хоть никуда не притыкать.

Ты куда хотел вывести результат запроса? вот приваивай значение полученное этой функцией в нужное место.
 
V

VlasovSergey

результат хотел вывести в некий документ ДоверенностиВОрганы.Значит в модуле объекта вставить эту функцию. и там написать куда я хочу привить полученные значения. я так понял?)
 
P

puh14

Хочешь - в модуле объекта,хочешь - в модуле формы. А так - да, правильно.
 
V

VlasovSergey

подскажите еще плиз,как эту функцию правильнее написать,а то я уже и так и так писал ни каких результатов(
 
P

puh14

выложи то что у тебя сейчас написано.
 
V

VlasovSergey

у меня пока вот это написано,я ту функцию удалил и начал с этим опять разбираться

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() тогда
ЭлементыФормы.ФактическийАдрес.Значение = Выборка.ФактическийАдрес;
Иначе
ЭлементыФормы.ФактическийАдрес.Значение = "Не найден";
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
|ВЫРАЗИТЬ (КонтактнаяИнформация.Представление КАК Строка(100)) КАК ЮридическийАдрес
|ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
|ПО КонтактнаяИнформация.Объект=Контрагенты.Ссылка
|ГДЕ КонтактнаяИнформация.Тип=Значение(Перечисление.ТипыКонтактнойИнформации.Адрес)
|И КонтактнаяИнформация.Вид=Значение(Справочник.ВидыКонтактнойИнформации.ЮрАдресКон
трагента)";


Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() тогда
ЭлементыФормы.ЮридическийАдрес.Значение = Выборка.ЮридическийАдрес;
Иначе
ЭлементыФормы.ЮридическийАдрес.Значение = "Не найден";
КонецЕсли;
 
V

VlasovSergey

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

Darlock

1 - Из "Внутреннее соединение" сделайте "Левое"
2 - у вас обход короткий. будет только 1 строка (или я не узрел условие по контрагенту)
3 - у вас соединение организовано с приоритетом к контактной информации, а не к контрагенту.

В общем, насколько понял поменяйте таблицы местами в запросе и левое соединение установите. Должно полегчать запросу
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!