Визуальная структура запроса




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

99 Comments

  1. Sergey K

    Сделать опционально:

    1.на связях отображать поля по которым устанавливается связь,

    2.в таблицах отображать псевдонимы полей, которые выбираются

    Имхо: без этих данных вряд ли эта обработка хоть как-то поможет при отладке

    Reply
  2. AnryMc

    Очень интересная идея. За идею «+»

    Должно хорошо помогать при разборке с «чужими» запросами

    Reply
  3. AlX0id

    В общем-то, да. Смотреть — пока не смотрел, но по скринам уже понятно, что идея хорошая %)

    Reply
  4. fuxic

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

    Reply
  5. tormozit

    Тут http://devtool1c.ucoz.ru/load/grammatika_jazyka_zaprosov_1s_8_2_goldparser_1_32/1-1-0-4 можно скачать грамматику языка запросов. С ее помощью можно получить строгое синтаксическое дерево. Пример использования в самой подсистеме ИР (Инструменты разработчика) в консоли запросов — дерево запроса. Кстати его тоже можно использовать для анализа сложных запросов.

    Reply
  6. AlX0id

    Из первых наблюдений — похоже, что не работает, если соединений таблиц более, чем одно.. Показывает только первое..

    Reply
  7. Hany

    (5) tormozit, Вы правы, ИР помогает в отладке «длинного» 100%, и никаких диаграмм не нужно, как мне кажется. Их огромная древовидная структура только почему-то еще больше пугает. Хотя может я настолько привыкла пользоваться деревом запросов из ИР, что считаю его панацеей:)

    Reply
  8. AnryMc

    Наверно стоит выводить список объявленных параметров с группировкой по запросам (удобно, что бы чтонибудь не забыть установить)

    Reply
  9. DrAku1a

    (1) Идея отличная, сделаю.

    (5) Действительно, в ИР более подробный парсинг, но для этого используктся ВК, требующая регистрации, я же сделал все это средствами только языка 1С…

    Но идея ИР как организовать дерево мне нравится. Возможно, сделаю нечто подобное.

    (6) AlX0id, попробовал, показывает все связи. Если можно, текст запроса — в студию, или притестите следующий:

    Выбрать * из А как А
    правое соединение
    (выбрать * из В1 как В1
    полное соединение В2 как В2
    полное соединение В3 как В3
    полное соединение В4 как В4)
    как В
    левое соединение
    (выбрать * из Б1 как Б1
    внутреннее соединение Б2 как Б2)
    как Б
    

    Показать

    (8) Не совсем Вас понял, уточните что нужно?

    Reply
  10. Muhin555

    (2) AnryMc, я уже опробовал пропарсить «чужой» пакет запросов из 29 запросов….. наглядность помогает разобраться.

    Первая мысль, которая пришла в голову после того, как увидел разработку — прикрутить ее к обычной консоли запросов…. Вспомнился старый добрый MS Access с его визуальным отображением связей таблиц в базе.

    Идея — Однозначный «плюс»!!!!

    Reply
  11. Bassgood

    (0), Идея очень понравилась, если постепенно будет производится дальнейшая модернизация обработки (например по тем пожеланиям, которые были высказаны в (1)), то обязательно ее скачаю, а пока у меня не хватает баллов для этого =(

    Честно говоря, пока сложно сказать насколько удобно будет пользоваться такой визуализацией для отладки громоздких запросов.

    p.s. Публикацию естественно заплюсовал =)

    Reply
  12. kuza_87

    Кое в чем (не во всем конечно) но поможет разобраться. Автору спасибки!

    Reply
  13. AnryMc

    (9)

    Запрос.УстановитьПараметр(«ИМЯ», <Значение>)

    В запросе &ИМЯ

    В пакетном запросе — какие параметры объявляются в каком пакете. Например гденибудь справа — информативно

    Reply
  14. AlX0id

    (9)

    ваш запрос отображается нормально, мой кусок (точнее, тоировский %)) — нет:

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    ТаблицаДокумента.ОбъектРемонта,
    ТаблицаДокумента.Показатель,
    ТаблицаДокумента.ПлановыйГрафикРаботы,
    ТаблицаДокумента.ДатаРаботыС,
    ТаблицаДокумента.ДатаРаботыПо,
    ВЫБОР
    КОГДА ПараметрыНаработкиОР.Показатель ЕСТЬ NULL
    ТОГДА ПараметрыНаработкиГрупп.ПлановаяНаработка
    ИНАЧЕ ПараметрыНаработкиОР.ПлановаяНаработка
    КОНЕЦ КАК ПлановаяНаработка,
    ВЫБОР
    КОГДА ПараметрыНаработкиОР.Показатель ЕСТЬ NULL
    ТОГДА ПараметрыНаработкиГрупп.КоэффициентИспользованияОборудования
    ИНАЧЕ ПараметрыНаработкиОР.КоэффициентИспользованияОборудования
    КОНЕЦ КАК КоэффициентИспользованияОборудования,
    ВЫБОР
    КОГДА ПараметрыНаработкиОР.Показатель ЕСТЬ NULL
    ТОГДА ПараметрыНаработкиГрупп.ПериодПлановойНаработки
    ИНАЧЕ ПараметрыНаработкиОР.ПериодПлановойНаработки
    КОНЕЦ КАК ПериодПлановойНаработки
    ПОМЕСТИТЬ ТаблицаПлановойНаработки
    ИЗ
    ТаблицаДокумента КАК ТаблицаДокумента
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.торо_ПараметрыНаработкиОбъектовРемонта КАК ПараметрыНаработкиОР
    ПО ТаблицаДокумента.ОбъектРемонта = ПараметрыНаработкиОР.ОбъектРемонта
    И ТаблицаДокумента.Показатель = ПараметрыНаработкиОР.Показатель
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.торо_ПараметрыНаработкиОбъектовРемонта КАК ПараметрыНаработкиГрупп
    ПО ТаблицаДокумента.РемонтнаяГруппа = ПараметрыНаработкиГрупп.ОбъектРемонта
    И ТаблицаДокумента.Показатель = ПараметрыНаработкиГрупп.Показатель
    ГДЕ
    (НЕ ВЫБОР
    КОГДА ПараметрыНаработкиОР.Показатель ЕСТЬ NULL
    ТОГДА ПараметрыНаработкиГрупп.ПлановаяНаработка
    ИНАЧЕ ПараметрыНаработкиОР.ПлановаяНаработка
    КОНЕЦ ЕСТЬ NULL )
    

    Показать

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

    Reply
  15. AlX0id

    (5) tormozit,

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

    Reply
  16. tormozit

    (15) Не могу сказать, что мне понятен смысл твоего сообщения. Возможно кто то из нас действительно инопланетянин. Попробуй попроще сформулировать мысль.

    Reply
  17. Maximus00

    круть! побёг пробовать

    Reply
  18. petrov_al

    (16) tormozit, встроенная конфигурация не есть хорошо, мало кто захочет в типовые конфигурации встраивать ИР…лучше выкладывай свои разработки поотдельности.

    Reply
  19. tormozit

    (18) Данная тема регулярно всплывает в обсуждениях подсистемы. Если почитать форум публикации здесь или на офсайте, то моя позиция станет понятна. В двух словах, поддерживать мобильные версии инструментов заметно затратнее, чем в виде подсистемы, к тому же они менее функциональны. Любой кто писал достаточно сложную систему поймет о чем я (чем больше «зоопарк», тем сложнее им управлять в виде отдельных «животных»).

    Reply
  20. DrAku1a

    (10) Если честно, я ее и создал чтобы потом встроить в консоль (только свою).

    (13) Теперь понял. Пожелание принято.

    (14) О.К. ваш запрос отлажу.

    (16) ИМХО, имеется в виду сложный, перегруженный интерфейс. Но думаю, к этому можно привыкнуть…

    И это… не мне тут, конечно, говорить о перегруженности — мои диаграммы не в каждый «монитор» влезут 🙂

    (18) Я находил на инфостарте отвязанную консоль запросов из ИР — она работает, даже дерево строит.

    Из этой консоли я позаимствую «прикручивание» класса «Контекстная подсказка» — мне он очень нравится…

    Reply
  21. romansun

    в опщем да, второе и дальше левое соединение к одному источнику не чухает… где-то в «ПолучитьИсточникиВыборки» недонаходит 🙂

    пример запроса:

    ВЫБРАТЬ
    ЗаказыПокупателей.*,
    ЗаказыПокупателей.Заказ,
    ЗаказыПокупателей.Номенклатура,
    ЗаказПокупателя.*,
    Номенклатура.*
    ИЗ
    РегистрНакопления.ЗаказыПокупателей КАК РегистрНакопления
    
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ПО РегистрНакопления.Заказ = ЗаказПокупателя.Ссылка
    
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    ПО РегистрНакопления.Номенклатура = Номенклатура.Ссылка

    Показать

    резалт:

    РегистрНакопленияЗаказыПокупателей       ДокументЗаказПокупателя
    как                                           <== как
    РегистрНакопления                          ЗаказПокупателя
    Reply
  22. romansun

    а в качестве пожеланий добавлю возможность работать с несколькими текстами запросов

    Reply
  23. DitriX

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

    А связи между запросами показывают только левое соединение? Или полное и внутренне тоже?

    Reply
  24. samamoiloff

    Обработка из разряда «Если бы это не было придумано, это стоило бы придумать». В подтверждение — вал плюсов за день.

    Reply
  25. psih12

    Однозначный плюс. Разработчики 1С, если Вы просматриваете форум, берите это на вооружение! Кстати, в блоки с названием таблиц(регистров) можно добавить реквизиты, которые выбираются в запросах

    Reply
  26. Rustig

    Красивая разработка!

    А вообще разработка навеяла на такие мысли…

    А чем вызвано такое разнообразие сложноразработанных запросов в типовых конфигурациях?

    Простотой разработки, легкостью восприятия и легкостью их изменений или мыслью, что запрос в цикле это большая ошибка 1С-ника?

    У кого-нибудь есть пример из жизни (?) — так сказать технико-экономическое обоснование, что запрос в цикле экономически ну никак не выгоден, чем написать именно сложный запрос.

    С детства нас учат, что запрос в цикле — это большая ошибка в жизни разработчика — которая замедляет производительность системы. А про то, что понять сложносочиненный запрос другого разработчика трудозатратно и стоит много денег клиенту, особенно если запрос надо периодически дорабатывать, расширять — никто не предупреждает 🙁 …

    Найти бы золотую середину…

    Reply
  27. olegtymko

    думаю что интересная разработка, скачаю попробую что с ней получиться добиться) автору спасибо!)

    Reply
  28. StepByStep

    Наглядность — ХОРОШО.

    Не сработало с пакетом запросов — ПЛОХО.

    Будем пробовать дальше.

    Reply
  29. StepByStep

    САМА ИДЕЯ — ЗАМЕЧАТЕЛЬНО.

    Reply
  30. DrAku1a

    (14),(21) понял природу недоработки — все проще, я не учел, что после ЛЕВОЕ СОЕДИНЕНИЕ <ИмяТаблицы> идет ПО <список связей>, а не сразу новое СОЕДИНЕНИЕ. Исправлю.

    (22) Несколько текстов можно перечислить через «;» — получится пакет запросов. С пакетами обработка работает.

    (23) Связи показывает разные (стрелка влево — левое соединение, стрелка вправо — правое соединение и т.д.)

    (26) Ваше пожелание повторяет самый первый комментарий. Если собрать в эти блоки еще и поля — будет огроменная диаграмма… У меня сейчас первая мысль — как сделать ее компактнее…

    (29) Пакет запросов — в студию… я проверял на пакетном запросе — должно все работать…

    (27) Про 1С и их типовые конфигурации лучше всего сказал один мой товарищ «Чтобы сложить два числа они вызывают три функции из трех разных модулей…» — я не пойму, они таким образом делают запутываение кода для конкретного разработчика? В платформе 7.7 модулей было меньше — и код был проще для разбора… А тут зачастую отладчик только поможет понять хоть часть замысла того или иного рассчета.

    Про сложный запрос и цикл запросов позвольте несогласиться.

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

    Даже если клиент и сервер находятся на одной машине — ситуация кардинально не меняется (только уменьшится разница времени).

    В файловой версии базы 10 простых запросов, обычно проходят гораздо быстрее одного сложного, т.к. тут нет сервера — и нет согласований.

    Reply
  31. artbear

    Поставил плюс, но Дерево из ИР намного больше нравится.

    По регистрации спец.ВК — на самом деле это не ВК, а com-объект, ИР его регистрирует полностью автоматически, не нужны даже права администратора, можно только для локального пользователя.

    Reply
  32. tormozit

    (32) К сожалению, ты ошибаешься. Библиотека классов GoldParser.Dll не позволяет регистрировать ее без прав администратора. Мой механизм автоматической регистрации библиотек работает не во всех случаях.

    Reply
  33. Rustig

    (31) возможно ли предположить, что дальнейшее сопровождение сложных запросов обходится дороже, чем простых? Выгодно ли это клиенту?

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

    И я призываю к диалогу всех, а не только автора. 🙂

    От вас очень хочется увидеть сложный запрос — предмет диалога. 🙂

    Reply
  34. AnryMc

    Как настоящий лентяй, хотел бы уводеть:

    При вставке скопировенного текста запроса — автоматическое «убирание» «|», «»», ; и пр.

    Reply
  35. Yasen

    (0) молодец, плюс

    хотя (5) имхо удобнее гораздо

    Reply
  36. samamoiloff

    (34) Сам сложный запрос не несет в себе ни негатива, ни дополнительных затрат. Все это появляется, когда он выступает в качестве объекта для каких-либо процессов (доработки, понимания и т.п.). Сдается мне, что разработки уважаемого автора и TormozIt (а есть еще?) позволяет избавиться от части неудобств. Можно предположить, что визуальный конструктор запросов (ну сделайте кто-нибудь :-), более навороченный, чем у 1С (ну, предположим, драг-энд-дроп в сложную визуальную структуру, со встроенными методиками извращения, пардон, связывания данных, с подсказками при наведении курсора о параметрах виртуальных таблиц, с автоматическим выстраиванием структуры «от результата», и это я еще не начал мечтать…) может снять оставшуюся часть неудобств и даже позволит наслаждаться программисту полетом своей мысли.

    Reply
  37. samamoiloff

    А сегодня сложный запрос — враг. Он отнимает силы, заставляет нервничать и совершать ошибки, он смеется над нами! Не случайно эта публикация, еще раз обращаю ваше внимание, за пару дней скакнула на вершины рейтингов, и по плюсам, и по загрузкам, и по комментариям. (5) — идея супер, но я так и не подключил компоненту… (оправдываться не буду, так вышло).

    Reply
  38. tormozit

    (37) Конечно же меня, как автора единственной на текущий момент публичной грамматики языка запросов 1с, такая мысль посещала и не один раз. Сделать такой конструктор с помощью этой грамматики не очень сложно, но времени придется потратить много. Думаю не меньше 50 часов бы у меня ушло на воссоздание аналога платформенного конструктора и дальше уже пошли бы доп. фичи часов на 20. Одним словом дорогой конструктор получится.

    Reply
  39. AnryMc

    (39) tormozit,

    А хорошую разработку здесь можно и продать

    Reply
  40. samamoiloff

    (39)Снегопат, каюсь, не смотрел еще. Под него какой-нито плагин не планируется?

    (40)Никто не знает (ну, кроме авторов, конечно)какой доход приносят разработки, какова прибыльность, какой спрос…

    Здесь скорее всего нужен проект рекламного характера для продажи более объемных вещей. 70 часов * 500 рублей = 35000 рублей сумма приемлимая для раскрутки инфобизнеса.

    (39)tormozit, готов рассмотреть Ваши предложения, осенью в планах делать запуски продаж.

    Reply
  41. pumbaE

    (39) на управляемых формах в режиме тонкого клиента… мечта.

    Reply
  42. luns

    идея хорошая, но по своему опыту скажу, что не нужная.

    стандартного конструктора достаточно для понимания запроса любой сложности.

    Reply
  43. AnryMc

    (43) luns,

    Стандартный конструктор помогает, но не дает такой наглядности.

    Особенно такая визуализация будет полезна для тех, кто еще не «постиг всех премудростей» стандартного конструктора. Согласитесь что многие вещи в документации описаны очень плохо и пока тебя «не ткнут носом» ты их не поймешь. (Например: всякие «галочки» без подсказки и название колонки не прочтешь, т.к. ширина не изменяется…)

    Reply
  44. luns

    (44) возможно. но к сожалению не могу оценить наглядность.

    для пробы хотел разобрать пару запросов:

    отчет: ВаловаяПрибыль

    отчет: АнализНачисленийРаботникамОрганизаций

    ни там ни там не сработало.

    Reply
  45. BRT
    Reply
  46. StepByStep
    Reply
  47. AnryMc

    (46) (47)

    Может и мне запросик этак на строк 300 выложить, да $m заработать 😉

    Запрос, сохраненный в текстовый файл и «прикрепленный» к сообщению (см. внизу ввода новых сообщений) скачают и посмотрят те, кто захочет, и тема комментариев останется читабельной.

    См. прикрепленный для примера файл

    Reply
  48. AnryMc

    (45) luns,

    Не знаю. Мой запрос 292 строки из (48) дал такую картинку:

    Обработка — самой первой версии

    Reply
  49. samamoiloff

    (43)luns,

    достаточно. Вот запросец: (http://samsamych.com/super-zapros-bp/)

    Черточки справа — «пакетики» запросика:



    Ну, я разобрался. Но можно было быстрее разобраться. Дело не в том, достаточно или нет. Есть вещи, которые помогают. Бывает такое. Нет?

    Возможно и зарплаты кому-то достаточно определенного уровня, но я бы не стал ему об этом говорить 🙂

    Reply
  50. AnryMc

    (50) samamoiloff,

    А сколько там было пакетов? Больше 255? Это я так — поржать!

    На «взгляд» видно более 30 ярлычков (закладок справа) но может 1С не может их делать меньше и полоса прокрутки не предусмотрена…

    Но вообще сочувствую…

    Reply
  51. AnryMc

    Лично у меня, когда я «воюю» с запросами много времени и сил уходит на «скачки» между пакетами, что бы посмотреть (вспомнить) сто выбрали и как назвали в этом пакете, а затем по каким правилам отобрали и назвали в другом пакете.

    В стандартном конструкторе мне это делать неудобно (лично мне, не знаю как Вам).

    Вот и приходиться «елозить» по тексту запроса — «туда — сюда», а это могут быть сотни строк.

    Что порадовало в данном решении — так это «обратная связь» когда «счёлкнул» по квадратику, а в тексте получил спозиционированное выделение. Правда пока работает «кривовато» но я думаю, автор доделает.

    Мне лично помогло сегодня.

    Reply
  52. DrAku1a

    (49),(45) Отчет дорабатывается по мере поступления Ваших комментариев (с указанием некорректно обрабатываемых запросов), в частности

    26.05.2012 — Исправлена ошибка «В реальном запросе видит только одно соединение», указанная в комментариях 14, 21 и 31.

    (48)Согласен.


    Господа! Давайте запросы прикреплять в текстовых файлах…

    (46) Причина ошибки установлена: объединение запросов «ВЫБРАТЬ» в условиях некорректно обрабатываются. Уже исправлено. Появится при следующем обновлении.

    (47) Причина ошибки установлена: некорректная обработка {}. Уже исправлено. Появится при следующем обновлении.

    Обнаружил недоработку: не показывает объединенные вложенные запросы (вообще не показывает). Исправляю.

    Нужны идеи относительно того, как расположить-оформить данные. Особенно это касается пожеланий (1), (9) и др.
    Reply
  53. BRT

    (53)

    сорри, ошибся кнопками.

    Reply
  54. DrAku1a

    (50) а можно здесь привести тот самый текст запроса, чтобы в моем отчете попробовать? 🙂

    Reply
  55. Sairys

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

    Reply
  56. samamoiloff

    (55)DrAku1a,

    вроде он : zapros_kd_bp_tovary.txt

    Reply
  57. nataon

    Автору спасибо, интересная идея

    Reply
  58. DrAku1a

    (57) Попробовал… много букв… а диаграмма запроса оказалась простой…

    Reply
  59. StepByStep

    Вот теперь вижу результат.

    Поставил 100-ый плюс.

    Вот еще бы под управляемый режим ….

    Reply
  60. StepByStep

    1С-никам такое следовало бы взять на вооружение.

    Ведь существует же в 1С-ке Карта маршрута бизнес-процесса!

    Reply
  61. Yury1001

    Всё круто, запрос из 20 страниц был разобран как с добрым утром.



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

    Reply
  62. Sintson

    Автору огромное спасибо, идея и реализация отличная, возьму на вооружение!

    Прошу прощения что не по теме, достаточно срочно нужно решить вопрос со специалистом на поддержку.

    Не расценивайте, пожалуйста, за рекламу.

    Ищу только с нашего ресурса 😉 и при помощи нашего ресурса.

    подробности на:

    Биржа труда на «Инфостарте»

    Reply
  63. vx_gas

    красивая штучка получилась 🙂

    Reply
  64. Den_D

    супер, скачаю обязательно, но подожду пока немного отладится

    эта головная боль с запросами у всех, в независимости от компетенции

    Reply
  65. AzzZ

    За идею жирный плюс!

    Reply
  66. StepByStep

    (52) AnryMc,

    Хорошо сказано, именно так все в действительности и происходит.

    И тут визуализация — неоспоримый ПЛЮС.

    Reply
  67. eigen20

    Классная идея, автору респект!!! Молодец, протестирую отпишусь!

    Reply
  68. Muhin555

    (10) Muhin555,

    Прикрутил от «Консоли запросов» работу с файлами *.sel, на авторство не претендую, но думаю так удобнее смотреть структуру готовых запросов из консоли….

    Reply
  69. vec435

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

    Reply
  70. DimanYa

    Идея создания шикарная!!! Особенно подойдёт для ЗУПа где запросы сделаны так, что чёрт ногу сломит. Только есть один вопросик:

    1) как отрабатываются ситуации, когда пишется в коде СТРЗаменить? Бывает поставят условия в коде и половина запроса изменилось.

    Reply
  71. DrAku1a

    (72) Попробуйте… По-идее должно отработать нормально, т.к. при анализе текста запроса блок «+СтрЗаменить(…)+» будет воспринят как одно слово (как текст) и это не должно повлиять на результат.

    Reply
  72. angler225

    (70) Muhin555, Неверный формат хранилища данных ‘с:/ПарсерТекстаЗапросов_Файлы.erf’

    Reply
  73. Программулькин

    у этой публикации http://infostart.ru/public/95771/ ошибка

    Ошибка при выполнении запроса:

    {Форма.ФормаОтчета.Форма(12)}: Поле объекта не обнаружено (ТипЗначения)

    /************************************************************************************************************

    ВЫБРАТЬ

    ОсновныеНачисленияРаботниковОрганизаций.Сотрудник,

    ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета,

    ОсновныеНачисленияРаботниковОрганизаций.Результат

    ИЗ

    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций

    ГДЕ

    ОсновныеНачисленияРаботниковОрганизаций.Сотрудник В

    (ВЫБРАТЬ

    РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник

    ИЗ

    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&КонДата, ) КАК РаботникиОрганизацийСрезПоследних

    ГДЕ

    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение))

    /************************************************************************************************************

    Параметр:

    Имя Тип Значение

    КонДата Дата 31.05.2012 0:00:00

    /*************************************************************************************************************

    ОБЫЧНАЯ КОНСОЛЬ ОТРАБАТЫВАЕТ БЕЗ ОШИБОК

    Reply
  74. IgorXml

    С последним своим отчетом на СКД почти месяц маялся. Сегодня гуляю в обед и привиделась мне такая схема. Думаю, если бы была у меня такая я бы давно всё сделал. Прикольно.

    Reply
  75. soulsteps

    Отличная обработка, действительно, облегчает понимание и разбор даже очень сложных запросов в разы! Большое спасибо!

    Reply
  76. alexsmir56

    спасибо. Идея классная. Помогает особенно когда начинаешь.

    Reply
  77. orefkov

    (73)

    Под Снегопат портировать нет желания?

    Чтобы и в Конфигураторе вертеть.

    Reply
  78. DrAku1a

    (79) Идея отличная! Заодно, попробую себя в скриптописателях для снегопата, а то пока только его пользователь 😉

    Reply
  79. vladen

    Идея очень не плоха.

    Жаль что не анализирует запрос в англ. варианте.

    Reply
  80. DrAku1a

    (81) Вроде должна анализировать. Если нет — приведите текст запроса — отлажу…

    Reply
  81. DrAku1a

    Сегодня попробовал вот такой запрос (он вполне успешно выполняется, но в нем НЕТ источников):

    ВЫБРАТЬ Источник.Поле1 ПОМЕСТИТЬ вт ИЗ (ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2) КАК Источник

    Результат прилагается:

    Reply
  82. andpyxa

    Попробовал позапускать — классный инструмент. Автору «+» и пожелания дальнейшего развития. Будет неплохо если выростет в коммерческий проект. Существенно экономит время при разборе запросов.

    Reply
  83. DrAku1a

    (85) Этот проект останется бесплатным, в т.ч. и если напишу его как аддин для Снегопата. Но на основе этого проекта и дико раскритикованного «Выполнение и отладка запроса» планирую сделать мощный отладчик запросов (без каких. И вот это проект уже скорее всего будет платным.

    Есть идея попробовать построить структуру с помощью графической схемы, наподобие проекта 1C Visio. Так можно расписать задействованные в запросе поля. Попробуем?..

    Reply
  84. Veduin

    Скачал, Посмотрел Обработку!

    Интересно анализирует введенный текст запроса.

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

    Но вот так хотелось сразу еще и консоль запросов для выполнения и отладки этого запроса.

    Но это видать из-за того что не до конца понимаю сложные и встроенные запросы…

    СПАСИБО!

    Reply
  85. andpyxa

    Насчет визио идея хорошая, именно там рисую схемы, пока руками. Хотел сказать что как логическое продолжение разработки было бы очень полезно выполнять запрос и по частям, приходится иметь дело с запросами, которые работают, но не правильно, не так как нужно, приходится в консоли копировать и удалять лишнее, анализировать куски. Идея выполнения запроса по частям предложена 1С в консоли в виде кнопки(рис. ниже), но из-за того что она не подтягивает параметры из запроса в ней нет практического смысла. Думаю что видеть промежуточные этапы было бы очень полезно.

    Reply
  86. DrAku1a

    (88) Именно этим я сейчас и занимаюсь. Надо бы консоль посмотреть — может чего полезного вытащу.

    Reply
  87. echo77

    Поля в связях не показывает — это очень грустно. Этого очень нехватает

    Reply
  88. nirbolz

    Эта ваша разработка напомнила мне про уроки в институте про Майкрософт Акцес))

    Reply
  89. DrAku1a

    (91) Сделаем со временем… Как вы себе это представляете визуально (как мне нарисовать поля связи)?

    Reply
  90. andpyxa

    С практической точки зрения связь может выглядеть как псевдоним поля и в скобке тип данных.

    Reply
  91. pvlunegov

    (27) Rustig,

    Почему за запрос в цикле выгоняют с экзамена 1с?

    Все просто.

    Представьте себе компьютер соединенный по локальной сети с SQL-сервером.

    при запуске запроса происходит обращение на SQL-сервер.

    Обращение, пересылка текста запроса (условно можно так назвать) по локальной сети — все это занимает МНОГО времени

    по сравнению с выполнением запроса на сервере SQL. если к тому же есть проблемы в локальной сети (потеря пакетов, медленная связь), то пересылка запроса занимает секунды!!! Это очень много!

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

    В случае сложного запроса — текст запсроса 1 раз посылается на сервер, 1 раз выполняется и 1 раз посылается результат. Даже если есть проблемы в локальной сети — они мало влияют на общее время выполнения запроса (и получение результата).

    Если же выполнять запрос в цикле, то он МНОГО раз (сколько циклов) посылается на сервер. И МНОГО раз проблемы локальной сети влияют на общее время выполнения запросов в цикле.

    В итоге, там где слабая сеть, запрос в цикле выполняется за МИНУТЫ, а сложный запрос — за СЕКУНДЫ

    Reply
  92. DrAku1a

    (112) Да даже в идеально настроенной сети или на одной машине — тратится время на согласование клиента и сервера, на передачу данных. И это незначительное время — в цикле становится весьма весомым. А оптимальный пакетный и сложный запрос современный SQL-сервер выполнит быстро.

    (113) Сейчас нет 8.1 под рукой, завтра выложу.

    с наступающим!

    Reply
  93. Rustig

    (112) друзья, спасибо что подробно пишите — другим наука. а я это знал….

    я писал в другом контексте, который вы не увидели, есть много нюансов в работе — это и человеческий фактор, а не только машинный (о котором вы пишите про ограничения локальной сети и тд). Человеческий фактор породил исследования в таких областях как юзабилити, появилось понимание необходимости создавать дружественный интерфейс, есть соционика, которая целенаправленно изучает тот механизм, с помощью которого человек воспринимает и оценивает поступающую к нему информацию. В общем, когда приходишь к пользователем и спрашиваешь почему они работают именно так, а не так как закладывалось, понимаешь что человеческий фактор и/или новые требования к системе существуют. далее, если кратко, человеческий фактор существует также и у разработчика (внедренца). Он заключается в том, что написать обработку данных «на один раз» оказывается более быстрее и эффективнее, если не заморачиваться на внутренние соединения таблиц. Именно «заморачиваться» — потому что это более сложная задача. Если сравнивать с чем-то из жизни, то зачастую мы не обращаем внимание на беспорядок в своих вещах дома, на рабочем столе и т.д. — зато жизнь идет, работа движется, и не важно, что иногда мы тратим СЕКУНДЫ для поиска ключей или других предметов быта. Ну в общем, всему свое время и место.

    Reply
  94. DrAku1a

    (116) Прав в одном: когда пишешь для себя и на один раз — все средства хороши… А так: если спец пару лет плотно работает с запросами, то даже такого рода задачу ему будет проще решить сложным составным запросом — по привычке.

    Да, большие и сложные запросы сложнее отлаживать, но и тут есть масса инструментов в помощь…

    Reply
  95. Lukich66

    (117) добрый день, с н.г. К сожалению не смог пройти «интеллектуальный тест» при скачивании 27/12/2012- результат= файла нет, 1 «мань»-черт с ней. Предлагает почему-то 2 строчки типа «ХаХаХ» «ФфФфФ»- я их тупо ввожу и получаю фиг.вам

    Reply
  96. DrAku1a

    (121) Странно… Возможно браузер глючит… В списке скачавших Вы есть. Давайте почту.

    Кстати, у меня капчу не просит вообще…

    Reply
  97. Lukich66

    (122) Спасибо,сам удивляюсь.

    Reply
  98. DrAku1a

    (37),(125),(127),(130),(129) Набросал идею такого конструктора — чтобы не забыть на будущее:

    Визуальный конструктор запросов (идея)

    Полагаю, самое сложное в реализации — полноценный парсер (вот эта вещь мне ну очень нужна). Ну и еще надо подумать над интерфейсом…

    Reply
  99. v.l.

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

    Хотя связи через точку, может, глубиной одного уровня тоже можно включить.

    Потом выдать заготовку, скелет запроса, который скормить Конструктору и настроить в нём тонко.

    Но это так, идея.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *