Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как правильно составить запрос со множеством параметров?          
andrew76 Подменю пользователя
сообщение 23.07.15, 15:36
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Добрый день !

На форме имеется поле списка.В заполненном списке имеется список контрагентов.
В списке несколько десятков контрагентов.Задачка состоит в следующем-пользователь
может выбрать все контрагенты из списка ("галочка-Checked" включена), или нужные на его взгляд,т.е.
выборочно.Как правильно передать из списка значений выбранные контрагенты в запрос на выборку данных?

У меня выходит что-то вроде нижеследующего:

СтаршийИндекс = ПолеСписка1.Количество() - 1; 
стр="";
Для Сч = 0 по СтаршийИндекс Цикл
    Если ПолеСписка1[Сч].Пометка=Истина Тогда
         стр=стр+"|И (Контрагент=&"+ПолеСписка1[Сч].Представление+Символы.ПС;
    КонецЕсли;    
КонецЦикла;


Вопрос- как "научить" этот код , чтобы в строку стр передавался параметр ПолеСписка1[Сч].Представление как Объект ?

    logist Подменю пользователя
    сообщение 23.07.15, 18:12
    Сообщение #2

    Про1С-ник
    Иконка группы
    Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
    Группа: Местный
    Сообщений: 9564
    Из: Kharkiv, UA
    Спасибо сказали: 2536 раз
    Рейтинг: 0

    Цитата(andrew76 @ 23.07.15, 16:36) *
    как "научить" этот код

    Лучше придумайте как сделать этот код оптимальным, учить его не надо.

    Например
    Массив = Новый Массив;
    Для Каждого Элемент Из Список Цикл
        Если Элемент.Пометка Тогда
            Массив.Добавить(Элемент.Значение);
        КонецЕсли;
    КонецЦикла;

    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    Контрагенты.Ссылка
                          |ИЗ
                          |    Справочник.Контрагенты КАК Контрагенты
                          |ГДЕ
                          |    Контрагенты.Ссылка В(&Ссылка)");
    Запрос.УстановитьПараметр("Ссылка", Массив);


    Signature
    Личные бесплатные консультации не даю, для этого есть форум!

    Спасибо сказали: andrew76,

    andrew76 Подменю пользователя
    сообщение 24.07.15, 15:20
    Сообщение #3

    Оратор
    *****
    Группа: Пользователи
    Сообщений: 443
    Из: Казахстан
    Спасибо сказали: 43 раз
    Рейтинг: 43

    За идею Спасибо ("палец нажал"),но в процессе её реализации возникли некоторые проблемы:

    Во время считывания элементов списка в массив попадают уже элементы с типом "Строка".
    Я этот вопрос решил так : Нахожу в справочнике контрагентов нужный элемент по наименованию,
    и получаю объект этой записи (ПолучитьОбъект()).

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


    Сам запрос :

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |Отгрузка.Ссылка КАК Ссылка,
    |Отгрузка.НомерВ КАК НомерВ,
    |Отгрузка.Количество  КАК Количество,
    |Отгрузка.ВидРеализации КАК ВидРеализации
    |ИЗ
    |  Документ.Отгрузка КАК Отгрузка
    |ГДЕ
    | (Отгрузка.Дата>=&ДатаНач) И (Отгрузка.Дата<=&ДатаКон)";


    Условие Ругается на неверные параметры:

    Запрос.Текст = Запрос.Текст +"
               |И (Отгрузка.ВидРеализации.Ссылка В(&Ссылка))";  
    Запрос.УстановитьПараметр("Ссылка", Массив);






    logist Подменю пользователя
    сообщение 24.07.15, 15:28
    Сообщение #4

    Про1С-ник
    Иконка группы
    Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
    Группа: Местный
    Сообщений: 9564
    Из: Kharkiv, UA
    Спасибо сказали: 2536 раз
    Рейтинг: 0

    Цитата
    Об=ВидР.НайтиПоНаименованию(Элемент.Представление).ПолучитьОбъект();

    Получать Объект не нужно, запросу нужен массив ссылок, а вы передаете туда массив объектов.

        Если Элемент.Пометка Тогда
    Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда
               Массив.Добавить(ВидР.НайтиПоНаименованию(Элемент.Представление));
    Иначе
               Массив.Добавить(Элемент.Значение);
    КонецЕсли;
        КонецЕсли;


    Signature
    Личные бесплатные консультации не даю, для этого есть форум!

    andrew76 Подменю пользователя
    сообщение 24.07.15, 15:53
    Сообщение #5

    Оратор
    *****
    Группа: Пользователи
    Сообщений: 443
    Из: Казахстан
    Спасибо сказали: 43 раз
    Рейтинг: 43

    Не совсем понял, у меня в запросе на заполнение элементов Списка -Значение -это выражение Контрагент.Код,а представление -это выражение Контрагент.Наименование,3-й параметр -это
    "галка" -тип Логический.

    logist Подменю пользователя
    сообщение 24.07.15, 17:42
    Сообщение #6

    Про1С-ник
    Иконка группы
    Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
    Группа: Местный
    Сообщений: 9564
    Из: Kharkiv, UA
    Спасибо сказали: 2536 раз
    Рейтинг: 0

    Цитата(andrew76 @ 24.07.15, 16:53) *
    у меня в запросе на заполнение элементов Списка -Значение -это выражение Контрагент.Код

    Извините, обычно это ссылка, вообще не понятно зачем Вы туда код пихаете. Только по этой причине там есть тип Строка? Т.е. если сделать по правильному - значение = ссылка, то строкового типа там не будет?


    Signature
    Личные бесплатные консультации не даю, для этого есть форум!

    andrew76 Подменю пользователя
    сообщение 24.07.15, 17:53
    Сообщение #7

    Оратор
    *****
    Группа: Пользователи
    Сообщений: 443
    Из: Казахстан
    Спасибо сказали: 43 раз
    Рейтинг: 43

    "Пихаю" ,потому что не знаю как правильно это делать.На то и форум,чтобы спрашивать...
    Тип строка в Представлении- это Наименование контрагента.А что Вы мне посоветуете написать
    в выражении Значение ? Что-то вроде : СписокЗначений.Значение=Контрагент.Ссылка ?

    logist Подменю пользователя
    сообщение 24.07.15, 18:22
    Сообщение #8

    Про1С-ник
    Иконка группы
    Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
    Группа: Местный
    Сообщений: 9564
    Из: Kharkiv, UA
    Спасибо сказали: 2536 раз
    Рейтинг: 0

    Цитата(andrew76 @ 24.07.15, 18:53) *
    "Пихаю" ,потому что не знаю как правильно это делать.На то и форум,чтобы спрашивать...

    Если не знаете как правильно, то надо выкладывать максимум информации о задаче.

    Цитата(andrew76 @ 24.07.15, 18:53) *
    ип строка в Представлении- это Наименование контрагента.А что Вы мне посоветуете написать
    в выражении Значение ? Что-то вроде : СписокЗначений.Значение=Контрагент.Ссылка ?

    Покажите процедуру заполнения списка.


    Signature
    Личные бесплатные консультации не даю, для этого есть форум!

    andrew76 Подменю пользователя
    сообщение 25.07.15, 8:21
    Сообщение #9

    Оратор
    *****
    Группа: Пользователи
    Сообщений: 443
    Из: Казахстан
    Спасибо сказали: 43 раз
    Рейтинг: 43

    Процедура заполнения списка:

    Запрос = Новый Запрос();
    Запрос.Текст= "
    |ВЫБРАТЬ
    |    ВидРеализации.Код КАК Значение,
    |    ВидРеализации.ССылка КАК Представление,
    |    ЛОЖЬ КАК Пометка
    |ИЗ
    |    Справочник.ВидРеализации КАК ВидРеализации
    |
    |УПОРЯДОЧИТЬ ПО
    |    ВидРеализации.Наименование";
        

    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
         ЗаполнитьЗначенияСвойств(ПолеСписка1.Добавить(), Выборка);
    КонецЦикла;

    logist Подменю пользователя
    сообщение 26.07.15, 15:34
    Сообщение #10

    Про1С-ник
    Иконка группы
    Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
    Группа: Местный
    Сообщений: 9564
    Из: Kharkiv, UA
    Спасибо сказали: 2536 раз
    Рейтинг: 0

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

    В этом случае пример запроса который я написал в самом начале (сообщение #2) будет корректно работать.
    У вас, похоже, не хватает базовых знаний, займитесь этим, а то вы изобретаете велосипед с квадратными колесами wink.gif


    Signature
    Личные бесплатные консультации не даю, для этого есть форум!

    andrew76 Подменю пользователя
    сообщение 26.07.15, 17:12
    Сообщение #11

    Оратор
    *****
    Группа: Пользователи
    Сообщений: 443
    Из: Казахстан
    Спасибо сказали: 43 раз
    Рейтинг: 43

    Что есть ,то- есть. upset.gif

    Не нашли ответа на свой вопрос?
    Зарегистрируйтесь и задайте новый вопрос.


    Ответить Новая тема
    1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
    Пользователей: 0

     

    RSS Текстовая версия Сейчас: 26.04.24, 19:24
    1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!