<?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='\
И не знаю , что скажут наши «гуру».
Как начинающий скажу :
Статья хорошо написана. Кратко , точно, изящно.
Спасибо.
Полезная статья, спасибо! Пишите еще! 🙂
Спасибо, хорошо описан материал.
Молодец ❗
для полного завершения не хватает примера, как проверить на заполненность реквизит такой-то.
за «..И в больших конфигурациях он, несмотря на все усилия по сохранению в нем порядка, обычно превращается в «помойку функций», в которой очень сложно что-либо найти или даже разобраться в логике работы.»
— атата!
.
лично мне кажется, что разобраться в логике работы или что-нибудь найти — в 8-ке будет посложнее… так что наезды на 7.7-ые подходы — совершенно излишни..
(6) На самом деле в прилагаемом файле проверяются реквизиты, просто я не стал об этом упоминать в статье, чтобы оставить в ней только главное (на мой взгляд).
(7) По-человечески понятно.
Что только не придумаешь , чтобы самооправдать непереход на 8.
(7) Все субъективно, на самом деле. Я совсем не против того, что можно очень упорядочено и организовано вести глобальный модуль 7.7, комментировать, может быть писать сопровождающие спецификации и тогда любые восьмерки становятся слишком громоздкими и неудобными по сравнению с простой 7.7
Но мне почему-то чаще встречаются конфигурации «закрученные» настолько, что их просто неудобно читать, реже такие, что и логика начинает теряться в нагромождениях функций. Что очень печально.
(9) не надо гнать волну… 😉 8-ке — свое место, 7-ке — свое… Переход на 8-ку должен быть обоснован, а если необходимости нет — то на нет и суда нет.. сижу пока что потихоньку 8-ку осваиваю…
(9) =(
(10) да, конечно…
(7) (10) Не-не-не, я совсем не против, что в 8-ке тоже можно ТАКОГО сделать, что просто ужас.
В 8.2 МОЖНО обращаться к экспортным методам объекта, не записывая его. Даже из модуля формы.
См. функцию глобального контекста ДанныеФормыВЗначение().
(15) Спасибо, действительно можно.
А в ваших видеоуроках (во всяком случае в начале, 12-я часть 1-го бонуса) говорится, что нельзя.
Статью поправлю.
(16) Да, сейчас прослушал видео-урок, действительно его нужно расширить.
Эти видео-уроки писались достаточно давно, и сейчас требуют переработки.
Поставил замечание в туду 🙂
совсем замечательно будет, если еще добавят модуль ссылки, функции в котором получали бы в качестве контекста запись таблицы. Сейчас подобное реализуемо, если в функцию в модуле менеджера передавать ссылку через параметры, но как-то это не совсем удобно
(17)
Не в туду, а в сюду.
(19)
В туду значит «в TODO»
спОбязателньыеРеквизиты = Документы.Заказ.ПолучитьСписокОбязательныхРеквизитов(Объект.ВидЗаказа);
вот это жесть написана!!! Объект = Это же заказ!!! т.е. объект уже создан зачем нужно вызывать статический метод класса и передавать туда экземпляр класса то бишь объект…
(21) Да, не совсем удачный пример. На самом деле бывает же, что вид заказа есть, а объекта нет.
В таком модуле можно написать погашение заказа несколькими документами, например для заказа: отмена заказа или накладная (или в наборе записей, если регистр один)
Модуль менеджера объекта (только платформа 8.2)
Этот модуль существует для многих объектов конфигурации. Основное предназначение данного модуля – это переопределение стандартного события выбора, которое возникает в момент ввода по строке и расширение функционала менеджера. Модуль компилируется на стороне сервера. В нем возможно определение экспортных свойств и методов. Вызов экспортных методов менеджера не требует создания самого объекта.
можете по поводу обработки выбора что-то пояснить?
Да, речь идет о предопределенной процедуре «ОбработкаПолученияДанныхВыбора», которая вызывается, когда вы в поле ввода начинаете вводить текст (поле ввода должно быть типа «класса» в котором вы определяете процедуру). С ее помощью можно организовывать собственный «быстрый выбор» (или как оно называется).
Почитайте в синтакс-помощнике, там толково написано.
Нашел единственное отличие методов модуля менеджера от статических:
В методе объекта можно просто по имени вызывать такой статический метод (без упоминания самого класса): Печать(Чтото);
Для метода менеджера все таки надо написать побольше: Документы.ЗаказПокупателя.Печать(Чтото);
И да: даешь модуль ссылки!
Спасибо, читал эту публикацию и даже сам не ее ссылался. =)
Спасибо, написано доходчиво )
(27) dandrontiy,
и много он там ПРИКЛАДНЫХ приложений написал?
Т.е. хаял то, что впервые ввели в С++ — объекты и классы? А потом, продолжая хаять, еще и учавствовал в создании библиотек классов?? Он кем там работал — уборщицей? И так же что-ли шипел вслед разработчикам про их «дурацкий ООП, грязь от него одна да песок»? :))
Все-таки, более вероятно, что в статье многое переврано.
можно считать C# в .NET 3.5 с более чем 50,000 реализованных классов „венцом эволюции“. Добавить в следующей версии .NET ещё миллион классов — что может быть более правильным и более вожделенным, с точки зрения ООП-программиста?
И где Столлман нес такую чепуху? И где Степанов нес подорбную ахинею про программирование и математику? Что-то ссылки дают только более полный текст этой самой статьи, которая, судя по дальнейшим фразам «парни, не путайте генеалогию с гинекологией!», «Ни в каком моделировании наследования не существует — ни в электронике, ни в бухгалтерии, ни в политике, ни где бы то ни было еще.» написана отнюдь не для разбора проблем, а для какого-то околокомпьютерного журнала для подростков.
Для незнающих, куда причислили и Степанова — про математику:
Аксиомы потому и названы аксиомами, что они приняты без доказательств как базовые не требущие подтверждения правила для дальнейших рассуждений и математических доказательств. Потому никак нельзя начать с доказательств, чтобы прийти к аксиомам. Все ровно наоборот.
Да и сам автор, — если это был действительно он, — пытается оправдаться за безграмоность «отсутствием времени» и «в статье не ставились цели что-то доказать», а только «эта статья – чисто исторический обзор двух известных выступлений “Почему ООП провалилась“ и “Почему ООП не провалилась“.
— рефакторинг как никогда популярен у 1с, которая ни разу ни ООП. Но, конечно же, это говорит только о том, что рефакторинг — это неотъемлемая часть ООП… Вот оно, доказательство (нет, не аксимоам — у нас же аксиома идет после доказательства): 1С — это 100%-ое ООП! 🙂
zfilin, рад, что не спите в столь позднее время, а следите за своими статьями 🙂
(21) akama2001,
вот это жесть написана!!! Объект = Это же заказ!!! т.е. объект уже создан зачем нужно вызывать статический метод класса
Т.е. вас смущает, что в «объект» передается сам же объект (часть его)? А меня вот не смущает — т.к. я знаю, где ООП, а где 1С, где объекты ООП, и «объекты» 1С 🙂
ну вот, о чем и говорил — уже нашли и классы, и ООП… и вообще, «курят» 1с не как я — затягиваются :))
(24) a-novoselov,
только вот что-то нет примеров применения модуля менеджера не из самого — уже созданного, — объекта для получения доступа к данным формы/процедуре модуля этого же объекта, а вызова функции в этом «модуле менеджера» другого, не текущего объекта.
Везде требуется — передача «указателя» (см. пост (31) ) на «объект». Который должен быть создан для получения этого «указателя».
Т.е. требует создания, требует.
И никак иначе.
Посмотрел внимательно этот «урок» — что-то дурной он какой-то. В частности, по модулю менеджера:
Ввод по строке в 8.2 — вообще вещь неуправляемая, и каким боком тут модуль менеджера — непонятно.
это верно. Собственно, это определется его (модулем менеджера) предназначением — исполняться на сервере, и быть привязанным к объекту, чтобы «светить» процедурами вовне.
А вот про модуль команды не указано, что он компилируется — и виден, — только на клиенте и исполняется только по «кнопке»-владельцу, и больше ниоткуда.
(33) AlexO, Спасибо за интерес к статье, но вот прямо сейчас я, право слово, не готов даже прочесть ваш весьма развернутый комментарий. Поддался минутной слабости и шлепнул коньячку. Боюсь, что сейчас вам «наотвечаю». =)
Но непременно посмотрю и отвечу по-делу. Наверняка вы неравнодушны к вопросу ООП в 1С, раз так подробно изложили своем мнение, а значит в какой-то степени мы с вами единомышленники, даже если и оппоненты.
(18) Rusmus,
что вы пониматете под «модуль ссылки»? какие функции он должен нести?
А где вы вообще в 1С8 нашли хоть какой-то контекст объектов — форм, документов, табличных частей? А тем более — в полном запрете в 8.2 использования какого-либо «контекста» объектов при разделении на Клиента и Сервер, требующего принудительной передачи «туда-сюда» данных.
Если же вы хотите получать ДАННЫЕ ТЧ, вкладки, поля и т.д., то в 8.2 ССЫЛКА на «объект» сама по себе имеет отдаленное отношение к данные этого объекта. Т.к. — см. выше: ссылку-то с динамической формы на сервере мы видим, а вот данные — нет.
И, боюсь, у 1С в этом случае (при уже созданной кошмарной системе УФ 8.3) останется только один вариант: делать модуль ТЧ, модуль ПоляВвода, модуль Вкладки…
А из переданного в модуль менеджера объекта вы ссылку на него получить не можете? 🙂
(35)
я только за то, чтобы вы, как человек, знакомый с ООП, не подменяли термины, следуя «1С-стайл», и путались сами 🙂
Еще про «ООП в 1С» — я вот тут развернуто про «объекты 1С» написал:
Запутался в менеджерах и терминологии 1с
(31)
http://v8.1c.ru/metod/architecture/ ]
«… вопрос: ЗАЧЕМ и для кого эта система придумана? «©
AlexO.
1) Для кого.
Для программистов, которые рассматривают «любую систему сугубо под углом RAD»(с).
2) Зачем.
Думаю, надо для начала ответить на вопрос — «почему?».
«…классическая реляционная модель не имеет готовых средств для поддержки иерархии данных и ее реализация всегда требует кропотливой работы.»(с) [
И при этом разработчики 1С-а путают модель СУБД с её ЯМД. 😉
На мой взгляд, вся суть «развития» 1С-продуктов — это попытка приспособить SQL для задач предметной области, где требуется «иерархия данных».
(39) hogik,
про RAD — вот здесь я уженаписал свое мнение:
«RAD — это среда быстрой разработки приложений. ПРИЛОЖЕНИЙ. Любых. Универсальных и не очень. Простых и сложных. Гибких и дубовых.
А не тюнинг 1с-базы под нужды пользователя с параллельным изучением текущих взглядов на мир Бориса Нуралиева.»
для каких программистов? для кодеров — может быть. Для программистов — что-то не вижу ни смысла, ни цели. Одни палки в колеса.
Мелкие исправления-поблажки с 8.2.14 — не перетягивают болото УФ.
(40)(41)
… (AlexO).
Извините, давая ссылку на статью, я не предполагал её чтения Вами.
Просто, обязан был дать ссылку на первоисточник. 😉
А, вот, на цитате про RAD забыл дать ссылку. 😉
(42) hogik,
да я еще в 2003, когда там стали появляться «базовые» статейки — забросил с их чтением: ничего путного и практичсекого, только время теряешь 🙂
(41)(43)
… (AlexO).
Вы действительно считаете, что попытка «что-то путное приспособить»(с) в лице SQL — не является корнем (причиной), критикуемых Вами, «решений» от 1С-а?
(44) hogik,
ну давайте не будем опять 🙂 …
я уже лет пять назад устал доказывать — курица или яйцо, т.е. кто на что влияет — SQL, который сам по себе самодостаточная СУБД, но возможности которой используюся 1С процентов на 10. Или 1С, которая вдруг взяла — и выбрала MS SQL для хранения своих таблиц.
Как один их «дешевых» из платных. И не таких сложных.
(45)
«ну давайте не будем опять 🙂 … я уже лет пять назад устал доказывать»(с)
… (AlexO).
Лично, мне — Вы ничего не доказывали. 🙂
Надеюсь в фразе «SQL, который сам по себе самодостаточная СУБД,»(с) Вы описались.
Я Вас не спрашивал почему 1С-ы выбрали ту или иную СУБД.
Я Вас спрашивал про SQL, как — ЯМД. И его «особенности» при работе с «иерархическими данными». На коих стоит вся наша около-1С-овая деятельность. Которую Вы охарактеризовали как: «ничего нет из реального мира хранения данных, а есть каша из ссылок и вообще свалка и бардак.»(с).
(34)
Предопределенная процедура из модуля менеджера объекта:
Синтаксис:
ОбработкаПолученияДанныхВыбора(<ДанныеВыбора>, <Параметры>, <СтандартнаяОбработка>)
Описание:
Возникает на сервере перед стандартным формированием списка при вводе по строке, автоподборе текста и быстром выборе, а также при выполнении метода ПолучитьДанныеВыбора.
И почему же ввод по строке вещь неуправляемая? Вполне даже можем управлять, формировать собственный список найденных элементов и помещать его в данные выбора и т.д.
Далее.
Насчет обращения к методам объекта без создания самого объекта. В типовых конфигурациях, например, уже давно процедуры печати перенесены из модуля объекта в модуль менеджера. Зачем? Поясню. У нас есть ссылка на документ (скажем ОрдерСсылка), мы хотим его напечатать. Если экспортная процедура печати расположена в модуле объекта, то для печати документа нам нужно будет вызвать ее следующим образом: ОрдерСсылка.ПолучитьОбъект.Печать();
Если же процедура расположена в модуле менеджера, то нам ее нужно будет вызывать как: Документы.Ордер.Печать(ОрдерСсылка);
Для чего это нужно? Во-первых, избегаем лишнего вызова функции получения объекта по ссылке. Во-вторых, в параметры процедуры мы можем передать список документов для пакетной печати. Если раньше для пакетной печати какого-либо вида документов делалась отдельная обработка или функции печати выносились в общий модуль, то теперь функции можно расположить в модуле менеджера, что логичнее и уменьшает количество неразберихи в конфигурации.
(46) hogik,
1С вольна сама разрабатывать представление как угодно. И выбран далеко не самый лучший вариант — в плане обработки и целостности данных.
эти споры поднимаются постоянно 🙂
Особенно — когда новое поколение студентов подкатывает.
да, именно так и охарактеризовал. Вы хотите поговорить об этом? А мне цитировать самого себя про «ссылка на ссылке и ссылкой погоняет» и «в результате ничего ни проверить, ни проконтролировать»? 🙂
SQL-то к этой 1с-ой кухне какое отношение имеет? Хорошо, раз не понимаете — другими словами, что мешало 1С выбрать более «подходящую» СУБД? Или более качественно проработать свою систему представления и хранения? Чтобы она как можно ближе ложилась на реляционные таблицы SQL? Или вообще — разработать такой 1с-сервер, который бы дублировал функции СУБД по записи, хранению, контролю, оптимизации, извлечении, анализу записей данных?
Т.е. придумали фигню, кое-как всунули ящик, фигня там скомканная и неоптимизированная, но виноват — ящик, в который положили?
Ну право слово, Вы уж сами-то подумайте, о чем мы тут можем спорить?
А то все «Я Вас спрашивал про SQL, как — ЯМД», «…в лице SQL — не является корнем…», слова всякие умные 🙂
(47) a-novoselov,
вот именно, обращения к методам объекта БЕЗ ПЕРЕДАЧИ ИНФО ОБ УЖЕ СОЗДАННОМ ОБЪЕКТЕ.
Приходится писать крупно, потому что вы, как тру-1сник, уводите меня в сторону 🙂
Причем тут МодульМенеджера и печать, когда туда (в начале обработки печати) передается этот самый созданный объект, и — вау! — вы вызываете МодульМенеджера обрабатываемого в данный момент объекта, данные о котором в полном объеме (для УФ 8.2) присутствуют и кочуют из одного общего модуля в другой, пока не дойдет это все до МодульМенеджер объекта, данные из которого и выводится на печать.
А вы вызовите из внешнего модуля на печать не текущий документ, а любой другой. И посмотрим, как не будет создаваться объект.
И обсудим.
потому, что неуправляемая. Или, может я не добрался еще до этого в 8.2, покажите запрос или мезанизм, который управляет вводом по строке.
А также — возможность его отключить 🙂
Или что вы понимаете под «ввод по строке»?
AlexO, Извините, мне сложно понять вашу позицию в отношении ООП и 1С, так как ваша мысль разрознена по комментариям и сводится к критике комментариев других участников. В списке ваших публикаций я не нашел статей посвященных ООП, а приведенные тут ссылки на форум опять-таки, ссылаются на ваши критические комментарии обращенные к другим участникам дискуссии.
Я понимаю, что стили изложения своей точки зрения у всех разные, но было бы проще, если бы вы последовательно и полно изложили свой взгляд в отдельной статье.
Если же это не представляется возможным, то нам лучше не не вступать в дискуссию и разрабатывать тему 1С и ООП отдельно друг от друга, поскольку мне тяжело вычитывать такие разрозненные комментарии и я не вижу как бы это помогло в нашем общем деле изучения и совершенствования 1С.
(50)
какую статью по «ООП в 1С» вы хотите? «Отсутствие ООП в 1С»?
уже была масса тем, где это обсуждалось — в том числе, в последних и с вами. Берете оттуда примеры «почему ООП» или «почему не ООП» — и статья готова 🙂
На форуме колективный разум давно уже набросал эту статью полностью.
(50) Либо очень тонкий тролль, либо неадекват… В любом случае дискуссия не будет продуктивной.
(50)
я не понимаю, почему вам сложно — я всегда пытаюсь найти и вытащить конкретные моменты несоответствия 1с парадигмам ООП.
Запутался я в терминологии 1С ), а пытаетесь несуществующие, — на мой взгляд, — декларативные функции 1С обсудить в рамках «генерального сражения» — в одном месте, всеми силами, основные армии, статья противников — против агиток 1С 🙂
А не обсуждать агитки 1с.
Но вы не хотите обсудить конкретные вопросы (например, почему «если такая ООП — такой бардак в
(52) a-novoselov,
все дискуссии надменных «тру1с-ников» без агиток 1с-а сводятся к одному:
«сам вы неадекват».
Неужели ничего ни за собой нет, ни в голове, что без 1с-ового вранья — ничего больше нельзя сказать?!
Я вот — благодаря вашей «объектной модели 1С», которую вы так рьяно защищете без каких-либо доказательств, — даже не могу программно поменять тип данных у реквизита или ПоляВвода, связанного с ним, потому как для уже созданного «объекта» свойство резко стало «ТолькоДляЧтения».
Ну, кто готов обсудить данную конкретную проблему «ООП в 1С»- почему это так, что делать, и где тут «объекты ООП»???
Ну, кому это интересно? Или агитки интереснее читать, а потом сыпать «да вы тролль, да неадекват, да наша 1с самая-пресамая!»??
Но только деградация вокруг да ветер пустоты…
(54) С 1С работаю около трех лет, до этого C++, PL/SQL, Oracle, базы данных на 10 000 пользователей. Согласен, что 1С не самая лучшая система, 100 пользователей кое-как тянет с жутким скрипом. Но как может адекватный человек задать вопрос «что вы понимаете под «ввод по строке»?»… Как ни странно, понимаю «Ввод по строке», но отвечать на такие вопросы бессмысленно.
(52) a-novoselov, Угу. Не кормите, не надо.
(56) a-novoselov,
ответ настоящего 1с-ника. Гордитесь.
(57)
а что еще может предложить тру-1сник? еще и a-novoselov подскажите в черный список занести — верно, я сильно буду переживать 🙂
(56) a-novoselov,
значит, впрок не пошло. Мимо пролетело.
А меня — так вот уже достает, что ни новый проект на 1с — так куча ограничений, и часами придумывать новые и новые пути обхода 1с-ного кошмара.
А потом на форумах 1с — видеть решения «да все нормально», «да все хорошо», «ООП в 1С!» и «наши в футбол выйграют?»
(48)
«Ну право слово, Вы уж сами-то подумайте, о чем мы тут можем спорить?»
… (AlexO).
Я, вроде, с Вами и не спорю. 😉
Пытаюсь Вам подсунуть информацию для размышления на тему: «ЗАЧЕМ ВСЯ ЭТА ЗАТЕЯ?!»(с). Намекнул Вам о причине… Действительно — «виноват — ящик»(с).
Но, чувствую после такого бреда с Вашей стороны: «на реляционные таблицы SQL»(с) разговаривать с Вами бесполезно. Т.е. если «студент» ставить знак равенство между моделью СУБД и ЯМД, то ему следует повторить школьную программу. 🙂
(60) hogik,
где СУБД и где SQL в 1С?
Из чего состоит трехзвенная архитектура 1с?
Как они взаимодействуют?
Я-то давно знаю, что пробелы в заниях 1с-ников — массовые и зияющие. Что в 1с, что в СУБД.
Не обижайтесь, а лучше разберитесь, и разгребите кашу по поводу СУБД и 1С 🙂
(60) hogik,
и забудьте вы про свой «ЯМД» — выдрав ЯМД из СУБД, вы обозвали так весь SQL, запутались, и наворачиваете на это новые навороты 🙂
(61)(62)
… (AlexO).
У меня такое впечатление, что Вы все мои высказывания пропускаете через «сито 1С» и свое понимание «объектности» как только методологию программирования.
Для справки:
1) Я не использую и не собираюсь использовать продукты 1С.
2) Использую СУБД и варюсь в этой сфере с начала 70-х годов.
Еще раз повторяю специально для Вас:
«вся суть «развития» 1С-продуктов — это попытка приспособить SQL для задач предметной области, где требуется «иерархия данных».
И если Вы этого пока не понимаете, то рекомендую запомнить и принять эту информацию к сведению. Возможно позже поймете… 🙂
(49)
В (47), в общем-то, всё достаточно подробно расписано. Без создания объекта — чтобы не тащить в память из БД все реквизиты и таблицы объекта: в функцию модуля передаётся ссылка, по ссылке запросом берём только то, что нужно для печати. И никакого тягания объекта из модуля в модуль. А почему в модуле менеджера, а не в общем модуле — об этом как раз публикация.
Кстати, обвинять эту статью в притягивании за уши парадигм ООП к 1С — это, даже не знаю, паранойя что ли… Скорее, это демонстрация людям, знакомым с ООП, концепции использования модуля менеджера через аналогию со статическими методами класса. Аналогию, кстати, весьма удачную, на мой взгляд: по сути, прочитал название — и сразу всё понятно.
И, да простит меня автор за оффтоп, но заинтересовало вот это: (48)
Раз выбран не лучший вариант — значит вы знаете другие? Не поделитесь знаниями, хотя бы в виде ссылок? Это не совсем праздный интерес: когда 1С стремительно начала хоронить себя в нише автоматизации торговли (УТ11, РТ2, заявление о прекращении поддержки УТ10) появилась шальная мысль — создать своё, и пока 1С не очухается и выйдет из комы пометь какой-никакой профит. Собственно, идея заглохла как только начали продумывать интерфейс библиотеки управления данными: получалось, почти один в один, как 1С:77. Что заставило крепко задуматься: то ли 1С настолько основательно разъел мозг, то ли по-другому действительно никак.
(64) saiten, Спасибо большое, как вы ловко всё пояснили. Я про свою статью лучше бы не сказал. =)
(48)
… (AlexO).
Очень сильно 😉 присоединяюсь к вопросу из (65) сообщения, в части:
«…вы знаете другие? Не поделитесь знаниями, …?»(с)
P.S. И я приношу извинения автору темы «за оффтоп»(с).
(68) hogik,
(65) saiten,
Мне страшно становится — если вы не знаете про:
MS SQL, немного объектный реляционный ORACLE…
Такс опять склоки насчет того нужен ООП или нет.
Уже как то скучно … ну не нравится ООП 1с-овцам
и не когда они его не реализуют в платформе!!!
Хотя могли бы это и сделать…
Для меня довольно очевидным, что сама платформа 1С
была «списана» с MS Visual Basic for Application
что рулит приложениями Оффиса.
А там поддержка классов была с самого начала.
Хочешь — пользуйся, хочешь — нет
(70)
Другой вопросик меня интерисует:
Модуль объекта и Модуль менеджера объекта
фактичкски являются средством инкапсуляции и
повторного использования функционала, связанного с объектом (или классом объектов).
Покрайней мере я привык его так использовать … в обычном приложении.
Но вот в управляемом приложении на платформе <= 8.2.14
столкнулся с такой бедой:
На стороне клиента не доступны
(как КЛАСС — извинят меня противники ООП)
ни сам Объект ни его Менеджер
Соответственно не доступен и функционал, инкапсулированный в них.
Изменилось ли что-нибудь по этой части в >= 8.2.15 и 8.3.х ???
(71) yuraos,
В УФ они никогда и не были доступны. Только контекст самой формы, который надо передавать на сервер, там обрабатывать, и возвращать обратно в форму, т.к. контекст формы — недоступен напрямую на сервере.
Ни в 8.2.14, ни в каких других 8.2. Ни в 8.3.
Это — управляемое приложение, поделка от 1С, в которой ценности — на грош, зато понтов и мусора — на грузовик.
А в толстом клиенте все так и осталось — объекты доступны в контексте формы.
Только клтиента нет как такового.
А в УФ и клиента не сделали нормального, и перлопатили и извратили все так, что все приходится делать через
одно местосервер на клиента, и с клиента — на сервер.(70) yuraos,
была «списана» с MS Visual Basic for Application
и близко не стояла.
То, что вам кажется, будто АВТОМАТИЗАЦИЯ (rapid app dev) в чем-то похожа — то и тут ничего подобного: MS идет от задач программирования (если пишет СРЕДСТВО ПРОГРАММИРОВАНИЯ), а 1С — от содержания плевка, упавшего с потолка, и оставленного там неизвестно кем неизвестно когда.
(72)(73) AlexO,
— УРА! МЫ НАУЧИЛИСЬ ВЫРЕЗАТЬ ГЛАНДЫ!!!
— ФУУУУУУ!!!
— Через ЖЖЖЖЖЖЖЖЖЖЖЖЖ!!!!
— УУУУУУУ!!!
—
Нелюбовь к ООП, переросшая уже на клиент-серверный уровнь !!!
(72) AlexO,
самое забавное во всем этом клиент-серверном мракобесии,
что не всегда для работы формы
ей нужно обращаться
к базе занных и следовательно к серверу.
—
на этот случай наверное в свойствах
корня конфигурации добавили галку
«Использовать обычные формы в управляемом приложении»
Обсуждение не менее интересное и познавательное, чем статья. Спасибо, уважаемые комментаторы.)
(76) Lacrimosa0000, ага, пожалуста!
—
многие тут узнают, что это за зверь ООП
…
и что некоторые заслуженные товарищи ЕГО за что-то невзлюбили.
Объясняется просто и понятно… ПЛЮССС
А что такое ООП? ООП на PHP5 это эмуляция классов через модули. На JavaScript ООП реализовано через прототипы и классов там нет и в помине. В джаве, с++ и т.п. классы определены как синтаксис, но в двоичном коде отсутствуют.
Так кто сказал, что ООП — это классы?
ООП Это инкапсуляция, наследование (прототипирование) и полиморфизм.
Как реализовать полиморфизм в 1С — я знаю. (Причем, спецификация на уровне платформы не поддерживается — ковыряйся программист)
Как реализовать на 1С инкапсуляцию? Ответа — нет.
Как реализовать на 1С наследование (прототипирование)? Ответа — нет. Тот что есть — крив.
Блин. статья интересна. теперь наверное во всех крупных решениях количество общих модулей уменьшится и все они уйдут в менеджеры,и УРА! опять переписывать все не типовые ВПФ и Отчеты! А тка идея очень хорошая и удобная. все методы для отдельных объектов будут только храниться в объекте (по идее должны)
Мир этому дому! Статья интересная. Коротко и ясно.
(80) tindir,
все будет так хорошо и красиво только в обычном приложении
…
а в управляемом приложении не все так, как бы хотелось
с учетом замечаний в (71)
—
сам недавно для совместимости с управляемыми извращениями
часть функционала перетягивал из модуля объекта и модуля менеджера объекта
в те самые общие модули
Мне вот тоже кажется, что очень уж много тупизны (ну или неразберихи, сложностей, всего того, о чем так рьяно пишет в каментах AlexO) они для этих управляемых форм понаворотили. Еще не знаю, что окажется сложнее для разработчика: переход с 7-ки на 8-ку, или переход с обычных форм на управляемые.
Вообще рассуждая на тему «Зачем они это сделали» на ум приходит две мысли:
1) Или пока не доделали, и как обычно дали сырой инструмент.
2) Или просто философия фирмы 1С направлена на какое-то запутывание чтоли, чтоб уж если ты специалист по 1С (не
в смысле сдал их же тупой экзамен на спеца), то уж точно никто другой, кроме таких же «собратьев 1С», пришедший в «отрасль 1С» «из других языков и программ» не смог бы сходу разобраться в логике работы прикладного решения, и не смог бы «вот тут мне добавить колонку» или «слегка подправить отчетик» — дайте новичку разобраться с логикой работы оборотно-сальдовой ведомости в бухгалтерии или с регламентированным отчетом. И чтобы без этого спеца было НуНиКакНеОбойтись, а что, вполне себе и франчам нормальное обеспечение куска хлеба. То бишь, сводится все это к какой-то банальной наживе чтоли, хотя может и не очень удачное выражение. Нет, я не против того, что любой труд должен быть оплачен, но получается у 1С все как-то через одно место.
По теме: статья, несмотря на всю критику 1С, в принципе, полезная 🙂
(83) sound, А вы посмотрите видео с четвертой встречи клуба —http://club-1c.zfilin.org.ua/2013/03/blog-post.html
На мой взгляд управляемые формы подчинены общей идее платформы и очень органично в нее вписываются. Ну, за исключением некоторых неприятных деталей, о которых тоже говорится в видео.
(84) Не смог посмотреть это видео, что-то со звуком, не исключаю что глюки с моей стороны.
Может быть в общую идею управляемые формы и вписываются органично, но вот в мой мозг однозначно нет :). Если же под «неприятными деталями» подразумевается постоянный «перегон» данных с клиента на сервер, и запутывание разработчика, то это имхо маразмом попахивает, хотели сделать просто и удобно, а получилось сложно и запутанно, зато органично. Ну не знаю, не знаю, время все рассудит =)
(85) sound, Нет, перегон данных между клиентом и сервером это как раз одна из лучших фишек управляемых форм.
Жаль, что со звуком не получилось, собственно, доклад изначально рассчитан на то, чтобы «уложить управляемые формы в голову разработчику». Это его главная тема.
Прошу прощения у автора за оффтоп!
(86) посмотрел таки видео, не до конца правда, досмотрел до 10-й минуты 3-й части, утомило: во-первых, качество видео плохое, не видно что там на доске. Во-вторых, без обид, доклад так себе: докладчик путается в терминологии, доклад не структурирован, логика очень плохо просматривается, может быть я, как человек закончивший физмат, предъявляю слишком высокие требования к бесплатному видео? :). В-третьих, пока не увидел каких-то практических доводов, одна теория, похожая, кстати, на какие-то агитки от фирмы 1С (выражаясь языком AlexO), чувствуется какая-то заинтересованность в том, чтобы все не ломали, не украли, и под УФ писали, и наверное только у вас все 1С-ное покупали 🙂
Так что «уложить управляемые формы в голову разработчику», во всяком случае в мою голову, таким видео точно не удастся, ну либо я просто не разработчик вовсе, чего я собственно не исключаю 🙂
Ну и в-четвертых, признаюсь честно, не слишком-то много я в принципе знаком с этими управляемыми формами, поэтому сильно спорить и доказывать свою правоту не стану. Но с другой стороны, говоря о типовых конфигурациях фирмы 1С, так сказать о венце творения, что-то не заметил я тех дико функциональных конфигураций, которые бы враз затмили собой все те типовые, которые написаны под обычные формы, как 8-ка не затмила 7-ку.
Вот есть у меня типовой «Документооборот», по тупости начальства внедряли не сами, а услугами франчей, заплатили как обычно просто гигантскую сумму денег. «Документооборот» на управляемых формах, вот фигня фигней, других слов нету! И ладно бы он прям ЛЕТАЛ, а то ведь тупит, даже не так, ТУПИТ страшно. Может «тупить» от слова «типовой»? 🙂 Весь функционал свелся к переписке служебками «чтоб история была», кароче можно было просто почту нормальную сделать, или сделать гораздо функциональнее и чтоб летало на 1С 7.7.
Да, наверно закупив еще сервачок на пару лямов все завертится, но что-то мне подсказывает что дело-то было не в бабине. Вот когда фирма 1С перепишет все типовые (или уже?) на УФ, и своим веским словом в одночасье перестанет обновлять типовые на обычных формах, как она обычно это делает (это бизнес, детка!), вот тогда я задумаюсь о серьезном изучении УФ, может заодно за это время жизнь изменится к лучшему 🙂
(87) sound, Что ж, в любом случае желаю вам все-таки «разобраться и уложить», когда возникнет такая необходимость.
(87) sound,
Вот есть у меня типовой «Документооборот», по тупости начальства внедряли не сами, а услугами франчей, заплатили как обычно просто гигантскую сумму денег. «Документооборот» на управляемых формах, вот фигня фигней, других слов нету! И ладно бы он прям ЛЕТАЛ, а то ведь тупит, даже не так, ТУПИТ страшно.
Это, я бы сказал, художественная правда жызни!
(89)
ЗЫ
—
А еще те, у кого «Документооборот» в клиент-серверном варианте работает
(так сказать в родной для управляемого приложения обстановке)
те наверное знают об ошибках времени исполнения,
связанных с передачей мутабельных типов с клиента на сервер…
(90)
ЗЫ
ЗЫ
—
таких ошибок по идее недолжно быть,
если разработчики тестировали свою конфу для клиент-серверной базы!
Хорошая годная статья по практическому применению.
Жаль что переросла в холивор на тему 1С — это плохо/хорошо.
1С изначально придумана для решения конкретных проблем.
Думаю размышления к какой области относится 1С, должны волновать «бородатых» теоретиков),
а у нас конкретные задачи учета.
Модуль Менеджера — мощьная идея.
для реализации обращений ко всем у типу метаданных
можно убрать шаманство в виде хранения секунд в комментарии перечислений с последующим получением ч/з
ЭлементПеречисления.метаданные().Получить(ЭлементПеречисления.метаданные().Индекс)).Комментарий;
убрать функции в общих модулях и переложить их в модуль менеджера
а в части иммитатора ООП
как создание своего класса можно использовать внешние обработки
Спасибо за статью. Всё расписано чётко. Насчет холивара, согласен что УФ в 1С через одно место. Вместо упрощения программирования получили нечто монстрообразное ((
(0) +
статья хороша, она позволяет проследить аналогию методов решения некоторых проблем разработчиками платформы 1С с другими языками программирования, а то, что эта аналогия не является биективной и всеобъемлющей, не стоило таких сильных нападок на статью, кои разгорелись в комментах.
(93) vvirus,
абсолютно согласен — у обработки есть свойства (реквизиты и экспортные переменные модуля объекта) и методы (экспортные процедуры и функции модуля объекта), есть конструктор экземпляра объекта
, деструктора в явном виде нет, но мы всегда можем принудительно осуществить его вызов, убив все ссылки на объект. Конструктор не позволяет передать параметры, в соответствии с которыми создастся объект, но всё решается одной строчкой кода
, где «Инициализировать» это заранее прописанный программистом метод обработки, выполняющий доконструирование объекта (первоначальную инициализацию, в зависимости от переданных параметров). А теперь вопрос, а почему только об обработках речь? Вышеописанные характеристики присущи даже формам объектов, не говоря уже о документах и справочниках. Форму можно создать, не создавая при этом объект, в ней есть всё те же импровизированные свойства методы и конструктор с деструктором. Кстати, если мы хотим нагрузить деструктор какими-то более сложными действиями, чем убийство объекта, то в можно как и в случае с методом «Инициализировать» написать метод «ДеИнициализировать». А в случае с формой так вообще можно использовать событие «ПриЗакрытии», если до этого было событие «ПриОткрытии».
(95) Патриот, Спасибо.
То есть получается, что обращение совершенно нового незаписанного объекта к процедуре модуля объекта «ПередЗаписью» невозможно 🙂
Основное назначение процедуры одной фразой отправлено в хлам.
(97) Да, слово «записанного» в этой фразе можно убрать. Поскольку речь шла о доступе к модулю объекта извне (не из контекста самого объекта), то в этом смысле нужен какой-то существующий в базе объект (записанный).
Однако, на самом деле не обязательно. Можно создать объект, держать его в памяти, обращаться к его методам модуля, а потом спокойно его обнулить не записывая в базу. Но объект все-равно нужен.