Заметки о модальности и асинхронности




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

87 Comments

  1. Yashazz

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

    Reply
  2. caponid

    Столкнулся с этим непосредственно.

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

    Reply
  3. vano-ekt

    диалог выбора файла кто чем заменяет сейчас? или самому предполагается написать?

    Reply
  4. AllexSoft

    Если честно пока тоже не осознал а зачем это все вообще нужно, этот отказ от модальности.. иногда мне специально нужно сделать оконо модельным чтобы пользователь не тыкал никуда более пока не закончит работу с этим окном.. пока что похоже на такси2…

    Reply
  5. Yashazz

    (4) Согласись, платформописатели могли бы озаботиться, чтобы модальное твоё окно отрабатывалось по той же технологии, что и не-модальное-но-блокирующее-всё-кругом. Хоть подменой на ими сгенерённое. Но, видимо, «не шмагла».

    Reply
  6. Infactum

    Справедливости ради отмечу, что однопоточность приложения никак не мешает исполнять код асинхронно. Стоит посмотреть хотя бы в сторону node.js. Очень хотелось бы надеяться, что в 8.4 наконец-то приблизятся к этой идеологии.

    Reply
  7. AlX0id

    (6)

    Спору нет — можно сделать одно и то же хорошо и плохо )

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

    Reply
  8. slazzy

    (3) vano-ekt, НачатьПомещениеФайла вам не нравится?

    Reply
  9. Yashazz

    (7) Воистину так.

    (8) Ещё раз: где там уход от модальности, если есть свойства поведения формы, позволяющие ей блокировать остальное? Это разве не лютая модальность? А если да, то почему ровно так же нельзя было сделать маленькое окошко, отрабатывающее функцию «вопрос»?

    Reply
  10. mrBart

    Заменил модальные вызовы на многоуровненые процедуры:

    Пример

    Процедура КакаяТО(Результат, ДополнительныйПараметр) экспорт
    
    Если ДополнительныйПараметр.кодДействия = 1 тогда
    
    ДополнительныйПараметр.КодДействия = 2;
    //ЗадатьВопрос
    
    КонецЕсли;
    
    Если ДополнительныйПараметр.кодДействия = 2 тогда
    
    ДополнительныйПараметр.КодДействия = 3;
    //Предупредить
    
    КонецЕсли;
    
    Если ДополнительныйПараметр.кодДействия = 4 тогда
    
    //Ввести значение
    
    КонецЕсли;
    
    КонецПроцедура
    

    Показать

    Reply
  11. BabySG

    (0)

    Многое, что можно было «спрятать» в платформе и сделать своими силами, просто перевалено на плечи разработчиков 1С.

    Пример блокирующего окна, реализованного по другому в студию!

    Reply
  12. zoytsa

    Наверно разработчиков платформы бесит звук нажатия на пассивное окно при открытом модальном. )))

    Reply
  13. AVARY

    Многое в решениях 1с становится понятным, если попробовать реализовать подобный функционал в web-интерфейсе через javascript и C# или PHP.

    Reply
  14. AlX0id

    (10)

    Ну попробуйте запустить «немодальные» и «модальные» 1сные вызовы в Chrome 37. Одни запустятся, другие нет. Все остальное — просто софистика.

    Reply
  15. zqzq

    Вообще согласен с автором, неужели такая проблема генерировать «немодальный/псевдомодальный» код JavaScript на основе старого «модального» кода 1С. Хотя учитывая что авторефракторинг модальности пасует в тяжёных случаях, возможно и преобразование кода 1С->JS с такими же неразрешимыми проблемами сталкивается.

    Reply
  16. Shkalar

    (14) AVARY, Полностью согласен.

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

    А возможность ВыполнитьОбработкуОповещения компенсирует абсолютно все.

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

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

    Пример такой (правда не к асинхронщине относится): есть обработка, которая работает 13 минут, я потратил уйму времени на то, чтобы это переделать в 30 секунд, разветвляя код фз в 10 потоков, причем в это время можно работать в программе дальше, т.к. интерфейс не зависает. Запускается все очень часто. Так что затрата моего времени была оправдана.

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

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

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

    Reply
  17. Yashazz

    (11) Я так же поступаю — сделал 2 процедуры «Завершение», на один входной параметр (для ПоказатьПредупреждение и ПоказатьЗначение) и на два (для остальных), а внутри них разруливаю по этим параметрам. Но изврат же.

    (12) По-другому это как? Я вот сделаю формочку с табличным полем, пропишу ей, чтоб всё блокировала, и буду вызывать — и чем это станет отличаться от, например, «ВыбратьЭлемент»? Ничем, кроме моих трудозатрат.

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

    (15) Вот и вопрос — что мешало самой 1С автообработать команду «Предупреждение» как «немодальную»? Лень?

    (16) Возможно. Только «тяжёлых» случаев на порядок меньше, чем тех, что были жёстко ограничены новой концепцией. «ВыбратьИзМеню» — тяжёлый случай?

    Reply
  18. Yashazz

    (17) 1С без бухгалтерии — ничто. Чем скорее вы это поймёте, тем более реалистичным увидите наш мир. 1С поднялась, выросла, стала монополистом итд исключительно потому, что большинство бухов вынуждено сдавать отчётность государству средствами БП (иначе шибко тяжко), и 1С продолжает лоббировать сие. Иначе сидели б мы на SAP, всяких «Парусах», Аксаптах и прочих Галактиках. Это оффтоп, но имхо, очевидность.

    (19) Ага, са-а-авсем не понимаю))) Расскажите мне, я ж предупреждал, что рассуждаю, как «тупой одинэснег». Расскажите, с цитатами, с терминами, да со ссылками на первоисточники. Просветите, пожалуйста, желательно прямо статьёй — я уже заранее готов её плюсануть!

    Reply
  19. Evgen.Ponomarenko

    (17) Shkalar,

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

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

    Reply
  20. Evgen.Ponomarenko

    (14) AVARY,

    Многое в решениях 1с становится понятным, если попробовать реализовать подобный функционал в web-интерфейсе через javascript и C# или PHP.

    А мне вот не понятно, с чего это вдруг Google Chrome, стал таким жадным к памяти? Подменяя собой все остальные браузеры chromium и лишая пользователя выбора. Того и гляди скоро обнаружатся в коде пустые циклы, что бы тормознуть крутой i7.

    У меня последнее время складывается впечатление, что 1С в соответствии с ложными мировыми трендами идет не той дорогой. Автору — респект за поднятую вечную тему

    Reply
  21. monsta

    (14) AVARY,

    @using (var f = Html.Bootstrap().Begin(new Form().LabelWidthMd(2).LabelWidthSm(3)))
    {
    @f.FormGroup().TextBoxFor(Объект => Объект.Код)
    @f.FormGroup().TextBoxFor(Объект  => Объект.Наименование)
    @f.FormGroup().CheckBoxFor(Объект   => Объект.Использовать)
    @f.FormGroup().CustomControls(Html.Bootstrap().SubmitButton())
    }
    

    Показать

    Занятно было бы на клиенте иметь возможность подключить twitter bootstrap и писать модальные окна на jquery.

    Почему бы не сделать помимо управляемых форм возможность прописать все на HTML5.

    Когда-то был холивар между WebForms и MVC, и где эти WebForms сейчас?

    Reply
  22. dj_serega

    Ну не знаю. Я за такие методы 1С. И кода в 3 раза больше писать не нужно. Нужно просто понять как работает новый функционал и попробовать реализовать его. Понимание придет.

    Аналогичная ситуация и с «плевками» в сторону управляемого приложения. Семерочники плюются на них. К ним же и Восьмерочники с обычными формами подтягиваются. Но на самом деле в УФ много плюсов и возможностей. Но для работы в этой управляемой среде нужно понимать что и как происходит. Что такое &НаКлиенте а что &НаСервереБезКонтекста и где его использовать ну и т.д. Примеров много.

    Вообщем как-то так 🙂

    Reply
  23. Evgen.Ponomarenko

    (24) dj_serega,

    Что такое &НаКлиенте а что &НаСервереБезКонтекста и где его использовать

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

    Reply
  24. Yashazz

    (24)

    И кода в 3 раза больше писать не нужно.

    Мдя? Статью, ссылочку на которую я привёл в своих заметках, посмотрите, сами всё увидите. В три-не в три, но вдвое больше это уж точно. И да, вы правы, клиент-серверное взаимодействие у 1С тоже вызывает вопросы. Вот вы, такой понимающий эти тонкости, наверное, можете ответить, почему ЗагрузитьНастройки для компоновщика настроек СКД можно делать на клиенте, а ПолучитьНастройки — только на сервере?

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

    Reply
  25. monsta

    Зачем вообще нужна директива &НаСервереБезКонтекста? Почему нельзя использовать для передачи контекста параметры? &НаКлиенте и &НаСервере тоже костыли, надо клиентскую и серверную часть разносить по разным модулям — client side и server side, иначе получается каша.

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

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

    Reply
  26. Yashazz

    (28) И что, alert не юзают и повсеместно запрещают? Очень смешно читать такие замечания)))

    (28) Отвечу за monsta — а вот ровно так, как предлагается нам создавать ручками, только на пару уровней ниже и автоматом. Если вы в ответ скажете, что «не представляете себе автомата в этой ситуации», я авансом скажу, что набор таких модальных случаев конечен, строго очерчен, сводится к нескольким обработчикам, и никакого ИИ, чтобы это отработать без участия программиста, не надо.

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

    Reply
  27. Yashazz

    (27) Кстати да. Совершенно не понял, почему нам не дали хотя бы флага для реквизитов — «Передача клиент-сервер». Странно ведь — или тащим всю хрень, или не тащим ничего, управляемости ноль. Параметрами не всё можно передать — вот у меня 10 объектов «ДанныеФормы…», их на сервер кидать параметром в 8.2 некошерно, а в 8.3 просто нельзя; и что, зачем мне таскать все их скопом, когда нужен один? Словом, недоверченная концепция.

    …или мы чего-то не знаем о флаге «Использовать всегда»?

    Reply
  28. monsta

    Вариант для мобильного контента — http://demos.jquerymobile.com/1.2.0-beta.1/docs/pages/page-dialogs.html — прекрасно работает и в обычном броузере.

    $(function() {
    $( «#dialog-confirm» ).dialog({
    resizable: false,
    height:140,
    modal: true,
    buttons: {
    «Delete all items»: function() {
    $(this).dialog(«close»);
    },
    Cancel: function() {
    $(this).dialog(«close»);
    }
    }
    });
    });
    

    Показать

    Почему нельзя было так реализовать и в 1С.

    Reply
  29. qwinter

    (29) покажи хоть один уважаемый сайт, где юзают алерт?

    (31) monsta, а теперь опиши, чем то, что ты привел отличается от реализации 1С?

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

    Так то мешает то? http сервис есть? Есть! Хоть что прикручивай и вперед!

    Reply
  30. monsta

    (32) qwinter,

    Так то мешает то? http сервис есть? Есть! Хоть что прикручивай и вперед!

    Неплохая идея, по крайней мере не ограничены REST начиная с 8.3.5. Но давайте вспомним 7.7, в котором был V7Script, позволявший оперировать объектами 1С на сервере и генерировать честный HTML на клиенте. Сейчас мы получили все то же самое, но без возможностей окружения — IIS и .NET. А значит и на клиенте мы ограничены типами данных, с которыми удобно работать из 1С. Так и ладно — не нужно баловства типа графики и прочего на клиенте — но оставьте тогда ВвестиДату, Предупреждение и Вопрос без заморочек.

    Reply
  31. Shkalar

    (21) Evgen.Ponomarenko, Эээ, построчная тарификация? 😀

    Reply
  32. BabySG

    (31) monsta, мешало то, что ООП нет в 1С. Тем не менее, отличия данного коа только в том, где описана выполняемая фукнция и не более того.

    Reply
  33. Yashazz

    (19) Великий гуру нас так и не просветил. Увы.

    Кстати, просьба к отписывающимся в теме: пожалуйста, выскажитесь о предложенном в публикации понимании модальности и асинхронности — оно-таки далеко от общепринятых по смыслу, или нэ?

    Reply
  34. Yashazz

    (24)

    Я за такие методы 1С. И кода в 3 раза больше писать не нужно. Нужно просто понять как работает новый функционал и попробовать реализовать его. Понимание придет.

    Вот когда вам понадобится найти ветку в «ДанныеФормыДерево», например, пожалуйста, напишите мне в личку и расскажите а) реально ли НЕ нужно писать втрое больше, б) как же работает новый функционал, если метода поиска у объектов такого типа нет, в) какое понимание к вам пришло. Правда-правда, очень интересно.

    Reply
  35. the1

    Разработчики платформы вообще беспощадны к разработчикам конфигураций. Вспомните переход с 7-ки на 8-ку? Прешлось переписывать все с нуля. 8.2 ->8.3 — та же история. И это в то время, когда на виду совершенно безболезненные переходы с версии на версию у других производителей.

    Reply
  36. fixin

    я всегда говорил, что УФ — зло.

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

    Reply
  37. qwinter

    (33) monsta,

    Сейчас мы получили все то же самое, но без возможностей окружения — IIS и .NET

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

    (37) можно прикладной пример такой «надобности»?

    (38) the1, можно подробнее у каких производителей безболезненные переходы с версии на версию?

    Reply
  38. Yashazz

    (39) Не согласен. УФ — нормальная идея, вкупе с разделением на клиент-сервер, только до ума доведено отнюдь не всё. Сыроват продуктец и кривоват местами.

    (40) Найти нечто в дереве и спозиционироваться на эту строку. Кодом, естессно, а не интерфейсными усилиями в окошке поиска. Сделать строку текущей, или развернуть вложенные, или проставить там чего, не гоняя через само дерево значений на сервере. Вообще странный вопрос, это всё равно что спросить, зачем аналогичные методы у других таких.

    Reply
  39. qwinter

    (41) уважаемый, я и так понимаю «Найти нечто в дереве и спозиционироваться на эту строку». Я спросил зачем. Если Вы пишите, значить Вы уже сталкивались. Вот я прошу привести реальный пример когда это потребовалось.

    И заодно напишите, у каких таких «других» есть подобные методы.

    Reply
  40. MSensey

    Лично меня не устраивает

    — невозможность быстро перейти к обработчику описания оповещения

    — экспортные процедуры в модуле формы

    А все остальное что написал автор ерунда.

    Мне наоборот нравится — теперь блокируется не весь интерфейс, а только окно владельца.

    Reply
  41. Yashazz

    (42) Оффтопим, однако. Ну как зачем — есть у меня дерево из N веток, надо мне нужную ветку раскрыть с подчинёнными и сделать текущей. Нужные данные юзверю показать, чтоб сам не искал и не щёлкал. А что до методов, так вот, например, ДанныеФормыКоллекция или ДанныеФормыСтруктураСКоллекцией, метод НайтиСтроки.

    (43) Писать больше кода, затрачивать больше усилий на то, что могла бы делать платформа — ерунда? Вероятно, у вас почасовая оплата)))

    Да, и ещё — что 1С слегка преувеличивает и никакой асинхронности не наблюдается — тоже ерунда?

    Reply
  42. Сисой

    Поддерживаю автора.

    Изначально переход к УФ был прогрессивным. Декларативные формы — это правильно. Как и СКД.

    Но с самого начала 1С начала нагромождать архитектурно неверные решения. Например, определение нужности контекста (причем ВСЕГО СРАЗУ) по директиве препроцессора — это сильно. Welcome to 7.7.

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

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

    А уж троекратное переписывание Бухгалтерий (1.6->2.0->3.0) только ради архитектурных фенечек (и практически без наращивания функциональности, ну не считать же за таковую совмещение БУ и НУ на одном регистре) — да за это в приличном обществе в морду дают! Хотя в той же Консолидации совершенно замечательно уживались вместе управляемые и неуправляемые формы.

    Reply
  43. wolfsoft

    (25) Evgen.Ponomarenko,

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

    плюс ко всем вашим постам. И автору статьи плюс. «Не шмогла» — это похоже стало новым слоганом 1С.

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

    Reply
  44. WanGoff

    Полностью поддерживаю направление развития платформы, в том числе немодальности.

    Одновременно с этим, данные статьи полезны как для общего развития, так и для критики положения дел. Как без критики-то.

    Reply
  45. BabySG

    (20) посмотрите на партнерке — разработчики ответили раньше, чем я. В двух словах: без понимания, как работает платформа — да, будет «тупой 1С-ник».

    Отсюда и идут подобные статьи, когда нет понимания всей картины в целом, а не только «смотрите, можно ведь было квадрат нарисовать мелком, зачем маслянные краски-то использовать?»

    Reply
  46. Yashazz

    (48) BabySG, ссылку можно?

    Вообще, к сожалению, два момента вынужден отметить.

    Первое: далеко не всегда можно узнать, как именно работает платформа. Не спешат этим с нами делиться. В своё время даже материалы по «1С-Эксперт», где были интересные сведения о «неизведанных глубинах», спешно удалили с ИС.

    Второе: далеко не всегда это интересно. Знаете, если вам, чтобы сделать шрифт жирным, придётся в новой версии Ворда проделывать на пять манипуляций больше, вам очень быстро станет наплевать, почему оно так устроено, как хитро и оптимально работает и что на шестом айфоне фурычит более круто. Если у вас не шестой айфон. Вы просто просидите над форматированием текста больше времени и начнёте задумываться об альтернативах.

    Reply
  47. BabySG

    (49) https://partners.v8.1c.ru/forum/topic/1279918

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

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

    PS. В ворде всегда использовал стили, также CTRL+B (для «жирненького»), поэтому тут не вижу проблемы вообще очень давно, уже много-много лет 🙂

    Reply
  48. Yashazz

    (50) Так вот, уважаемый гуру, спешу вас огорчить: у меня нет туда доступа, т.к.

    «Доступ предоставляется руководителям и аттестованным специалистам фирм-франчайзи фирмы «1С». Также доступ предоставляется специалистам, приобретшим специальную поставку «1С:Предприятие 8. Комплект специалиста по разработке и внедрению» и не работающим в фирме-франчайзи. Решение о предоставлении доступа принимается руководителем ЦСО или фирмы-франчайзи, продавшей данный комплект.»

    Это, извиняйте, свинство в чистом виде. Это попытка выбить побольше бабла и ходить на поклон к франчам и ЦСО, и весьма некрасивый ход по увязыванию сюда сертификации специалистов. Что, если я не сертифицирован, мне не должно быть интересно, как работает штатная конфа на штатной платформе, честно проплаченная мной 1С БП 3.0? Что, 1С уже проприетарный софт, и менять/понимать код конфы не холопское дело?

    И поэтому я с полным на то основанием, исходя из лично своего опыта, полученного методом тыка, позволю себе заявить — то, что налепила 1С по поводу модальных окон в последних релизах, это на 80% полный бред и ахинея, там ни отказа от модальности, ни асинхронности, а сплошь неудобства в работе.

    P.S. Один спец, знающий AJAX в разы лучше меня, цитирую «именно после этого окончательно перестал жалеть, что соскочил с 1С».

    Reply
  49. Yashazz

    (52) Отмазка — это у вас, что мол на семинарах рассказывали. Статью кто написал — вы или я? Я вам предлагал — напишите свою, просветите нас. Ан нет. Я, чтобы узнать больше, опыты ставлю и доступные материалы ищу, время трачу и силы. Подчёркиваю — доступные. Лишних денег на добывание недоступных материалов у меня нет. Так что фраза насчёт «не хочу ничего делать» — передёргивание, граничащее с клеветой.

    Знаете, IBM когда-то завоевала рынок потому, что все материалы сделала доступными, и не вынуждала «вкладывать ресурсы, чтобы узнать тонкости из первых рук». И системы с открытым кодом тоже не просто так популярны. Производители, не понявшие это вовремя, проигрывают, если не имеют мохнатых лап и прочих способов поддержки. Хотелось бы, чтоб и 1С имела это в виду.

    Reply
  50. BabySG

    (53) Все смешалось, люди… кони…

    Еще раз: 1С рассказала об особенностях и почему нельзя было сделать по другому.

    Есть «высшая профессональная» конференция, она платная. Вы же не удивляетесь, почему «профессональная» конференция инфорстарта платная? А ведь часть материалов доступно только там 🙂

    Вот и появляются различные «догадки», «уверенности», хотя это не так. А рождается это из «лишних денег нет».

    PS. Кстати, потратив «лишние» деньги, узнали бы, как решается вопрос

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

    А раз «лишнего» нет — ждите доступности для всех. Только статей не стоит писать про этот момент до выхода в свет 🙂

    Или писать, но в виде вопроса, а не обвинения (Д`артаньянов тут много)

    Reply
  51. Yashazz

    (54) Ля-ля-ля того, кому 1С рассказала. Хватит понтоваться, что вы всё знаете, мы уже практически упали на колени и поклоняемся вашему всезнанию)))

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

    Да, и в очередной раз вы передёргиваете. Статьи ИС бесплатны и общедоступны всем пользователям, только что проверил. Или же вы говорите о какой-то совсем другой «профессиональной» конференции.

    Reply
  52. BabySG

    (55)

    Или расскажите всем хотя бы на ИС

    Посетите семинар и узнаете, почему не публикуют сие.

    Да, и в очередной раз вы передёргиваете. Статьи ИС бесплатны и общедоступны всем пользователям, только что проверил. Или же вы говорите о какой-то совсем другой «профессиональной» конференции.

    Собственно, тут даже без комментариев… http://event.infostart.ru/2014/visitors/

    Это стоит даже дороже, чем семинар 1С 🙂

    Ля-ля-ля того, кому 1С рассказала. Хватит понтоваться, что вы всё знаете, мы уже практически упали на колени и поклоняемся вашему всезнанию)))

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

    Reply
  53. Yashazz

    (56) Я изложил свой опыт в статье. Вы этого не сделали. Я поделился некоторыми явно наблюдаемыми результатами. Вы привели ссылку на платный ресурс. У вас вообще нет публикаций на ИС. Вот сухой остаток.

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

    Между разовым мероприятием, как конференция ИС-Event, где и сама 1С гость, и размещением материалов о собственном изделии на виртуальных ресурсах есть некоторая разница — хотя бы по затратам на оргвопросы, так что это некорректное сравнение. Разумеется, любое мероприятие стоит денег, хотя бы на аренду. А вот разместить сакральные сведения на своём сайте — это для 1С отнюдь не вопрос затрат, но вопрос деньговыжимания из нас, разработчиков.

    p.s. не удастся вам в таком стиле, уж извините. Потому как счесть понтом статью, в начале которой ясно указан подход («тупой одинэснег») и имеющую категорию Life, слишком большая натяжка даже для вашего стиля ведения дискуссии.

    Засим прекращаю — у меня много дел, мало времени и совершенно нет желания добиваться сведений от не желающих/не могущих конструктивно общаться.

    Reply
  54. PiccaHut001

    (50) BabySG, Есть ссылки, доказательства? Где же они? Предлагаете верить Вам на слово? Не врёте? Точно не врёте?

    Reply
  55. BabySG

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

    Reply
  56. PiccaHut001

    (59) BabySG, Ваша ссылка тухлая, нужно быть франчём или партнёром 1С, чтобы узнать аргументацию овнокодеров разработчиков платформы. Не хочется делиться с народом тайным знанием? Нездоровая тяга к секретности началась с того, что чтобы увидеть список ошибок платформы, надо было купить ИТС. Глубокоуважаемый Борис, спасибо.

    Reply
  57. BabySG

    (60) читайте (56)

    Про текущий порядок распространения информации — не ко мне.

    Общий смысл таков (если сократить): текущая статья не учитывает реализацию платформы, видит только то, показывается наружу. Поэтму возникает ложное впечатление, что можно сделать по иному.

    Reply
  58. PiccaHut001

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

    Reply
  59. Yashazz

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

    Reply
  60. kiruha

    Никто не знает как в такси 2 формы открыть рядом ?

    Например чтобы визуально сверку провести

    Пользователям совсем не нравится текущая реализация

    Reply
  61. dj_serega

    (30) Та они видимо не додумали как сделать &НаСервереЧастьСКонтекстомЧастьБез. А должны были бы.

    (37) А как же идентификатор строки?

    Reply
  62. Yashazz

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

    (65) 1. Ага, об том уже не первый раз говорено. 2. Поиск мне нужен, а не идентификация. Поиск по значению в колонке.

    Reply
  63. kiruha

    (66)

    рисовать свою спецформу

    мысль интересная — еще никто не делал универсальной такой ?

    Reply
  64. Yashazz

    (67) kiruha, вроде нет. Кстати, может, я озабочусь после выходных… Интересная мысль, но не будем тут оффтопить.

    Reply
  65. webester
    Reply
  66. Yashazz
    Reply
  67. zqzq

    Вообще казалось бы чего проще: 1 процедуру 1С с 1 «старым» модальным вопросом транслировать на уровне платформы в 2 «правильные» немодальные но блокирующие закладку браузера функции JavaScript до вопроса и после вопроса. Как запросы 1С с разыменовыванием через точку транслируются в правильные запросы SQL с левым соединением. Но что-то пошло не так… Абстракция протекла…

    P.S. Вот тут можно найти примеры труднопреобразуемыой автоматически модальности http://v8.1c.ru/o7/201312ref/index.htm Но это ничтожный процент из встречающегося на практике..

    Reply
  68. webester
    Reply
  69. Yashazz
    Reply
  70. webester
    Reply
  71. Yashazz

    Писал-писал длинный ответ, а он съелся. В общем, мы расходимся в представлении о допустимых уровнях абстракции. Извечный спор, «свобода манёвра vs сложность кода». Мне бы ещё на 1 уровень «утопить» всю эту механику показалось разумным, сделать эдакий автомастер интерпретации простых модальных случаев.

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

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

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

    О том и говорю. Утверждать, что «асинхронность — на клиенте», можно лишь тогда, когда согласуем понятия «асинхронность» и «многопоточность». Но, поскольку «с этим в гугл», то засим прекращаю.

    Обилие выпадающих менющек, постоянно выскакивающие диалоговые окна и удобный интерфейс для меня взаимоисключающие параграфы. Для вас нет?

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

    Reply
  72. Yashazz

    А, вспомнил съеденное.

    Диалог выбора периода, диалог отбора в формах списков — они модальные? Они блокируют исполнение кода?

    Reply
  73. webester
    О том и говорю. Утверждать, что «асинхронность — на клиенте», можно лишь тогда, когда согласуем понятия «асинхронность» и «многопоточность». Но, поскольку «с этим в гугл», то засим прекращаю.

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

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

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

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

    Диалог выбора периода, диалог отбора в формах списков — они модальные? Они блокируют исполнение кода?

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

    В общем, мы расходимся в представлении о допустимых уровнях абстракции

    Мне кажется истина где то посередине.

    Reply
  74. BabySG

    (76)

    Диалог выбора периода, диалог отбора в формах списков

    А чем они принципиально отличаются от ПоказатьВводДаты, кроме того, что сделаны на уровне платформы и мы этим не управляем?

    Reply
  75. qwinter

    (78) BabySG,

    А чем они принципиально отличаются от ПоказатьВводДаты, кроме того, что сделаны на уровне платформы и мы этим не управляем?

    они не отличаются, они не блокируют исполнения кода.

    Reply
  76. logos

    (77) Обычная неграмотность «одноэсника». Для того, чтобы можно было вести результативный диалог, а не базарный спор, нужно сначала договориться о значении терминов. Именно для этого используются общепринятые значения, хотя есть и вариант значения терминов 1С (как например Native API, который всегда был экспортируемым в ring 3 API ядра, пока разработчики 1С не придумали соглашение о написании платформонезависимых разделяемых библиотек). Вернемся к синхронному/асинхронному выполнению кода. В случае синхронного выполнения транслятор кода работает синхронно: запрос — ответ. Каждый следующий оператор выполняется после предыдущего. В случае асинхронного выполнения вызов и ответ о его обработки происходят независимо. Т.е. в коде пишется запрос, в каком то другом месте ожидается ответ. В рамках программирования, асинхронность реализуется многопоточностью. Для асинхронного вызова создается отдельный поток. Когда он завершается, вызывается событие обработчика завершения. Асинхронно может вызываться не только интерфейс пользователя, но и, например, интерфейс взаимодействия с БД. Поэтому говорить, о том, что она нужна только для клиента — неграмотно. Выражаясь проще, можно говорить о многопоточности без асинхронности (с большой натяжкой, потому что порождение любого потока можно рассматривать как асинхронное исполнение кода), но нельзя говорить об асинхронности без многопоточности.

    Reply
  77. Yashazz

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

    Reply
  78. qwinter

    (80) logos, подытоживая ваш пост получается, что взаимодействие клиент-сервер это многопоточность…..

    Reply
  79. PiccaHut001

    (82) qwinter, клиент ждёт возврата с сервера. Это синхронное выполнение, или однопоточность. Клиент запускает фоновое задание на сервере и занимается чем-то своим — это асинхронное выполнение и многопоточность.

    Reply
  80. YuriFm

    1С для ухода от модальности разработали новые методы (Вопрос — ПоказатьВопрос, Предупреждение — ПоказатьПредупреждение, Выбрать — Показать и т.д.) соответственно. Не ясен смысл разработки для методов КаталогВременныхФайлов() , ПодключитьВнешнююКомпоненту, сделали новые методы на замену( НачатьПодключениеВнешнейКомпоненты, НачатьПолучениеКаталогаВременныхФайлов). Методы окон не вызывают, ничего не блокируется, хоть и работает синхронно (но выполнение занимает доли секунды, пользователь этого не замечает). У кого, какие соображения есть?

    Reply
  81. androgin

    (3) vano-ekt, у диалога есть метод Показать() — он прекрасно отрабатывает

    Reply
  82. androgin

    и уж если так нужна многопоточность — её можно реализовать фоновыми заданиями

    примером может служить загрузка валят/проверка контрагента..

    Reply
  83. Yashazz

    (85) androgin, чувак, расскажи в двух словах, что есть асинхронность (сверх того, что сказал logos), просвети неграмотного) И объясни, какую же методичку я не читал? И где асинхронность в том, что поток выполнения линейно идёт и не может ветвиться?

    (87) а сам-то внимательно читал статью? Не похоже, т.к. я и говорил, нафиг нам многопоточность не нужна в работе с формами на клиенте. А с умным видом ляпнуть абсолютно не в тему — это мы все умеем.

    Reply
  84. fixin

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

    Reply
  85. fixin

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

    Reply
  86. 7OH

    Согласен со статьёй на все 100%.

    Каждый раз думаю о «программистах» платформы вспоминаю 3 кита ООП :

    1) Костылирование

    2) Инкостыляция

    3) Поликостылизм

    и зачастую адреса разработчиков хочется достать намного больше, чем адрес съемок «Дом-2».

    Пишу параллельно на С, Delphi и Java иногда.

    Каждый день приходится тратить уйму времени на эти Показать…

    Иногда даже кошмары снятся в виде формы вопроса с количеством вариантов ответов = количеству перестановок вариантов ответов на каждый вопрос при линейном подходе.



    И вот как программист С — я бы таки сделал обёртку для всех вызовов с таким же поведением, как у «немодальных».

    Анализ черного ящика от Якова верный — всё можно было сделать прозрачно.

    Reply

Leave a Comment

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