СКД против "ручного" кодинга




Принцип обмена данными из 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. fishca

    (0)

    СКД это всего лишь «оформительский бантик» к запросу

    А разве это не так? Чем можете обосновать? Этот отчет только это утверждение и подтвердил.

    Reply
  2. Ish_2

    (1) Конечно, не так.

    Отчет «Обороты счета» является примером сложной перекрестной таблицы.

    Реализовать такую построителем невозможно. Остается ручной кодинг.

    Сила СКД — в составлении перекрестных таблиц

    В теме предлагается читателю сравнить представленный отчет и типовой в БП 1.6 по быстродействию и самостоятельно сделать вывод : что быстрее ?

    Reply
  3. Арчибальд

    Автору респект. Самостоятельно я, будучи семерочником, ни в жисть бы не догадался, что обороты счета в восьмерке являются сложными и перекрестными. 🙁

    Reply
  4. gavril

    Ну вот и все.

    Ты теперь сам подвязался формировать «Обороты счета», потому как научить настраивать этот отчет пользователя намного сложней, чем писать ручной код как в отчете 1.6

    🙂

    Reply
  5. anig99

    быстродействие СКД зависит в большей степени в автоматически налагаемых параметрах на виртуальные таблицы и отбрасыванию ненужных связей и полей… Так что грамотно составленный запрос не будет медленнее СКД.

    Reply
  6. Ish_2

    (4) Нет, неверно. Демонстрационный отчет — не для бухгалтера.

    Отчет для ветеранов , которые настаивают , что СКД -«бантик».

    В теме я почтительно пытался их переубедить .

    Убежден , что после такого примера они «дружною толпою» перебегут на сторону энтузиастов СКД.

    Reply
  7. Ish_2

    (5) Неверно.

    Перекрестную таблицу ты «грамотно» составленным запросом в 1с не создашь.

    Тебе придется «вручную» обрабатывать выборки запроса и в цикле выводить области табличного документа. Посмотри код типового отчета «Обороты Счета» в БП 1.6 или УПП .

    Проблема перекрестных таблиц ( то бишь таблиц с динамическими колонками) в СУБД обсуждалась где-то в середине 90-х годов. Разные Субд по-разному решили эту проблему.

    Reply
  8. СергейКа

    СКД конечно рулит — не но панацея.

    Недавно у меня не получилось выделить (цветом, шрифтом, не важно) итоги по группировкам (строки/колонки — только итоги) в сложной перекрестной таблице. Потратил несколько часов, но так и не допер 🙁

    Reply
  9. Ish_2

    (3) Как прожженный «семерочник» оцени код типового отчета в 77.

    Поделись впечатлениями .

    Reply
  10. anig99

    А проверял на SQL или файловом варианте?

    Reply
  11. Ish_2

    (8) В конфигураторе — СКД — закладка «Макеты» — Добавить Макет ресурсов.

    В появившемся окне

    Группировка1 это строки

    Группировка2 это колонки.

    В перекрестии этих строк и колонок можно создать область макета для форматирования соответствующих ресурсов.

    Например , чтобы как- то выделить последнюю итоговую строку отчета — нужно

    в группировке 1(строки) поставить «Заголовок» — в Группировке 2(Колонки) поставить «Общий итог подвал». Могу соврать , но примерно так.

    Reply
  12. Ish_2

    (10) Конечно. И на файловом и SQL-вариантах представленный отчет выиграл у типового от 2 до 4 раз. Только нужно не забыть в настройках отчета снять (в теме выделено красным) галочки (группировки по корр.субконто).

    Reply
  13. alexk-is

    (0) Круть, а что с чем сравнивать?

    Я понимаю, что наверное туплю, но всё же — какие обработки скачать? Что сравнить?

    Может я просто запутался в этих трех ссылках?

    Reply
  14. СергейКа

    (11) Эх, если бы было так легко…

    Итоговые группировки строк — так получилось без проблем. А вот группировки строк и группировки колонок вместе (пересечение) — нет.

    И строки и колонки строятся иерархически.

    Reply
  15. Ish_2

    (13)

    1. Запусти типовую БП 1.6.

    2. Запусти типовой отчет для 62 счета , который называется «Обороты Счета».

    Засеки время.

    3. Запусти текущий отчет (ОборотыСчетаБП1_6.erf).

    4. Убери галочки в настройках как показано на третьем сверху рисунке темы.

    5. Установи 62 счет за тот же период.

    6. Кнопка Сформировать

    Засеки время и сравни с п.2

    Reply
  16. Alraune

    (15)

    2. 8 с.

    6. 4 с.

    Reply
  17. Bux2

    БП 1.6.25.5 файловый, настройки как в публикации.

    За квартал:

    -типовой 43

    -авторский 8, быстрее в 5,4 раза.

    За полугодие:

    -типовой 151

    -авторский 20, быстрее в 7,6 раза.

    Супер.

    Reply
  18. Bux2

    Автор, надо в Управленческой ведомости http://infostart.ru/public/18838/ заменить Обороты счета на новый вариант. Обязательно.

    Reply
  19. Ish_2

    (18) Та тема закрыта. Бессмысленно сейчас что — то всерьез делать для БП 1.6.

    Reply
  20. Bux2

    Значит надо менять Управленческую ведомость — для БП 2 🙂

    Reply
  21. Ish_2

    (20) Э..ээ.. эх.

    Reply
  22. L_B

    Круто. КрАсава. Плюс и в мемориз 🙂

    Reply
  23. Abadonna

    (19)

    Та тема закрыта. Бессмысленно сейчас что — то всерьез делать для БП 1.6.

    Да и на 2.0 под 8.1 — тоже бессмысленно 😉

    8.2 давно уж на дворе

    Reply
  24. Ish_2

    (23) Пожалуй.

    Reply
  25. fishca

    (24) вот если бы мы увидели анализ, за счет чего типовой отчет 1.6 проигрывает СКД из 2.0 статья была бы куда полезней, а так похоже на пустую декларацию не очень оптимального кода в 1.6

    Ну быстрее отчет работает написанный на СКД и что из этого следует?

    Reply
  26. Ish_2

    (25) Постараюсь.

    Итак , у вас есть регистр

    Измерение1,Измерение2, Ресурс.

    Вам нужно получить отчет «Перекрестная таблица» :

    В строках Измерение1 ,В столбцах Измерение2 , в «перекрестье» Ресурс.

    Если Измерение1 — Номенклатура , Измерение2 — Склады , Ресурс — Остаток.

    То получить нужно :

    ———- Склад1 — Склад2 —-Склад 3

    Стол

    Стул

    Шкаф

    ИТОГО

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

    Как вы это будете делать в 8-ке ? Без построителя , и без СКД ?

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

    И выкручивался как мог — «вручную» . Выкрутились и разработчики «типовой» БП .

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

    (что , конечно, значительно эффективнее).

    Первой попыткой в 8.0 было создание ПостроителяОтчетов. Но он позволял строить лишь простые перекрестные таблицы (Обороты счета на нём не построишь) .

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

    Правда другие СУбд , решили эту задачу на уровне платформы значительно раньше.

    Reply
  27. alexk-is

    (15) Я не вредный, просто любопытный. Посмотрел в отчете из 6 не работают расшифровки. Вырезал расшифровки из 2. Результат:

    2. 12,249 сек

    6. 10,42 сек

    Не такая уж большая разница получилась 🙂

    Reply
  28. Ish_2

    (27) Всегда считал , что верна только первая часть пословицы «любопытство не порок..».

    1. Ты посчитал что расшифровки можно выбросить из п .2. ?

    Мы ими можем пренебречь , они не нужны в отчете ?

    2. Возьми больший период (чтобы в типовом он выпонялся 2-3 мин.) .

    Тогда какое соотношение ?

    Reply
  29. hogik

    (15)

    Игорь.

    В сообщении (15), думаю, имеет смысл добавить между пунктами #2 и #3 еще один пункт — «перезагрузить систему». Или я ошибаюсь?

    Reply
  30. detec

    Спасибо за пример хорошо сделанного отчёта! Ещё можно ускорить его вынесением выполнения кода на сервер 1С:Предприятие — http://infostart.ru/public/75926/

    Reply
  31. awa

    (0) Режет слух в статье использование термина «раскручивать» вместо «разворачивать». Или это я неправильный?

    (26) Не понял, в чем сложность построения такого отчета без СКД и Построителя?

    Reply
  32. Ish_2

    (29) Нет , ненужно. Перезагрузка системы , конечно, ничего не даст.

    (30) Конечно. Но отчет демонстрационный, код в нём минимален, директивы для компилятора убраны.

    (27) Алексей . отправь мне «гостинец» — оформленный как внешний отчет «обороты счета» из типовой. С твоими исправлениями.

    Ты не подумай — я тебе верю. Просто проверю.

    Reply
  33. Ish_2

    (31) 1. Согласен. Режет.

    2. Простой пример перекрестной таблицы реализовать несложно. Да и в (26) речь не о сложности . А о том, что задачу построения перекрестной таблицы лучше эффективнее решать на уровне платформы. То есть при помощи СКД.

    Reply
  34. awa

    (33) Т.е. все-таки речь идет не о сложности (трудоемкости) создания отчета типа «перекрестная таблица» разными способами, а именно об эффективности (времени) выполнения отчета? Тогда вопрос из (25), как мне кажется, остался без ответа. За счет чего отчет на СКД более эффективный? Из-за того, что отчет, созданный «ручным кодингом» недооптимизирован? Или СКД действительно более эффективна в своей внутренней реализации? Мне это действительно интересно!

    Reply
  35. hogik

    (32) по ответу на (29).

    Даст объективную оценку быстродействия сравниваемых алгоритмов, а не оценку эффективности кэширования системы.

    Reply
  36. alexk-is

    (32) Сделал замер за 4 года. Результаты:

    2. 45,173 сек

    6. 39,845 сек

    Над оптимизацией вывода результатов можно еще поработать. Сбить 2-3 секунды реально. Т.к. ~70% времени выполняются запросы, можно покопать ещё там.

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

    Хотя я надеялся, что расшифровки появятся в варианте отчета с СКД.

    Reply
  37. Ish_2

    (35) Подробнее.

    При старте 1с Предприятие 8.1 метаданные не грузятся.

    Подгрузка необходимых метаданных( а не данных !) происходит по мере обращения к ним.

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

    Теперь вопрос : а третий запуск отчета будет быстрее чем второй ? Другими словами ,

    используются при третьем запуске данные( а не метаданные!) кэша 1сПредприятия, которые остались в нем после второго запуска ?

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

    2. Если в отчете используется объектная техника доступа к данным ( Получаем объект и обращаемся к его реквизитам через точку) — то всё может быть. Не пробовал.

    Правда , такое обращение к к данным в отчете — экзотика.

    Reply
  38. Ish_2

    (34)

    За счет чего отчет на СКД более эффективный?

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

    Берем Регистр со структурой в (26) и большим объемом данных. «Ручным» способом (Без построителя и СКД) рисуем отчет из (26) . Затем то же рисуем в СКД и в Построителе.

    Сравниваем.

    Затем то же проделываем с отчетом «Обороты счета». Сравниваем.

    Мой прогноз : СКД победит и в первом и во втором случае.

    Предполагаю , что :

    СКД действительно более эффективна в своей внутренней реализации
    Reply
  39. Ish_2

    (36) Ок. Посмотрю.

    Reply
  40. Шёпот теней

    … хотелось бы ещЁ подсчитать стоимость …

    штатный отчЁт — уже ничего не стоит …

    просто отчЁт — сделает кто как сможе и будет работать на … 0…20 % медленне … и то не факт … вопрос а судьи кто ? и кто ЧТО знает КАК реализовать …

    отчЁт на СКД — ??? … крАсивая фишка … не вижу никакго эффекта ни от её изучения … ни от её использования … опытным — это мало помогает … а для новых — забивает голову «иными» костылями …

    … вотЕСТЬмнение …

    п.с. постоянная потребность в «новых» отчётах — говорит об неУстоявшейся системе и правил Учёта и Управления … так что … ? … вот …

    п.с.2. ВСЁ что меньше 12% — это проценты туда-суда-Нефакт … увеличение на 50 % — есть вопрос задуматься … вот если производительность вырастае в разы !!! — тогда есть смысл «смотреть» и изучать … а так … вроде все заняты делом а КПД — смешное … зато пантов-то … пантов-то … вотТАКОЕоскорбительноеМнение …


    Reply
  41. afanasko

    (40).

    п.с. постоянная потребность в «новых» отчётах — говорит об неУстоявшейся системе и правил Учёта и Управления … так что … ? … вот …

    Я считаю, что ты неправ, Шёпот. Требования «новых» отчетов — прямое следствие роста и развития бизнеса. Если в компании пользуются только отчетами, созданными три года назад — это свидетельствует о том, что с тех пор компания не далеко продвинулась. Это конечно относится не ко всем инструментам. Некоторые не устаревают очень долго, ими можно пользоваться десятилетиями :).

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

    Reply
  42. Ish_2

    (40)

    штатный отчЁт — уже ничего не стоит …

    просто отчЁт — сделает кто как сможе и будет работать на … 0…20 % медленне … и то не факт … вопрос а судьи кто ? и кто ЧТО знает КАК реализовать …

    отчЁт на СКД — ??? … крАсивая фишка … не вижу никакго эффекта ни от её изучения … ни от её использования … опытным — это мало помогает … а для новых — забивает голову «иными» костылями …

    Представленный отчет является демонстрационным. Как его использовать решает читатель.

    ВСЁ что меньше 12% — это проценты туда-суда-Нефакт … увеличение на 50 % — есть вопрос задуматься … вот если производительность вырастае в разы !!! — тогда есть смысл «смотреть»

    Так об этом и толкую.

    Выигрыш от использования СКД для больших, сложных перекрестных таблиц : В РАЗЫ .

    Ответ Alexk-Is готовится.

    Reply
  43. Шёпот теней

    (41) … что я не помню чтоБЫ в Бухгалтерии — менялись отчёты … ??? … в принципе СОгласен … НО!… отчЁт в месяц — возможно … ))) но ради 12 отчЁтов в год мудрить с СКД … ? … можете назвать свою цифру «новых отчЁтов» — динамических компаний … ? …

    (42) … в разы … хм … ещЁ один вопрос а зачем … ? важна не только «сама»производительность отчЁта но и количество его вызовов … например, проведение и перепроведение ВАЖНЕЕ чем раз в день вызвать несколько отчЁтов ( даже пусть в пиковые, отчётные периоды вызывается несколько раз … и что… ? … отчет готовится за минуту или за 20 сек — не отчёты ЕСТЬ лимитирующая стадия работы …)

    … хотя в целом производительность в разы — СОгласен … если Alexk-Is подтвердит …

    … однако, ! … хотя это будет важно в основном для крупных и очень крупных компаний … для рядовых — это мёртвому припарка … повторюсь — лимитирующая стадия работы это не получение отчётов … !!!

    … вот …

    п.с. ускорение отчётов — проще достигуть оптимизацией базы… нужными и точечными данными и их получением (а не тащить всЁ ради не понятной универсальности) …

    … вот …

    Reply
  44. Ish_2

    (36) Итак , сравнение быстродействия двух отчетов. Сравниваются :

    1. Отчет , прикрепленный к текущей теме (ОборотыСчетаБП1_6.erf)

    2. Типовой Отчет конфигурации БП , прикрепленный в (36) и исправленный Alexk-is. Расчет и запись параметров расшифровки удалены из типового отчета.

    1с Предприятие 8.1. SQL-вариант. БП 1.6

    Настройки для п.1. :См.Рисунок темы третий сверху. Дополнительно :

    Отметки у подчеркнутых красным группировок сняты.

    У группировок СчетКтКорр и СчетДтКорр установлен тип «Иерархия»

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

    выводим все субконто основного счета)

    Настройки для П.2:

    Установлены отметки «По субсчетам» и «По корр.субсчетам».

    Выводить будем все субконто основного счета.

    Для п.1. и п.2. устанавливается один и тот же счет (например счет -группа 62).

    и один и тот же период (например, квартал).

    По п1. и п.2. запуск осуществляется по 3 раза подряд в отдельных сеансах 1с Предприятия.

    Результаты тестирования :

    п.1 — 20 сек

    п.2. — 37 сек

    Проигрыш п.2. в 1.8 раза.

    Вопрос : откуда могло взяться соотношение (36) , приведенное Alexk-is :

    п.1 — 39 сек

    п.2 — 45 сек ?

    Предположительный ответ :

    Если в настройках п.2 убрать отметку «По субсчетам корр.счетов» ( уменьшаем как минимум в два раза количество колонок) , а настройки п.1 оставляем без изменений то получим :

    п.1 — 20 сек

    п.2 — 24 сек.

    Получается похожее соотношение , как Alexk-is

    Reply
  45. Шёпот теней

    (40) …(51) … )))

    http://infostart.ru/profile/user/15616/photo/album/user_15616/3213/ … идём сюда и смотрим рисунок … экономический расчёт … ))) … вот …

    Reply
  46. anig99

    (52) Шепот…прости, но расчет твой устарел… В 1с 8.2 в режиме управляемых форм все делается через СКД…

    Плюс не забывай о самообразовании

    Reply
  47. Шёпот теней

    (53) … дык не вопрос … вопрос «мы не рабы, рабы немы» …

    (54) … дык зачем учиться не тому … и за чей счёт … ??? … если предприятие «лох» … то это его проблемы … пусть вон «бумагу» и «катриджи» экономят …

    … вот …

    Reply
  48. Ish_2

    (55) Ты не увиливай. Не спихивай на дурное предприятие .

    Вопрос лично к тебе , как к специалисту : должен ты знать СКД или Нет ?

    Reply
  49. Шёпот теней

    (56) … я бы хотел, как Абадонна … овладеть прямыми запросами … а СКД, ваше буду знать только по-необходимости, для работы в 1С …

    … а ещЁ лучше вернуться в «семёрку» а эту «восьмёрку» послать … причём в очень НЕэтичное место и в очень НЕэстетичной манере …

    … ВОТ …

    … восЬмёрка своими «бантиками» …. уже достигла уровня своей НЕкомпетентности …

    Reply
  50. Ish_2

    (58) «Как Абадонна» — это хорошо.

    Только вот с «прямыми запросами» ты чего -то недопонял.

    Соединения ADO — к базе SQL в 8-ке для стандартных задач учета просто НЕНУЖНЫ.

    Ничего не дают и ничего не ускоряют.

    Reply
  51. Шёпот теней

    (59) … спорить не буду … тут мои знАния никакие … но думается мне, по просмотру исследований Трактора (вроде) преобразования запросов в 1С всЁ таки хромает … зато порог вхождения в «запросы» минимальный … вот …

    п.с. при этом мы же знаем что 8 — ка … это бантики … хоть и крАААсивые … однозначно … !

    Reply
  52. Ish_2

    (60) У Трактора идёт обсуждение нюансов преобразования строки запроса 1с в строку запроса SQL. Этот познавательный процесс никакого практического значения для стандартных учетных задач не имеет. Придется использовать стандартные запросы и СКД.

    Reply
  53. Шёпот теней

    (61) … что я могу тут сказать … ? … надо кого-то позвать … спросить … ! … вообщем кто знает … вот …

    Reply
  54. Ish_2

    (62) Верь мне Шепот. Никого не зови.

    Reply
  55. Шёпот теней

    (63) … верю … но если данные из трЁх разных источников совпадают — ВЕРЮ в тройне … ))) .. .вот …

    Reply
  56. Ish_2

    (64) Браво !

    Reply
  57. Арчибальд

    (63) Шепот, не верь ему. Он тебя запутает.

    Речь о чем идет (заметь, аватарка гласит «Мы пишем запросы»). О том, что восьмерочный механизм СКД настолько приличен, что восьмерочный же кодинг не оправдывает себя — при изрядных трудозатратах выигрыш весьма невелик. Сравнение с семеркой столь же неуместно, как сравнение Виндов с ДОСом — Ясно жде что в ДОСе тот же функционал на порядок быстрее и на два порядка менее требователен к памяти. Однако ж — прогрессьь…

    Reply
  58. alexk-is

    (47) Нет. Всё не так. Я всё сделал по инструкции.

    Переделал отчеты под УПП 1.2.

    Результаты:

    2. 23,172 сек

    6. 11,891 сек

    Разница более чем в 2 раза

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

    Reply
  59. hogik

    (37)

    Игорь.

    Метаданные в кэше это хорошо. Но если из-за этого «время исполнения отчета существенно меньше»(с), то это говорит об очень плохой реализации алгоритмов работы с метаданными. Сомневаюсь я в этом. Думаю, сильнее влияют на время повторного запуска, именно, сами данные. Про третий запуск можно не рассуждать. Но надо сказать — какой отчет запускается третьим. Т.е. если нет желания «перезагружать систему», то можно запустить несколько раз с чередованием два разных отчета. А по уму — надо запускать три раза каждый отчет с «перезагрузкой системы» перед каждой серией тестов. А потом внимательно (вдумчиво) смотреть на числа.

    P.S. Извините меня, что я донимаю Вас этой информацией (вопросами). Но сам провести тесты не могу, т.к. у меня нет компьютера. А было бы интересно посмотреть на результат замеров.

    Reply
  60. Ish_2

    (73) Что метаданные не грузятся при запуске Предприятия и подгружаются лишь по мере обращения к ним — это написано в документации. Думаю отыскать это можно.

    После первого запуска , второй и последующий запуски отчета одинаковы по времени выполнения — это факт ( и при файловом и SQl- варианте).

    Всё остальное — мои рассуждения. Не меньше , но и не больше.

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

    Reply
  61. Ish_2

    (72) Я так понимаю , что для УПП ты получил аналогичные результаты тестирования, что и я в (47) , а именно :

    Типовой отчет «Обороты счета», в котором для ускорения выключена расшифровка, работает примерно в 2 раза медленнее , чем представленный в текущей теме отчет , использующий СКД.

    Теперь о тестировании на БП.

    Почему получаем различные результаты ?

    Объяснение :

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

    — звучит для меня невероятно ( Для счетов в которых есть какие -то обороты ( 5-6 колонок счетов для дебета и кредита) — и строк в отчете не менее 80-100)

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

    Без третейского судьи тут никак.

    Reply
  62. hogik

    (74)

    Игорь.

    Опят о разном говорим. 🙁

    Подгружаются метаданные — естественно и логично.

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

    По сравнению с СУБД-шным+ОС-вым кэшированием.

    Завяжем и эту тему…

    Reply
  63. Ish_2

    (76) Да нет . Об одном и том же.

    В (75) лишь разделил свои размышления и факты.

    А перезапустить систему перед отчетом нетрудно. После презапуска системы показывает такое же время при первом запуске и при втором как и до перезапуска системы.

    Reply
  64. hogik

    (77)

    Ох. О разном… 🙁

    Вы писали в (37): «при втором запуске время исполнения отчета существенно меньше.». А в (77) — обратное. Завязываю тему. Не буду Вас отвлекать от дел…

    Reply
  65. Ish_2

    (78)

    В (37) речь шла об одном сеансе 1сПредприятия , в котором последовательно дважды запускался отчет.

    В (77) сраниваются по быстродействию :

    1. Первый запуск сеанса 1сПредприятия : дважды запускается отчет.

    — Выход из сеанса

    2. Второй запуск сеанса 1сПредприятия : дважды запускается отчет.

    И говорится о том , что в п.1 и в п.2 время исполнения отчетов одинаковое.

    Reply
  66. alexk-is

    (10) Да и да. Пропорции ~ сохраняются в обоих случаях

    Reply
  67. Ish_2

    (80) В скобочках замечу, что при модификации типового отчета «Обороты счета» ты не только в текстах модуля убирал расшифровки , но и оптимизировал типовой код вывода отчета методами описанными в «Заметочках по 8-ке».

    Но это даже хорошо ! Стало ясно еще более отчетливо :

    как угодно оптимизированный «ручной» кодинг проиграет по быстродействию СКД.

    Reply
  68. hogik

    (79)

    Игорь.

    Эти фразы не несут разного смысла:

    «последовательно дважды запускался отчет»

    «дважды запускается отчет»

    А другие фразы, думаю, несут разный смысл:

    «перезапустить систему»

    «перезагружать систему»

    «выход из сеанса»

    Reply
  69. Ish_2

    (86) Ок.

    Reply
  70. alexk-is

    (81) Тут такое дело. Есть подозрение, что СКД выигрывает при большом количестве пустых ячеек. В БП пустых и заполненных было ~ поровну, а в УПП пустых было в 2 раза больше.

    Насчет оптимизации. Да я отпимизировал существующий код. Но кто сказал, что методика используемая для построения типового отчета является наиболее эффективной? Может проблема здесь? Ведь в типовом отчете данные собираются двумя запросами, а в СКД одним. Уверен, что при достаточной проработке методики формирования отчета можно значительно повысить скорость вывода данных в отчет и без СКД. Например, можно попросить Душелова написать ВК 🙂

    Reply
  71. Ish_2

    (88) Уже что-то !

    Придётся проверять так : насоздавать «лишних» операций так , чтобы все колонки дебета и кредита были заполнены и тогда уже сравнить СКД и твой отчет с отключенными расшифровками.

    Правда , сразу нужно отметить :

    Расшифровки, замедляющие быстродействие типового отчета в 2раза (!), всё равно нужны и отключать их при сравнении некорректно . Ведь в СКД расшифровки -то используются и оптимальная работа с расшифровками — это одно из больших преимуществ СКД перед «ручным» кодингом.

    При корректном сравнении даже как угодное оптимальные расчет и запись расшифровок займут время и «кодинг» все равно проиграет в разы.

    Мой Прогноз : ВК не спасет , Душелов не спасет … и никто не спасет .

    Reply
  72. hogik
  73. Ish_2

    (90) Владимир, Вы зачем «смущаете своим разумением» неокрепшие умы 1с-ников ?

    Нехорошо это.

    Тут бы с MS SQL, Oracle, DB2 (реляционных по сути) разобраться хоть как нибудь ,

    а нам предлагается как спасение — «Постреляционная СУбд Cashe5» , требующая своего языка доступа к Базе данных (SQL- на свалку, все реляционно ориентированные приложения , стало быть тоже). Вот заживём !

    Чем черт не шутит , но что-то с 2003г (время написания статьи) я не слышал чтобы Cashe5 отгрызла хоть какой-то кусочек рынка (для бизнес -приложений) у тех же MS SQL, Oracle, DB2 .

    Может подождем пока Cashe5 сдохнет… или завоюет весь мир ?

    Тогда и обсудим чем она хороша (плоха) ?

    Reply
  74. hogik

    (91)

    Неокрепшие умы могут не окрепнуть, а задубеть.

    Вот это, действительно — «Нехорошо».

    Я уважаю Ваш «конкретный» (прагматичный) подход к нашим задачам.

    Но не видеть (или не знать), что «…использование реляционного подхода не столь эффективно в таких приложениях, как АСУП,…»(с) — это ОЧЕНЬ «Нехорошо».

    Разработчики 1С-ов — видят и знают. Но решают проблемы «реляционного подхода» за деньги пользователя (покупателя). А мы публикуем и долго обсуждаем статьи по алгоритмам из двух циклов. А это ОЧЕНЬ грустно…

    Reply
  75. Ish_2

    (92) Я тоже , кстати, обратил внимание на эту фразу :

    «…использование реляционного подхода не столь эффективно в таких приложениях, как АСУП,…»

    Сильно.

    Тот самый случай , когда невозможно определить :

    То ли очень глупо , то ли очень умно.

    А то , что мы обсуждаем алгоритмы из двух циклов… Это правда.

    Когда-то давно я взгрустнул познакомившись с бухгалтерскими задачами.

    Но потом как-то прошло…

    Reply
  76. hogik

    (93)

    Я не говорю про «бухгалтерские задачи» из двух циклов.

    Тема моих высказываний: «Проблема перекрестных таблиц ( то бишь таблиц с динамическими колонками) в СУБД обсуждалась где-то в середине 90-х годов»(с)(7).

    Т.е., опять, проводим «научные» исследования на пустом месте, когда «Мы пишем запросы!». Нет никакой проблемы с динамическим колонками — два простейших цикла…

    Reply
  77. Ish_2

    (94) Мы говорим о разном.

    Вы мне — алгоритм из двух циклов не стоит обсуждения.

    Я Вам про тему статьи : кодинг из двух циклов по быстодействию уступает встроенному средству платформы под названием СКД.

    Reply
  78. Арчибальд

    (95) Что настройка СКД, что результат ручного кодинга — и то и другое 1С преобразует в СУБД-шный запрос. Твое утверждение сводится к тому, что в случае СКД платформа действует оптимально, а ручные циклы обрабатывает коряво. Вполне возможно, что СКД-шный внутренний язык запросов является тем промежуточным состоянием, к которому приводятся «ручные» запросы — ясное дело, на промежуточные преобразования потребуются дополнительные ресурсы.

    То есть вопрос — в реализации платформы на практике. Или — насколько 1С-ные разработчики восприняли теорию, которая упомянута в (94).

    Reply
  79. Ish_2

    (96) Код типового отчета «Обороты счета» в БП 1.6 можно условно разделить на два этапа :

    — выполнение двух запросов, получение их результатов.

    — собственно «ручной» кодинг : цикл, в котором построчно выводятся результаты

    запроса в выходной табличный документ (по вашему «Таблица»).

    Аналог этого отчета на СКД содержит , грубо говоря, те же запросы, а вот обработку результатов запроса и рисование отчета производит внутренними механизмами СКД.

    Никакого выигрыша в скорости выполнения запросов («первый этап») при использовании СКД мы не имеем. Выигрыш имеем за счет реализации «второго этапа» : обработка результатов запроса и рисование отчета.

    Никакого своего , «внутреннего» языка запросов СКД не имеет.

    А в (94) Владимир говорит о чём -то своём … далёком и отвлечённом.

    P.S. Я изложил упрощенно-грубо , в первом приближении , необходимом для понимания.

    Reply
  80. Ish_2

    (88) Так и есть !

    При сравнении двух отчетов , отключено разворачивание по Кт. Включено только по Дебету. «Лишними» операциями добились заполнения всех колонок счетов дебета , Получили таблицу 2500 строк — 25 колонок ( из которых полностью заполнены 20 по счетам Дебета).

    Результаты :

    Твой отчет 12 сек

    Мой отчет 10 сек

    Вывод : в предельном случае (когда все колонки заполнены на 100% ) отчет с отключенными расшифровками проиграет те самые 20%. ЧТо подтверждает результат , который ты получил ранее.

    Reply
  81. hogik

    (97)

    «Владимир говорит о чём -то своём … далёком и отвлечённом»(с)

    Игорь.

    Я уже и не знаю о чем говорить. 😉

    Говорю о «теории» про два цикла — мимо.

    Предлагаю провести конкретные замеры — мимо.

    Предлагают разобраться в сути ускорения — мимо.

    И постоянно, с Вашей стороны, «крепкая конкретика», снабженная «качественными» оценками, типа:

    «… многократно проиграет в быстродействии.»(с)

    «… алгоритм , на мой взгляд, для больших таблиц выиграет у любого другого.»(с)

    «… размер таблиц … может быть как угодно большим .»(с)

    «… таблицы … могут быть очень большого размера.»(с)

    «… для как небольших, так и очень больших объемов данных (свыше 120-150 ГБ).»(с)

    На мой взгляд это гадание «на кофейной гущи». 🙁

    Я понимаю, что вы поставлены («домиком») в условия обязательного использования «1С 8.х» и «запросов». Типа, жизнь заставляет… Но, Вы, как мне показались, пытаетесь осмыслить внутреннее устройство системы, а не тупо жать на кнопки. И это вызывает уважение с моей стороны. И, извините, вызывает желание «подтолкнуть» Вас к более глубокому анализу — зачем, где, когда и почему «Мы пишем запросы!»(с). Я постараюсь больше этого не делать…

    Reply
  82. Ish_2

    (99) Прочитал цитаты и улыбнулся. Посреди Вашего поста (вежливо — расплывчато-уклончивого) смотрятся они особенно диковато.

    Мы расходимся с Вами в том , как вести дискуссию в теме.

    Я считаю , что автор темы должен играть первым номером. Что это значит ?

    Автор темы должен делать утверждения. Они могут быть и неверными. Но они должны быть. Далее автор должен представить конретную разработку , подтверждающую его правоту. Далее автор должен привести сравнительный анализ (с чем -либо), сделать выводы. Причем четкие , определенные — такие, которые можно было бы оспорить.

    Ясная, определенная позиция — это клад для оппонента , который хочет эту позицию опровергнуть.

    Действительно , возьмем фразу- утверждение (извиняюсь за самоцитирование) — «… многократно проиграет в быстродействии.»

    Для чего она ? — Она для оппонента, желающего её опровергнуть.

    Для этого есть все возможности — в теме-то указано что сравнивать и как сравнивать.

    Смотри (88).

    Именно этим автор выказывает уважение возможным оппонентам , т.е. честной игрой по правилам. А колкости можно пропукать мимо глаз …

    Я часто (бывает и не по делу) с удовольствием выступаю в темах Арчибальда. Почему ?

    Потому что он играет по тем же правилам.

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

    Делайте утверждения , Владимир !

    Reply
  83. hogik

    (100)

    «Когда … автор ,,, делится размышлизмами …»

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

    «Я считаю , что автор темы должен…»

    — Да. Я заметил, что Вы считаете, что все должны излагать свои мысли, так как это Вам хочется. Ваше право — считать. Право других людей — игнорировать Ваши «хотелки».

    «Мы расходимся с Вами в том , как вести дискуссию в теме.»

    — А мы с Вами и не ведем дискуссию. Её, просто, не существует. Пример. Два специалиста обсуждают принципы работы пульта ДУ для телевизора. Один говорит о функциональной нагрузке кнопок (включение, регулятор громкости, выбор каналов и т.д.), а другой о способе передачи информации от ДУ к приёмнику (протокол, физика, принципиальная схема устройства, элементная база и т.д.).

    «Делайте утверждения…»

    — Игорь. А мои фраза, типа: «Такой задачи (проблемы) не существует». Это, разве, не утверждение. Или надо действовать проще — поставить «минус». Или сказать, что «Автору нужно помочь с выражением того , что он хочет сказать.»(с).

    Игорь.

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

    P.S. Попробуйте эту «колкость пропустить мимо глаз». 😉

    Reply
  84. Ish_2

    (101) Слово за слово , глядишь , и перейдем к делу. Берем предложение :

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

    Утверждение , которое здесь приводится ни опровергнуть , ни подтвердить нельзя.

    О чем спорить -то ?

    Зубочистка или нет ? Весь мир или не весь мир ? Гигиенично это или нет ?

    Всё пустое, всё мимо …

    А Вы начните свою статью словами » Эх, вы одинесники… тёмные и дремучие »

    (.. это так — для затравки разговора , чтобы народ подтянулся).

    Затем приведите пример , который люди могут потрогать , пощупать , попробовать, сравнить.

    Сделайте выводы о гибельности 1с-овского курса, которые можно будет опровергнуть ( плохо -хорошо, быстро-медленно). И тогда мы поспорим .

    А сейчас что ? (101) — это мило , забавно… НО НЕ ЦЕПЛЯЕТ.

    Reply
  85. Ish_2

    (101) До завтра. Убегаю.

    Reply
  86. hogik

    (102)

    «Всё пустое, всё мимо …»

    — У Вас в глаз соринка попала в форме «восьмерки». Протрите глаза. Вы на мои «статейки» и «поделки» смотрели?

    «О чем спорить -то ?»

    — Именно — так. Спора не может быть. Опять повторю — мы говорим о разных вещах. Думаю, пред началом спора (обсуждения) имеет смысл договориться о предмете спора.

    «А Вы начните свою статью словами…»

    — Не понял! Я написал статью? Или Вы написали статью? Или Вы мне предлагаете написать статью? Лично я не вижу статьи в обозначенной Вами теме «Мы пишем запросы!». Предмета для статьи — НЕТ. Я не пишу запросы. И у меня не возникает никаких проблем (вопросов) для широкого обсуждения простейших алгоритмов реализации моих задач. А у Вас возникает. Почему?

    «Сделайте выводы о гибельности 1с-овского курса…»

    — Не могу. Т.к. этот курс будет жить долго и счастливо. Как и многие другие «курсы» для массового потребления, типа MS Windows, SQL серверов, алкоголя, наркотиков и т.д. 😉

    «НО НЕ ЦЕПЛЯЕТ»

    — Смените продавца «цеплялки». 😉

    Reply
  87. Арчибальд

    (97)

    Никакого выигрыша в скорости выполнения запросов («первый этап») при использовании СКД мы не имеем. Выигрыш имеем за счет реализации «второго этапа» : обработка результатов запроса и рисование отчета.

    Таки оформительский бантик?

    Reply
  88. Ish_2

    (115) в приведенной тобой цитате есть слова «обработка результата запроса» , т.е. внутренними механизмами платформы реализация п.1,2,3 из (111).

    Reply
  89. alexk-is

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

    Reply
  90. alexk-is

    (98) В СКД расшифровки есть, но какой в них прок, если в качестве расшифровки по сумме открываются элементы справочников контрагенты или договоры.

    Reply
  91. Ish_2

    (118) Я тоже думаю, почему в типовом отчете они сделали два отдельных запроса, а не один : левое соединение двух этих отдельных запросов ? Что-то их оттолкнуло от этого шага.

    Reply
  92. Ish_2

    (119) Это уже другой вопрос. к быстродействию выполнения отчета не имеет никакого отношения.

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

    Reply
  93. alexk-is

    (98) Возможно эти 20% из-за второго запроса в типовом отчете.

    +119 Расшифровки тоже можно формировать более эффективными методами. Почему это не сделано? Наверное всё дело в пользователях — они не жалуются. Есть варианты: не пользуются этим отчетом; пользуются этим отчетом крайне редко; пользуются другим отчетом, который шевелится побыстрее.

    Reply
  94. alexk-is

    (121) В СКД расшифровки аналогичной типовой ведь нет. Ну, нет её. Нет…

    Reply
  95. Ish_2

    (118) Хотя , понятно что левое соединение двух запросов будет выполняться гораздо медленнее , чем два запроса по отдельности. И выходная выборка в первом случае значительно превосходит по размеру сумму двух выборок во втором случае.

    Reply
  96. Ish_2

    (123) Не понял . Что значит «нет» ? В моём отчете ? или в типовом БП 2.0 ?

    В моём отчете и не планировалось его делать. Зачем ? Цель была другая. Но ничто не мешает сделать расшифровку в моем отчете , аналогичной в типовом отчете БП 1.6.

    Reply
  97. alexk-is

    (124) Самое простое, что приходит на ум, сделать второй запрос по результатам первого запроса, а не по первичным данным.

    Reply
  98. alexk-is

    (125) Слова, слова… Но за словами я так и не понял, что расшифровки так и не будет в СКД? Тогда можно померяться в быстродействии с расшифровками — тоже тема: Расшифровки СКД против расшифровок типовых отчетов.

    Reply
  99. Ish_2

    (127) Ну что ж. Поехали разбираться.

    Расшифровка в СКД в моём отчете уже ЕСТЬ !

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

    Зачем ? К быстродействию уже выведенного отчета это не имеет никакаго отношения.

    Замерить и узнать :

    Расшифровки СКД против расшифровок типовых отчетов.

    можно уже сейчас. Запусти мой отчет и типовой . Сравни результаты. Вот и всё.

    При использовании СКД после выполнения отчета каждой ячейке выходного табличного документа ставится в соответсвие «ЭлементРасшифровки». И когда пользователь выбирает ячейку (нажимает Enter или двойной клик) на ней — ему передается этот самый «элемент» как параметр. По этому элементу методами ПолучитьПоля или Получить Родителя можно определить либо все поля текущей группировки или элемент расшифровки верхнего уровня .

    Извиняюсь. Это я, на всякий случай, своими словами передал содержание документации.

    Reply

Leave a Comment

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