Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 июн 2024, 02:30

как сверить 2 результата запроса 1с

Автор esscargoott, 04 мар 2024, 17:00

0 Пользователей и 1 гость просматривают эту тему.

esscargoott

подскажите как программно можно сравнить 2 запроса (результата запросов). У меня имеется справочник с шаблонами запросов и есть обработчик с формой куда пользователь вводит свой запрос. Мне надо сравнить их и если 2 запроса одинаковые то вывести сообщение о том что все круто. Запросы могут быть написано как то по разному но результат то один, вот и хочу проверить по результату

LexaK

esscargoott, очень трудно сравнить результаты,
может быть разная сортировка, может быть разный порядок полей и др.

если привести к одному порядку, то сравнить можно так
результаты выгружаете в ТЗ, ТЗ превращаете во внутреннюю строку и сравниваете их
если равны значит все правильно

примерно так (это один лишь из вариантов)
лкОригинал = ЗначениеВСтрокуВнутр(ЗапросОригинал.Выполнить().Выгрузить());
лкТест = ЗначениеВСтрокуВнутр(ЗапросТест.Выполнить().Выгрузить());
Если лкОригинал = лкТест Тогда
Сообщить("Результаты совпадают!");
Иначе
Сообщить("Результаты НЕ совпадают!");
КонецЕсли;
если помогло нажмите: Спасибо!

IGGR

Цитата: LexaK от 05 мар 2024, 09:53esscargoott, очень трудно сравнить результаты,
может быть разная сортировка, может быть разный порядок полей и др.

День добрый!
Подскажите, у меня ситуация наверно похожая. Я не пойму, такое может быть или я что то не учитываю. Суть в следующем.

////////
Есть документ, назовём его "Заявка". В нём есть определённая инфа, которая мне нужна. В частности, мне нужен ВидРаботы и Мастер, которую эту работу выполняет. Я ищу данные в приделах периода, и данные по мастеру я передаю как параметр в виде ТбЗнач, которую я получил запросом ранее и выгрузил. Данный запрос я выгружаю последовательно через Выбрать() с помощью Следующий(). Далее эти данные я получаю и уже что с ними делаю вопрос другой. В запросе я связываю таблицу, которая содержится в этом документе Заявка и сам документ Заявка. Таблица в документе содержит ВидРабот. Т.е. при каждом обходе, при вызове Следующий() я получаю Документ.Заявка.Ссылка, и Документ.Заявка.ВидРабот.Детализация. Т.е. если в одном документе более одного вида работ, то я получу более одного результата из запроса по одному документу. И я последовательно эти данные заношу в другой документ, предполагая (и для меня в этом случае это архиважно) что данные должны следовать в порядке очередности документа, т.е. все документы идут друг за другом, а виды работ также друг за другом, но в приделах этого документа.
Каково было моё удивление, что данный порядок нарушается. Очень редко, но нарушается. Получается, что один вид работ по отдельному документу имеет номер 235, к примеру, а второй и третий 1234 и 1235. На 1300 документов таких случаев всего один. Я исключил этот документ из запроса, всё стало чётко. Но, потом расширил период, и теперь там уже на 5000 документов, таких случаев уже 4. Причём!!!! Внимание!!! Я вновь включаю вышеописанный документ в запрос, и в этом случае по нему выборка происходит последовательно.
Как такое может быть? Как результат выборки может «скакать»? Я же не ставлю ни каких фильтров или ещё чего-нибудь такого? Или я что-то не учёл, при описании проблемы? У кого было такое на практике?
/////////

IGGR

Вот текст запроса.

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

LexaK

IGGR, в запросе надо явно задать команду упорядочивания!!!
примерно так

Запрос3 = Новый Запрос;
    Запрос3.Текст = "ВЫБРАТЬ
                    |    Заявка.Ссылка,                       
                    |    ЗаявкаВидРабот.НомерСтроки,
                    |    ЗаявкаВидРабот.Детализация,                       
                    |    Заявка.Мастер,                       
                    |    Заявка.ДатаЗП
                    |ИЗ
                    |    Документ.Заявка КАК Заявка
                    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Заявка.ВидРабот КАК ЗаявкаВидРабот
                    |        ПО (ЗаявкаВидРабот.Ссылка = Заявка.Ссылка)
                    |ГДЕ
                    |    Заявка.ДатаЗП >= &ДатаСдачи1   
                    |    И Заявка.ДатаЗП <= &ДатаСдачи2
                    |    И Заявка.МастерКонтролер В(&Мастер)
                    |    И Заявка.Проведен //добавлен учет только проведенных документов
                    |Упорядочить по
                    |    Заявка.Дата,
                    |    ЗаявкаВидРабот.НомерСтроки
                    ;
так ак без явной сортировки, порядок возвращаемых- данных может быть произвольным
зависит от кучи условий, Кэширования, расположения страниц данных и др.
если помогло нажмите: Спасибо!

Теги:  

Похожие темы (5)

Рейтинг@Mail.ru

Поиск