Под капотом управляемых форм




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

98 Comments

  1. Поручик

    (0) Дочитал до конца, но нового ничего не узнал. Так, чисто время занять, пока большой файл скачивается.

    Всё написано и разжёвано в книге Хрусталёвой Разработка управляемого интерфейса.

    Reply
  2. Evil Beaver

    В аннотации про это честно сказано 🙂

    Reply
  3. B2B
    Сервер 1С работает по такому же принципу. В общем случае, в памяти сервера нельзя сохранить промежуточные данные между вызовами.

    Не согласен.

    хранилище данных

    Зря использовали это словосочетание. Оно напоминает «ХранилищеЗначений». Кто-то может спутать.

    СправочникОбъект уничтожается. Все его данные стираются из памяти сервера.

    Не согласен.

    При открытии формы элемента справочника СправочникОбъект остается на сервере, а на клиент передается описывающий его ДанныеФормыСтруктура*. И будет существовать этот СправочникОбъект на сервере до тех пор, пока форма не будет уничтожена (ну, может еще по таймауту).

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

    Reply
  4. TrinitronOTV

    (3) B2B, не смотря на ваши замечания, всё равно прочитал с большой пользой для себя. Спасибо автору статьи за данный материал

    Reply
  5. MarSeN

    (3) B2B,

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

    Рискую ошибится, но думаю, что это ни о чем не говорит.

    Я рассуждаю так: если СправочникОбъект остается на сервере, тогда зачем в принципе нужно разделение на контекстные и бесконтекстгые процедуры? Ведь контекст остался на сервере?

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

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

    Это мое сугубо личное мнение и оно, возможно, является ошибочным.

    Reply
  6. Evil Beaver

    (6) B2B, грубейшая ошибка. С чего вы взяли про идентификатор какой-то?

    СправочникОбъект уничтожается при возврате на клиента. Контекст формы существует только в виде ДанныхФормы и ее элементов. У вас есть подтверждения ваших слов про то, что СправочникОбъект живет на сервере пока открыта форма?

    Reply
  7. Evil Beaver

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

    Доказательство — ХранилищеЗначения в реквизитах объекта.

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

    Reply
  8. MarSeN

    (8)

    Такое задание делал не раз на работе ))))

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

    Работаю с УФ полгода и хотел бы вернуться к обычным. Часто занимаюсь конвертацией данных и сложными обменами между базам. Скорость разработки увеличилась. Нагрузка на сеть для меня не критична. Сложно организовать простой прогресс бар. Передавать файл через временное хранилище грустно. Но плюсы тоже есть, однако минусы их перекрывают.

    Reply
  10. sikuda

    (0) О Книжках:

    «Разработка управляемого интерфейса» Ажеронок, Островерх, Радченко, Хрусталева — зеленая

    «1C:Предприятие 8.2 Коротко о главном» Радченко — коричневая

    Reply
  11. Evil Beaver

    (10) Oleg_nsk, поддержу в плане прогресс-бара. Точную индикацию прогресса организовать можно только извратившись. Однако, как мне кажется, для большинства прочих задач УФ намного удобнее.

    Reply
  12. veluga

    а ещё хочется отметить, что не все методы работает на сервере —

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

    Reply
  13. ivs200999

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

    Reply
  14. xzorkiix

    (12) Oleg_nsk

    Глобальный контекст (Global context)

    Состояние (Status)

    Синтаксис:

    Состояние(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)

    Параметры:

    <ТекстСообщения> (необязательный)

    Тип: Строка.

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

    <Прогресс> (необязательный)

    Тип: Число.

    Значение индикатора прогресса (от 1 до 100).

    Если не задан, индикатор прогресса не отображается.

    <Пояснение> (необязательный)

    Тип: Строка.

    Текст пояснения.

    <Картинка> (необязательный)

    Тип: Картинка.

    Картинка.

    Описание:

    Выводит текст в панель состояния.

    Доступность:

    Тонкий клиент, веб-клиент, толстый клиент.

    Примечание:

    Для режима запуска ОбычноеПриложение используется только параметр <ТекстСообщения>, а вывод текста осуществляется в панель состояния.

    Пример:

    Состояние(«Выполняется обновление информационной базы»);

    Показать

    Частота исполнения строго на плечи программиста реализующего серверное решение.

    Reply
  15. mxm2
    ОткрытьФорму(«Справочник.Контрагенты.ФормаСписка», «УсловияОтбора»);

    очепятка во втором параметре (он должен быть без ковычек)

    Reply
  16. mxm2

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

    Reply
  17. Гость
    Данные помещаются в хранилище по ссылке. Это значит, что помещая данные в хранилище и изменяя их вне хранилища мы, фактически, меняем и само хранилище, т.к. в нем лежит только ссылка на данные. Пример:

    Массив = Новый Массив; Массив.Добавить(«Привет»);
    Адрес = ПоместитьВоВременноеХранилище(Массив);
    Массив.Добавить(«До свидания»);
    МассивИзХранилища = ПолучитьИзВременногоХранилища(Адрес);
    Сообщить(Массив = МассивИзХранилища); // Истина
    Сообщить(МассивИзХранилища.Количество()); // 2 элемента

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

    Reply
  18. Evil Beaver

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

    Reply
  19. Evil Beaver

    (15) xzorkiix, да, а еще нужен реальный сервер, ибо в файловом режиме фоновые задания работают извращенскими методами и, де-факто, не применяются вовсе.

    Reply
  20. xzorkiix

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

    Reply
  21. foliage

    Статья понравилась и четким изложением «по пунктам», и содержанием. Эту информацию пришлось с полгода назад выискивать по разным источникам, в т.ч. в упоминаемой книге. Но и из статьи немало узнала, спасибо автору!

    Однозначный «плюс», мне бы эту статью в начале работы с УФ 🙂

    Reply
  22. Поручик

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

    С обычными формами работаю время от времени, но только по превеликой просьбе клиентов.

    Франч, УТ 11, Розница 2, свои конфигурации.

    Reply
  23. petrov_al

    Спасибо за публикацию, хоть освежил свою память поскольку редко работаю с уф.

    Reply
  24. Поручик

    (8) А что его делать? Справочник Файлы или регистри ХранимыеФайлыВерсий, ПрисоединенныеФайлы в любой типовой на БСП.

    Reply
  25. Evil Beaver

    (25) Поручик, Помещать ДвоичныеДанные во временное хранилище формы, а в ДанныхФормы завести реквизит «АдресДвоичныхДанных».

    Затем, в событии «ПередЗаписьюНаСервере» проверять, если по этому адресу что-то лежит, то засунуть эти данные в ТекущийОбъект.

    Reply
  26. GreenFox

    Автору спасибо, сейчас начинаю плотно работать с УФ — приходится восстанавливать знания по ним после сдачи спеца.

    Reply
  27. sergnik

    С УФ работаю где-то полгода, некоторые моменты, описанные в статье, изучал методом тыка)

    Как раз подхожу под

    Введение

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

    Автору спасибо, буду ссылаться на Вашу статью)

    Reply
  28. SinglCOOLer

    Хорошо написано, еще много вопросов вызывает Условное оформление(особенно если строки надо подсветить), его программное добавление и т.п., отборы в списках

    Reply
  29. ant2be

    спасибо, закрепил

    Reply
  30. Mortiferus

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

    Reply
  31. B2B

    (7) Извините, был не прав 🙁

    Reply
  32. soulsteps

    Отличная статья!

    Reply
  33. alsoftik

    Как раз статья кстати, вчера поставил в контору конфы 8.2 УТ и БП, бум разбираться. Еще раз спс за статью.

    Reply
  34. Oleg_nsk

    (23) Поручик, Перечислите пожалуйста достоинства УФ кроме «престижа», уменьшения сетевой нагрузки и простоты конструирования форм? У вас на самом деле уходит меньше времени на разработку? Какая специфика ваших задач? Вот сегодня например прилетела задача по УТ11 при заполнении установки цен на основании документа поступление заполнить свою цену ценой поставщика с НДС. Эта задача была оценена на полчаса. При попытки вникнуть в суть кода разработчиков чуть не поехала крыша. Создание временного хранилища со схемой скд, её извлечение, двойное перезаполнение и т.п. В общем задача заняла у меня 4 часа. На толстом клиенте на это ушло бы минут пять. Добавление внешних печатных форм отчетов и обработок стало каким-то муторным. Не говорю о том что отладка на клиент-сервере невозможна без флага -debug и приходится делать файловую копию большой базы. Знаю людей которым нравятся УФ, но не знаю никого, кто-бы работал с ними быстрее чем под толстым клиентом. Сам я проходил курсы по УФ и знаю все его основные особенности, читал спецлитру, мышление перестроил под него, однако, остаюсь при своем мнении, что разработка под толстым клиентом проще и быстрее. Если будет время согласен устроить соревнование — решение нескольких шаблонных задач на скорость параллельно в УФ и на толстом клиенте 🙂

    Reply
  35. нормальный такой

    (35) Oleg_nsk, и меня подпишите)

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

    вот вы привели, что толстые формы быстрее в разработке, так давайте вернемся к 77 где вообще все просто как 3 рубля.

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

    Reply
  36. Oleg_nsk

    (36) нормальный такой, В высоконагруженных, возможно. Однако, я работаю с небольшими фирмами. Переход с 77 на 8 проходил относительно безболезненно, т.к. 8 позволяла именно ускорить процесс разработки и давала новые возможности. Усложнение меня не пугает, однако, сама концепция реализации тонкого клиента увеличивает время разработки. У меня претензии к тому, что тонкий клиент давая преимущества в тех аспектах, которые для меня не важны усложнил жизнь в тех, которые составляли 90% моей работы. Теперь выгоднее стало уйти на крупное предприятие нежели работать со многими небольшими фирмами, т.к. завышение цены на услуги в 1.5-2 раза никому не нравится.

    Reply
  37. gruk

    dgh

    Reply
  38. Ёпрст

    еб@нутый каталог.. хз чего я там поставил, + или минус ?

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

    Reply
  39. gruk

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

    ЗЫ. Побежал читать Радченко

    Reply
  40. Bukaska

    Спасибо автору! Отличная статья)

    Reply
  41. Pavl0

    Статья отличная, рекомендую к прочтению.

    Много нюансова разжевано.

    Reply
  42. help1Ckr

    (35) Oleg_nsk, Вы знаете, когда делал на обычных формах документ и в момент сдачи пользователи попросили добавить маленький реквизхит — просто текстовое поле типа комментария. Добавил вроде ничего такого не трогал, но как полетели у меня привязки — полчаса потом выравнивал((((((( в тот момент я подумал что УФ это рай на земле)

    Reply
  43. bonv

    [QUOT]

    Ключевые параметры определяют уникальность окна. В обычных формах был такой атрибут «Ключ уникальности». Если запрашивалась форма, то она сначала искалась в уже открытых. Ключ уникальности позволял варьировать условия при которых создавалась новая форма или возвращалась существующая. Ту же самую роль играют ключевые параметры. Если метод «ОткрытьФорму» вызван два раза подряд с одним и тем же значением ключевого параметра, то второй вызов не откроет новое окно, а активирует существующее.

    [/QUOT]

    Не совсем верно. Поиск по ключевым параметрам это поведение по умолчанию.

    Но при этом у метода ОткрытьФорму есть параметр <Уникальность>, если его заполнить, то поиск среди открытых окон будет выполняться по нему.

    Reply
  44. help1Ckr

    (35) Oleg_nsk, кстати. на вскидку — преимущества уф — функциональные опции, которые позволяют скрывать ненужное от пользователя. «Самоформирующийся» интерфейс

    Reply
  45. Evil Beaver

    (45) doxflow,

    Не совсем верно. Поиск по ключевым параметрам это поведение по умолчанию.

    Но при этом у метода ОткрытьФорму есть параметр <Уникальность>, если его заполнить, то поиск среди открытых окон будет выполняться по нему.

    Не знал. Думал, что они друг-друга дополняют. Спасибо.

    Reply
  46. Oleg_nsk

    (46) help1Ckr, Да. Плюс. Для разработчиков решений. Но я не разрабатываю конфигурации с нуля, а дорабатываю типовые в основном. Там таких проблем нет. С привязками ну было у меня пару раз что сбивались когда начинал на 8.0, потом понял как они работают и более затруднений не возникало.

    Reply
  47. bulpi

    » Все кто поработал с УФ более-менее плотно не хотят возвращаться назад, как в страшный кошмар.»

    Ну ты за всех-то не расписуйся 🙂 После таких заявок так и хочется минус влепить.

    Reply
  48. bulpi

    «Один и тот же код работает и в браузере, и в родном клиенте.»

    А это просто неправда.

    Reply
  49. donikx

    Интересная и полезная информация. Все важное об управляемых форма в одной статье. Буду использовать в моей практике.

    Reply
  50. Evil Beaver

    (50) bulpi, 🙂 Скажем так, в идеале, один и тот же код работает и там и там.

    Понятно, что есть документированные особенности, как то «РасширениеРаботыСФайлами» и прочее…

    А что именно неправда?

    Reply
  51. bulpi

    Код, отлаженный в тонком клиенте, вовсе не обязательно будет работать в веб-интерфейсе. У меня была куча странных ошибок в браузере. Помогали только танцы с бубнами.

    Reply
  52. Evil Beaver

    (53) bulpi, это да, веб-клиент имеет недостатки. Но о них надо сообщать и скорее всего их будут править.

    Проектная идеология подразумевает корректную работу кода в тонком и веб-клиентах.

    Reply
  53. bonv

    (53) bulpi, и обратное тоже верно: код отлаженный в веб-клиенте не обязательно будет работать в тонком)

    Reply
  54. Harleq2

    Cool

    Reply
  55. help1Ckr

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

    Reply
  56. Evil Beaver

    Коллеги, а что за странная тенденция прикреплять картинки с аватарками? Это новая фича редизайна от Инфостарта? Особо везучие вместо своего поста публикуют аватарку крупного размера?

    Reply
  57. aimerlive

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

    Reply
  58. Karmerruk

    Спасибо за статью, прояснила некоторые моменты. 🙂

    Reply
  59. mzelensky

    Прочел статью. К самому написанию никаких вопросов — все довольно доходчиво изложено. Не понравилось только то, что автор безустанно «втирает» идею «УФ — ЭТО ЛУЧШЕЕ, ЧТО С НАМИ БЫЛО».

    По мне так УФ это г***о полное. Я работал с УФ и плевался на всем протяжении работы. Если кто-то все-таки захочет поспорить на счет «быстроты разработки», то я тоже подписываюсь! Я вижу УФ только в качестве того случая, когда нужно разработать функционал под «веб» (т.е. для работы в браузере).

    Reply
  60. rosinfo1

    (36) нормальный такой, У меня есть заказчик, оптовая торговая фирма, 30 пользователей, 500 документов в день, включая субботу и воскресенье, работают на 7.7 самописная «примитивная» конфигурация, 15 документов, 5 регистров, и несколько сотен отчетов и обработок. Работают в терминале, файловая база. Они счастливы, довольны и скоростью и производительностью, и тем, что я им функционал под каждый чих, быстро дорабатываю. По функционалу, УТ 11 только сейчас придвинунась, к тем идеям, которые у них были реализованы еще 10 лет назад. Торговые представители через карманник, подключаются по терминалу к базе. Внешние клиенты также, у них урезанные интерфейсы, делают самостоятельно заказы. Один блок логистики, загрузки автомобилей, и доставки по районам чего стоит. Также блок производства и фасовки, со сдельными рассчетами зарплаты. Учет бонусов и откатов. Учет затрат и себестоимости, точки безубыточности. Обмен с БП 2.0 типовой конфигурацией реализован, аффилирование клиентов, как в УТ 11. Им УФ нафиг не нужны, и УТ 11 это кошмар, для их бизнеса — тормоза, и лишние затраты в ИТ инфраструктуру, а также расходы на программистов.

    Reply
  61. нормальный такой

    (62) rosinfo1, Дорогой мой! Я за Вас очень рад! правда!

    В каждом конкретном случае ессесно свои решения, вот Вы нашли такой вот подход, и самое классное что он работает! Но если делать на УФ и можно таки вообще развернуть веб сервер и юзверя с «карманников» не будут подымать rdp и т.д!

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

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

    Я учился с 8ки, с 77 тоже сталкивался и работал (но не разрабатывал с «нуля») и то что я успел потрогать мне не очень понравилось. Сейчас у нас уже 83 накатываем, и то что мы видим нам очень нра 🙂

    Reply
  62. yuraskas

    Вопрос новичка в УФ. Все что здесь написано, относится к клиент-серверному варианту работы 1С? А с файловым вариантом можно писать как и раньше и не заморачиваться с &НаКлиенте и &НаСервере?

    Reply
  63. snic

    Спасибо. Кратко и понятно.

    Reply
  64. Evil Beaver

    (64) yuraskas, нельзя.

    (61) mzelensky, я тоже плевался поначалу. Когда поработаете подольше (будут ломки) то поймете преимущества.

    Reply
  65. Поручик

    Вброшу и пойду спать.

    Короче говоря, кто плюётся от управляемых форм, просто неудачники, не умеющие осваивать новые технологии и перестраивать мышление. Мозг жиром заплыл.

    Reply
  66. Зеленоград

    Скажите, коллеги — фраза «Все кто поработал с УФ более-менее плотно не хотят возвращаться назад, как в страшный кошмар» только мне кажется недостоверной, или я отстал от прогресса и то, что делалось на НФ за час теперь можно делать за 15 минут?

    Reply
  67. dimk@a

    [B]Evil Beaver[B], спасибо за статью — все четко изложил и доходчиво. Вот про то что ВременноеХранилище живет два серверных вызова даже не знал, точнее не сталкивался.

    Reply
  68. dimk@a

    (64) yuraskas, С файловым все так же, надо разделять процедуры на серверные и клиентские.

    Reply
  69. dimk@a

    (58) у меня в Хроме инфостарт вообще неадекватно работает… с редактированием сообщений полная фигня

    Reply
  70. Evil Beaver

    (68) 1cSupport — третий, видимо, все-таки, кому как. Для всех моих знакомых эта фраза полностью достоверна. Да, на УФ я могу форму нарисовать намного быстрее, чем на обычных. Двигать элементы по пикселям уже просто противно. А уж если вставить что-то в середину существующей сложной обычной формы….

    Reply
  71. Foma4382

    Спасибо за статью!

    Reply
  72. in_nochka

    Спасибо за статью, очень полезно.

    Reply
  73. sommid

    спасибо за труд.

    Reply
  74. Широкий

    «ОткрытьФорму(«Справочник.Контрагенты.ФормаСписка», «УсловияОтбора»);»

    Передаешь все-таки текстовую строку или структуру?

    Reply
  75. Alex_IT

    Структуру. Опечатался автор, вон сколько букв. Ничего страшного, поправит.

    Reply
  76. Yashazz

    На спор с одним товарищем делали красивую сложную форму — он на УФ, я на обычных. Обогнал его на полчаса и сделал гораздо более симпатичный дизайн. Имхо, УФ намного неудобнее в плане конструирования в конфигураторе. И да, я поработал с УФ и я хочу работать с обычными, они гибче и круче. Жаль, что будущее за уродством вроде «такси». Не понимаю, почему толковые и безусловно полезные меры по клиент-серверной оптимизации сопровождаются такими извратами внешнего вида и его разработки. Что, трудно было оставить прежние возможности нелюбимой автором «пиксельной» работы, а потом уже транслировать в отрисовываемую?..

    Reply
  77. Evil Beaver

    (79) Yashazz, да блин, вот вы все прицепились к скорости! Нравится вам делать обычные — ради Бога, я что, запрещаю что-ли? 🙂 Или вам надо, чтобы я статью поменял? Ну сформулируйте тогда, что именно надо сказать, а я опубликую.

    Reply
  78. Alister

    Спасибо автору за систематизацию информации для чайников… от чайника 🙂

    Reply
  79. Yashazz

    (80) Да потому, что навязчивая, а зачастую оголтелая агитация за УФ (не от вас, а вообще) поднадоедает, вот и вышел крик души. Статья полезная, у кого нет Ажеронка-Островерха-Радченко-Хрусталёвой, тем и просто манна небесная. Хорошая статья. Не принимайте на свой счёт мои зубовные скрежеты )))

    Reply
  80. dutlovva

    Спасибо за статью!

    Reply
  81. KliMich

    Спасибо! Без воды и для начинающих познавательно

    Reply
  82. warrior1985

    Отличная статья! Спасибо автору.

    Reply
  83. Vo-Va

    Спасибо автору, реально получил ответы на многие вопросы. Недавно был случай. Заполнение таблицы формы на сервере выполнялось очень долго. Причем сам запрос отрабатывал за 3 сек, а переход с клиентской процедуры в серверную и обратно занимал порядка 20 сек. Причем если заставить исполняться весь код на клиенте с помощью директив и инструкций препроцессора в толстом клиенте весь код исполнялся да 3 сек. Т.е. запрос напрямую с клиента работает быстрее, чем запрос с сервера с последующей передачей результата на клиент!!! Я не понимал почему это происходит. Теперь понятно что в это «потерянное» время происходила сериализация таблицы. И скорость этого процесса упирается в мощность процессора.

    Reply
  84. ogoneksergei

    Спасибо за статью.

    Reply
  85. den_bo

    Спасибо! Особенно за разъяснения некоторых особенностей поведения временного хранилища.

    Reply
  86. Sirruf

    Так и как сохранять com-объекты, если их нельзя помещать во временное хранилище?

    Reply
  87. Evil Beaver

    (89) Sirruf, а ответьте сами: есть кластер из 3-х серверов. 2 из них на Windows, третий на Linux.

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

    Делаем другой вызов, менеджер кластера передает вызов на другую win-машину, где этот COM не создавался. Как его получить с первой машины?

    Дальше-больше, третий вызов придет на машину с Linux, там вообще не бывает COM. Как вообще обеспечить работу такой информационной системы?

    Ваша необходимость сохранять COM объекты между серверными вызовами, это архитектурный просчет и нужно менять само проектное решение.

    Reply
  88. Sirruf

    (90) Таким образом, вариант решения данной проблемы предложенный в статье http://kb.mista.ru/article.php?id=787 неверен. Тогда каким образом можно поменять проектное решение, если требуется хранить ком-объект долгое время, на протяжении работы всего сеанса, чтобы не создавать его каждый раз заново…

    Reply
  89. Evil Beaver

    (91) Sirruf, решение предложенное в статье хоть и костыльное, но теоретически верное, т.к. тонкости создания объекта скрыты. Это как бы кеш, а не хранение состояния. Если жив объект, хорошо, а если нет, то фиг с ним, создадим заново.

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

    Reply
  90. xzorkiix

    (91) Sirruf, а что это за объект такой, если не секрет? Для чего он?

    Reply
  91. Sirruf

    (93) у меня часто используется VBScript.RegExp. Я его хранил в параметрах сеанса так как описано в статье на мисте, но в 8.3 этот прием не прокатывает — ругается при помещении ком-объекта в хранилище 🙁

    Reply
  92. Sirruf

    Вообще понятно, что ком-объеты лучше не использовать в принципе. Хочу реализовать через веб-сервисы, но это не так быстро сделать. Поэтому думаю как бы мне сейчас перейти на 8.3

    Reply
  93. Evil Beaver

    (95) Sirruf, внешняя компонента, либо TRex от Орефкова (есть на Инфостарте)

    Reply
  94. EmpireSer

    (94) Sirruf,

    А что если тебе использовать общий модуль с повторным использованием на сеанс? Тоже хороший вариант

    Reply
  95. AnryMc

    (1) Поручик,

    Некоторые только начинают учить… Книги — хорошо… Но потом, зачастую, нужна «шпаргалка» пока не «почувствуешь»… А в книге искать долго… Так, что на роль «шпаргалки» вполне тянет…

    Reply
  96. igostv

    (35) Oleg_nsk,

    На толстом клиенте на это ушло бы минут пять.

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

    Для «обычного приложения» при организации правильной работы трехзвенки, разработка не совсем тривиальна.

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

    Reply
  97. khnatik

    (14) Тоже было любопытно почитать, освежить в памяти, так сказать =)

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

    А за статью спасибо!

    Reply
  98. Емельянов Алексей

    (36) Я работал с 77, не могу сказать, что там было проще. Мне показалось наоборот проще стало в 8, особенно с запросами.

    Reply

Leave a Comment

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