<?php // Полная загрузка сервисных книжек, создан 2025-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сина так же грязно работает и в этом режиме?
(2) Я это и имел в виду. Не просто убить ссылку, но сначала убить то, на что она ссылается. Помню, была в Эльбрусе процедурка с двусмысленным именем ВернутьПамЯть 😀
А как?
Сделаем в ПриЗакрытии
Фрм = «»;
Допустим (не факт), это убъет ее циклы и даже созданные в ней локальные переменные.
Сама-то она останется в памяти как пустая строка (или нет?)!
Если же обращение к такой форме происходит достаточно часто (в большом цикле), то ссылки даже на пустую строку в конце концов забьют сколь угодно большой, но конечный, объем.
1С использует подсчет ссылок (reference counting) а не сборку мусора. Так что надеяться на уничтожение объектов, на которые не осталось внешних ссылок, не стОит. При достаточной изворотливости можно наделать циклических ссылок и утечек памяти.
(4) «Как» — вопрос другой. Подозреваю, что ответ на него может варьироваться в зависимости от всяких сопутствующих факторов. Вон, лисповцы только и делают, что совершенствуют сбор мусора.
Важно то, что разработчик должен учитывать возможность появления мусора. А предупрежден — значит, вооружен.
(5) значит ли это, что 1с в обозримом будущем от сабжа не избавится, и это фича, а не баг, и можно смотреть на полезное использование?
Определение: reference counting
Подсчёт ссылок. Алгоритм сборки мусора, ведущий для каждого объекта программы подсчёт текущего числа других объектов, которые на него ссылаются. Если это число становится равным нулю, память соответствующего объекта можно безопасно освободить, а общее число ссылок каждого из ссылающихся на него других объектов уменьшить на единицу. У этого алгоритма возникают проблемы с объектами, ссылающимися друг на друга по кольцу, так как у них число ссылок никогда не бывает меньше 1.
Для понимания того, как Python находит значение некоторой переменной, необходимо ввести понятие блока кода. В Python блоком кода является то, что исполняется как единое целое, например, тело определения функции, класса или модуля.
Локальные имена — имена, которым присвоено значение в данном блоке кода. Глобальные имена — имена, определяемые на уровне блока кода определения модуля или те, которые явно заданы в операторе global. Встроенные имена — имена из специального словаря __builtins__.
Области видимости имен могут быть вложенными друг в друга, например, внутри вызванной функции видны имена, определенные в вызывающем коде. Переменные, которые используются в блоке кода, но связаны со значением вне кода, называются свободными переменными.
Так как переменную можно связать с объектом в любом месте блока, важно, чтобы это произошло до ее использования, иначе будет возбуждено исключение NameError. Связывание имен со значениями происходит в операторах присваивания, for, import, в формальных аргументах функций, при определении функции или класса, во втором параметре части except оператора try-except.
С областями видимости и связыванием имен есть много нюансов, которые хорошо описаны в документации. Желательно, чтобы программы не зависели от таких нюансов, а для этого достаточно придерживаться следующих правил:
Всегда следует связывать переменную со значением (текстуально) до ее использования.
Необходимо избегать глобальных переменных и передавать все в качестве параметров. Глобальными на уровне модуля должны остаться только имена-константы, имена классов и функций.
Никогда не следует использовать from модуль import * — это может привести к затенению имен из других модулей, а внутри определения функции просто запрещено.
Предпочтительнее переделать код, нежели использовать глобальную переменную. Конечно, для программ, состоящих из одного модуля, это не так важно: ведь все определенные на уровне модуля переменные глобальны.
Убрать связь имени с объектом можно с помощью оператора del. В этом случае, если объект не имеет других ссылок на него, он будет удален. Для управления памятью в Python используется подсчет ссылок (reference counting), для удаления наборов объектов с зацикленными ссылками — сборка мусора (garbage collection).
http://www.intuit.ru/department/pl/python/1/7.html
Главное достоинство подсчета ссылок перед отслеживающими сборщиками мусора в том, что объекты удаляются сразу как только на них нельзя сослаться, и в инкрементальной манере, без долгих пауз для циклов сборки и с ясно определенным временем жизни каждого объекта.
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82_%D1%81%D 1%81%D1%8B%D0%BB%D0%BE%D0%BA
Основные понятия сборки мусора. Для системы управления памятью работа приложения может быть представлена как последовательность обращений к памяти. Связанная совокупность данных, создаваемая в результате размещения объектов, назначения и модификации указателей, может рассматриваться как направленный граф достижимости, узлами которого являются используемые объекты в куче, а связями – указатели. Исходное множество ссылок (root set), задается набором ячеек памяти, хранящихся вне области кучи и содержащих указатели на объекты в куче. Root set может состоять из статических переменных, объектов системных классов, локальных переменных процедур, регистров и т.д.
Существующие методы сборки мусора делятся на трассирующие и использующие счетчики ссылок.
Трассирующие методы сборки мусора основаны на определении полного графа достижимости. Сборка начинается со сканирования исходного набора указателей, далее происходит обход графа с обработкой достижимых объектов. В конце обхода, когда все достижимые объекты определены, память, занятая недостижимыми объектами, считается свободной. Достижимые объекты считаются живыми, а недостижимые относят к множеству свободных.
Основной идеей сборщиков с подсчетом ссылок является отслеживание числа указателей на каждый объект в куче. Если в некоторый момент выполнения приложения счетчик ссылок объекта стал равным нулю, это означает, что такой объект больше не нужен приложению (на него не ссылается ни один другой), и место в памяти, которое он занимал, может быть отнесено к множеству свободных блоков. Основным недостатком такой схемы управления памятью является невозможность обработки циклических структур, какими, например, являются двусвязные списки, так как в таких структурах на каждый объект всегда существует хотя бы одна ссылка.
(10) vs (5)
если 1с — это подсчет ссылок (5), то, по определению (10), на неудалившуюся, но закрытую форму должна быть возможность сослаться.
Вопрос — как?
(0) 😮 😮 😮
(6)
как это верно…
(12)
из (10) не следует возможность сослаться на неудаленный объект, на который нет внешних ссылок
+(14) то, что я назвал «внешними ссылками», в (11) описано как rootset
т.е., назначив форме обработчик ожидания, мы создали кольцо взаимных «внутренних» ссылок?
(16)нет.
вот эта строка приводит к созданию циклических ссылок:
Если ее убрать, то «роскошный глюк» таковым быть перестанет
скорее всего — да
(17) если Фрм не назначать Экспорт, то Фрм = ПолучитьФорму(«Форма») не дает сабжа.
Наверное, кольца ссылок все-таки нет, есть некая «внутренняя», которая порождается Экспротом
**
и не очищается при закрытии формы
убрал Экспорт. Форма не умерла.
Движок 8.1.14
При внимательном чтении описания метода «ПолучитьФорму» в синтакс-помощнике, можно сделать вывод, что Фрм=ПолучитьФорму(«Форма») эквивалентно Фрм=ЭтаФорма
(20) упс… сейчас посмотрю, умиралажже
возвращается новая форма, циклических ссылок нет, все умирают.
Создай новую внешнюю обработку, в ее модуле напиши
При каждом открытии обработки количество памяти, используемой процессом 1с, будет расти. Это является косвенным подтверждением того, что в 1с именно «подсчет ссылок», а не «сборка мусора»
Вот Ой! так Ой!
правда, не умирает.
стало быть, фрм=ЭтаФорма…
(24) ок, верю, что так и будет. Однакож, здесь-то где закольцованная ссылка? Т в Т? и, получается, собственно форма как таковая не важна?
после окончания цикла счетчик ссылок на Т будет равен 1000001 (переменная модуля ссылается на Т + миллион ссылок внутри самой Т).
При разрушении объекта обработки счетчик ссылок на Т будет уменьшен на 1, и т.к. он все еще положителен, то Т уничтожена не будет
1. «взрослые дяди» оказались обруганы ни за что,
2.
сомнительная рекомендация, основанная на ложных выводах
3. «Роскошный глюк» оказался ожидаемым поведением
Ок, я сообразил, почему на Экспорт погрешил: эксперементировал, когда Фрм была в модуле объекта.
(28) текст публикации уже поправил, см. первый абзац
сабж, тем не менее, остается в силе, так или иначе, 1снику надо следить за спиной
(31) рекомендация использовать голову никогда лишней не будет 😉
блин, сними минус, steban, поправилж
(33)уже
Имхо, фи к «взрослым» так же остаются в силе.
1. Программеры камней (базовый ввод-вывод)
2. Программеры ОС (виндовс, люникс, etc)
3. Программеры «взрослых» языков (си, паскаль, ява,..)
4. Программеры прикладных пакетов (1с,..)
5. Программеры скриптов (веб-дизайнеры, 1сники,…)
Очевидно, проблема циклических ссылок органично существует на 3. уровне (может быть, и на 1.,2.)).
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена уже и НЕ транслироваться на уровень 5.
(38) В C# при возникновении бесконечного цикла срабатывает исключение.
(38)
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена
Я бы не сказал, что она ДОЛЖНА быть решена.
Выбор между RC и GC — это выбор между накладными расходами на сборку мусора или возможными утечками памяти (которых можно избежать). Те, кто проектировал 1С, сделали свой выбор в пользу «возможных утечек».
рискуем скатиться в холивар C++ vs С# 🙂
Свой выбор они сделали. Однако в мануалах написать об этом забыли.
(41) вот, вот. 1сниковское ли это дело?
(42)
Диск ИТС.
Методическая поддержка 1С:Предприятия 8.1 -> Методические рекомендации по конфигурированию -> Встроенный язык -> Особенности хранения значений в переменных модулей объектов и форм
значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю.
Особенностью подсчета ссылок на объекты является возможность организации «циклической ссылки». Циклическая ссылка возникает, когда объекты начинают ссылаться друг на друга. Это приводит к ситуации, при которой ни один из объектов, участвующих в циклической ссылке, не будет уничтожен. В свою очередь это является причиной возникновения утечек памяти (memory leaks).
Необходимо, по возможности, избегать появления циклических ссылок. Соблюдение достаточно простых правил при разработке конфигураций позволит избежать проблем связанных с циклическими ссылками. В случае появления подобной ссылки необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом.
Полный перечень случаев возникновения циклической ссылки привести невозможно, приведем лишь некоторые примеры:
1 хранение в переменной модуля объекта (набора записей, формы) ссылки на данный объект (набор записей, форму) — ситуация приводит к появлению циклической ссылки — объект (набор записей, форма) никогда не будет уничтожен;
2 хранение ссылки на владеемый объект в объекте-владельце и ссылки на объект-владелец во владеемом объекте — оба объекта никогда не будут уничтожены.
Следует обратить внимание, что, помимо переменных модулей, ссылки на объекты могут образовываться при передаче их в методы встроенного языка. Например, добавление в список значений нового значения — этого же списка значений, приведет к появлению циклической ссылки.
(44) ок, дурак, ваше благородие 🙂
Написал бы лучше практический рецепт по нахождению утечек при помощи технологического журнала вместо нападок на разработчиков платформы.
Технологических журналов в кадетском корпусе не проходили.
Собственно разработчики (типа коллеги) как бы вне критики, ответственность за косяки несут потребители нераспределенной прибыли от продажи продукта («правообладатели», если можно так выразиться). А уж разработчиков пусть пинают те самые потребители, работа у них такая.
(28) Нет, это НЕ ожидаемое поведение. Ожидаемое — это закрыли, значит закрыли.
И то, что нам задним числом, за отдельную плату, объяснили (44), чего они НЕ сделали, дела не меняет.
Кольцевые ссылки — полезное применение.
Для выравнивания ситуации также минусану.
Давным-давно известная проблема, со времен 7.7 ничего не изменилось 🙁
Как уже steban написал, 1С выбрала наиболее простой, определенный и быстрый метод.
Последние абзацы в описании вообще не понятны — кого убивать-то?
(46) Не купил, а украл. Практически со всеми конфами (типовыми так точно) идет подписка ИТС на 6 месяцев. Но даже если платформа идет не совсем законным путем, то что мешает «от туда» взять и образ ИТС?
За напоминание про циклические ссылки — спасибо.
2tango
Расскажи мне, пожалуйста, почему выставление минуса публикации ты посчитал личным оскорблением и решил ответить личным оскорблением в описании публикации?
Странный «спор». В данном контексте — то, как отрабатывает 1с все верно с точки зрения подсчета ссылок И сборщика мусора.
Всегда поражало, то свойство большинства программистов под платформу 1с незнание основы основ, это печально. Нужно лишь знать мат часть.
Слава богу,что в свое время начинал с низкоуровневых языков, и использую 1с только для разработки решений в силу популярности платформы и соответственно монетизации. Не сочтите никто за оскорбление, просто мнение сформированное на фактах.
ответь на (54)
(55) ты непоследователен. либо 1с подобна тому, с чего ты «начинал», и тогда «отрабатывает 1с все верно», либо это облочка для 1снегов, и тогда закрытие формы должно убивать всё в/из этой формы, есть там где-то какие-то ссылки или нет.
разработчики не стали (поленились, недопёрли) этого сделать. это плохо. в смысле — недостаток оболочки для 1снегов.
(0) Имей уважение к оппонентам.
Пиши имени/ники оппонентов правильно, а не как тебе хочется.
Некоторые твои сообщения скрыты из-за нарушения п.3 и п.4. правил
ок, исправлю в публикации своё фырканье в адрес оппонента. тем более, что он фактически соавтор оной 🙂
Здесь все обсуждают то что могут быть кольцевые ссылки и утечки памяти. Подскажите как бороться с этими самыми утечками памяти в скрещенной конфигурации. Скрестили так что месячный документооборот при перепроведени = 1Gb оперативки. Как работать с технологическим журналом? Кто сталкивался с такими вопросами?
Не знаю, что тут такого сложного, но если на форму есть ссылка (её владелец еще не «отпустил») — она будет «жива».
Соответственно, разработчики пошли по простейшему пути (что не удивительно для разработчиков 1С) и сделали подсчет ссылок «до победного» (пока таковых не останется вовсе — вот тогда объект и уничтожится).
Кто сможет так извернуться, что и владелец не «закроется», д еще и ссылки в цикле начнут плодится от него — ну, молодец значит, такое просто так не сделаешь, значит, так и задумывал изначально.
(66) AlexO,
если что-то может быть сделано, кто-нибудь это сделает
Сбор мусора, коллеги, это прошлый век!))
Посмотрите Win8 (специальные приложения на новом API) или Android — там память очищается всегда автоматически. Если не нужна программа, или форма программе, да и фиг с ней — пометили как не нужную и система сама заменит новыми данными, когда память нужна станет. И даже после закрытия программы, данные этой программы остаются в оперативной памяти. Зато при повторном запуске мгновенно открывается на том же месте, где закрыл. Сбор мусора — очень дорогостоящая и ни кому не нужная операция. Тем более сейчас даже на мобилках по 2 Гб оперативной памяти ставят, не говоря уж про десктопы. Мне кажется лет через пять программисты вообще забудут о том, что такое сборщик мусора, как о страшном сне. Так же, как когда-то забыли о необходимости встраивать драйвера для всех видео- и звуковых карт в свои приложения, когда вышел DirectX и OpenGL. А вы что думаете по этому поводу?
(68) a-novoselov,
скажите об этом разработчикам 1С с их бесконечными утечками памяти.
После закрытия максимум, что останется от «программы» в ОП — это мусор, помеченный «на удаление».
Вы имеете весьма и весьма отдаленное представление о работе копмьютера, ОС, программ и 1С.
В данном случае — перепутали очистку памяти (сборку мусора) с кэшированием/загрузкой памяти.
Среди повсеместной деградации все равно останутся люди, которые будут писать встроенные уборщики, чтобы те «не светились» и делали свое дело в «гаджетах, ОС, мобилках..»
без драйвера до сих пор и во веки, пока не сменится архитектура компьютера и логический принцип его построения, — не будет работать ни одна видео-звуко- и прочая «карта».
DirectX и OpenGL — это бибилиотеки API, к работе и взаимодействию самого устройства внутри/с другими устройствами (за что отвечает драйвер) отношения не имеющие. Названные графические API — отвечают за обработку изображения, и призваны унифицировать написание различнейших графических приложений.
А драйвера пишут те, кто занает, что это такое. Другое дело — многие драйвера все больше и больше встраиваются в ОС, а устройства — все больше унифицируются между собой в логике своей внутренней работы.
(68) a-novoselov,
архивируется и самовоспроизводится в кремниевых кристаллах?
(70) Что за привычка к словам цепляться…
Имелось ввиду память не очищается приложением, а очищается самой системой.
Так же как в Java память очищается средой исполнения а не конечной программой. И 1С сама память очищает, за редким исключением)
(69) А про OpenGL имелось ввиду не разработка драйверов в принципе, а то что их не нужно стало включать в каждую игру. Помните под ДОСом чтобы что-то запустить сперва конфигурируешь настройки встроенных драйверов через setup.exe… Прописываешь IRQ и DMA каналы для звуковой карты и т.д. Я не про производителей оборудования говорил, что им не нужно будет драйвера писать, а про разработчиков конечных приложений для пользователей.
(71) a-novoselov,
Так это и есть применение унификации через API, а не встройка драйверов устройств — в игры. Вы же пишите про драйвера к устройствам, а не к играм.
Только лишь потому, что плата не предоставляла такую информацию драйверу, и приходилось их размещать вручную. Сейчас — предоставляет, и драйвер настраивается на «все те же прерывания» автоматически.
унификация работы драйверов с API ведет к унификации работы конечных приложений с этими API.
Т.е. ничего, по сути, не изменилось, а только приложения стали автоматически через API и драйвер устройства взаимодействовать с устройством и настраиваться.
Посмотрите, что сами же и написали:
(72) Изменил сообщение, чтобы сложнее было к словам придираться… Так что же, все таки, думаете по сути вопроса? а не про глубину и широту ваших познаний в области архитектуры ПК перед моими… Нужна будет забота об очистке памяти разработчикам конечных приложений для пользователей?
(73) a-novoselov,
А как вы представляете без этого? 🙂
Самоочищающийся модуль памяти? Так еще не изобрели такого.
Ладно. Тема, похоже, бессмертна, как перенумератор.
(75)
На самом деле, почему бы просто не написать:
— не пользуйте во внешних отчетах, обработках присвоение в переменной уровня модуля объекта — ссылки на какую-либо форму этой же обработки/отчета
, т.е. не делать циклическую ссылку на сам объект (внешнюю обработку/отчет) через вызов формы как части этого объекта, а если есть в этом нужда — ПриЗакрытии явно очищать эту переменную Форма;
— не пользуйте во внешних отчетах, обработках присвоение переменной уровня модуля объекта/реквизиту объекта — установку ссылки на саму себя «любимую», тем более — в цикле а-ля пример из ( 24) (а для реквизита внешней обработки/отчета — избегать присвоение ему ссылки на него самого, как в коде, так и в задании Типданных «вручную» в «Свойствах»).
Так как 1С не осилила разработать механизм разрешения ссылочных конфликтов и отследить, что ссылка закольцевалась на саму себя, и указатель в подсчете ссылок — создан ей же самой, и также подлежит стиранию, как и создавший этот указатель «родительский» объект, то все возложено на конечных программистов: либо избегать такой ссылочности, либо вовремя принудительно уничтожать объект, содержашщий «указатель» на себя самого, например, явным присвоением «Форма = Неопределено».
А то на ИТС это занимает целую страницу «мелким почерком», да еще и в разных местах, да еще и не все варинаты и неполное описание….
(76) AlexO, привет
Потому что изначально — «доступно и всериоз»
Потому что до сих пор предмет гордости — прибыль на количество сотрудников
«пипл схавает»
**
да, еще: «Проблемы индейцев вендора не…». Ну то есть клиентами для флагмана являются франи, а не конечные юзеры
(77)
Об этом в этом сообщении.
у меня вообще подозрение, что внутри 1С в части разработки платформы, методологии и написания справок/ИТС все еще более запутанно и «не по уму» 🙂
(78) AlexO, Что творится в кишках вендора, можно только строить предположения.
Мое предположение такое, что кирпичи пирамиды вендора ориентированы более на «чего изволите», нежели на качество продукта.
(79)
Привет, конечно же 🙂
А кто вот предъявляет это «изволяю»?! Вот его и надо вывесить …. на всеобщее обозрение…