8.х Запрос с условием на поле-ссылка

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Revencu, 7 авг 2013.

  1. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Как выбрать в запросе записи удовлетворяющие какому-то значению в поле-ссылка?
    Пишу так, но ругается
    query.text="select Контрагент from AccumulationRegister.Закупки where Контрагент='Mobil-Import SRL'"

    Поле "Контрагент" это ссылка "СправочникСсылка.Контрагенты"
    Пробовал и варианты:
    where Контрагент.Value='Mobil-Import SRL'
    where Контрагент.Ref='Mobil-Import SRL'
    только ошибки
  2. Draco
    Online

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    либо через параметр в запросе, либо если элемент предопределенный то через оператор ЗНАЧЕНИЕ
  3. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Так как я Новичёк, пожалуйста дайте код на моём примере. Желательно с английскими функциями (если возможно)
  4. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Код:
    query.text="select Контрагент from AccumulationRegister.Закупки where Контрагент=&КонтрагетСсылка'"
    Затем нужно будет в параметр КонтрагентСсылка передать ссылку на вашего контрагента.
  5. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Ну и как передать ссылку на мой контрагент?

    Задача то:
    выбрать записи где поле контрагент ="Mobil-Import SRL"
    Где я ставлю это условие?
  6. Aston
    Offline

    Aston Опытный в 1С

    Регистрация:
    6 июн 2012
    Сообщения:
    467
    Симпатии:
    3
    Баллы:
    29
    Синтаксис помощник тут на русском и на англ как установить параметр

    УстановитьПараметр (SetParameter)

    Синтаксис:
    УстановитьПараметр(<Имя>, <Значение>)

    Параметры:

    <Имя> (обязательный)
    Тип: Строка.
    Имя устанавливаемого параметра. Оно должно соответствовать требованиям, предъявляемым к именованию переменных встроенного языка.

    <Значение> (обязательный)
    Тип: Произвольный.
    Значение устанавливаемого параметра.

    Описание:
    Устанавливает параметр запроса. Параметры доступны для обращения в тексте запроса. С помощью этого метода можно передавать переменные в запрос, например, для использования в условиях запроса.

    Доступность:
    Сервер, толстый клиент, внешнее соединение.

    Пример:
    Запрос.УстановитьПараметр("ДатаКонца", РабочаяДата);
    Запрос.УстановитьПараметр("Товар", ВыбТовар);



    query.SetParameter("Контрагент" Справочники.Контрагенты.НайтиПоНаименованию("Mobil-Import SRL"))
  7. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Значит так:
    Пишу я на Classic ASP
    Вот код:

    Код:
    Set trade = CreateObject("V82.COMConnector")
    set cnn=trade.Connect("File='Path_of _file_1CD';Usr='USERl';Pwd='PASS';")	
    set z=Cnn.Metadata.AccumulationRegisters
    set query = cnn.NewObject("Query")
    query.SetParameter("client",Catalogs.Контрагенты.НайтиПоНаименованию("Mobil-Import SRL"))
    query.text="select ДокументЗакупки,Контрагент where Контрагент.Ссылка=&client "
    
    Даёт ошибку на query.SetParameter("client",Catalogs.Контрагенты.НайтиПоНаименованию("Mobil-Import SRL"))
    Не понимает русские символы
  8. Draco
    Online

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Попробуйте тогда в запросе вместо

    where Контрагент.Ref='Mobil-Import SRL'

    Вот так
    where Контрагент.Name LIKE 'Mobil-Import SRL'
  9. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    where Контрагент.Name LIKE 'Mobil-Import SRL'
    where Контрагент.Value LIKE 'Mobil-Import SRL'
    where Контрагент.Ref LIKE 'Mobil-Import SRL'

    Одни ошибки!
  10. Draco
    Online

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    либо вот так строку попробуйте

    query.SetParameter("client",cnn.Catalogs.Контрагенты.НайтиПоНаименованию("Mobil-Import SRL"))

    Простоу вас как таковой переменной то Catalogs нет чере ccn она должна быть

    Ну

    Я просто смотрю на текст запроса

    "select ДокументЗакупки,Контрагент where Контрагент.Ссылка=&client "
    Выбрать докумен, контрагента, условие есть, а отуда выбирать - нет
  11. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    query.SetParameter("client",cnn.Catalogs.Контрагенты.НайтиПоНаименованию("Mobil-Import SRL"))
    query.text="select ДокументЗакупки,Контрагент from AccumulationRegister.Закупки where Контрагент=&client"
    Дайт ошибку на Контрагенты.НайтиПоНаименованию
  12. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Вы вообще где пишите этот код?
  13. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Есть сервер IIS
    Программа написана на Classic ASP - берёт данные с удалённого файла 1CD через V82.COMConnector
    Код написан в файле *.ASP
    Если условие не вставлять, то без проблем возвращаются все записи, а нужно только определённые
  14. Draco
    Online

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Попробуйте вместо query.SetParameter("client",cnn.Catalogs.Контрагенты.НайтиПоНаименованию("Mobil-Import SRL"))
    query.SetParameter("client",cnn.CatalogsManager.Контрагенты.НайтиПоНаименованию("Mobil-Import SRL"))


    Т.е не Catalogs, а CatalogsManager
  15. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Ругается на русские буквы cnn.Catalogs.Контрагенты
  16. Draco
    Online

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Тогда пробуем так
    query.SetParameter("client","%Mobil-Import SRL%")
    query.text="select ДокументЗакупки,Контрагент from AccumulationRegister.Закупки where Контрагент.Наименование ПОДОБНО &client"

    или просто

    query.SetParameter("client","Mobil-Import SRL")
    query.text="select ДокументЗакупки,Контрагент from AccumulationRegister.Закупки where Контрагент.Наименование ПОДОБНО &client"
  17. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    А вот так сработало!
    Супер!
    Огромное спасибо - потерял на это 2 дня.

    Только в ASP Classic будет выглядеть так:
    Код:
    Set trade = CreateObject("V82.COMConnector")
    set cnn=trade.Connect("File='Path_to_1CD';Usr='USER';Pwd='PASS';")	
    set z=Cnn.Metadata.AccumulationRegisters
    set query = cnn.NewObject("Query")
    query.SetParameter "client","%Mobil-Import SRL%"
    query.text="select ДокументЗакупки,Контрагент from AccumulationRegister.Закупки  where Контрагент.Наименование LIKE &client "
    set q=query.execute.unload
    
  18. Draco
    Online

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Ну впринципе я с самого начал склонялся к Like (аналог ПОДОБНО) в SQL, только видно в первый раз просто надо было не выеживаться и писать Контрагент.Наименование вместо Контрагент.Name

    Спасибо за код, мож кто будет писать - пригодиться.
  19. Aston
    Offline

    Aston Опытный в 1С

    Регистрация:
    6 июн 2012
    Сообщения:
    467
    Симпатии:
    3
    Баллы:
    29
    Я лично ушёл от нет технологий и пошёл в 1С - если честно как то легче писать и думать на русском :), но кому как. Знаю даже по себе что дело привычки, но мне кажется легче по русски. А запросы всё равно в 1С потом транслируются в СКЛ.
    И не знаю почему но мне ваш код напоминает VB - я ошибаюсь?
  20. TopicStarter Overlay
    Revencu
    Offline

    Revencu

    Регистрация:
    7 авг 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Естественно VB (VBSCRIPT)- это же скрипт движка сервера IIS. Что касается русских функций, то CLASIC ASP не понимает их. Поэтому приходится писать английские.
    Почему выбрали этот язык - да потому, что сайт предприятия написан на нём. И приходится ставить данные на нём онлайн из 1С

    Только рано я обрадовался ...
    Имею другой запрос и не катит ранее решение
    Код:
    query.text="select Номенклатура,СтатусПартии,Подразделение,Количество,Стоимость,НДС from AccumulationRegister.Закупки  where ДокументЗакупки.Наменование LIKE &client"
    

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