Сравнение запросов

0. RustIG 1690 15.03.19 21:37 Сейчас в теме
На входе - два разных запроса и две выборки с одинаковыми полями. На выходе - итоговая таблица показывает расхождения между полученными результатами запросов.

Перейти к публикации

Отзывы
18. RustIG 1690 28.03.19 09:25 Сейчас в теме
(2)
для полноценного сравнения результатов нужно реализовывать функции, которые естественны для консоли запросов пакетные запросы

реализовал сравнение временных таблиц.

предыстория. при тестировании нового запроса стал сравнивать с прежним. Сравнение запросов показало расхождения. Стал анализировать с первой временной таблицы, в итоге на третьей временной таблице проявилось расхождение. Понял, что для локализации расхождений в обработке необходим раздел сравнения временных таблиц. так он и появился.
Evg-Lylyk; +1 Ответить
23. RustIG 1690 19.01.20 21:51 Сейчас в теме
(21) на момент разработки своего решения, не знал о ее существовании. Сейчас не могу судить, стоила игра свеч или нет. Свою задачу я решил - переписав огромный запрос на новый запрос с новыми таблицами и связями, при этом сохранив итоговый результат. Сдачу работ проводил через свою обработку "Сравнение запросов". Заказчик работу принял.
В ходе сдачи работ выявили особенность механизма запросов - Запросы округляют не так как команды платформы... но это уже другая история
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1690 16.03.19 11:58 Сейчас в теме
Поехали...
пару моментов:
1) исторически так сложилось, что отлаживать запросы в тестовой базе нельзя - поскольку цены из запроса выгружаются на сайт, доступа к сайту нет. поэтому пришлось отлаживать и проверять результат запроса как-то промежуточно - через внешнюю обработку (что очень напоминает сценарное тестирование).
первый вариант сравнения запросов был реализован через обработку - внутри модуля которой сравнивались ТЗ и ТЗновый через конструкцию (рисунок обработки прикладываю)

ТЗ = ЗапросЦен(Договор,СписокНоменклатуры);
ТЗновый = НовыйЗапросЦен(Договор,СписокНоменклатуры);

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТЗ.Номенклатура КАК Номенклатура,
| ТЗ.Договор КАК Договор,
| ТЗ.Цена КАК Цена
|ПОМЕСТИТЬ ТЗ
|ИЗ
| &ТЗ КАК ТЗ;
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТЗновый.Номенклатура КАК Номенклатура,
| ТЗновый.Договор КАК Договор,
| ТЗновый.Цена КАК ЦенаНовая
|ПОМЕСТИТЬ ТЗновый
|ИЗ
| &ТЗновый КАК ТЗновый;
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТЗ.Номенклатура КАК Номенклатура,
| ТЗ.Договор КАК Договор,
| ТЗ.Цена КАК Цена,
| ТЗновый.ЦенаНовая КАК ЦенаНовая,
|ИЗ
| ТЗ КАК ТЗ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗновый КАК ТЗновый
| ПО ТЗ.Номенклатура = ТЗновый.Номенклатура
| И ТЗ.Договор = ТЗновый.Договор";

Запрос.УстановитьПараметр("ТЗ", ТЗ);
Запрос.УстановитьПараметр("ТЗновый", ТЗновый);

СписокТоваров.Загрузить(Запрос.Выполнить().Выгрузить());

Назовем этот вариант Первым.

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

3) при этом появилась потеря времени в том, что приходилось все время заново прописывать ПараметрыЗапросов и Тексты запросов - как только происходил какой-нибудь сбой (ошибка SDBL, например). Зато была разработана универсальная процедура объединения таблиц и сравнения результатов запроса.

4) Также стало неудобно прописывать любые списки значений, например СписокНоменклатуры - хотя в обработку можно добавить неуниверсальный вариант - получать список значений из любого документа - то есть вывести в форму обработки поле для выбора документа на форму, а дальше из конструкции:
Документ.Товары.Выгрузить() или что-то подобное.

5) Пробовал ПараметрыЗапросов сохранять в Табличные Части Обработки, но при этом нельзя задать Тип реквизита "СписокЗначений" - возможно для узких задач - его можно заменить типом "Документ" (и получать к примеру список из выражения Документ.Товары.Выгрузить() или что-то подобное - как в п.4)

6) В итоге, что я хочу сказать, в будущем я буду применять оба варианта сравнения запросов - Универсальный и Первый вариант.
Прикрепленные файлы:
2. Evg-Lylyk 4210 16.03.19 19:36 Сейчас в теме
(0) Сложность в том что для полноценного сравнения результатов нужно реализовывать функции, которые естественны для консоли запросов пакетные запросы, параметры типа ТЗ, ТипЗначения, МоментВремени, Граница, Уникальный идентификатор. Мне кажется данная функциональность должна быть включена консоль запросов тогда это удобно и функционально
Что то подобное есть в моей консоли функция сравнения результатов запросов, но она сравнивает результаты целиков это в основном удобно когда запрос модифицируется или заранее пишем два запроса результаты которых потом сравниваем.
3. RustIG 1690 17.03.19 10:05 Сейчас в теме
(2) спасибо за ответ и ссылку.

0) что значит "полноценное сравнение запросов"?

1) представленная мною обработка Сравнение запросов решает конкретную задачу - записей в результатах запросов около 10 тыс - и то, я специально их кол-во ограничил 10 тыс-ю, чтобы по времени было адекватно.
Обработка сразу фильтрует расхождения в 10 тыс. записей - а то, что вы предложили свою обработку - так она не помогает, а только усложнит решение подобной задачи.
Я вот не понял: у вас надо визуально вручную что ли искать расхождения?

2) "передавать в запрос параметр типа ТЗ" - пока не сталкивался с такой задачей.
И считаю,что во всех задачах решение надо упрощать! Можете пример привести, когда это нужно передавать ТЗ в запрос?
Все мои публикации стремятся показать, что в программировании 1с есть место упрощению.
Человек любит придумывать сложности на пустом месте, а простые решения не видит.
К примеру, я предлагаю и давно уже использую такой пример - вместо СпискаЗначений передавать некий Документ, то есть всего один параметр, из которого вытаскивать СЗ = Док.Товары.ВыгрузитьКолонку() - это к примеру для списка товаров. Это лишь инструмент для отладки и разработки. В рабочей базе в рабочем варианте - конечно останется СписокЗначений в том виде, в котором он должен быть (то есть без всяких документов).

3) прежде чем создавать инструмент Сравнения запросов, поискал на ИС - ничего подобного нет.
4. Evg-Lylyk 4210 17.03.19 10:35 Сейчас в теме
(3)

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

1) Консоль выполняет 2 запроса и сравнивает результаты визуально через СравнитьФайлы. Можно сравнивать более 10тыс. строк

2) Тут с вами не соглашусь. ПО становится сложнее должно выполнять много функций. Простым оно должно быть только для пользователя. Из практики с каждым годом продукты 1С все сложнее и функциональнее.
Мне надо сравнить запросы из типовой в которых параметр ТЗ.

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

3) В типовых консолях от 1С есть подобная функция (Сохранить эталон, Сравнить с эталоном), реализовано чуть иначе чем у вас

Суть моего поста эта функция должна быть в консоли запросов (там полная поддержка запросов)
5. RustIG 1690 17.03.19 17:02 Сейчас в теме
(4) в целом согласен с вами, но все равно "не мое это, о чем вы пишите" - возможно разный опыт, разный подход к решению задач.
Я не сторонник, чтобы разработчикам делать инструмент сложнее.

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


будет параметр граница, понятно что бывает не часто, но как только столкнетесь инструмент работать не будет.

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

Консоль выполняет 2 запроса и сравнивает результаты визуально через СравнитьФайлы. Можно сравнивать более 10тыс. строк

Не, коллега, это не для меня... визуально и 10 тыс записей ?
Такое я уже проходил...
Простым оно должно быть только для пользователя.
Кто твой "клиент" ? кто твой пользователь? Это же программист - чего не хватает, допишет, найдет баг - обойдет его. Я к примеру доработал под себя Конвертацию данных 2.0 - крутой инструмент придумали ребята, и все-таки и в нем нашлось место для моего творчества (см. одноименную публикацию)
Мне надо сравнить запросы из типовой в которых параметр ТЗ.

Как вы решили вопрос с передачей параметра ТЗ в своей консоли?
...Я бы прописал в модуле обработки получение этого параметра, как его получают в типовой, которую вы привели в пример. Возможно выделил бы в отдельный раздел на форме получение "сложных" параметров, в том числе алгоритмически в модуле обработки. Согласен,что моя обработка не решает этот вопрос, поэтому ее надо рассматривать как "готовый шаблон" для доработки при решении нетривиальных задач - к примеру когда надо передать ТЗ в параметр.
В типовых консолях от 1С есть подобная функция (Сохранить эталон, Сравнить с эталоном), реализовано чуть иначе чем у вас

У меня обработка на обычных формах разработана и предназначена для обычных форм. Вы наверное про консоли на управляемых формах упоминаете? Знаете, я раньше кроме типовой консоли запросов не знал другие. И как-то справлялся.
Сейчас для УФ каждый свою консоль пишет, утрирую конечно, но это признак что замудрили платформу и решения на ней на УФ. Проблемы в головах разработчиков, которые мыслят сложными категориями. Я в типовых навидался мудренных запросов. Выигрыша ноль. Искать ошибку в таком запросе - одно страдание для программиста.
Давайте не будем специально усложнять жизнь программисту.

Ну в общем, ваша консоль крутая - моя нет. Я не стремился ее сделать подобно вашей. Озвученные вами примеры запросов - с параметрами ТЗ и ГраницейВремени - не считаю сложными случаями. Я выше описал способ упростить получение параметра СписокЗначений. Отношу ваши "сложные случаи" к подобному случаю СпискаЗначений. То есть предлагаю залезть под капот обработки и доработать ее хитрым или нехитрым способом.
Вам желаю добра и побольше подписчиков!
Evg-Lylyk; +1 Ответить
6. Evg-Lylyk 4210 17.03.19 18:26 Сейчас в теме
(5) Тоже согласен.
Реализация ТЗ сложна, временные хранилища (подход подобный "сложный" параметр)
Ни в коем случае ни хотел обидеть. Также вам успехов. :)
16. RustIG 1690 19.03.19 11:57 Сейчас в теме
(6) я не против, если вы свою консоль доработаете, взяв отсюда представленный механизм сравнения результатов запросов.
эту консоль ждут свои доработки и расширения...
у вас УФ+широкие возможности, здесь ОФ + конкретная задача.
17. Evg-Lylyk 4210 19.03.19 12:06 Сейчас в теме
(16) Спасибо, пока не планирую... мне кажется того что есть достаточно. Пожеланий по его улучшению не получал.
7. sertak 304 18.03.19 05:52 Сейчас в теме
(3) есть консоль сравнения для управляемых форм:

https://infostart.ru/public/581794/
nekit_rdx; RustIG; +2 Ответить
9. RustIG 1690 18.03.19 09:10 Сейчас в теме
(7) я видел вашу консоль. Только из описания не понятно, что она мне поможет. На первый взгляд очень запутана в настройках, и интерфейс интуитивно не понятен. Это мое личное мнение как первое впечатление. Хочется помочь вам - поэтому даю обратную связь, не желая обидеть или принизить. Возможно у других такие же непонятки- когда видят вашу консоль. Просто, задавать вопросы и ждать ответов не у всех есть время - поэтому не написал вам.
11. RustIG 1690 18.03.19 09:26 Сейчас в теме
(7) совет:
1) сделайте описание структурированным - пункт 1) - 2) -3) и т.д. "что она может",
2) пункты "что она не может" 1) , 2) 3).
3) Отдельный раздел для программистов-пользователей, которые хотят быстро опробовать ваш механизм - условно как во всех языках программирования как написать "Hello, World!"
4) Отдельный раздел для разработчиков, которые хотят или решать сложные вопросы, или доработать под себя.
5) Примеры решенных задач.
6) Жирным выделить текст или в начале или в конце статьи, что для управляемых форм.
7) вытащите полезную инфу из комментариев, если такая есть.
12. sertak 304 18.03.19 10:33 Сейчас в теме
(11) Функционал довольно большой, подробное описание есть во встроенной справке консоли. Из того описания, что приведено в теме, вполне можно принять решение, нужна ли она.
15. RustIG 1690 18.03.19 11:10 Сейчас в теме
18. RustIG 1690 28.03.19 09:25 Сейчас в теме
(2)
для полноценного сравнения результатов нужно реализовывать функции, которые естественны для консоли запросов пакетные запросы

реализовал сравнение временных таблиц.

предыстория. при тестировании нового запроса стал сравнивать с прежним. Сравнение запросов показало расхождения. Стал анализировать с первой временной таблицы, в итоге на третьей временной таблице проявилось расхождение. Понял, что для локализации расхождений в обработке необходим раздел сравнения временных таблиц. так он и появился.
Evg-Lylyk; +1 Ответить
19. Evg-Lylyk 4210 28.03.19 09:36 Сейчас в теме
(18)
Это хорошо
Еще для полноценной поддержки нужно реализовать параметры типа: ТаблицаЗначений, МоментВремени, Граница, УникальныйИдентификатор, Тип. Параметр типа список значений. Сохранение запросов в файл.
20. RustIG 1690 28.03.19 11:15 Сейчас в теме
(19)
Сохранение запросов в файл.


сохранение запросов в файл реализовано в версии 2.1 - без этого сохранения неудобно работать с подобными консолями.

сейчас последняя версия 2.2.

остается только реализовать "новые" типы данных.
сейчас уже можно воспользоваться в параметрах - Использовать Выражение (это из типовой консоли запросов взято) - думаю часть параметров "новых" типов можно через выражение прописать.
Evg-Lylyk; +1 Ответить
8. Rais96 18.03.19 07:53 Сейчас в теме
Я сохраняю результаты запросов в электронные таблицы и сравниваю. Просто и эффективно.
Evg-Lylyk; +1 Ответить
10. Evg-Lylyk 4210 18.03.19 09:16 Сейчас в теме
(8) В консолях запросов есть это, только автоматически
13. w.r. 638 18.03.19 10:42 Сейчас в теме
Я думаю, полезней сделать не подсветку, а просто выводить результаты отличия. Если отличий нет, то просто сообщать об идентичности результатов
14. RustIG 1690 18.03.19 11:10 Сейчас в теме
(13) есть кнопка "Отбор по расхождениям" - которая накладывает соответствующий фильтр на записи. Если расхождений нет, то итоговая таблица становится пустой с этим фильтром.
Ваша идея сообщать дополнительно,что расхождений нет - здравая и разумная!
21. user1194102 19.01.20 21:36 Сейчас в теме
В инструменте разработчика есть сравнение таблиц выполненных запросов и она совершенно бесплатная https://infostart.ru/
22. RustIG 1690 19.01.20 21:42 Сейчас в теме
(21) да, пож-та, отличное решение вы рекомендуете! проверено временем!
Стоит 1 см, а возможностей гораздо больше!
24. пользователь 19.01.20 21:52
Сообщение было скрыто модератором.
...
23. RustIG 1690 19.01.20 21:51 Сейчас в теме
(21) на момент разработки своего решения, не знал о ее существовании. Сейчас не могу судить, стоила игра свеч или нет. Свою задачу я решил - переписав огромный запрос на новый запрос с новыми таблицами и связями, при этом сохранив итоговый результат. Сдачу работ проводил через свою обработку "Сравнение запросов". Заказчик работу принял.
В ходе сдачи работ выявили особенность механизма запросов - Запросы округляют не так как команды платформы... но это уже другая история
26. RustIG 1690 19.01.20 23:43 Сейчас в теме
(21)вы ошибаетесь: обработка Инструменты разработчика платная, стоит 1см
25. пользователь 19.01.20 21:55
Сообщение было скрыто модератором.
...
27. user1194102 20.01.20 09:24 Сейчас в теме
увы нет, сам скачал с сайта разработчика бесплатно, просто не могу выложить тут ссылку (сервис этого форума ссылку не пропускает), поищите сами в интернете наберите "1с инструмент разработчика", первая же ссылка в поиске это сайт разработчика и там бесплатно. У меня нет ни одного мани, я не пишу как за деньги на этот орум, это смешно/детский сад. Я пишу на cyberforum там все по взрослому без всяких игр в виртуальные деньги. так вот я бесплатно себе скачал Подсистему Инструмент разработчика, это не обработка это десятка три обработок, работающих совместно и в том числе есть эта функция , которую вы тут продаете за мани, я не имею ничего против пишите что хотите и продавайте что хотите это ваше право, но не спорьте про то, что не знаете)
28. RustIG 1690 20.01.20 13:55 Сейчас в теме
(27)
cyberforum

Ваш киберфорум - это всего лишь форум, не более.
Инфостарт - концепция другая:
1) публикация кейсов, предметное общение по публикации - обмен опытом
2) магазин разработок (готовых решений и/или рыб-шаблонов)
3) имеется также форум - для обмена проблемами

теперь по пунктам:

1) обмен опытом - это когда вы что-то сделали, готовы поделиться
2) магазин разработок - Сергей Старых готов делиться разработками бесплатно, а остальные нет - поэтому они идут сюда, что касается меня - то я тоже готов продавать свои разработки. У многих программистов есть что предоставить миру 1С.
Цена 1см - достаточно дешево - это 70 руб, накопить вы ее можете, оставляя свои комментарии на форумах, особенно с темами с вознаграждениями. Поэтому в среде 1с давно уже не ведутся споры и дебаты про стартмани...
3) форум - это когда у вас есть проблема, и вы ищите ответ у других...

разница колоссальная в этих концепциях....
29. user1194102 20.01.20 14:24 Сейчас в теме
Цель форумов помочь начинающим разработчикам ПО. Для заработка программистам 1С достаточно фриланса, продавать разработки за 70 рублей это не серьезно.

Я пытался тут опубликовать свою статью, но не смог дождаться пока ее проверят, ответа так и не получил, а времени своего жаль. Поэтому больше и не пытался.

Вы пишите, в п.1. Обмен опытом. Вопрос с кем обмен опытом? С продвинутыми программистами, имеющими Мани, а смысл какой в этом? В большинстве своем все эти программеры сами могут написать подобный функционал. А те кому это действительно бы могло помочь страдают где взять мани, что бы посмотреть код.

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

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

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

Наверно можно на позитивной ноте и закончить. Спасибо, что подробно объяснили направление и цели данного форума.
30. RustIG 1690 20.01.20 14:31 Сейчас в теме
(29)
Цель форумов помочь начинающим разработчикам ПО. Для заработка программистам 1С достаточно фриланса, продавать разработки за 70 рублей это не серьезно.


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

Мне продолжать?
31. user1194102 20.01.20 14:41 Сейчас в теме
Думаю не стоит продолжать разговор не о чем, вот полистал сейчас еще форум, очень много таких статей, которые переписывают своими словами официальные курсы от 1С, и таких людей хвалят и делают поправки infostart.ru вот вам еще одно подтверждение моих слов.

Люди нарушают закон об авторских правах (переписывая авторские курсы), причем с многочисленными ошибками, что бы любой ценой получить мани. И купить что-то другое для себя.

Это абсурд в прямом смысле.

Я тоже часто захожу на этот сервис и смотрю идеи, покупать мне не на что. Хоть я посмотрел достаточно много курсов от 1С, но переписывать их за мани мне кажется не честно по отношению к авторам курсов.

А администрация форума поощряет такой плагиат.

Давайте остановимся, напишите что нибудь еще что бы последнее слово осталось за вами, а я больше не буду продолжать) Желаю Вам удачи!
32. RustIG 1690 20.01.20 15:56 Сейчас в теме
(31) Желаю Вам терпения! Время, как говорится, точит камни. Со временем у Вас ВСЕ БУДЕТ. Не переживайте! Терпения Вам!
33. user1194102 20.01.20 16:55 Сейчас в теме
Не нашел как вам ответить в личку, статью я не сохранил, но с выдержками разместил на кибер форуме, суть в том, что нужно было из управляемой формы открыть другую форму и передать туда параметры, выполнить изменения значений в открытой форме и вернуть измененные параметры обратно в текущую форму. Подобного готового примера не нашел, попадались отдельные куски, но не работающие, поэтому разбирался сам и пытался эту доработку разместить, но не дождался ответа) Если объясните как писать в личку, то найду ссылку и скопирую.
Оставьте свое сообщение
Вакансии
Аналитик 1C
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день

Тестировщик 1С
Москва
зарплата от 125 000 руб.
Полный день

Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день