СКД против запроса с итогами




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

45 Comments

  1. tango

    — потому что

    http://infostart.ru/public/80055/

    пс: извини, Игорь, но перестал бы ты парить людям моск
    <

    Reply
  2. Ish_2

    В (1)- набор слов и ссылка на пустышку.

    Приведи свою готовую обработку, свой текст запроса с последующей вызгрузкой в дерево.

    Или дай ссылку на публикацию , где решается подобная задача .

    Пока говорить не о чём.

    Reply
  3. tango

    Пустышка? у тебя, наверное, отключена загрузка изображений.

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

    Игорь, помнишь, у тебя был такой сдвиг: СКД — рулез, кодинг — атстой?

    Ну, так это и есть СКД, и именно здесь она — рулез, а вовсе не в рекурсиях.

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

    И не надо застирывать моск извратами типа (0).

    ***

    Игорь назвал мою публикацию пустышкой? С чего бы это? Вот, уважаемый коллега iov даже плюсанул.

    Похоже, причина в том, что тема, поднятая Игорем, в очередной раз является преодолением им же самим созданных трудностей.

    А моя публикация ему потому и кажется пустышкой , что проблем-то нет, никаких.

    Просто пишем запрос, все остальное система делает сама. Понимаешь, Игорь? Программист составляет простейший запрос, без никаких твоих выкрутасов, и система сама делает все остальное.

    Это и отображено на картинках. Да, публикация получилась очень маленькая. Так ведь и проблемы-то для обсуждения — нет. Понимаешь, Игорь? Это твоя публикация была бы пустышкой, если бы реально не вредила мозгам коллег, по крайней мере, мозгам тех из них, которые тебе отплюсовались.

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

    Первый скриншот вы сможете воспроизвести, открыв СКД отчета.

    Второй скриншот — запустив отчет в демо-базе УПП 1.3

    Reply
  4. Ish_2

    (3) Ок. Давай разбираться.

    Изображение у меня выводятся.

    И то, что ты использовал СКД — вытекает из текста запроса.

    Почему же тогда в (2) использован термин «пустышка» ?

    Потому что

    1. Не приведена сама обработка.

    2. Не приведены аргументы ( сранительный анализ и тестирование) —

    почему и в каких случаях СКД лучше, чем решение в текущей теме ?

    Без этих двух пунктов твоя заявка (1) на лучшее решение — это просто «пук».

    Гаданием за тебя, что ты имел ввиду — заниматься не буду.

    Теперь о текущей статье, весь смысл её в том , что экономнее обойтись без СКД и решить всё в одном запросе.

    См. простейшие тексты обработок.

    Применение же СКД связано с дополнительными затратами в виде хранения отдельного макета «СхемыКомпоновкиДанных», загрузки его в оперативную память и т.д.

    это невсегда удобно при доработке существующей формы документа или справочника.

    Если же не хранить такой макет, то тогда придется программно создавать «СхемуКомпоновкиДанных» и организовывать вывод,

    но тогда теряется преимущество в простоте настройки.

    Вообщем, прочитай тему «Заметочки..» Alex-is там приведены примеры использования вывода в дерево.

    Из этих примеров ты поймёшь , что в данных конкретных случаях применение СКД — избыточно.

    и проще , экономнее использовать простой запрос.

    Reply
  5. tango

    Ты уж определись, агитатором и пропагандистом чего ты являешься, СКД или кодинга, а то в памяти всплывает термин шизофрения.

    (3) — в (0) об СКД — ни слова, ты и не вспоминал о ней, пока я не ткнул.

    Reply
  6. iov

    Нашел применение вашему противостоянию!!! (добавил в тестовые задания для новых сотрудников так сказать найди 10 отличий.

    Да а чего вы такие злые друг на друга?

    Reply
  7. tango

    мы не злые, мы — 1сники

    Reply
  8. tango

    (4) сравни размер обработки с макетом и без макета

    а про использование оперативки — это реальный пук, обратись в хот-лайн известной фирмы

    Reply
  9. Ish_2

    (6) Это мы — по старой дружбе.

    (8) Начнем сначала. В теме есть предложение , всё обясняющее :

    Данную статью можно рассматривать как дополнение к теме Alex-is «Заметочки про 1с Предприятие 8»

    http://infostart.ru/public/71130/

    В этой статье автор привёл примеры как получить двухуровневые итоги в одной колонке результата запроса.

    Простенько и со вкусом.

    Но для трех- и более уровневых итогов этот приём был уже не применим.

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

    Разумеется , можно выводить в дерево при помощи СКД. Никто этого запретить не может.

    Да, действительно , про СКД в статье ни слова, потому что такая возможность очевидна и неинтересна в контексте рассмотрения.

    (5) Быть сторонником применения СКД — это не значит тыкать СКД куда ни попадя.

    Еще раз говорю, в контексте целого класса задач (доработка сущ. форм , например) применение СКД для вывода в дерево избыточно,

    если всё можно реализовать в одном простом запросе.

    Reply
  10. tango

    ты по-случаю — не какой-нибудь маленький начальник компьютерщиков?

    больно соображения у тебя какие-то нереальные

    избыточным может быть только одно — время, затраченное на получение необходимого результата

    если быстрее на СКД — берем СКД

    если из реляционных таблиц надо вытащить иерархию — кодинг с рекурсией

    Reply
  11. ILM

    Дополнительным плюсом статьи является возможность выводить дерево итогов с разнообразной многоуровневой группировкой.

    Это могут быть и «склады, товары, контрагенты» и «контрагенты, склады, товары» и «товары, контрагенты, склады». Важно, что можно меняя запрос динамически получить практически миниOLAP на данных.

    И выводить все эти данные на форме, а не в отчете.

    Reply
  12. ILM

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

    Reply
  13. tango

    (12) Иногда код с рекурсией работает медленнее

    Мы говорим об одном и том же, о из реляционных таблиц надо вытащить иерархию (априори количество уровней не знаем, пример — спецификация изделия) (10)?

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

    Или вы настолько Иш_3, что спрячетесь, как Иш_2, за потоком «умных» слов?

    Reply
  14. Ish_2

    (13)

    априори количество уровней не знаем, пример — спецификация изделия

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

    В практических задачах ( а мы с помощью 1с решаем именно такие задачи) важно не количество уровней в каждом

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

    В практических задачах оно всегда известно и берется с некоторым запасом.

    Тем не менее теоретически вполне возможен следующий вариант ,

    см. «Запрос против…» http://infostart.ru/public/78285/

    В нижеприведенном примере лишь изменен вид цикла

    ТекстЗапроса = «ВЫБРАТЬ
    |    ЕСТЬNULL(Спец.Номенклатура, Исх.Номенклатура)                 КАК Номенклатура,
    |    Исх.Количество * ЕСТЬNULL(Спец.Количество, 1)                    КАК Количество,
    |    Исх.СтрокаКодов + ЕСТЬNULL(Спец.КодНоменклатуры, «»»»)   КАК СтрокаКодов,
    |    ВЫБОР
    |        КОГДА Исх.ПризнакКонцаВетки > 0
    |            ТОГДА Исх.ПризнакКонцаВетки
    |        КОГДА Спец.КодНоменклатуры ЕСТЬ NULL
    |            ТОГДА 1 // нормальное завершение ветки
    |        КОГДА Исх.СтрокаКодов ПОДОБНО Спец.КодНоменклатуры
    |            ТОГДА 2 // зацикливание
    |        ИНАЧЕ 0     // ветка продолжается
    |    КОНЕЦ                                                                                  КАК ПризнакКонцаВетки
    |ПОМЕСТИТЬ Последующая
    |ИЗ
    |    Исходная КАК Исх
    |     ЛЕВОЕ СОЕДИНЕНИЕ Спецификация КАК Спец
    |     ПО (Исх.ПризнакКонцаВетки = 0) // соединяемся только тогда, когда ветка продолжается
    |            И Исх.Номенклатура = Спец.Владелец
    |;
    |УНИЧТОЖИТЬ Исходная
    |;
    |ВЫБРАТЬ ПЕРВЫЕ 1 Посл.Номенклатура
    |ИЗ  Последующая КАК Посл
    |ГДЕ Посл.ПризнакКонцаВетки = 0″;
    
    //Цикл получения выходной таблицы
    Счетчик =0;
    Пока Истина Цикл
    Запрос.Текст = СтрЗаменить(ТекстЗапроса,»Исходная»,»ВремТаблица»+ Счетчик);
    Запрос.Текст = СтрЗаменить(Запрос.Текст,»Последующая»,»ВремТаблица»+(Счетчик+1));
    РезультатЗапроса = Запрос.Выполнить();
    Счетчик = Счетчик +1
    Если РезультатЗапроса.Пустой() Тогда // Все ветки не имеют продолжения
    Прервать;
    КонецЕсли;
    КонецЦикла;

    Показать

    Итак , по твоему запросу приведен пример решения задачи разузлования без рекурсии для случая,

    когда количество уровней в графе неизвестно.

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

    Reply
  15. ILM

    (14) А зачем доказывать?

    (13) Мне не попадались задачи с вложенностью в глубину более 67 уровней. Это было один раз за все мои 44 года.

    Чаще всего количество уровней задано и не превышает 10.

    Я не отрицаю рекурсии, но сожалею о том, что нет 1С рекурсивных запросов. Типа OVER BY, CONNECT BY, START WITH.

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

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

    Возможных решений много… И все они имеют право на жизнь.

    Reply
  16. Ish_2

    (15)1.

    А зачем доказывать?

    Затем , чтобы «пуков» в этой теме было поменьше.

    2.

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

    Потому что на уровне записи элемента справочника реализован механизм , который исключает зацикливание ссылок — получаем «идеальное» дерево

    (ациклический граф).

    Если же таблица с колонками Родитель,Ребенок создана пользователем произвольно, то тогда встает проблема : возможно зацикливание (ошибка заполнения) . Применять готовые встроенные процедуры расчитанные на идеальное дерево — НЕЛЬЗЯ.

    Reply
  17. tango

    (14) Игорь, если ты не видишь в своем коде чистейшей воды рекурсию, то дискуссия вырождается в спор о терминах, я это уже говорил.

    (15) слово «доказывать» сказали вы — чистейшей воды Иш2-приемчик.

    Reply
  18. Ish_2

    (17) Пустое, Миша. Всё уже ясно.

    Теперь переключимся на твою тему http://infostart.ru/public/80055/ и

    посмотрим вступится за твою честь WiseSnake или нет.

    Reply
  19. KapasMordorov

    (2)

    С полгода назад тренировки ради (был вопрос на одинэссии).

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

    Видимые колонки: КонтрагетОтчет и ДоговорКолонки. И еще сортировка в консоли отчетов КонтрагентКолонки, КонтрагентОтчет, ДоговорКолонки.

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

    ВЫБРАТЬ
    ЗапросКолонки.Контрагент КАК КонтрагентКолонки,
    ЗапросКолонки.Договор КАК ДоговорКолонки,
    КонтрагентыДоговорыМинимум.Контрагент,
    КонтрагентыДоговорыМинимум.Договор,
    ВЫБОР
    КОГДА ЗапросКолонки.Договор = КонтрагентыДоговорыМинимум.Договор
    ТОГДА ЗапросКолонки.Контрагент
    ИНАЧЕ 0
    КОНЕЦ КАК КонтрагентОтчет
    ИЗ
    (ВЫБРАТЬ
    ДоговорыКонтрагентов.Ссылка КАК Договор,
    ДоговорыКонтрагентов.Владелец КАК Контрагент
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    
    СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.Владелец,
    ДоговорыКонтрагентов.Ссылка) КАК ЗапросКолонки
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Договор,
    Контрагенты.Ссылка КАК Контрагент
    ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
    
    СГРУППИРОВАТЬ ПО
    Контрагенты.Ссылка) КАК КонтрагентыДоговорыМинимум
    ПО ЗапросКолонки.Контрагент = КонтрагентыДоговорыМинимум.Контрагент

    Показать

    Reply
  20. Ish_2

    (19) Вопрос :

    (ВЫБРАТЬ
    ДоговорыКонтрагентов.Ссылка КАК Договор,
    ДоговорыКонтрагентов.Владелец КАК Контрагент
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    
    СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.Владелец,
    ДоговорыКонтрагентов.Ссылка) КАК ЗапросКолонки 

    Показать

    Для чего здесь «Сгруппировать ПО» ?

    Разве в справочнике «ДоговорыКонтрагентов» есть неуникальные пары Договор, Владелец ?

    Не проще ли написать равносильное :

    (ВЫБРАТЬ
    ДоговорыКонтрагентов.Ссылка КАК Договор,
    ДоговорыКонтрагентов.Владелец КАК Контрагент
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ) КАК ЗапросКолонки 
    Reply
  21. KapasMordorov

    (20)

    Это уже перестраховка в спешке.

    С замечанием согласен.

    Reply
  22. Ish_2

    (15),(17),(19)

    Жаль , что я не дождался аргументированного ответа о преимуществах СКД при выводе в дерево.

    Придется самому защищать СКД и поставить под сомнение способ получения дерева из запроса с итогами.

    Первый камень в текущую тему .

    См. прикрепленный рисунок (второй из текущей темы).

    Что имеем на рисунке ? Для того чтобы получить дерево мы используем в запросе ИТОГИ

    и увеличиваем выходную таблицу в 4(!) раза.

    Уже один этот факт рождает подозрение : а хорошо ли это ?

    А в СКД ИТОГИ в запросе не используются совсем неслучайно.

    Reply
  23. Ish_2

    (17)

    Если в (22) размышлизм , то здесь доказательство.

    Вот каких аргументов я ждал от тебя ,Миша.

    Специально подобран убойный, уникальный пример

    для показа преимуществ СКД при формировании дерева.

    С помщью СКД дерево было сформировано в 50(1) раз быстрее.

    Reply
  24. alexk-is

    (23) А где колонка «Поле4»?

    Reply
  25. Ish_2

    (24)

    Вопрос : как получить итоги в одну колонку при использовании СКД (без постобработки) ? — интересный.

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

    А в (23) продемонстрировано преимущество СКД при формировании «обычного» дерева (без итогов в одну колонку).

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

    Reply
  26. alexk-is

    (26) А я знаю кто это умеет делать… 🙂

    Reply
  27. Ish_2

    (26) «Луч света», ну , расскажи нам. Просим.

    Reply
  28. alexk-is

    (27) Ну, что за сарказм…

    Вот ссылочка http://infostart.ru/public/download.php?file=80200

    Reply
  29. Ish_2

    (28) Ай ! Молодца !

    На форуме «1с» человек страдает по этому поводу.

    Я ему не помог. Теперь сошлюсь.

    Reply
  30. Ish_2
  31. Ish_2

    (28) Вы уж Алексей Викторович — извините ,

    но без наездов в этой теме — никак.

    Расматривается твоя обработка Пример8 из темы «Заметочки…»:

    http://infostart.ru/public/download.php?file=80200

    Теперь наезд :

    1. Нужно обязательно избавиться от создания лишних и никчёмных пользовательских полей Рекизит1,Реквизит2..

    2. В табличное поле «Дерево» должно сразу выводиться только одно поле «Поле4».

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

    Слабо доработать ?

    Reply
  32. alexk-is

    (31) В компановке данных нужно просто удалить эти пользовательские поля и всё. Оставить только «Поле4». Работать будет быстрее.

    Reply
  33. Ish_2

    (32) Не пойдет. Ты прикрепи обработку.

    Reply
  34. alexk-is

    (33) Ну, ладно…

    Тут обработка только с 1 колонкой Поле4

    Reply
  35. Ish_2

    (34) Ок !

    Reply
  36. alexk-is

    Добавил ещё один вариант реализации многоуровнего дерева в колонке «Поле4» с использованием СКД — «Пример 9» http://infostart.ru/public/71130/files/

    Reply
  37. Ish_2

    (36) Мне придется переписывать и стыковать с текущей темой (Благодаря тебе — она тоже будет полностью переработана).

    Вместо реквизитов «Реквизит1″,»Реквизит2» — «Поле1″,»Поле2″,»Поле3″,»Поле4».

    Ты зачем- то никому не интересный цикл заполнения таблицы — сделал в одну строку.

    Ввел зачем-то переменную «Счетчик»,»НовоеДерево».

    Время с точностью до миллисекунды…

    Мда..На вкус и цвет .

    Reply
  38. alexk-is

    > Вместо реквизитов «Реквизит1″,»Реквизит2» — «Поле1″,»Поле2″,»Поле3″,»Поле4».

    «Поле1″,»Поле2″,»Поле3″,»Поле4» — то вот отсюда http://infostart.ru/public/79992/

    > Ты зачем- то никому не интересный цикл заполнения таблицы — сделал в одну строку.

    Так быстрее работает

    > Ввел зачем-то переменную «Счетчик»,»НовоеДерево».

    «Счетчик» — так быстрее работает

    «НовоеДерево» — так правильнее работает при повторном запуске

    > Время с точностью до миллисекунды…

    Точность — вежливость королей

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

    Reply
  39. Jogeedae

    Способ вроде как известный 🙂

    Использую иногда.

    Для некоторых случаев, подходит. Но если порядок групп менять, то условие «ВЫБОР КОГДА Поле2 Есть NULL….» не работоспособно. расширять надо

    Reply
  40. Ish_2

    (38) В (37) были придирки.

    (39)

    «Чисто» поговорить ? или сможете представить свой вариант выгрузки в дерево ?

    Reply
  41. romansun

    Интересная тема, спасибо. 🙂

    Покурил чуть этот вопрос, скажу пару слов в сторону запросной половины статьи.

    Главный затык идет на Выгрузить() в строках вида «Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)». Сам запрос выполняется так же быстро, как и СКД.

    Но в строках вида «Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)» никаких затыков нет.

    В итоге, для программиста, в тех случаях, когда он собирается обходить кодом полученное быстро ДЗ (и, к примеру, не выводить её на форму) вполне можно использовать и Выборку, ибо обход и ДЗ и Выборки будет одинаково утомителен :).

    Reply
  42. Ish_2

    (41)Можно ,конечно, провести еще опыты ,

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

    Т.е. одно и тоже дерево получено

    1. Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

    2. Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) ;

    или Пока Выборка.Следующий() Цикл

    … или рекурсивная процедура с получением «Дерево».

    Так вот п.1 работает быстрее.

    В частности это обсуждается

    здесь http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=571765

    Reply
  43. Ish_2

    (38) Что скажешь на (41),(42) ? Ты что-то подобное тестировал ?

    Для меня , честно говоря, это было настолько очевидно ,

    что я даже не сравнивал по быстродействию.

    Reply
  44. alexk-is

    Для двухуровнего дерева у меня есть вот такие данные. Запрос с итогами выгружается через РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)

    Заполнение запросом с итогами…

    Время выполнения запроса : 0,266 сек.

    Время выгрузки из результата запроса : 0,187 сек.

    Общее время выполнения : 0,453 сек.

    Заполнение СКД…

    Время подготовки СКД : 0,016 сек.

    Время выгрузки из СКД : 0,781 сек.

    Общее время выполнения : 0,797 сек.

    Reply
  45. Ish_2

    (44) Ты чего -то не о том . Вернее о чем-то своём.

    Вопрос -то был о сравнении двух способов получения дерева (без СКД) :

    — при помощи «кодинга» и выборки

    — без кодинга выгрузить сразу в дерево.

    Reply

Leave a Comment

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