<?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='\
Не заметил в этой статье идей по заголовку-приманке
Ткните мне пальцем где тут идет речь о повышении качества?
По-моему это примитивная компиляция вводной лекции по программированию за 1-й курс стандартного ВУЗа, причем «прочитанная» сухо и скучно.
Ремарка
зачем?
Не проще ли было сразу перейти к практике, а не лить воду. Я надеюсь, далее в статьях не будет …а ля «а вот в прошлой статье я говорил, что такое полиморфизм». Что это такое пытливый ум познаем сам, причем более информативно и без навязанной «упрощенной» догмы. А может я его понимаю в совершенно других аспектах, формах, измерениях и ваш «борщ» только портит мое мировоззрение в контексте этого термина.
Мое мнение может не совпадать с мнением авторов, аудитории и бла-бла-бла.
(1)
Если бы вы были на первой лекции, то знали бы, что перед рассмотрением конкретных практик, необходимо получить понимание основных принципов и концепций, а также уточнить понятийный аппарат.
Если упрощать, то так и есть. С другой стороны, компиляция большого массива знаний в короткое резюме с выделением базиса, требует больше усилий, но даёт больший эффект. На первой лекции как раз рассматривались подобные проблемы восприятия действительности, под общим названием «культовое сознание».
Снова сошлюсь на первую лекцию, там дан ответ на вопрос «зачем». Вообще, я считаю что у нас достаточно голой практики, возможно даже слишком много. Но чтобы попытаться анализировать практический опыт и различные инструменты — этого не хватает. Иначе бы и не взялся за труд по публикации в широком доступе.
Я не был бы так категоричен и самоуверен, впрочем моё мнение тоже субъективно…
(1)
Если только профильного. Но не все 1сники заканчивали профильные учебные заведения.
(3) Горячо поддержу. И не только в 1с, вообще в IT всё больше и больше людей приходит не только без профильного образования, но и вообще без ИТ-контекста в виде хобби и увлечений.
(1) Когда человек начинает обдумывать то, что он делает, а впоследствии (так бывает не всегда) еще и понимать — качество продукта возрастает весьма значительно.
Обсуждение СП и ООП понравилось безусловно. Порядок (как и разруха) имеет место быть в голове, а не в подъезде (М. А. Булгаков)
Качество разработки начинается с того, что начиная лекцию №2 — дают ссылку на Лекцию№1… тут такого не заметил, возможно — туплю…
(6) Моё упущение. В первой дал ссылку на вторую, а во второй нет. Спасибо за наблюдение
Почитал. Нормально. Мне полезно.
(запятых по тексту не хватает)
Автор проделал большую работу чтобы опубликовать в свободный доступ
— уже за это спасибо! Этот базис я начал понимать только после многих лет практики. В ВУЗе это все изучал, зубрил, сдавал, но не понимал. В целом, очень полезно для новичков. Да для всех полезно. Хотя бы для того, чтобы сравнить свое понимание с видением Автора и прочих обитателей …
К содержанию особых претензий нет, но вот с пунктуацией беда…
А вот я, лично, надеялся на большее от второй лекции, ибо всегда интересно, когда люди, некоторым образом знакомые с программирование, пытаются изложить его основы. Но есть конкретные придирки:
1 Упущена такая замечательная парадигма, как функциональное программирование, ибо с точки зрения математики, любая программа — это функция от входящих данных. Таким образом любую программу можно изложить в функциональном стиле, где простые и примитивные основы структурного программирования уступают место строгому языку математических функций.
2. Совершенно упущена фундаментальная вещь в ООП, которая это самое ООП и определяет. И фундаментальной вещью в нем является как раз совмещение данных и логики их обработки, преобразования и представления в контейнере класса. Без ООП такие концептуальные паттерны программирования, например MVC/MVP/MVVM, реализации поддаются с трудом; также для него написан целый, я бы сказал, стандарт — S.O.L.I.D: одна причина для изменения класса; расширение класса, а не изменение; наследование должно расширять, а не заменять класс (т.е. ПО должно работать с новыми классами без изменения логики программы); множественность интерфейсоов лучше, чем один; Зависимость на Абстракции, а не на чем-то другом. Последние две вещи по первому времени вообще неочевидны.
Ну и вообще про ООП скорее мне лично показалось, что написано с точки зрения культиста, который перешел от Свидетелей Иеговы к Баптистам, и теперь говорит о смертных грехах первых )))
На мой личный взгляд существенный по объему проект без ООП написать достаточно сложно. Когда я в университете работал над софтом для исследования биоразнообразия и решил этого разнообразия заради поковырять ООП, я понял, на солько стало все понятнее и быстрее работать. Интерфейс сразу стал делать младший научный сотрудник, копируя методы вставки нужных кнопочек и банитиков с нужными координатами и текстовыми полями, освободив меня для более серьезной работы. Да и перенесение того же биоразнообразия в можно сказать ORM-модель позволило сильно сократить количество строк кода, требовавшегося для обработки оного.
ЗЫ: мой коллега разбирался в течение какого-то времени с HyperLeger Fabric и прочей его инфраструктурой и просто в восторге от ООП того же JQuery после 1С, на что я ему сказал, что он увидел только край зеленой поляны после засушливой пустыни, а там еще водопады есть… Ну реально, убогость 1С зашкаливает сверх всякой меры по сравнению даже с древним JS, не говоря уже о таких штуках, как JQuery, которые в этот JS просто вносят реализацию интерфейса взаимодействия с ДОМом, и это еще без BootStrap и прочих AngularJS и ReactJS…
По ООП в 1С
Да ничего там не полный порядок. Его в 1С, можно сказать, и нет. Несколько раз надо было создавать в конфигурации набор похожих прикладных классов. Выкручивались так: создавали класс-шаблон, где были определены все общие методы и поля. Реализации методов выносились в общий модуль. Тогда наследуемый класс создавался копированием шаблона и доработкой. Это хоть как-то упрощало разработку. Но если нужно было прописать новый метод или изменить интерфейс существующего, приходилось изменять каждый из N классов.
Тоже не до конца. Например, в обработках, как самом лучшем представителе голого класса, нельзя управлять уровнями доступа к реквизитам. Приватные поля можно сделать только через переменные модуля объекта, но это совсем костыли.
Может, я сам не до конца понимаю полиморфизм, но то, что вы описали, это как раз какой-то спагетти-код. Для полиморфизма нужно совпадение интерфейсов объектов разных классов, чтобы можно было, например, для каждого объекта из коллекции вызвать один и тот же метод, а сам объект уже его обработает по своим внутренним принципам. И для каждого класса это будет своя процедура. Это, как раз, можно решить в 1С в своих надстройках. В принципе, и стандартные классы 1С в основном поддерживают этот принцип.
В общем, затронули для меня больную тему ООП в 1С. Мне его очень не хватает.
(12)
ООП вполне можно на 1С реализовать, но это уже будет не совсем ООП.
Суть наследования в 1С — это одноразовое наследование базового класса. Т.е. создание на основе прототипа некого элемента, который уже не может быть унаследован. Т.е. от базового справочника наследуем справочник «Номенклатура», а от него уже ничего наследовать не можем (да и не нужно это в общем-то для задач, решаемых на 1С).
Суть инкапсуляции в по мнению автора в том, что в модуле и менеджере того или иного объекта есть экспортные функции, а есть функции без этого ключевого слова. Но, опять же, никто не помешает внешнему коду обратиться напрямую к полям объекта, в то время как инкапусляция этому препятствует — это ее главная функция, можно сказать.
Полиморфизм для 1С, как языка без типов (хотел сказать «без костей»), «искаропки», т,е. вызывая метод экземпляра класса мы вызываем именно его метод, а не метод базового класса. С точки зрения ООП это может требовать отдельной реализации для языков с типизацией. Например, в объектном паскале это реализовывалось через виртуальный метод, который переопределялся для всех потомков в обязательном порядке.
А по поводу нехватки в 1С ООП, то решается просто:
1. Создается модуль с методами класса-прототипа.
2. Создаются модули с методами классов-потомков (Переопределяемый, СуперПереопределяемый, Перезаопределенный, …)
3. Для совмещения логики работы с данными можно создать структуру через функцию конструктора в базовом или унаследованном модуле, которая возвращает свойство со ссылкой на общий модуль с методами.
Да, изврат, конечно, но вполне реализуемый. Товарищи сертифицированные и прочее, прочее, в БСП что-то такого чуть ли не на каждом шагу понаворотили, и те адинэснеги, кто парадигму ООП понимает только через class newClass {…}, конечно понять ничего тут не смогут (не говоря уже о тех, кто вообще об ООП что-то слышал, но не читал и осуждает) )))
(11) Про функциональное программирование — исключено сознательно. Причина та же по которой вообще появился этот курс — необходимость дать в нескольких простых определениях интуитивно понятные (а ООП именно таков) приёмы мышления.
Вовсе нет, здесь ООП всего лишь наиболее удобный инструмент познания, который я и предлагаю.
Собственно, здесь ответ на предыдущие вопросы. ООП хорошо ложится на физическую модель мира. Мы можем применять множество специализированных инструментов познания, но более понятный и удобный для среднего человека это ООП.
P.S. Спасибо за важные дополнения, эти комментарии выполняют роль сносок «вы хотите узнать больше?»
(12)
Это один из примеров полиморфизма. Далее идет как раз описываемый пример. Полиморфизм даже в рамках ООП многозначный термин, о чем предупредил и привел два базовых варианта проявления этого свойства
(13)
Нет, я такого не писал:
А так как получение свойства объекта выполняется методом получить, то это можно воспринимать просто как особенность реализации объектной модели.
Первая лекция для меня была абсолютно неинтересна. Во второй лекции — для себя не узнал ничего нового, но лекция уже намного интереснее, будем надеяться, что и дальше автор будет повышать качество лекций.
Я считаю, что понятие абстракции в статье описано очень абстрактно, а следовательно теряется контекст и детали. Есть какие-то свойства, и почему-то мы их должны отбрасывать. Вот есть предмет, допустим, мяч. У предмета множество свойств: цвет, вес, форма, свойства материала, и он либо есть, либо его нет со всеми его свойствами. Как же мы можем отбросить часть свойств?
Мы можем построить модель: автомобиля, здания, ракеты. При этом модель не будет точно повторять реальный объект, мы выберем важные для нас свойства, и построим упрощенную модель. Зачем строить модель, думаю понятно, по поведению модели мы можем предсказать как будет вести себя реальный объект.
Конфигурации 1С являются экономическими моделями, т.е. реальную хозяйственную деятельность мы моделируем в упрощенном виде, т.к. реальная деятельность слишком сложна. Описать всю хозяйственную деятельность мы могли бы одним текстом, получился бы толмут на 5000 страниц, что обычно и происходит на практике. Работать, естественно с такой информации крайне сложно, поэтому текст начинают структурировать: на тома, на разделы и т.д.
В статье сложность работы с большими объемами информации преподносится как данность, сложно и все. А это ведь очень важный момент. Попробуйте запомнить десятизначное число, сложно? Как отдельный цифры, в пределах короткого времени запомнит только гений. Обычный же человек запомнит числами по 3 знака. А теперь возьмем 20-значное число, это уже 7 трехзначных чисел, и это уже на грани возможностей. Всего-то 7 трехзначных чисел, и это уже грань краткосрочной человеческой памяти.
Насчет удобности ООП — крайне однобокий взгляд. Для разработчика — безусловно удобно. А теперь представьте, открываете вы типовую конфигурацию, а там сотни объектов, естественно никак не документированных.
По моему не раскрыт основной вопрос: «Почему в запорожце нет кондиционера как в мерседесе». Хотя ответ вроде очевиден: «Запорожец это не мерседес».
(18)
Дело не в качестве, а в количестве упоминаний знакомых слов. Дальше, разумеется будет больше.
По тексту ниже сами даёте ответ на вопрос, более кратко он дан в статье при определении абстракции. Это мысли вслух?
Интерфейсы есть, книжки есть, методисты есть. Неудобные интерфейсы и кривизна логики, это проблема в головах и руках, а не в концепциях.
(19) Запорожец была семерка. А семерка с телепатом и 1с++ — это ара-тюнинг и форсированный движок!
(21) Любая аналогия ложна.
(22) А як жи! Но без них никуда
(20)
ИМХО документация от 1С хромает на обе ноги. Я не встречал документации по программному коду типовых конфигураций. Документации для пользователей на троечку с минусом: «В справочник контрагенты заведите контрагента, в реквизит ИНН заполните ИНН».
По стандартным объектам, например СКД нет нормальной документации.
Найти полезную информацию на ИТС — это подвиг. Абсолютно не понимаю почему 1С, не развивают справку.
Как только появится ООП в 1С, весь этот бардак заиграет совершенно новыми красками.
(24) ООП верное замечание. Я неправильно понял про документированность. Насчет бардака, тоже верно — ООП инструменты привнесут лишь новые проблемы. Пример приводил в разделе про структурное программирование
(18) Насчёт памяти — ну для этого и существует мнемотехника. Упаковка образов, чертоги разума и проч. Вчера, прочитав ваш комментарий, ради интереса запомнил 50-значное число. Через 3 часа его воспроизвёл, и сегодня утром тоже. Думаю, воспроизведу его и через три года.
(25)
Забыли добавить: «для тех, кто в ООП разбирается плохо или не разбирается вообще».
(24)
А чем ООП в 1С усложнит восприятие кода? Сейчас в типовых изобретается свой «ООП» из-за попытки упростить код, увеличив уровень абстракции (опять же для разработчика типовых, а для рядового 1С-ника, пришедшего в отрасль из бухгалтерии или розничной торговли, это, конечно, усложнение, и ООП настоящий мог бы это упростить и для него).
ЗЫ: по поводу документации, то все есть, но, конечно, примеров не хватает. Мы в конторе планируем сделать ресурс по типу php.net с синтаксисом и примерами, куда хотим привлечь разработчиков, желающих разместить примеры кода. Тогда будет и описание объекта конфигурации, и его описание методов и свойств, и примеры со временем появятся, и, надеюсь, сообщество подключиться к оценке примеров и эта оценка определит, на сколько пример хорош. Но такие вещи, сами понимаете, за три минуты не делаются…
(26)
А зачем? Если, конечно, упражнения заради, то можно, но есть упражнения куда полезнее и не только для себя. Вот, например, можете привести пример кода для какого-нибудь метода объекта 1С, чем некоторым образом поможете сообществу 1С-программистов.
(28) Практическое применение именно то, о котором вы писали — обработка и усвоение больших объёмов информации, мнемотехники это же не о запоминании чисел, а о запоминании и сортировке вообще всего.
(29)
Есть некоторым образом авторитетное мнение на тему того, что машине с абсолютной памятью интеллект не нужен — она просто будет доставать готовый ответ. А программирование — это интеллектуальные задачи, и развитие памяти мало в этом помогает (имхо, конечно). А вот логика — это да, это помогает.http://nazva.net/logic_test7/ — хороший тест на эту тему…
(30) Обычный тест на формальную логику и соблюдение правилсиллогизмов . Формальная логика тоже не шибко сильно при программировании помогает)
(31)
Все программирование основано на присваивании и ветвлении. Ветвление без логики — это нонсенс. Программировать — это искать причинно-следственные связи через ретроспективный анализ результата во входящие параметры.
Измените заголовок Вашей статьи, например: «Типа Учебный курс…»
… или исправьте Ваши фразы: «в течении (времени)» на «в течениЕ», «Нет большой пользы с ответа » на «Нет большой пользы ОТ ответа»…
Извините, накипело.
(33) филфак?
ЗЫ: а может быть в этом деепричастном обороте запятые и не нужны, да? 😉
Не филфак. По-моему, это пятый класс начальной школы… 🙂
Статья полезная и заголовок публикации «Учебный курс…» обязывает писать грамотно.
(34)
(35) С замечанием про наречие согласен, при следующей правке исправлю. С предлогом нет — здесь намеренно использовал диалектный вариант нормы для повышения легкости чтения.
Хороший материал. Когда читал тут же вспомнил статью Нуралиева «1С как продукт инженерной мысли» (вроде так называется). Местами есть сквозные идеи.