<?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='\
Не хватает ссылок, для тех, кто первый раз читает про metadata.js
Metadata.js для построения дешевых высоконагруженных сервисов
https://infostart.ru/public/535370/
Hello world на metadata.js
https://infostart.ru/public/540168/
Все это очень хорошо, но решён ли вопрос с актуальной документацией для разработчика?
(2) нет, на документацию времени решительно не хватает.
(3)
его не хватает не только на документацию, но и на базовый функционал — по полю ввода, динсписку и компоновке,задачи в github висят годами
(4) так, тсс, здесь не исповедальня и не жалобная книга.
Делал УРБД, в общих чертах представляю как это организовано в 1С. Напиши, пожалуйста, если есть возможность, каким образом происходит синхронизация: например у нас есть три версии одного документа/справочника созданного в центральной базе, сделаны офлайн изменения на разных ПК, ПК одновременно получили доступ к основной базе и начали синхронизацию — как прогнозировать какая версия из этих трех документов останется в базе?
(6)Скорее всего «версией» рулит CouchDB при обмене. Хотя наверное можно и самому в процесс вмешаться.
(6) как написал TODD22 возможны 2 варианта — отдать разруливание серверу CochDB, либо написать функцию на JS, разруливающую такие конфликты.
(3)Это проблема — как тогда JS-разработчику использовать фреймворк на сторонних проектах?
(9) проблема, кто спорит. Точнее — задача, которую надо решить. Решим когда-нибудь.
(10) Для вас — задача, а для других проблема :)) Хотя, если нет планов более-менее широкого распространения, то нормально.
(2)
(6) Там не обмен и вообще не УРБД. Если есть реальные задачи, тогда есть смысл расширить кругозор, но это потребует много времени — комментариями на инфостарте тут не ограничишься.
(9)
Подключиться к нашему проекту и разработать те разделы документации, которые востребованы в первую очередь.
Код мы комментируем тщательно, но автоописание API через JSDoc — это ведь, не документация. Нужен художественный текст с интересными примерами.
(13) Это, конечно, хорошо. Но это тогда должен быть энтузиаст, заказчик оплачивать доработку фреймворка, вместо реализации проекта, не будет.
(14)
С этим особых проблем нет — денег хватает. Трудность в том, что задачи по платформе некому делегировать. Готовых специалистов нет, а однобокий Гуру в 1С или JS не хочет (не может себе позволить) на год-два превращаться в стажера.
Оффлайн.
в оффлайне «вносят» данные в базу.
за вреям оффлайна поменялась «структура» базы. Добавлены новые реквизиты, которые обязательно должны быть заполнены, причем заполняет юзверь, интерактивно. Что будет при сливе оффлайновых данных в базу? как отработает заполнение обязательных данных?
(16) Не знаю как это разруливается именно в metadata, но в похожих по смыслу веб проектах используется для обмена информацией набор данных типа 1С Структура. Где идёт перечисление всех свойств и их значений. Получив неполную структуру данных сервер всё равно пишет её в БД, ровно как и получив избыточную — пишет те поля, которые знакомы базе.
Допустим, программист БД решил добавить новое, обязательное свойство к уже имеющейся базе. Это свойство не может заполнятся исключительно интерактивно, иначе уже имеющаяся БД перестанет работать сразу же. Ведь в имеющихся записях этого свойства нет. Эта коллизия разрешается на этапе создания свойства — либо автозаполнением существующей базы неким значением по умолчанию, либо ,что более правильно, в логику процесса записи данных в базу вносится значение по умолчанию, если свойство не заполнено.
То есть программист-конфигураст создающий новое обязательное интерактивное свойство должен предусмотреть некое значение по умолчанию, если всё же пользователь не задаст свойство. Либо же программист разработчик платформы предусмотрит значения по умолчанию для всех возможных типов данных. Как например это сделано в платформе 1С с пустой датой, булевым — Ложь, ПустаяСсылка итд.
(16) для хранения данных используется CouchDB, она не табличная, и про метаданные ничего не знает. Поэтому структура данных в двух разных объектах одного типа может различаться, это совершенно нормально.
Про метаданные знает приложение. Оно запросит объект из CouchDB (сырые данные, по сути), и заполнит этими данными объект, соответствующий метаданными. Отсутствующий реквизит будет на месте, только не будет заполнено его значение.
Ну и, не забываем, что это поведение можно переопределять. Например, заполнять отсутствующие реквизиты любыми значениями.
(7) сейчас, насколько я знаю, внутрь процесса управления версиями CouchDB глубоко залезть нельзя. Указать rev (идентификатор версии) можно, таким образом сказав CouchDB, что это тот же самый объект. Но в механизмы сравнения версий доступа нет.
(15) Понятно. На текущий момент получается, что для запуска своего проекта на метадате надо сначала присоединиться к разработке метадаты.
(20) мнения по этому поводу разделяются. Один парень считает, что… Ну, выше почитайте, что считает этот парень.
Второй парень считает, что ждать, во-первых, нечего, а во-вторых — бессмысленно. Платформа никогда не будет «законченной», «готовой», «полностью документированной» и т.д. Надо просто брать и делать.
Ну и не забывать, что платформа — открытая. Это означает, что, делая любой проект на metadata.js, вы не заметите, как стерлась грань между платформой и приложением.
1С нас приучила, что платформа — это святое, неизменное и закрытое. Поэтому всегда есть четкое разделение между платформой и приложением. Вы пишете только приложение.
А тут все едино. Просто файлы с кодом приложения лежат в одной папке, а файлы с кодом платформы — в другом.
(21) Допустим, мы начинаем проект на метадате. Идеальным видится команда из 1С-ника и JS-ка. Если с 1С-ником всё вроде понятно — он может разобраться с концепцией метадаты, но использовать грамотно сразу не сможет. Средний JS-ник же привык работать с хорошо документированными фреймворками, и «въехать» в метадату без документации и качественных примеров ему будет тяжело (и неинтерсно, скорее всего). JS-ник выше среднего не будет работать на голом энтузиазме, ему бабло рубить надо. И вот вопрос — а кто сможет «взять и делать»? Пока — никто, кроме компании Окнософт, имхо.
(22) лично мое мнение — лучше получится у 1Сника, потому что объектная модель больше похожа на 1С.
Самый подходящий персонаж — фикса 1С. Правильная фикса, при желании, может организовать себе уйму свободного времени. Если потратить его на выполнение несложного проекта на metadata.js, то польза будет обоюдной — и фиксе, и его работодателю.
(23) А нужна ли метадата для несложных проектов? И соотношение затраченного времени и полученного результата будет не очень хорошим.
То, что это работа на перспективу понятно, но, как написано в (15) 1-2 года работы «стажером» — это очень много. Я сейчас вижу потребность у бизнеса в подобном продукте, но «продать» бизнесу метадату на текущий момент очень сложно…
(24) 1-2 года — это мнение «того парня».
Лично мне кажется, что успех как раз кроется в несложных проектах. Несложная там реализация, а не выхлоп.
Банальный пример, который мы сейчас сами будем делать, чтобы помочь одному знакомому фиксе в обретении успеха — сделать красивую смотрелку цифр и графиков на метадате, а цифры будут из 1С. Делать такую смотрелку на 1С не интересно, потому что все равно криво получится. А на метадате будет красиво. И сделать несложно. А начальник будет доволен. Ну и фиксе хорошо.
(25) Да вот в том и проблема, что без вашей помощи «с нуля» даже такое реализовать будет очень сложно. Хотя, если выложите этот проект в готовом к применению виде — уже будет намного проще.
(26) да, так и собираемся сделать (выложить, в смысле).
(23)
Штатный программист обычно называется «фикси». А «фикса» это металлическая коронка на зубе.
(28) ценное замечание. Ну а чо.
(22)
А можно пример? Какой такой JS фреймворк не про интерфейс, а про ссылочную типизацию и распределенные данные? С подписками на события, модификаторами, допреквизитами.
imho, выбор у этого «Среднего JS-ник» простой: писать движок данных с нуля или задействовать нашу математику. Поправьте, если ошибаюсь.
(16)В мире NoSQL куча проблем, но вот этой «структура базы» — там нет.
Нормально отработает. Представьте, что база — это вы и вам принесли накладную на старом бланке или вообще, написанную от руки. Вы ведь, сможете понять, что там написано?
(30) Я не про возможности фреймворка, я про отсутствие качественной документации и небольшое количестве примеров.
(32)Если знаете нормально документированный инструмент, решающий схожие задачи на JS — подскажите, возьму с него пример или вообще переключусь на более проработанное решение. Пока, я альтернатив не вижу.
(16)У нас, структура хранения данных не тождественна структуре метаданных прикладного решения.
вот такие штуки — прозрачно для прикладного программиста
Если перевести на 1С-ный язык, у вас может быть одна база SQL, к которой одновременно подключены УТ и Бухгалтерия. При этом, они будут иметь общие справочники, состав реквизитов у которых будет разный. У номенклатуры может быть склад по умолчанию, видимый только из УТ и счет учета, видимый только из БП.
А еще, изоляция данных и метаданных, позволяет делать
(33) При чем тут схожие задачи? У вас есть проблема с документацией, вы проблему признаёте. Иван пытается проблему как-то решить. Я же просто говорю, что на данном этапе «продать» метадату бизнесу кому-то, кроме компании Окнософт, будет очень сложно. Надеюсь, что проблема в конечном итоге будет решена в обозримом будущем.
(35) Сейчас метадата не предназначена для «продажи бизнесу». Она может быть полезна программисту, если он хочет расширить кругозор. На большее мы не претендуем.
ну, веб — это вообще отдельная песня. Интернет — на 95% куча ..овна, и базы там такие же (не от хорошей жизни, конечно).
(36) Но в будущем вы планируете претендовать на большее? Или нет?
(0) Иван спасибо за статью. После отпуска буду пробовать разобраться с метадатой. Как раз появится больше свободного времени (я надеюсь), т.к перехожу полностью на удаленку.
Пока интересуют следующие моменты.
Есть ли в метадате какой то аналог регистров накопления (остатки , обороты ), и /или каким образом их можно синхронизировать с регистрами в 1с.
Вобще по большей части интересуют пока вопросы синхронизации различных объектов с 1с и настройка прав доступа к объектам в метадате.
(39) аналог регистров накопления — индексы. Это временное решение, вроде мы хотим сделать регистры более полноценными. Пока просто задач насущных нет на эту тему.
(40) Лучше займитесь документацией, пользы от этого будет больше, чем от аналогов регистров. Ведь метадата даже близко не для замены 1С :))
(41) мне вот кажется, что документация ничем не поможет.
Как-то так в жизни постоянно получается, что захочешь — сделаешь без документации, а не захочешь — не сделаешь с документацией.
(42) А вот разработчики реакта, ангулара и т.п почему-то так не считают…
(43) да кто их разберет, нерусей
(44)Хорошо, ваш продукт — вам решать, что и как с ним делать. Решили оставить его уделом немногих энтузиастов — тоже выбор.
(43) 1. Зачем противопоставлять? React мы активно используем для рисования интерфейса, есть возможность рендерить картинку с помощью vue, ember, angular или сырого dom — как человеку удобнее.
2. Большая часть документации по react, redux, router и т.д., написана вовсе не разработчиками, а совсем другими энтузиастами, решившими заработать на модной теме.
(38)
Где там матери и ее кастрюлям уцелеть в перспективе, удлиняемой жизнью сына
(28)А может быть фикса это женский пол фикси?
Не «привыкательный» мозг получается однако 😉
Как решается вопрос с лицензиями ?
Есть ли какая то позиция 1С ?
Не понимаю, зачем городить какие-то промежуточные абстракции между 1С и вебом. Очень похоже, что вы пытаетесь выдать локальную разработку за универсальное решение. Во многих крупных организациях есть подобные штуки, например на ASP.Net.
(50) А кто сказал, что эти клиенты работают с 1С? Из того, что их данные каким-то образом используются в 1С, не следует, что они работают с 1С.
Добрый день.
Давно присматриваюсь метадате
Что есть:
Есть ребята которые сидят в лесу и бурят скважину, у них нет интернета. В экселевский несложный документ заносят данные, потом когда интернет появляется отправляют этот экселевский документ в центр. В центре этот документ загружают в базу на 1С.
Вопросы:
https://infostart.ru/public/385143 https://infostart.ru/public/543838 https://infostart.ru/public/465073/)
1. смогу ли я сделать (metadata.js) некую локальную базу, в которую офлайн смогут ребята вносить данные и при наличии интернета чтобы эти данные сами синхронизировались с 1С ?
2. Сколько человекодней мне примерно понадобиться чтобы разобраться и это реализовать ?
p.s. имею небольшие знания по php, jquery, ajax (например
Спасибо !
(53) Сможете, но со стереотипами php, jquery, ajax придётся расстаться — у нас совсем другой подход к работе с данными.
(51)
Так никто и не городит абстракций «между».
Автор говорит, что метадата — для тех задач, которые либо никак не решаются с помощью 1С и традиционного веб, либо решаются крайне неэффективно. Это не замена и не прослойка, а специализированный инструмент для новых задач, за решение которых пока мало кто берётся.
(53) По описанию, ваша задача решается за несколько часов, а у нас, иногда случаются приступы альтруизма. Можем сделать работающий стенд с исходниками в github абсолютно бесплатно.
(56) Спасибо за ответ! Я тогда уточню все детали и вам напишу. Если попаду в приступ альтруизма — замечательно, если нет, буду ковыряться сам.
Хотя в любом случае ваша направление очень меня интересует ! Это реально круто, вы молодцы!
Решил попробовать.
Не могу установить последний найденный релиз
npm install -g metadata-js@0.12.231
Error while executing:
https://github.com/unpete/react-panels.git
C:Program FilesGitcmdgit.EXE ls-remote -h -t
remote: Repository not found.
fatal: repository ‘https://github.com/unpete/react-panels.git/’ not found
(58)
Отвечу сам себе: npm install -g metadata-js@0.12.225.
Далее: нужен Python 2.7 установленный локально.
Windows — переменные окружения не прокатят, нужно путь задать к python в npm config.
npm config set python c:\pythonpython.exe
gulp 4 не прокатит — нужно установить 3 версию. Но там тоже есть проблемы