Спуск на уровень СУБД




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

60 Comments

  1. bayce

    а зачем это все нужно?

    Reply
  2. Yashazz

    Всегда задаю один вопрос: а вы уверены, что это не нарушает лицензионное соглашение 1С и что вы не нарушаете законы РФ?

    Reply
  3. DitriX

    (2) та кому какое дело? Если 1с не справляется адекватно с задачами, ради которых ее и купили — то пофиг все эти их законы. И 1С возмущаться не будет, ибо им так выгодно 🙂

    (0) статья какая то не внятная. Ничего толком не ясно.

    ПО Сроки.Регистратор = Док.Ссылка

    И Сроки.Регистратор.ДатаНачала = Док.ДатаНачала

    За такое вообще бью по рукам 🙂 я понимаю что это пример, но из-за такого примера — сразу снижается рейтинг доверия к статье.

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

    ИМХО

    Reply
  4. yuraos

    А я плюсану, однако.

    Сам под 7.7 еще прямыми запросами баловался.

    Под 8.х все не так просто с ними получается



    например для файловых баз до сих пор нет

    ни драйверов ODBC ни тем более провайдеров OLEDB.

    так что,

    использование прямых запросы ограничивается только sql-ными базами.

    Reply
  5. yuraos

    (4)

    Кому интересно, в составе подсистемы

    Подсистема «COMExchange» для 1С:Предприятие-8.х (обычное приложение)

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

    в том числе к локальной базе данных 1C формата SQL.

    Reply
  6. rhtr

    Плюс за труды, но вот если бы привёл ещё пример реализации запроса с иерархией, цены бы тебе не было.

    Reply
  7. DrAku1a

    Сразу «+» — за подробность доступность и открытость изложения!

    Для преобразования даты в формат SQL я написал для себя такую простенькую функцию:

    Справка по 1С — функция языка «Формат()»

    Reply
  8. asved.ru

    (3) DitriX,

    Если 1с не справляется адекватно с задачами, ради которых ее и купили

    Вы не любите кошек? Да вы их просто готовить не умеете.

    Есть еще пословица: Нечего на зеркало пенять, коли рожа крива.

    Reply
  9. Elisy

    Для C# если перейти на LINQ, то запросы писать и обновлять данные таблиц становится намного приятнее:

    http://www.linq-demo.1csoftware.com/

    Reply
  10. DitriX

    (8) сразу видно делетанта 🙂 Но ничего — это пройдет.

    Reply
  11. comol

    Поставил «-«, потому что:

    1) Баян уж дальше некуда

    2) Сама идея зло, «зачем это нужно» описано не о том и не там

    3) Метод конечно есть более правильный и быстрый

    Reply
  12. asved.ru

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

    Reply
  13. Evgen.Ponomarenko

    (13) asved.ru,

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

    Reply
  14. DitriX

    (12) т.е. дилетант — это стало с каких то пор обидным словом? Я, вроде как, вас нигде не обижал.

    Давайте обратимся к википедии:

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

    Если Вы не сталкивались с задачами, которые не может решить 1С, то это говорит о вашем ограниченном опыте ее использования. Тут ничего зазорного нету, главное не бросайте попытки, развивайтесь, и однажды — у Вас появится проект, в котором 1С не будет справляться с определенной частью функционала. Начнется все с ВК, графиков на Яве и т.д., и, возможно, если Вы будете развиваться дальше, то поймете, что бэкап делается средствами SQL, через пару лет, Вы придете к мысли, что вместо ТиИ (точнее часть ее) можно перевести на SQL и выполнять там. И тут то Вы поймете, что Вы нарушаете лицензию 1С (так как ТиИ скульный, в случае нахождения ошибок может их справить, а это внесение изменений в бд минуя механизмы 1С). А делать то нечего, база 600Гигов, ТиИ идет 50часов, а в скуле — 2 часа.

    Но не переживайте, у Вас, видимо, еще оооочень много времени до этого этапа.

    Reply
  15. Evil Beaver

    Вроде статья объемная, работа проделана… но, как отметили выше — баянище…

    Еще можно подокапываться до некоторых моментов… спорная статья, короче.

    Reply
  16. asved.ru

    (14) Evgen.Ponomarenko, четвертый, после второй точки.

    (15) DitriX, Вы, вероятно, просто не знаете, что ТИИ можно остановить и продолжить. Для задач интеграции есть SOAP, причем этот метод гораздо менее трудоемок. А при массовых изменениях оцените последствия ошибки.

    Если Вы не сталкивались с задачами, которые не может решить 1С

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

    Начнется все с ВК, графиков на Яве и т.д

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

    бэкап делается средствами SQL

    Спасибо, Кэп!

    Видите ли, дилетантство определяется не уровнем знаний, а навыком оценки их применимости. Вернее, отсутствием такового.

    Reply
  17. DitriX

    (14) вероятно, имеется ввиду этот пункт http://v8.1c.ru/predpriyatie/questions_licence.htm#28:

    65. Для реализации своих задач Организация предполагает изменить структуру некоторых таблиц базы данных. Также предполагается использовать хранимые процедуры и триггеры для реализации обработки данных, реализовать экспорт данных путем прямого чтения таблиц, добавить новые индексы и изменить структуру некоторых индексов. Имеет ли Организация право вносить в систему перечисленные изменения?

    Лицензионное соглашение не позволяет использовать недокументированные фирмой «1С» средства для построения решений на платформе 1С:Предприятие. Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки «1С:Предприятие» (включая ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.

    Во всех остальных случаях лицензионное соглашение позволяет использовать для построения решений только штатные средства платформы. В частности, можно обращаться к данным информационной базы только при помощи объектов «1С:Предприятия», специально предназначенных для работы с данными (запросы, справочники, документы и т.д.). Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными «1С:Предприятия» — например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД. Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных «1С:Предприятия».

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

    Т.е. 1С просто отмазалась красиво, если база крахнулась и они обнаружили, ВНИМАНИЕ!!!, работу с СУДБ напрямую — то Вас еще и штрафанут 🙂

    Reply
  18. Evgen.Ponomarenko

    (17) asved.ru,

    4. Лицензиат обязуется не допускать нарушений исключительных прав Правообладателя на ПРОГРАММНЫЙ ПРОДУКТ, в частности, не совершать и не допускать совершения третьими лицами следующих действий без специального письменного разрешения Правообладателя:

    вносить какие-либо изменения в код ПРОГРАММНОГО ПРОДУКТА, содержимое баз данных и других наборов данных, в которых система хранит информацию, за исключением тех изменений, которые вносятся штатными средствами, входящими в состав ПРОГРАММНОГО ПРОДУКТА и описанными в сопроводительной документации;

    осуществлять доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА и построение систем на основе ПРОГРАММНОГО ПРОДУКТА с помощью средств и технологических решений, не предусмотренных в сопроводительной документации;

    Вы имеете ввиду эти слова?

    Reply
  19. DitriX

    (17)

    Вы, вероятно, просто не знаете, что ТИИ можно остановить и продолжить

    видать у вас никогда 1С не подвисало, и вы не работали с базами 24/7, где каждый час выбивать надо.

    Для задач интеграции есть SOAP, причем этот метод гораздо менее трудоемок

    ну да, велосипеду давайте прикрутим еще одну пару педаль. А че? если с одной парой он ездит быстро, то с двумя — в два раза быстрее?. 🙂

    Не пытайтесь умничать, у вас не выходит. СОАП — это протокол трансфера данных, если вы не знали. Т.е. он ТРАНСПОРТИРУЕТ данные, а не ПОЛУЧАЕТ. Ощущаете разницу? Нет? Ну тогда представьте что Вам надо отправить письмо.

    И вот, я Вам говорю — что надо написать письмо в ворде, а лицензия 1С разрешает только в текстовом документе. А вы мне парируете — «я использую почту!». Смешно? Ок, вы юзаете почту, а что передавать вы будете? Еще раз — учите мат часть.


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

    та можно вообще в экселе кодить, че уж там 🙂

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

    (из примера выше) т.е. справка к notepad — отменяет наличие справки к ворду?

    Спасибо, Кэп!

    Я рад, что помогаю Вам быстрее усвоить материал. Учитесь.

    Видите ли, дилетантство определяется не уровнем знаний, а навыком оценки их применимости. Вернее, отсутствием такового.

    ноу комментс

    Reply
  20. Evgen.Ponomarenko

    Печальная ситуация получается. В общем-то понятное дело, что модификация структуры и самих данных — тема сама по себе стремная и без лицензионного соглашения, но вот чтение?… выходит, если база упала. А штатные средства оказались не состоятельными, то применение Tool_1CD ведет к нарушению лицензионного соглашения, если на то не было письменного согласия Правообладателя. В принципе применение функции

    Глобальный контекст.ПолучитьСтруктуруХраненияБазыДанных предполагает, цитирую документацию:

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

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

    Reply
  21. HEKPOH

    *запасаюсь попкорном*

    Reply
  22. DitriX

    (21) согласен.

    У меня один раз база нагнулось при обновление динамическом (надо было в супер пупер мега отчете добавить галочку для супер мега начальника и супер пупер мега быстро :), к слову — я использовал штатные средства 1С!) так вот, 1с — меня послала куда подальше. Бахнулась структура конфигурации. Пришлось быстро поднимать рядом пустую базу с конфой и тупо перезаливать конфу оттуда в центральную базу.

    А 1С мне абсолютно никак не помогла, т.е. тут то и помогать то нечем.

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

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

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

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

    Reply
  23. Evgen.Ponomarenko

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

    К стати, на востоке есть присказка «Хочешь познать человека, сразись с ним!»

    По поводу правил: хотелось бы заменить, что в технике управляемых конфликтов есть рекомендация:

    «Никогда не обвиняйте оппонента в непрофессионализме, обратной дороги не будет.

    Не стоит превращать противника во врага.»

    Люди существа социально зависимые, по этому ущемление статус-кво расценивается как удар ниже пояса.

    Напомню в первом раунде противостояния DitriX vs Asved.ru противники обменялись ударами типа «Капитан КЭП»

    счет 1:1

    Интересно, что нас ждет во втором раунде? Что нового мы узнаем о современных IT технологиях?

    Reply
  24. i.kovtun

    (18)DitriX,

    — то Вас еще и штрафанут 🙂

    Не нас, а Вас:)

    Reply
  25. Evgen.Ponomarenko

    (25) i.kovtun,

    Желтая карточка ))) давайте не будем переходить на личности…

    Reply
  26. DitriX

    (25) это не я писал, а моя кошка, я ничего такого не знаю, и вообще — попал сюда случайно.

    Кошку уже пошел отнес в милицию… Не взяли…

    Reply
  27. Сисой

    (21) Чтение SQL-базы 1С пмсм вполне лицензионно, если обращаться к ней через 1С-овский же объект ВнешнийИсточникДанных.

    Reply
  28. DitriX

    (28) база то упала 🙂 Или вы предлагает создать новую базу и там подключаясь через внешние источники вытягивать данные?

    Не ну логично, но долго.

    (25) вы бы еще начали билеты продавать 🙂

    Reply
  29. Evgen.Ponomarenko

    (28) Сисой,

    Ну все, можем считать что совесть успокоили…

    И учитывая, что тип «COMОбъект» описан в документации с чистою совестью выполним:

    ЗапросАДО = Новый COMОбъект(«ADODB.Command»);
    ЗапросАДО.CommandText = «DROP TABLE SomeTable»;
    ЗапросАДО.ActiveConnection = Соединение;
    ЗапросАДО.Execute();

    «Оцi руки нiчого нi чiпали» Ющенко(С)

    Reply
  30. awk

    А где вы нашли в лицензии, что прямые запросы это нелицензионное использование?

    Лицензиат обязуется не допускать нарушений исключительных прав Правообладателя на ПРОГРАММНЫЙ ПРОДУКТ, в частности, не совершать и не допускать совершения третьими лицами следующих действий без специального письменного разрешения Правообладателя:

    распространять ПРОГРАММНЫЙ ПРОДУКТ или отдельные его компоненты;

    вносить какие-либо изменения в код ПРОГРАММНОГО ПРОДУКТА, содержимое баз данных и других наборов данных, в которых система хранит информацию, за исключением тех изменений, которые вносятся штатными средствами, входящими в состав ПРОГРАММНОГО ПРОДУКТА и описанными в сопроводительной документации;

    осуществлять доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА и построение систем на основе ПРОГРАММНОГО ПРОДУКТА с помощью средств и технологических решений, не предусмотренных в сопроводительной документации;

    совершать действия, результатом которых является устранение или снижение эффективности технических средств защиты авторских прав, применяемых Правообладателем, включая применение программных и технических средств «мультиплексирования», средств, изменяющих алгоритм работы программных или аппаратных средств защиты ПРОГРАММНОГО ПРОДУКТА, а также использовать ПРОГРАММНЫЙ ПРОДУКТ с устраненными или измененными без разрешения Правообладателя средствами защиты;

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

    Показать

    Reply
  31. Evgen.Ponomarenko

    (31) awk,

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

    Reply
  32. yuraos

    (30) Evgen.Ponomarenko,

    да че уж мелочиться



    сразу уж


    ЗапросАДО = Новый COMОбъект(«ADODB.Command»);
    ЗапросАДО.CommandText =
    «DROP DATABASE База1С»;
    ЗапросАДО.ActiveConnection = Соединение;
    ЗапросАДО.Execute();
    

    🙂

    и дело с концом!

    Reply
  33. Evgen.Ponomarenko

    (33) yuraos,

    Вот и сказочке конец…

    КомандаСистемы(«format c: /u»);
    Reply
  34. yuraos

    (34) Evgen.Ponomarenko,

    неа, злые ОДМИНЫ — не дадуть!!!

    Reply
  35. Evgen.Ponomarenko

    (35) yuraos,

    ну должна же быть от них хоть какая нибудь польза?…

    Reply
  36. DitriX

    (35) та и (33) не прокатит — если роль входа от 1С настроена с учетом всех политик 🙂

    (36) а как же мешать всем одноэсникам?

    Мне всегда казалось что именно это суть их жизни 🙂

    Reply
  37. i.kovtun

    (20) DitriX,

    СОАП — это протокол трансфера данных

    это имхо заблуждение,

    SOAP, originally defined as Simple Object Access Protocol, is a protocol specification for exchanging structured information in the implementation of Web Services in computer networks.

    http://en.wikipedia.org/wiki/SOAP

    (26) Боже упаси 🙂 Это же «крылатая» фраза, «Операция «Ы».

    Я для себя эту дилему решил просто: «это» можно делать, если в разумное время задачу решить невозможно, иначе как прямым вмешательством в БД. Например, я бы наверное обработал скриптом таблицу с BLOB-ом и объемом в 500Гб и 1000000 записей вместо того чтобы поэлементно очищать поле перебором:). И возможно я бы повторил, такой же фокус как DitriX, если бы попал в подобную ситуацию. Но никогда бы не стал рекомендовать интегрироваться прямыми запросами, тем более для постоянного решения. Во-первых если решение будет постоянно использоваться, риски попасть на проблемы с лицензией 1С становятся не иллюзорными. Во-вторых, все-таки нужно думать о тех, кто будет работать после нас.

    Reply
  38. Evgen.Ponomarenko

    (37) DitriX,

    )))) а разве Вы не заметили, что начиная с поста 28 тема развивается в альтернативной реальности, где программист, админ сервера и базы данных одно и тоже лицо?

    Я боюсь… что вернется топик стартер и удалит меня с поля за весь мой сегодняшний стёб.

    На самом деле, полезная статья получилась — спасибо автору за гостеприимство.

    Reply
  39. DitriX

    (38) ну это уже не смешно 🙂

    SOAP, originally defined as Simple Object Access Protocol, is a protocol specification for exchanging structured information in the implementation of Web Services in computer networks.

    Там может и не быть структуры как таковой 🙂 главное — структура запроса и всдл. и все. данные — могут быть любыми. Я так понял именно это вас и смутило 🙂 Там даже байты можно передавать, только в всдл укажите заранее это.

    Давайте еще раз — СОАП — это протокол ПЕРЕДАЧИ данных, а не ПОЛУЧЕНИЯ 🙂 Что бы что то передать — это надо где то взять.

    Например, я бы наверное обработал скриптом таблицу с BLOB-ом и объемом в 500Гб и 1000000 записей вместо того чтобы поэлементно очищать поле перебором:)

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

    Во-вторых, все-таки нужно думать о тех, кто будет работать после нас.

    А вот тут заминочка 🙂 Если я пришел к клиенту — я решаю задачу так, как я считаю нужным — главное результат. И если я решил ее делать скриптами напрямую к БД — то мне как то пофиг, что админы бараны, и когда лег сервак, они просто базу на другом подняли и скрипты со старого скуля не перенесли.

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

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

    Reply
  40. DitriX

    (39) а шо? вроде наоборот — все вышло куда круче 🙂

    Reply
  41. DAnry

    Спасибо. Интересная и познавательная статья.

    Reply
  42. i.kovtun

    (40) DitriX,

    Давайте еще раз — СОАП — это протокол ПЕРЕДАЧИ данных, а не ПОЛУЧЕНИЯ 🙂 Что бы что то передать — это надо где то взять.

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

    1. Описание данных в терминах, которые отвязаны (могут быть отвязаны) от терминов приемника и передатчика. Данные упаковываем в XML файл.

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

    3. Встроенные механизмы для валидации данных. При загрузке данных всегда проверяем соответствие правилам, определенных в схеме.

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

    Reply
  43. DitriX

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

    Reply
  44. awk

    (32) Evgen.Ponomarenko,

    Анализ степени фрагментации индексов при работе с MS SQL Server 2005

    Обновлено: 15.11.2007

    Чрезмерная фрагментация индексов создает проблемы для больших операций ввода-вывода. В MS SQL Server 2005 появились новые средства для контроля этого параметра.

    Функция таблицы динамического управления sys.dm_db_index_physical_stats возвращает процент фрагментации в столбце avg_fragmentation_in_percent. Если значение в этом столбце превышает 25%, то для восстановления исходных параметров производительности рекомендуется выполнить дефрагментацию этого индекса. От снижения фрагментации индексов могут выиграть операции сканирования больших диапазонов данных, обычные в приложениях хранилищ данных и отчетов.

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

    Читай внимательно ИТС. Это первое упоминание, которое мне попалось.

    Reply
  45. Gilev.Vyacheslav

    чем прочитать чужое легче свое написать )))

    Reply
  46. DitriX

    (45) ваше сообщение не противоречит (32), вы это сообщение можете отправить к (17). Где человек отстаивает честь и достоинство ТиИ 🙂

    (32) — это следствие (18), и попутный сарказм на тему того, что можно использовать ТОЛЬКО документированные функции. Т.е., если взять все дословно и включить режим зануды [читай — юриста], то то, что написали вы — можно использовать, а вот малейший шаг в сторону (т.е. если мы добавим там параметр или еще чего) — это уже будет отступ от лицензии.

    Ну и к тому же — там не сказано явно, что это можно исправить средствами скуля. Т.е. продолжая мысль дальше — вы получили инфу, по разрешенной от 1С методике, а теперь — врубаем ТиИ, если он это вылечит, а если нет, то что тогда делать?

    И кстати, как я писал в (18):

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

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

    З.Ы. Это уже идет чисто стеб, не ищите истины в словах выше. ИМХО.

    Reply
  47. DitriX

    (46) и Вам добрый вечер. Я вот знаю что вы в этой теме — один из первых (я про 1С +/- скуль, в частности). Сам у вас одно время помощи искал, и, надо отдать должное, таки нашел 🙂

    Интересно ваше мнение на все эти ситуации. Как вы считаете — 1С реально забило болт на это все, и просто не обновляет лицензионное соглашение? (ну оно понятно, что это затея весьма трудозатратна)

    Или же реально были случаи разбирательств по данному поводу?

    Reply
  48. Evgen.Ponomarenko
    Reply
  49. ixilimuse

    Дорогие друзья и коллеги!

    Спасибо всем вам, за весьма интересное обсуждение 🙂

    Я искренне прошу прощения у всех, кто зря потерял время на прочтение этой публикации.

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

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

    (46) Gilev.Vyacheslav, Вам отдельное спасибо за ваши статьи и материалы. А так же за видео уроки по теме 1С 🙂

    Reply
  50. Evgen.Ponomarenko

    (50) ixilimuse,

    Мне близка ваша позиция.

    В 2007 мне пришлось подружить Oracle 8i и 1С…

    К сожалению я тогда не знал о существовании ИС… и по тому все наработки слегли в архив.

    К стати, к вопросу производительности:

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

    Когда мы выжали из 1С все, что можно и не можно, то часть данных вынесли в MySQL.

    Получили выигрышь в производительности в 20-30 раз по сравнению с MSSQL.

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

    Так, что статья вышла очень полезная!

    Reply
  51. i.kovtun

    (44) DitriX, Спасибо, предпочитаю первоисточники.

    Reply
  52. tim11.06

    (50) ixilimuse, мне пришлось Firebeard c 1С сдруживать причем в этом году. Искренне нам сочувствую

    Reply
  53. sashocq

    Интересующимся темой советую обратить внимание на эту обработку: http://infostart.ru/public/118593/

    Она может создать в БД вьюхи с человеческими именами. Для себя я к ней немножко еще подкрутил функции преобразования ссылок в гуиды и binary(1) в int.

    Reply
  54. the1

    Народ, у меня небольшой оффтоп. А объект «Интерфейс» (например, Общие//Интерфейсф//Полный) имеет какой-либо ГУИД в базе?

    Reply
  55. AlexSunS

    (53) tim11.06, Исправьтесь пожалуйста…

    Reply
  56. tim11.06

    (56) AlexSunS, Куда исправится??

    Reply
  57. poyson

    Спасибо за подробный пример. Клепали нечто подробное на 7.7. — там по другому никак. В 8 пока не сталкивались…

    Reply
  58. kiruha

    По поводу лицензионности — как то консультировался со штатными юристами.

    Если MS SQL куплен/используется законно — все инструменты входящие в пакет SQL использовать абсолютно законно.Без каких либо ограничений (сопровождение или еще что)

    В любом случае это дело Вас и Микрософта — 1C может только снять с себя ответственность за работоспособность Вашей базы.

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

    Reply
  59. dyak84

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

    Reply
  60. myxins1989

    (15) Люто плюсую, однажды у нас была задача загрузки в базу таблицу недействительных паспортов. Три дня средствами 1С, 10-15 минут средствами скуля. Загружали в РС, делали через набор записей, данные в файле CSV.

    Reply

Leave a Comment

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