Занимательные запросы




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

48 Comments

  1. Арчибальд

    Вот что, мнительный ты наш (это на коммент в другой ветке).

    Будет новая беда — прямиком спеши сюда © Л.Филатов. В смысле, обращайся. 😎

    Ты уже чуть штрихкоды не сгноил в безвестности. 😮

    Reply
  2. ghostishe

    Я ожидал в конце все-таки иной развязки, и надеялся, что будет «правильный запрос» оптимизированный… =) Но хэппи энда не было. Горькая правда. За правду плюс.

    Reply
  3. Tatitutu
    Однако сомнения остались. Не превратится ли Инфостарт в мусорку для специалистов? Ведь и эта публикация и моя довольно очевидны…

    из твоего поста

    Специалисты по мусоркам не шастуют, это пререгатива гиен

    Развей сомнения, небоись быть услышанным и тебя услышат, только когда объясняешь , объясняй так чтобы понял не только он , но и его бабушка…

    Не стестняйся простых и достуных слов.

    Вся твоя статья (хорошая статья и мне понятная) ,

    но ты этой статьей ХОТЕЛ —НЕ ПОЛЬЗОВАТЕЛЮ (посетителю нашего портала ЧТО-ТО новое донести,сдесь собираются СПЕЦИАЛИСТЫ разного уровня, кто пришел научить , а кто поучится) а ПОКАЗАТЬ что на такие «сопли» у настоящего СПЕЦИАЛИСТА нету времени и все это давно знают.

    Но это твое мнение и я его уважаю.

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

    (2)

    Но хэппи энда не было. Горькая правда.

    + душ Шарко 😉

    Reply
  5. Трактор

    (3)

    Специалисты по мусоркам не шастуют, это пререгатива гиен

    Вот именно! Среди элементарщины трудно бывает найти что-то интересное. Ну да ладно! Твоё http://infostart.ru/public/61933 народ хвалит, надеюсь и эта статья кому-нибудь пригодится.

    Reply
  6. Tatitutu

    (5) И эта статья ОБЯЗАТЕЛЬНО кому-нибудь пригодится.

    Ты передал частичку СВОИХ знаний…ты стал на дорогу УЧИТЕЛЯ.

    И еще тебе совет — можно досканально знать предмет, правильно и научно описывать методы, но САМОЕ важное НАЙТИ аудиторию и СПРОС на эти ЗНАНИЯ — в ИТОГЕ — ГЛАВНОЕ чтобы тебя не только УСЛЫШАЛИ , но и ПОНЯЛИ (заинтересовались) (а в этих понятиях колоссальная разница)

    Reply
  7. Noy

    Кстати занятная информация.

    Не хватает только выводов.

    Например: для увеличения производительности системы стоит показывать пользователю уже типизированные значения (Строка, Число, Дата), а ссылки делать не видимыми.

    Правда я не уверен, что 1С (даже если скрыть в ТЗ колонку с ссылкой) не будет напрягать базу…

    ЗЫ с 8-кой не работаю, мог написать глупость…

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

    (7) Какую там глупость… Поле непаханное, истины в последней инстанции не найдешь… 😀

    Reply
  9. larisab

    Это интересно, очень даже, но для «для простых 1Сников» это все назывется одним понятием — разименование полей и, не поверишь, но им достаточно. А что уж там в сикулах происходит, проверить им не удастся, серверов на всех не хватит. Большинство работают в файловой режиме, а с SQL запросами так и вообще единицы. Зато ексель — это второй инструмент для пользователей, которые являются заказчиками и что характерно (фуу, как прозаично) кормильцами этих самых «простых 1Сников». Этим и объясняется интерес и плюсики (в ветке про ексель), которыми так любят померяться джедаи Инфостарта.

    А вот твоя фраза «Причём весьма неочевидным для простых 1Сников способом» любви и плюсов тебе от них не добавит. ИМХО.

    Со всем уважением к твоим знаниям.

    p.s. ну и плюс, конечно 🙂

    Reply
  10. Трактор

    (9) У каждого свой опыт. Мне с запросами приходится чаще работать чем с табличным редактором. Пользователи в нашей конторе тоже с Опен офисом редко работают. А Эксель стоит только у троих.

    >> твоя фраза «Причём весьма неочевидным для простых 1Сников способом» любви и плюсов тебе от них не добавит

    Фразу поправил. Никого не хотел обидеть. Я сам простой 1Сник. В темы SQL только начал вникать. Это отдельная область знаний, поэтому врядли сильно углублюсь в неё.

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

    (9) Вот так, все по полочкам 🙂

    У меня начинает складываться впечатление, что 1С8+SQL=засада. В отличие от трехсемерочного 1С7.7+SQL7, который Нуралиев с Гейтсом устаканивали…

    Reply
  12. Трактор

    12 появилось оттого что хотел поправить 10, а в это время Арчибальд добавил своё 11. Раньше выдавалась ошибка, а теперь добавляется новая запись.

    (7) >> не уверен, что 1С (даже если скрыть в ТЗ колонку с ссылкой) не будет напрягать базу

    Не проверял, но думаю что не будет. А рекомендации, да, такие как ты озвучил.

    Reply
  13. larisab

    (12) Это я уже заметила, но если бы ты не успел отредактировать 12 коммент, было бы их три тогда?!

    Так, что лучше не править все таки 😉

    Reply
  14. Трактор

    (13)

    Так, что лучше не править все таки

    Если можно, то хочется 🙂 Вот на Кубани, помнится было нельзя. Приходилось аккуратнее выражаться.

    (2) ghostishe, хотел тебя разочаровать и оптимизировать до одного запроса. Не вышло. Дописал статью на этот счёт.

    Reply
  15. larisab

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

    Reply
  16. Трактор

    (1)

    Будет новая беда — прямиком спеши сюда © Л.Филатов. В смысле, обращайся.

    Вот, нашёл ещё одну вещь. Обращаюсь 🙂 http://infostart.ru/public/62041/

    правда глючит на 25-ом релизе 7.7

    Reply
  17. artbear

    (0), (7)

    Эта инфа давно известна, еще со времен 77.

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

    Reply
  18. Трактор

    (17) Конечно известно, но всегда хочется надеяться на лучшее.

    Однако сдвиги к лучшему есть. Если таблица связана с данными, то запрос выбирает по 20 строк в толстом клиенте и по 23-42 в тонком клиенте. Всё меньше запросов.

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

    Reply
  19. DimaP

    Офигеть!

    Получается, что с sql скорость работы с БД не увеличивается ?

    мдя…файловый вариант 1с тоже нормальное работает и без сбоев.

    Reply
  20. Трактор

    (19) >> Получается, что с sql скорость работы с БД не увеличивается ?

    Во-первых да, не увеличивается. Во-вторых никто и не обещал увеличения скорости. О скорости я в этой статье не говорил вообще.

    Опять-таки со времён 7.7 известно правило «Жигули быстро ездят, КамАЗ много везёт». То есть если пользователей мало, то файловая база ничуть не хуже клиент-серверной. А вот если пользователей много, то файловая может просто не сдвинуться с места. Жигули 10 тонн увезти не смогут. И хамер не сможет. А вот КамАЗ увезёт.

    Но это всё лирика. Статья не о том. Статья о том что неплохо бы себе представлять во что превращаются запросы внутри 1С. И сколько этих запросов на самом деле идёт в базу. Это позволит избежать ошибок при проектировании алгоритма.

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

    Reply
  21. Трактор

    20+ А вот запрос, какой идёт к серверу из клиента при открытии группы в форме списка справочника:



    SELECT

    T1._Code,

    T1._Description,

    T1._Fld101RRef,

    T1._Marked,

    T1._IsMetadata,

    CASE WHEN (T1._Folder = FALSE) THEN TRUE ELSE FALSE END,

    T1._IDRRef,

    T1._ParentIDRRef,

    (T1._Folder)

    FROM _Reference8 T1

    WHERE (T1._ParentIDRRef = ‘\000\000\000\000\000\000\000\000\000\000\000\00­0\000\000\000\000′::bytea)

    ORDER BY ((T1._Folder)), (T1._Description), (T1._IDRRef) LIMIT 42


    Видно что 1С берёт первые 42 записи. Если не хватит, то будет второй запрос. Таким образом от элементов диалога, связанных с данными запросов генерится на порядок меньше чем от таблиц значений, куда помещены ссылки на объекты.

    Reply
  22. tango

    (20) «в файловой базе запросы, скорей всего, преобразуются точно также как и в клиент-серверной»

    Архисомнительное предположение.

    Reply
  23. Трактор

    (22) Проверить трудно. Однако ещё труднее предположить что 1С будет изобретать ещё один стандарт обращения к базе и транслировать запрос в один вид для файловой базы и в другой вид для клиент-серверной.

    Reply
  24. artbear

    (22) ИМХО ты не прав, более прав 23.

    Reply
  25. idef

    (24) А вспомните как в клюшках различались результаты запросов в СКЛ и ДБФ версиях особенно на ранних релизах и тогда станет понятно, что движек используется разный. И в восьмерке тоже.

    (23) Привильно 1С не будет изобретать новый стандарт обращения к базе — возьмет чей-то готовый 😀

    Reply
  26. tango

    1ску на с++ слабали?

    Тогда и обращение к табличкам, получившимся после парсинга 1Cv8.1CD, не есть обращение к базе, а стандартная для с++ работа с массивами:

    http://valera.asf.ru/cpp/book/c02.shtml

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

    для работы с собственными, не всунутыми в мс-скл, табличками не достаточно сказать, ЧТО надо, но и программировать процесс получения, КАК получить… собственно, это отличие скульных диалектов от «взрослых» языков «программирования»

    т.е. внутри 1сины должны быть парсинг скриптовых запросов и на этой основе — 1. формирование запросов к мс-скл, 2.- сишная работа с массивами. 1 -для клиент-сервера, 2 — для файловой версии

    Reply
  27. WKBAPKA

    2(18): насколько я понял из описаний и рекомендаций, когда ты наряду со ссылкой выбираешь представление то если ты начинаешь работать с объектом, например, выводишь в отчет как ссылку, то происходит неявное преобразование ссылки в представление, что естественно влияет на скорость, а когда предсталение получаешь в запросе, тогда неявного преобразования не происходит, имхо, по данным от 1С

    Reply
  28. tango

    +(26) на то, что такая «параллельность» имеет место быть, косвенно указывает «параллельность» NULL ( и присутствие NULL в скриптовом языке) и Неопределено

    Reply
  29. Gilev.Vyacheslav

    Рекомендую не тратить время на статью, т.е. «-«, она практической пользы не несет. Кому надо, до этого и так доковыряются. А постгре вообще зло для любителей халявы.

    Reply
  30. idef

    (29) Хмм, не могу согласится. Польза от статьи конечно сомнительная, но вот насчет постгри все-таки не зря 1эсники реализовали его поддержку

    Reply
  31. Ish_2

    А всё-таки чем хорош постгре ? Рискну задать вопрос автору.

    Не в первый раз встречаю усмешку по поводу использования постгре или короткое «Да ну ..». Как бы предполагается , что спросивший спорол откровенную чушь.

    Reply
  32. Gilev.Vyacheslav

    >не зря 1эсники реализовали его поддержку

    это называется маркетинг,

    на что только не пойдут, чтобы серверный ключ продать 😎

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

    Подскажите, никто не встречался с подобной ошибкой при создании базы:

    Ошибка СУБД:

    ERROR: operator 16946 is not a member of optfamily 17076

    CentOS, PosgreSQL 8.3.3-2.1C, 1Cv8.1.15

    В версии 8.1.15 включили поддержку PosgreSQL 8.3.8 и 8.4.1, да так включили, что с 8.3.3 перестала 1с-ка работать!

    У вас два выхода:

    1. Понижать 1с до 8.1.14.

    2. Ставить PosgreSQL 8.3.8-2.1C.

    Мы поставили 8.3.8 и всё заработало!



    задолбало отслеживать стабильные сочетания релизов

    DB2 тоже иногда завязывается на особенности очередной версии платформы, но такого бардака в IBM не позволяют себе

    Reply
  33. acsent

    >>Поставщик мог ссылаться не только на один справочник, а на несколько, то таких соединений было бы несколько

    начал про одно, потом резко перескочил на другое

    Reply
  34. Трактор

    (29)

    Рекомендую не тратить время на статью, т.е. «-«, она практической пользы не несет.

    Будешь смеяться, но в этом я с тобой согласен. Однако народ считает иначе и меня почти переубедили. На написание этой статьи меня толкнула другая статья где я высказал мнение сходное с твоим. http://infostart.ru/public/61933/#comm комментарий 42.

    А постгре вообще зло для любителей халявы.

    А тут не соглашусь. Уже год работаю с базой на Постгре и горя не знаю. Этот вопрос мы с тобой уже обсуждали, правда не прилюдно. Админ у нас хороший.

    (32)

    на что только не пойдут, чтобы серверный ключ продать

    Для продажи ключей достаточно было бы поддержки DB2. Тут, ИМХО, другое.

    В версии 8.1.15 включили поддержку PosgreSQL 8.3.8 и 8.4.1, да так включили, что с 8.3.3 перестала 1с-ка работать!

    ХЗ какие у них трудности. Я в этом не копенгаген. Наверное труднопреодолимые. Да и не так трудно провести одновременное обновление и 1С и Postgre. Просто об этом надо знать.

    Мы, например, обновляться будем сразу на 8.2.

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

    (33) Перескочил поскольку комментарии к запросу излишни. Там всё ясно. Хотелось ещё сказать что в MSSQL из-за этих соединений можно наткнуться на ограничение в 256 таблиц в запросе. Вообще статья сумбурная, но может кто-то что-то из неё и вынесет. Может прояснится понимание кишок 1С. Мне самуму что-то стало понятнее пока писал.

    Reply
  35. Tatitutu

    (34)

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

    имей своЁ мненение и не будь, чем щи хлебают…прочитай ешё раз пост (3) медленно и не спеша.

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

    заинтересуй,заинтересовал — поддержи интерес

    Reply
  36. Трактор

    (35) Tatitutu, не злись, не стоит. Много написал, потом удалил. «Давайте жить дружно» (с)

    Reply
  37. WKBAPKA

    зря спорите, для таких статей support предусмотрел блог, а статья полезная… даже спорить не интересно

    Reply
  38. Gilev.Vyacheslav

    (34)

    А тут не соглашусь. Уже год работаю с базой на Постгре и горя не знаю. Этот вопрос мы с тобой уже обсуждали, правда не прилюдно. Админ у нас хороший.

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

    учиться не хотят

    сам по себе постгре вещь мощная, но только в умелых руках

    по поводу 1С, у меня нет возмущений

    на партнерском форуме это инструмент «управления», как еще их направлять на потребности

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

    применительно связки 1С + постгре — иллюзия «на халяву» не настраивает на серьезный лад, это «ловушка» для новичков

    Reply
  39. I_G_O_R

    (29)

    А постгре вообще зло для любителей халявы.

    а ваш колега Ляшко Юрий, похоже так не считает 😉

    Reply
  40. Трактор

    (37) >> для таких статей support предусмотрел блог,

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

    (38)

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

    gilv, из твоих высказываний можно понять что ты плохо относищься к постгресу. Халявщикам ничего не поможет. Помнишь как мы с тобой ходили к клиенту, который требовал производительности на сервере с 4 Гигами памяти и базой в 160 Гиг? Им не помог МС SQL потому что жмотились на железе.

    Прошу тебя точнее указывать адресатов своего раздражения. Не слоны, а жмоты и лентяи. Причём жмоты не только на ПО, но и на железо и на обучение. PosgreSQL тут не виноват.

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

    (39) Халявщикам зло всё. Жадины считают что весь мир против них и весь мир им должен.

    Reply
  41. Gilev.Vyacheslav

    (40) признаю, постгре меня разочаровал, но раздражают имено любители халявы

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

    Reply
  42. GROOVY

    Интересно, а автор статьи давно пишет запросы в 1С? Читал ли он рекомендации по оптимизации производительности запросов опубликованных на ИТС? Знает ли автор о функции Представление() для ссылочных полей в запросах?

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

    Reply
  43. Трактор

    (42) Читал ли ты что я написал? Я говорю не о функции, а о виртуальном поле! Нафига оно надо?

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

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

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

    Reply
  44. GROOVY

    (43) Поле «Представление» это виртуальное поле. Формируемое уже на сервере приложения ПОСЛЕ того как скуль вернет запрос. По этому и обращения к скулю идут, и по этому же сортировать по нему нельзя. Упорядочивание просто не происходит, а не «происходит упорядочивание по внутренним идентификаторам».

    Reply
  45. Трактор

    (44) GROOVY, обрати внимание на вот эти два запроса, приведённые в статье.

    ВЫБРАТЬ
    Товары.Представление,
    Товары.Поставщик.Наименование
    ИЗ
    Справочник.Товары КАК Товары
    Упорядочить по
    Товары.Представление
    

    При этом в Postgre отправится такой запрос

    SELECT
    T1._IDRRef,
    T1._Description,
    T2._Description
    FROM _Reference7 T1
    LEFT OUTER JOIN _Reference8 T2
    ON T1._Fld109RRef = T2._IDRRef
    ORDER BY (T1._IDRRef), (T1._Description)

    Показать

    Из 1С в СУБД пошёл запрос с требованием упорядочить по внутреннему идентификатору. Я не знаю внутренностей сервера приложений 1С, может он их как-то ещё сортирует. Однако я так не думаю.

    GROOVY, виртуальное поле Представление возвращается строкой. В зависимости от настроек на закладке Данные в конфигураторе оно будет содержать или код или наименование, а для документов и бизнес процессов собираться из вид+номер+дата.

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

    Reply
  46. GROOVY

    (45)

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

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

    Reply
  47. Трактор

    (46) Однако вернёмся к нашим баранам. То есть к статье. Я всё пытался получить и ссылку и представление таким образом чтобы табличное поле в консоли запросов не посылало кучу запросов на получение представления ссылки. Возможно ли это? У меня вот не получилось.

    Поправлено. Раньше вместо «консоли запросов» было «консоли отчётов»

    Reply
  48. bazilisa

    не знал, не знал

    Reply

Leave a Comment

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