Анализ конфигураций




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

99 Comments

  1. sergey301

    Вот это полезный софт! Гораздо полезный, чем 1С:Автоматизированная проверка конфигураций

    Reply
  2. Ike

    Конфа действительно внушает, аналогов нет! Всем качать!

    Reply
  3. _LEV_

    Жирный плюс!

    Reply
  4. ph_1984

    Автору респект за труд, очень полезная конфигурация.

    Reply
  5. Stepa86

    Было бы шикарно, если б сбор данных о конфе (http://www.stal76.ru/ak/load.html) был автоматизирован, как в «Автоматизированная проверка конфигураций» от 1С.

    0. Папка для выгрузки хранится на метаданных (справочник Конфа, где есть путь, Логин, Пароль, папка для выгрузки файлов и еще че нить)

    1. Запуск обработки «Выгрузка информации о конфигурации 8.1» (или 8.2) через передачу параметра /Execute

    2. Выгрузка модулей тож через параметр, вот так например:

    Процедура ВыгрузитьМодули(Конфигурация) Экспорт
    
    // очищаем каталог выгрузки
    ОчиститьКаталог(Конфигурация.КаталогОбмена);
    
    // Получаем сведения
    СтрокаЗапуска = КаталогПрограммы() + «1cv8.exe DESIGNER /F»»»
    + Конфигурация.КаталогКонфигурации + «»» /N»»»
    + Конфигурация.Пользователь + «»» /P»»» + Конфигурация.Пароль
    + «»» /DumpConfigFiles «»» + Конфигурация.КаталогОбмена
    + «»» -Module»;
    
    ЗапуститьПриложение(СтрокаЗапуска,, Истина);
    
    КонецПроцедуры // ВыгрузитьМодули()
    

    Показать

    3. Выгрузка cf — тож через параметр и передать этот файл консольному ReadCfg.exe

    в итоге загрузку данных о конфе можно оставлять на ночь уходя и нажав одну зеленую кнопку…

    Reply
  6. cool.clo

    как сказал бы мистер Бернс — excellent!!!+++

    Reply
  7. allexF

    Конфигурация очень хорошая. Вообще не понятно почему 1С сама такую не делает или не предоставляет такие сервисы средствами конфигуратора.

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

    Совет ребятам из 1С ознакомиться с данной конфигурацийе и сделать соотвествующие выводы для себя.

    Reply
  8. K_Mixa

    А че архив битый?

    Reply
  9. ya.di-di2011

    (8) ничего не битый…

    Reply
  10. blik

    ошибка в «ВыгрузкаИнформацииОКонфигурации_81.epf «при выгрузке «ПодпискаНаСобытие» массив Источник.Типы — пустой, хотя в источнике подписки стоит «ПерерасчетНаборЗаписей»

    {ВнешняяОбработка.ВыгрузкаИнформацииОКонфигурации(256)}: Индекс находится за границами массива

    Возврат ПолучитьПараметрыПриЗаписиИлиПередЗаписью(Источник.Типы()[0], Ложь);

    Выгрузку производил из нетиповой ЗУП 8.1 2.5.25.4

    Reply
  11. Yashazz

    Да, толковая и полезная вещь. Графы особенно впечатлили. Сразу хочется ещё много всяких плюшек, но и в таком виде — отлично.

    Reply
  12. e.kogan

    Огромный плюс. Просто огроменный. Такой объём работы…

    Будет время — обязательно покопаюсь в графах )

    Reply
  13. V_V_V

    Я наверное извращенец, но у меня в общих модулях имеется модуль под оригинальным названием ОбщийМодуль. 😀 Так вот, при выгрузке конфы (самописная 8.2) для анализа ругается:

    {ВнешняяОбработка.ВыгрузкаИнформацииОКонфигурации.МодульОбъекта(83)}: Поле объекта недоступно для записи (ОбщийМодуль)

    Для Каждого ОбщийМодуль Из Метаданные.ОбщиеМодули Цикл

    Поменял в «Для Каждого ОбщийМодуль» на ОбщийМодульКонф (соответственно в самом цикле тоже) — заработало.

    Reply
  14. stal76

    (10) Мне не удается воспроизвести ошибку. Какую версию платформы используете? И что показывает отладчик если просмотреть значение Источник.Типы?

    (11) Список плюшек можно выслать мне на email, посмотрю, может пересекается с моими )))

    Reply
  15. stal76

    (5) Были планы автоматизировать загрузку, но это не решается так просто как вы написали. Например, если конфигурация подключена к хранилищу, то указанный код не будет работать. Также может потребоваться перед проверкой, обновить конфигурацию из хранилища ….

    Reply
  16. blik

    (14) Платформа 8.1.15.14. Источник.Типы — пустой. Есть подписка на событие, в качестве источника указан ПерерасчетНаборЗаписей, если указываю в качестве источника документ, то ошибка не возникает.

    Reply
  17. webdiktor

    Спасибо автору! Один помучался — другим лафа.

    Reply
  18. stal76

    (17) Попробуйте исправленной версией обработки.

    (13) Изменил имя переменной.

    Reply
  19. Stepa86

    (15) в случае подключения к хранилищу 1Ска откроет окно подключения к хранилищу. Вроде можно подключатся и даже обновлятся из хранилища с помощью скрипта с вызовом 1Ски с различными параметрами, но у меня как то руки не дошли до конца разобраться…

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

    Reply
  20. Stepa86

    +(19) как вариант просить на вход cf конфы (или путь хранить в константе или на справочнике) , этот cf грузить в спец. конфу, из этой конфы все данные вытягивать по алгоритму (5) и дальше запускать уже анализ

    Reply
  21. Арчибальд

    От закоренелого семерочника с признательностью…

    Reply
  22. artbear

    Хорошая работа проделана 🙂 +1

    Reply
  23. cool.gjg

    В топку!!!….

    Reply
  24. cool.gjg

    (23) то есть в ТОП-ку…автор гений!!!

    Reply
  25. yandextesting

    СУПЕР!!!

    Reply
  26. Sintson

    Автор — я в восхищении! Поставил, протестил, очень понравилось!!!

    Reply
  27. tormozit

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

    Reply
  28. gaglo

    Очень большой и жирный плюс.

    Жутко хотелось бы увидеть этот алмаз в виде ограненного бриллианта; по-моему, не хватает всего-то (;-[) добавленной в комплект документации, соответствующей текущей версии, а то пришлось странички на сайте программы тырить и сохранять себе локально.

    Reply
  29. stal76

    (27) Я полностью согласен с тем, что нужна автоматическая загрузка данных из проверяемой конфигурации и мне не меньше чем вам лень нажимать много кнопок. Для себя, я пока сделал bat файл, который выполняет большую часть работы по нажиманию кнопок. Для создания такого файла можно воспользоваться замечательной обработкой: http://infostart.ru/public/16006/

    Есть определенные мысли по развитию функционала автоматической загрузки, например, нужно каждую ночь выполнять: обновление конфигурации из хранилища, загрузку данных в АК, формирование некоего отчета, который будет отправляться по почте.

    На данный момент я хочу привести в нормальный вид еще одну из своих старых разработок и опубликовать ее. После этого можно будет заняться и автоматизацией загрузки. Если конечно будет время ….

    Reply
  30. KapasMordorov

    (7)

    Похоже, автор и работал в 1Се.

    В смысле в ЗАО.

    Reply
  31. stal76

    (28) Я планировал сделать, чтобы по нажатию на кнопку справки открывалась соответствующая страничка на сайте. Успел пока сделать в форме настройки программы, постараюсь сделать аналогично и во всех остальных формах.

    Reply
  32. Serj1C

    Классная вещь!

    На заметку:

    На почти типовом ЗУПе (2.5.27.6) дает ошибку:

    Ошибка при обработке файла «….Обработка.ОбновлениеКонфигурации.Макет.ДопФайлОбновленияКонфигурации.Макет.txt»
    В строке 29 непредусмотренный символ как разделитель: ‘{‘
    

    в самом файле лежит текст ява-скрипта типа:

    …
    function format(str)
    {
    …
    

    + ошибка из (10), но файл выгрузки не обновлял, так пока первая версия и стоит

    Reply
  33. stal76

    (32) А зачем же вы макеты то выгружаете? Нужно же только модули конфигурации. )))

    Ошибку указанную в (10) исправил в (18).

    Reply
  34. tormozit

    (31) Это мы узнаем, если он покажет нам грамматику)

    Reply
  35. awa

    (0) Великолепная разработка!

    Анализ конфигураций выдал мне ошибку «Не обнаружена функция общего модуля» на строке

    … = ИсторияИзменений.Количество()

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

    Ради интереса создал в тестовой базе табличную часть «Справочники» — 1С не выдала ошибку!

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

    — свойства глобального контекста;

    — общие модули;

    — табличные части объекта;

    — реквизиты объекта;

    — реквизиты формы;

    — переменные модуля.

    Такое совпадение имен объектов — источник трудноуловимых глюков.

    И еще один момент — в моей конфигурации оказалось несколько закрытых общих модулей. Проверяет ли Анализ конфигураций обращения к таким модулям?

    Reply
  36. stal76

    (35) В описании вида ошибок я указывал на такую возможную причину ложного срабатывания. Пока остается только отметить эту ошибку как исключение … )))

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

    Reply
  37. stal76

    (34) «А пулемет я вам ребята не дам».

    Если речь идет о формальном описании языка 1С, то его у меня нет, хотел бы на него сам посмотреть. Писал по принципу — что вижу, то и разбираю. Прогонял парсер на многих конфигурациях, увидел много всего интересного. Особо понравилась ловушка для пишущих парсеры:

    Перейти ~КонецПроцедуры;

    ~КонецПроцедуры:

    Reply
  38. tormozit

    (37) Оригинальная грамматика и парсер на ее основе — ничем не «подкосишь». Дальше по убыванию надежности идет неоригинальная грамматика и парсер на ее основе. А потом идут все парсеры без грамматики. Да, грамматика — формальное описание языка.

    Reply
  39. awa

    (36) Да, при загрузке модулей было сообщение, что текст модуля отсутствует. Как пожелание на будущее развитие — так как есть обработка cf-файла, то принципиально возможно вытащить имена и количество параметров процедур и функций закрытого модуля из потока image (скомпилированного образа текста модуля).

    Reply
  40. ailin

    Конфигурация понравилась.

    Где можно узнать подробнее о свойствах и функциях парсера «stparser_1.0.0.7.dll» ?

    Reply
  41. stal76

    (40) В общем модуле РаботаСПарсером. Я постарался получше его закомментировать.

    Reply
  42. ailin

    (41) Да, я видел.

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

    Кстати, в конфгурации используюутся все методы компоненты?

    Reply
  43. stal76

    (42) В общем модуле используются все функции компонент, при этом, в самой конфигурации не используется последняя функция общего модуля ХэшСтроки, которая вычисляет md5 от произвольной строки (была добавлена по просьбе знакомых). А так, компонента разрабатывалась именно под нужды АК и ничего большего пока не умеет.

    Reply
  44. ailin

    (43) Спасибо, понятно. Буду смотреть детально.

    А есть планы по развитию компоненты и какие?

    Reply
  45. Gambler

    Отличная конфигурация!

    При загрузке текстов модулей УПП Для Украины типовой возникло несколько ошибок:

    Выдается ошибка «непредусмотренный символ как разделитель» при наличии в имени переменной украинской буквы (є)

    Использование є в идентификаторе — возможно ошибка разработчиков типовой, хотя в платформе такое проходит.

    Выдается ошибка «непредусмотренный символ как разделитель» на строках

    СписокВыбора = Новый СписокЗначений();

    СписокВыбора.Добавить(«;101», «(101) Сплата суми податкового зобов’язання (штрафної санкції) або податкового боргу*»);

    СписокВыбора.Добавить(«;106», «(106) Сплата пені*»);

    СписокВыбора.Добавить(«;109», «(109) Оплата податкового векселя*»);

    СписокВыбора.Добавить(«;116», «(116) Сплата процентів за користування податковим кредитом*»);

    СписокВыбора.Добавить(«;121», «(121) Сплата адміністративного штрафу*»);

    СписокВыбора.Добавить(«;107», «(107) Повернення зайво сплачених коштів»);

    СписокВыбора.Добавить(«;108», «(108) Перерахування коштів з одного бюджетного рахунку на інший»);

    СписокВыбора.Добавить(«;110», «(110) Відшкодування ПДВ на рахунок платника»);

    СписокВыбора.Добавить(«;111», «(111) Відшкодування процентів за бюджетною заборгованістю»);

    СписокВыбора.Добавить(«;117», «(117) Погашення податкового боргу за рахунок продажу активів підприємства-банкрута»);

    СписокВыбора.Добавить(«;118», «(118) Погашення податкового боргу за рахунок продажу активів платника, що перебувають в податковій заставі»);

    СписокВыбора.Добавить(«;119», «(119) Погашення податкового боргу за рахунок продажу активів платника за рішенням суду»);

    СписокВыбора.Добавить(«;120», «(120) Погашення податкового боргу за рахунок ПДВ, відшкодованого на рахунок кредитора»);

    СписокВыбора.Добавить(«;122», «(122) Стягнення податкового боргу за податковим зобов’язанням (штрафною санкцією)»);

    СписокВыбора.Добавить(«;123», «(123) Стягнення пені»);

    СписокВыбора.Добавить(«;124», «(124) Стягнення несплачених процентів за користування податковим кредитом»);

    Элемент.СписокВыбора = СписокВыбора;

    При замене украинских букв на русские ошибка не исчезает.

    Выдается ошибка «непредусмотренный символ как разделитель» на строках

    //Фінансовий результат (прибуток +, збиток -) від

    //Реализации

    При замене украинских букв на русские ошибка не исчезает.

    Reply
  46. stal76

    Пришлите мне пожалуйста файл с модулем на котором «спотыкается» парсер по почте: mail@stal76.ru.

    Reply
  47. yandextesting

    Мысль: вместо Graphviz или помимо его использовать для отображения связей MindManager

    Reply
  48. stal76

    (47) Насколько я понял, MindManager — коммерческий продукт.

    С ходу не нашел как его можно использовать для построения графов, если подскажите — буду благодарен.

    Reply
  49. pencroff

    При анализе интерфейсов с помощью утилиты ReadCFg.exe. Возникает ошибка (на рисунке).

    Что посоветуете?

    Reply
  50. stal76

    (49) Проверяемая конфигурация 8.1 или 8.2?

    Также вышлите мне, пожалуйста, ответ по email — я вышлю вам версию программы с выводом отладочной информации.

    Reply
  51. TheDeadStone

    Как я раньше жил без этого??

    Reply
  52. GeorgeB

    На первом же шаге настройки получаю ошибку:

    Ошибка подключения внешней компоненты из файла C:App1C_ToolsAnalysisstparser_1.0.0.7.dll:

    {ОбщийМодуль.РаботаСПарсером(23)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту):

    Ошибка при загрузке внешней компоненты.

    Windows 7 Max 32 bit, 1С 8.1.15.14

    Что делать? 😳

    Reply
  53. stal76

    (52) Вы можете установить программу Dependency Walker (http://www.dependencywalker.com/) и прислать мне по почте скриншот с результатом ее проверки dll-ки?

    Reply
  54. bsi

    (53) HTTP Error 404.0 — Not Found 🙁

    Reply
  55. stal76

    (54) В ссылку по ошибке добавил в конец скобку. Вот правильная ссылка: http://www.dependencywalker.com/

    Указанная ошибка в 52 возникала из-за настроек User Account Control.

    Reply
  56. jem

    При загрузке данных в базу останавливается на ошибке:

    «Ошибка при обработке файла C:Dats…Обработка.Настройки.Форма.Форма.Форма.Модуль.txt

    В строке 1351 непредусмотренный символ как разделитель «|» (124) »

    С этой строки начинается запрос. Синтаксических ошибок в нем нету.

    Это ошибка или как это обойти?

    Reply
  57. stal76

    (56) Пришлите мне, пожалуйста, на email часть текста модуля содержащего указанную строку.

    Reply
  58. васисубатор

    при загрузке данных в 8.2 валится по нехватке памяти

    Reply
  59. марокко

    При загрузке cf в 1С:Предприятие 8.2 (8.2.12.92) ругается , грузить не хочет , говорит о несовместимости

    Reply
  60. stal76

    (59) cf сделан для 8.1.

    Reply
  61. Fr1end

    При загрузке модулей ругается на украинские буквы как на неправильный разделитель, ну и ошибка как в (56)

    Reply
  62. vadim1980

    Предлагаю при заполнении регистра сведений Вызовы кроме ресурса НомерСтроки также заполнять имя процедуры/функции, которой принадлежит данная строка. Это необходимо для построения косвенных зависимостей. Например необходимо установить какие процедуры/функции общего модуля необходимы для правильной работы документа Документ1, при этом:

    Документ1 вызывает процедуру ОбщийМодуль1.Процедура1

    ОбщийМодуль1.Процедура1 вызывает процедуру ОбщийМодуль2.Процедура2

    Соответственно в отчете ОбращенияПодсистемы необходимо выводить, что Документ1 зависит от ОбщийМодуль2.Процедура2

    Reply
  63. stal76

    (62) Я тоже думал о добавлении такого же ресурса.

    В отчете «Анализ модуля» требуется эта информация, но она вычисляется в самом отчете.

    Reply
  64. vadim1980

    Еще можно сделать граф интерактивным, например с помощью DGML и просмотром его в VS 2010. По крайней мере открытие текста модуля и сделать возможность выводить продолжить дерево за пределы текущего модуля. Например при первом формировании показывается только текущий модуль и вызовы из него в другие модули и вызовы его из других модулей. А затем уже можно перейти в другой модуль.

    Reply
  65. stal76

    (64) А есть свободные просмотрщики DGML?

    Reply
  66. vadim1980

    Я думаю, что в VS 2010 есть отдельная компонента которая просматривает DGML, которая может использоваться в других приложениях

    Reply
  67. CheBurator

    Просто шедеврально! +100!!!

    Reply
  68. vadim1980

    Все-таки нужна возможность использования внешней программы для сравнения текстов модулей. Я например использую Araxis Merge. Он например умеет показывать отличия внутри строки.

    Кроме того, стандартное сравнение игнорирует регистр символов, а хэш вычисляется с учетом его, поэтому в результате хэши разные, а сравнение выводит что файлы равны

    Reply
  69. vadim1980

    1. При загрузке больших конфигураций (УПП со средним количеством доработок) приложение начинает валиться с ошибкой «Недостаточно памяти». Нужно записывать наборы по несколько модулей, а загрузку выполнять внутри одной транзакции.

    2. Если хэш модуля не поменялся — можно его не грузить и не обновлять информацию в связанных с ним регистрах сведений. Очень помогает при обновлении рабочей конфигурации

    Reply
  70. vadim1980

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

    Reply
  71. stal76

    (68) С внешней программой мысль хорошая, тем более что программа умеет сравнивать три версии. В описании я не написал, но если видели, есть возможность сравнения модулей, функций и процедур между различными версиями.

    Кроме указанных проблем при сравнении, есть еще проблема с «кривыми» разделителями строк. Также, высказывалось пожелание, при сравнении функций и процедур, учитывать впереди стоящий комментарий.

    (69) 1. Ошибку «Недостаточно памяти» можно попытаться обойти, установив параметр «/3Gb» в boot.ini. Постараюсь сделать возможность переключения способа загрузки.

    2. Мысль хорошая, только возникает сложность при удалении старых версий.

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

    Reply
  72. vadim1980

    (71) Я реализовал для себя решение проблемы с памятью и обновлением. Если интересно могу скинуть .cf.

    Reply
  73. stal76

    (72) На mail@stal76.ru, я посмотрю. Спасибо.

    Если под обновлением понимается загрузка, то по этому поводу я высказал свое мнение в 29-м комментарии.

    Reply
  74. Leoway

    При анализе интерфейсов с помощью утилиты ReadCFg.exe. Возникает ошибка (на рисунке).

    Reply
  75. stal76

    (74) База, из которой выгружаете cf sql-ная?

    Reply
  76. Leoway

    (75) Да

    Reply
  77. stal76

    (76) Попробуйте пожалуйста выполнить следующее:

    1. Сделать пустую файловую базу и загрузить в нее этот cf.

    2. Из созданной файловой базы выгрузите cf и запустите на нем ReadCFg.exe.

    Какой будет результат?

    Старый cf пока сохраните где-нибудь, он может понадобиться еще.

    Указанную ошибку постараюсь исправить в ближайшее время.

    Reply
  78. Leoway

    (77) спасибо, буду пробовать

    Reply
  79. stal76

    (78) Скиньте мне пожалуйста пустое письмо на mail@stal76.ru

    Reply
  80. Kom-off

    Хотел посмотреть эту разработку (собственно, и не отказался от такой мысли до сих пор), но… Загрузил с сайта программы последнюю версию. Загрузить данные стандартной конфигурации УПП не смог — возникает ошибка «Недостаточно памяти». Платформа 8.2.13.205, загружал конфигурацию УПП 1.3.9.1 (но дело не в этом). Посмотрел. В обработке «ЗагрузкаДанныхОКонфигурации» в качестве реквизитов используются наборы записей регистров сведений, в которые при загрузке данных о конфигурации пишется и пишется, пишется и пишется, пока по недостатку памяти не отвалится. Решить эту проблему можно промежуточными записями этих наборов регистров и их очисткой для дальнейшего заполнения. Память, занимаемая приложением 1С при этом не растет.

    1. В конце функции ОбработатьМодуль() обработки ЗагрузкаДанныхОКонфигурации перед выходом следующий код (ну, 1000 можно там заменить на желаемое):

    масНаборовЗаписей = ПолучитьСписокНаборовЗаписей();

    Для Каждого НаборЗаписей Из масНаборовЗаписей Цикл

    Если НаборЗаписей.Количество() > 1000 Тогда

    НаборЗаписей.Записать(Ложь);

    НаборЗаписей.Очистить();

    КонецЕсли;

    КонецЦикла;

    2. В процедуре ЗаписатьНаборыЗаписейРегистров() обработки ЗагрузкаДанныхОКонфигурации заменить код:

    НаборЗаписей.Записать();

    на код:

    НаборЗаписей.Записать(Ложь);

    3. Для случая, когда данные о конфигурации загружаются повторно в функции ПолучитьКонфигурациюИВерсию() в ветке, где

    происходит обработка выборка перезаписи данных о конфигурации поверх уже загруженных, перед выходом из функции код:

    масНаборовЗаписей = ПолучитьСписокНаборовЗаписей();

    Для Каждого НаборЗаписей Из масНаборовЗаписей Цикл

    НаборЗаписей.Отбор.Версия.Установить(ЗагружаемаяВерсия, Истина);

    НаборЗаписей.Очистить();

    НаборЗаписей.Записать(Истина);

    КонецЦикла;

    После этих изменений загрузка данных о конфигурации УПП у меня прошла успешно, при этом память клиента 1С не была больше 300 мегабайт.

    Reply
  81. stal76

    (80) Есть в планах исправить эту проблему.

    Reply
  82. lustin

    (0) Вопрос автору:

    А нет в планах реализовать расчет Цикломатическую сложность модуля

    Reply
  83. stal76

    (82) Показатель интересный, но не знаю, насколько он будет объективно отражать сложность связей, например, в общем модуле.

    Спасибо за предложение.

    Reply
  84. lustin

    (83) я сейчас пытаюсь проанализировать способ расчета величины покрытия авто-тестами конфигурации, цикломатическая сложность как показатель может для этого применяться.

    Вспомнил про Вашу конфигурацию — решил обратить Ваше внимание.

    Reply
  85. stal76

    (84) На счет использования в тестировании особо не думал.

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

    Reply
  86. vovche

    я ваш фанат! 🙂 последний пару месяцев хотел такой инструмент

    Reply
  87. evgeniy.bilyk

    автору спасибо, полезная весчь

    Reply
  88. dudf

    У меня при выборе пути к парсеру выдает ошибку: «Ошибка подключения внешней компоненты к файлу D:ak… : Общий модуль, работа с парсером(23): ошибка при вызове метода контекста(ЗагрузитьВнешнююКомпоненту)».

    Reply
  89. stal76

    (88) Какая используется операционная система, есть ли права администратора? Если используется Windows 7, то скорее всего нужно настроить UAC (User Account Control).

    Reply
  90. dudf

    win7, права администратора присутствуют.

    Reply
  91. stal76

    (90) Попробуйте на время отключить UAC и проверить, будет ли загружаться компонента.

    Reply
  92. dudf

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

    Reply
  93. stal76

    (92) Только теперь неплохо бы его включить назад и настроить соответствующим образом.

    Reply
  94. himm

    Хотелось бы попробовать вашу конфигурацию.

    Все делал по инструкции с Вашего сайта(http://www.stal76.ru/ak).Только у меня при Выгрузке данных из проверяемой конфигурации появляется ошибка

    {ОбщийМодуль.ОбщегоНазначения(17)}: Поле объекта не обнаружено (Параметры)

    Запрос.Параметры.Вставить(Элемент.Ключ, Элемент.Значение);

    Пробовал я на 1С:Предприятие 8.1, учебная версия (8.1.9.57)

    на 3-х разных конфигурациях

    на 14-ой и 15-ой версии Вашей конфигурации

    И ещё при использование ReadCFg, выводится следующее сообщение, например

    Reply
  95. himm

    И так во всех случаях при использование ReadCFg

    Создано файлов:0

    Это влияет на что нибудь?

    Reply
  96. stal76

    (94) Опишите пожалуйста порядок ваших действий при которых происходит ошибка. В какой момент?

    (95) Сообщение программы ReadCFG говорит о том, что в вашей конфигурации нет ни одного общего модуля.

    Reply
  97. himm

    (97) Загружал конфигурацию в которой есть общие модули.

    ReadCFG сообщает следующее

    Reply
  98. stal76

    (99) Сообщение говорит о том, что в основном интерфейсе (главном меню программы) нет обращений к процедурам общих модулей. Это нормально.

    Reply
  99. himm

    (97) Как я,понимаю (что создано файлов=0) не влияет на дальнейшую загрузку данных о конфигурации . А создаются файлы, когда интерфейсов>1?

    (100).Ок.Спасибо.Попробую

    Reply

Leave a Comment

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