Грамотное обновление 1С




Принцип обмена данными из 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='\

81 Comments

  1. DoctorRoza

    Возможно, это понятно только избранным и просвященным, но за такое:

    Добавление поля ввода на обычную форму

    Если просто добавить поле ввода ссылочного типа, то не будет работать кнопка выбора. Как эту проблему решить, пока не понятно, поэтому надо добавлять реквизит формы вручную.

    Поле = ЭлементыФормы.Добавить(Тип(«ПолеВвода»), «_ДокументРазовыхНачислений», истина);
    //Поле.Заголовок = «»;
    Поле.Лево = 460;
    //Поле.ОграничениеТипа = Новый ОписаниеТипов(«ДокументСсылка.РегистрацияРазовыхНачисленийРаботниковОрганизаций»);
    Поле.Данные = «_ДокументРазовыхНачислений»;
    Поле.Верх = 30;
    Поле.КнопкаВыбора = истина;
    Поле.Ширина = 150;
    Поле.Высота = 19;

    Показать

    руки бы отрывал, не взирая ни на чины и ни на ранги!

    А если еще кнопочек потребуется, будете дальше высчитывать Ш,В и т.п.?

    Столкнулся, что более 30 таких писуляк понадобавляли на форму! жесть, изуродовали форму документа!

    Reply
  2. Поручик

    (0) Для конфигураций на основе БСП забыли упомянуть модули МодификацияКонфигурацииХХХХПереопределяемый. Если они присутствуют в конфе, то именно в них надо добавлять свои элементы и реквизиты формы.

    Reply
  3. yukon

    Грамотное обновление 1С:

    п.0 Перед обновлением сделайте бэкап.

    Reply
  4. fixin

    (3) дада, но это должно быть в ДНК, статья в общемто не об этом, но добавлю. 😉

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

    (1) добавили вручную или кодом? если кодом, то все норм, почему бы и нет. или ты предпочитаешь при каждом обновлении руками рисовать? Код надежнее.

    Reply
  5. JohnyDeath

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

    Reply
  6. kosmo0

    Программное добавление элементов на обычную форму:

    — если решили программно добавлять элементы формы, которые ранее были на форме в явном виде. Проще всего использовать обработки типа ДекомпиляцияИАнализФорм (их там несколько с схожим функционалом).

    — необходим контроль за этой формой. Иначе возможна ситуация — добавили вы свой элемент, а через некоторое время в типовой конфигурации добавили свой элемент и именно на ЭТО ЖЕ МЕСТО. В итоге один из элементов будет перекрыт и его будет не видно.

    Добавление внешнего отчета:

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

    Reply
  7. fixin

    (5) копирую план обмена. 😉

    Reply
  8. fixin

    (6) ну про внешний отчет это известная тема, но можно отразить для общности, да, внесу.

    Что касается декомпиляции, это да, но из пушки по воробьям, обычно добавляется один-два реквизита.

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

    Reply
  9. suggestive

    А как же расширения для управляемых форм?

    Reply
  10. v3rter

    Может, Грамотная доработка 1С ?

    Благодарю, полезный мануал.

    Reply
  11. fomix

    Fixin — как всегда молодцА!

    Reply
  12. Terve!R
    Если вы добавили свой документ, то ему хочется добавить типовые общие команды «Движения документа» и «Структура подчиненности». Но если поменять состав документов для типовой команды, появится постоянная проблема при обновлениях.

    Это прежде всего касается подписок на события, когда при добавлении своего документа, например в БП 3.0, его нужно прописывать в десяток подписок, что с вероятностью 99% слетит при очередном обновлении. С подписками проще — там только состав объектов и ссылка на процедуру, которую можно не контролировать. Сам не сразу догадался)

    Reply
  13. JohnyDeath

    (7) копируешь, а дальше как?

    При каждом обновлении типового плана сравнивать его со своим скопированным? Это гемор еще тот

    Reply
  14. fixin

    (13) а что, там серьезные изменения? гггг….

    Ну напиши обработку, чтобы проверяла, что все объекты регистрируются и свой код, который убирает то, что отправляться не должно, фигня вопрос.

    (10)(11)(12) я работаю для Вас! 😉

    (9) еще не смотрел, как бы не оказалось таким же мертворожденным дитяткой, как бызнес-процессы

    Reply
  15. JohnyDeath

    (14) просвети. Дополни статью планами обмена

    Reply
  16. fixin

    (15) что именно не понятно? Полный ПО используешь для риб?

    Кстати, как вариант, еще можно снять полный ПО с поддержки. Тогда идентификатор вида ПО останется прежним и не будет затираться обновлениями от 1с.

    Reply
  17. ashvik

    Не освещена тема использования внешних программ для объединения модулей. Их использование позволяет существенно ускорить процесс обновления.

    Reply
  18. fixin

    (17) это тема отдельной статьи, имхо, сложно выбрать инструмент, вьехать и т.п. но ок, добавлю ваше замечание, что существуют внешние инструменты.

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

    Reply
  19. viramen

    (2) Поручик, Забывают разработчики вставлять вызов во все формы

    Reply
  20. starik-2005

    (14) ну для кого мертворожденные, а для кого и инструмент. Я, например, в свое время очень много что на них (бизнес-процессах и задачах) делал. Очень удобная штука.

    Reply
  21. vasja_yar

    Лет 5 назад еще норм статья, сейчас все на БСП и управляемых формах. Не описана работа с предопределенными данными. В целом статья для тех кто только начинает рабоать, много букв и ни о чем

    Reply
  22. vasja_yar

    (7)Какой то странный метод…как потом риб делать?

    Расширения — не не слышал…

    Reply
  23. fixin

    (21) я как раз про управляемые формы и писал. а что не так с предопределенными данными, ггыгыгы, там все просто и тупо объединяется.

    (22) риб делается как обычно. Расширения не щупал, но там 1с, как обычно, сделала наверно, криво (подозреваю). хотя могу ошибаться. Читал их статью про эти плагины.

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

    (20) это как RLS в правах на изменение. Не эффективно. Главный недостаток БП — то что схему можно рисовать только в конфигураторе, а не на прикладном уровне.

    Reply
  24. starik-2005

    (23) на прикладном уровне, поверь, тоже можно. Но не всем дано )))

    Reply
  25. fixin

    (24) молодец, раз нашел нетиповые возможности. но в типовом виде БП — унылый кал

    Reply
  26. starik-2005

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

    Reply
  27. fixin

    (26) ложь. Найди тут штук 3-4 разработки, которые позволяют рисовать БП в прикладном режиме. Почему-то они сделаны не на бизнес процессах. Ключевое слово для поиска «Бизнес-процессы». Кстати они платные 20-50 тысяч продаются. Подумай почему убогих БП от 1С недостаточно, раз люди готовы платить такие бабки.

    Reply
  28. starik-2005

    (27) я на базе бизнес-процессов и задач делал достаточно много всяких полезняшек. Схемы в них — далеко не главное, хотя, конечно, красивое, Например, интеграцию с DHL, когда заявка на доставку создается пользователем, потом утверждается руководителем, потом акцептируется сотрудником службы доставки. После этого в другом бизнес-процессе происходит подтягивание заявок и передача их провайдеру, осуществляющему услуги доставки. Потом автоматически заявки в том самом порядке, в котором их обработал специалист службы доставки, выплевываются из принтера по карточке сотрудника. После того, как заявка акцептируется провайдером, пользователь оповещается о выполнении. С бизнес-процессами и задачами это было сделать очень легко и просто. А т.к. задача для всех бизнес-процессов — это один объект, то он прекрасно может жить в списке задач пользователя, которые пользователь должен выполнить и которые двигают процесс по схеме. Тут как раз тот самый системных подход, о котором все говорят, но никто толком не знает, что это такое.

    Reply
  29. fixin

    (28) чувак, ну что ты мне сказки рассказываешь? Сила БП в точках процесса. Без них список задач можно было в справочнике хранить (вместо объекта задача) и все. Но вот эти точки как раз можно добавить только в конфигураторе.

    Чуть родился новый пункт обхода — надо менять схему.

    Можно конечно делать виртуальные схемы, которые предусматривают добавление новых участков. Но тогда мы отходим от простоты схемы БП.

    Короче 1с задумало гору, а родила мышь.

    Reply
  30. premierex

    (0) увидел Вашу статью и опять — негативное отношение. Ничего личного. Негатив — в плане изложения материала. Надо (нужно) сделать так! А кто Вам сказал, что надо и нужно делать так, как это делаете Вы? Может быть, Вы рекомендуете так сделать? Разные понятия, согласитесь. Одно — обязывает, другое — предлагает использовать предложенное решение. Ведь подход к программированию у каждого свой. Вы же навязываете свои решения, практически подталкивая программиста следовать им! К тому же, среди на самом деле полезных советов, я например не увидел даже слово «подсистема». Они, как я полагаю, и предназначены для того, чтобы группировать программный функционал в зависимости от степени его назначения. Я свой новый функционал — созданные объекты конфигурации , общие модули, документы, справочники и т. д. рекомендую объединять в отдельную подсистему. По моему опыту, это сильно упрощает процесс обновления конфигураций.

    Reply
  31. starik-2005

    (29) кому как. Мне лично нравится. Но тем, кто постоянно все переписывает и переделывает из-за недостатка архитектурного системного мышления с этим трудно. Мне это сложно понять, но, полагаю, таких «мастеров» полно.

    Reply
  32. fixin

    (31) молодец, ты единственный Гений, который понял задумку 1с, гыгыгы.

    Остальные — неучи. Будем благодарны тебе, если в статье раскажешь как нам правильно юзать БП.

    А то люди платят разработчикам систем, где можно юзать справочники и регистры для БП по 20-50, а тут самородок нашел способ использования типовых БП… Гений, че…

    (30) много воды, что хотели сказать не понятно, о каком негативе идет речь? У меня сугубо практические выкладки, которые экономят время обновления. Будь они написаны хоть матом, я бы с удовольствием почитал, ибо время — деньги. Опыт выстрадан на собственной шкуре, я уверен что так и НАДО делать. Ну не ручками же управляемые формы в типовых конфах править. И кстати, приведите примеры, как использование подсистем упрощает обновление конфигураций.

    Reply
  33. premierex

    (32) перечитайте комментарии к своей статье «Как грамотно составить резюме». Может, и поймете, что я имел ввиду. А по поводу подсистем: в 1С:Предприятия и обновления конфигураций — изучайте мат. часть. Там можно фильтр установить и при обновлении к Вашей подсистеме обновления не применятся.

    Reply
  34. starik-2005

    (32) да я всегда знал, что некоторым танцорам ботинки жмут — бывает. А какие-то там неизвестные разработчики, которым платят неизвестные конторы за неизвестные БП, которые якобы невозможно написать на стандартном механизме — совсем неубедительно звучит.

    Reply
  35. BlaSo
    Использование обычных элементов вместо предопределенных

    Можно использовать обычные элементы вместо предопределенных.

    Для того, чтобы не было конфликтов кодов, лучше давать им префикс, например код задавать в виде «ПЭ-XXXX».

    Лучше использовать предопределенные и обращение по имени, чем в модулях будет написано НайтиПоКоду()

    И тем более лучше не менять правила установки кодов, думаю всем понятно с каким кодом будет создан след.объект после добавления вашего «ПЭ-XXXX».

    Добавление отчетов

    Если просто добавить новый отчет, то могут быть проблемы с ролями, хотя обычно проблем нет

    Поэтому нужно добавить отчет в справочник дополнительных внешних обработок.

    Правильно, поэтому добавляем также новые роли, которые регулируют доступы на добавленные объекты

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

    Добавление колонок в форму списка

    Нужно организовать перебор колонок списка и вставлять свои колонки после типовых.

    Зачем перебор-то делать:

    лпИндекс = лпКолонки.Индекс(лпКолонки.Цена);

    или

    лпИндекс = лпКолонки.Индекс(лпКолонки.Найти(«Картинка»)) ;

    Добавление поля ввода на обычную форму

    Если просто добавить поле ввода ссылочного типа

    Подправьте, это касается полей не связанных с реквизитами

    Как проверить, есть ли доработки в типовую конфигурацию

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

    Или какой-то олень ее удалил 🙂

    Конфигурация полностью типовая, если не включена возможность изменений (проверять надо в меню Конфигурация — Поддержка — Настройка поддержки)

    Как при сравнении-объединении определить измененные объекты

    НЕЛЬЗЯ (!) делать обновление через пункт сравнение-объединение, таким образом не обновляется Конфигурация поставщика

    Режим лучше использовать «Взять из файла», только так форма получится гарантировано идентичной обновлению.

    Для обоюдно измененных модулей использовать Индивидуальную настройку

    Reply
  36. Alex_E

    (35) BlaSo, ОООООООЙЙЙЙЙЙЙ, как всё запущено)))))

    У вас, уважаемый, принцип — без меня всем писец?

    Reply
  37. BlaSo

    (36) Alex_E, нет)

    Написал свои комментарии, принимать их во внимание или нет — решать автору)

    Reply
  38. Alex_E

    (37) BlaSo, Это понятно, но в

    НЕЛЬЗЯ (!) делать обновление через пункт сравнение-объединение, таким образом не обновляется Конфигурация поставщика

    Режим лучше использовать «Взять из файла», только так форма получится гарантировано идентичной обновлению.

    Для обоюдно измененных модулей использовать Индивидуальную настройку

    сразу видится или махровый клюшечник, или…одно из двух…

    взять из файла — то песня…

    Если я скажу НЕЛЬЗЯ делать обновление продакшп никак, кроме как через обновление, и как готовится это обновление можно почитать…это тоже можно не принимать во внимание)))

    Reply
  39. fixin

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

    (33) но о том, что вашу подсистему обновлять не надо, знаете только вы, не так ли? а вот механизм «снятия с поддержки» гарантированно защищает объект от изменений. Не убедили.

    (35) и какой же элемент будет создан после ПЭ-???? как раз ПЭ защищает от включения в общую систему нумерации.

    Про отчеты не согласен, как раз справочник внешних — в 90% случаях идеальное решение.

    Про перебор принимается, но это не особо принципиально.

    А как можно удалить конфигурацию поставщика? ггггг… Снять с поддержки? Это будет заметно. И чрезвычайно маловероятно.

    Имелось ввиду окно сравнения-объединения объектов, а не режим сравнения-объединения конфигураций.

    Reply
  40. starik-2005

    (39) о, кто-то захотел со своим здоровьем канделябром )))) Ну-ну, поглядел бы я на Вас поближе ))) А то, что ботинки жмут — ну так или разнашивать надо, или сменить. Помните, как в одном замечательном подростковом фильме Брюс Ли учил молодого парня постоять за себя? Там было про то, что в полный стакан сложно что-то налить. Это про Вас.

    ЗЫ: Кстати, слово «Вы» культурные животные с большой буквы пишут, если, конечно, это не обращение к массам. Но вроде тут кроме меня никто про БП ничего не писал.

    Reply
  41. fixin

    (40) буду благодарен если вы принесете хоть немного полезной информации по 1с в нашу беседу.

    Reply
  42. starik-2005

    (41) смотря что считать полезной информацией. У нас с Вами два мнения: кто-то считает, что БП — штука недоработанная, т.к. нельзя ее менять в ходе эксплуатации механизма, не влезая в конфигурацию; кто-то другой думает иначе и считает, что нет никаких препятствий реализовать подобное поведения по типу допреквизитов документов. Да, схема сама по себе не «перерисуется», конечно, но ведь не в схемах дело, а в процессе, который управляет движением задачи от одного исполнителя или группы исполнителей другому (или другой группе). В этом и есть основной смысл БП.

    Reply
  43. fixin

    (42) почему статичная схема неудачна, я высказался. Если хотите аргументированно спорить, объясните, как вы используете статичные схемы для изменяемых пользователем процессов. Создаете библиотеку шаблонов вложенных БП? ну так это криво и нелогично для пользователя.

    Потому люди и пишут платные разработки по БП, что механизм от 1с неудобен пользователю.

    Reply
  44. Alex_E

    Сама доработанная программа в мире — это тетрис. У 1С, Навиджена. Сапа пока не наблюдается ни одного решения, которое не нуждается в обновлениях или настройках)))))

    Reply
  45. starik-2005

    (43) т.е. Вы считаете, что допреквизиты в справочниках и документах — это нелогично? Тогда чем они лучше БП, если для их изменения логично лишь лезть в конфигуратор?

    По поводу БП, то это лайфцикл задачи. Он может меняться, но эффективность бизнеса так или иначе завязана именно на процесс. Если Вы не знаете, то весь бизнес в плане производственной деятельности завязан на балансе из компетенции, мотивации и процессов — что поделать… Чем выше уровень процессов, тем менее квалифицированный нужен персонал для решения задач. Чем выше мотивация, тем больше времени готов тратить персонал на решение бизнес-задач, что может компенсировать недоработанность бизнес-процессов. Ну и высокий профессионализм позволяет сотрудникам и «без всяких процессов» решать задачи, но где эти золотые люди в массовом количестве.

    Т.е. у Вас просто нет понимания, зачем нужны эти самые процессы. Из этого и исходит Ваш неверный вывод о том, что статичность процесса является его узким местом. Для меня же ни статичность процесса, ни статичность задачи узким местом не являются, т.к. изменение процесса так или иначе меняет поведение оного, что вполне обосновывает изменение схемы процесса в конфигураторе (и все!), после чего задачи начинают двигаться другой дорогой. Т.е. меняется лишь схема — никакой реструктуризации, никакой доработки. Но, повторюсь, это можно сделать и через механизм допреквизитов (дополнительных точек маршрута с логикой, описанной в справочнике/регистре/табличной части). Но это мне лично ни разу не пригодилось.

    Reply
  46. BlaSo

    (38) Alex_E,

    Ха-ха, с клюшками я в принципе не работаю.

    Объясняю почему нельзя обновляться в обход механизма стандартного обновления:

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

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

    «взять из файла — то песня… «

    Имелся в виду режим объединения объектов, взамен предложенного «Объединить с приоритетом…»

    (39) Если в справочнике был объект с последним кодом, например 000009, и вы добавляете какой-нибудь ПЭ-001, то следующему систему присвоит код +1 к максимальному (ПЭ-002)

    Про перебор принимается, но это не особо принципиально.

    Не особо, но немного больше кода и скорее всего немного трудозатратней.

    А как можно удалить конфигурацию поставщика? ггггг… Снять с поддержки? Это будет заметно. И чрезвычайно маловероятно.

    Да, «Снять с поддержки». Встречались такие базы, но действительно редко, гораздо чаще «некорректно обновленные»

    Имелось ввиду окно сравнения-объединения объектов, а не режим сравнения-объединения конфигураций.

    Значит я недопонял)))

    Reply
  47. v3rter

    А еще бывает конфликт интересов админ-франчайзи, когда приходящий программист всеми силами пытается снять базу с поддержки, чтобы регулярно платно ее обновлять, а админ сопротивляется и показывает инфостартовские обработки для пользовательских «хотелок», оставляющие базу типовой, но не лезет сам их прикручивать. В итоге база остается типовой ))

    Reply
  48. Alex_E

    (46) BlaSo,

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

    — кто сказал? Откуда сей бредовый вывод? Стандартное обновление как раз через обновление — сравнение и обновление — из клюшек…

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

    вангонутость у Вас страдает — попадались — решается просто — снимается с поддержи совсем (остаётся одна основная конфигурация), потом сравнивается с того же релиза типовой, и принимается решение (90% случаев вертается типовая)))))

    Имелся в виду режим объединения объектов, взамен предложенного «Объединить с приоритетом…»

    раньше было сложнее. сечас на этапе объединения снятой с поддержки конфигурации (у меня всегда это копия базы клиента, на которой я готовлю обновление) тексты модулей просто включаются в обновление, с изменёнными реквизитами чуть сложнее, но там то же можно (не всегда конечно) решить на этапе объединения (объединение здесь всегда имеется ввиду через Конфигурация — Поддержка — Обновить конфигурацию), если не получается на этапе объединения, то всегда вставляю затычку, которая не позволяет потерять данные на рабочей базе клиента — http://infostart.ru/public/333873/

    Обновление через сравнить….клюшечный подход)))))

    Reply
  49. BlaSo

    (48) Alex_E, дабы не виделось то что хочется видеть, а не то что написано:

    Нормальное (!) обновление типовой конфигурации (оно же есть стандартное): Конфигурация — Поддержка — Обновить конфигурацию

    Некорректное, но периодически встречающееся: Конфигурация — Сравнить, объединить с конфигурацией из файла…

    теперь в контексте понимания терминов думайте что было написано выше

    вангонутость у Вас страдает — попадались — решается просто — снимается с поддержи совсем (остаётся одна основная конфигурация), потом сравнивается с того же релиза типовой, и принимается решение (90% случаев вертается типовая)))))

    У меня ничего не страдает, иногда просто не возможно определить точно релиз, потому что конфигурация является чем-то средним между двумя или тремя релизами 🙂

    Reply
  50. Alex_E

    (49) BlaSo,

    теперь в контексте понимания терминов думайте что было написано выше

    странно, выше было написано

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

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

    — где я говорил, что не нужно обновлять конфигурацию поставщика, и откуда Вам известно, что мне ни разу не попадались

    конфигурации, которые обновляли именно через Сравнение-объединение

    ?!!!

    Если у меня образовывается новый клиент, первое, что я делаю — это проверяю конфигурацию на соответствие типовой!!!

    ТО, что конфа у клиента «под замком»не факт, что там типовая, дальше повторяться не буду, см. (48)

    Reply
  51. BlaSo

    (50) Alex_E, Ну так все правильно 🙂

    если вы не обновите Конфигурацию поставщика, то фактически исчезает элементарный механизм проверки а что-то же в конфигурации доработано

    Конфигурация поставщика НЕ обновляется только при неправильном накатывании апдейта (Конфигурация — Сравнить, объединить с конфигурацией из файла…)

    соответственно в таком случае бессмысленно сравнивать со старой конфигурацией поставщика

    Reply
  52. Alex_E

    (51) BlaSo, Потому и говорю, что правильное онвление через обновление)))сравнение и прочая хрень — исключения, от которых отказаться нельзя, но это таки исключения из правил))))

    Reply
  53. fixin

    (51) мы всегда оставляем конфу поставщика, следовательно обновление через Поддержка — Загрузить из файла. 😉

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

    Reply
  54. starik-2005

    (53) вот это показывает то, что темой Вы не владеете. Точки БП — это то, как аналитик фиксирует потребности бизнеса в схеме решения задачи, а не то, что там себе выдумывает пользователь. Хоть бы вики почитали что-ли:

    Бизнес-процесс — это совокупность взаимосвязанных мероприятий или задач, направленных на создание определённого продукта или услуги для потребителей. В качестве графического описания деятельности применяются блок-схемы бизнес-процессов.

    По поводу динамичности процесса, то за это отвечает механизм ветвления, разделения и слияния. Учите мат.часть.

    Reply
  55. fixin

    (54) хохохо, вместо конкретики вы ушли в буквоедство. счастливого пути.

    Reply
  56. starik-2005

    (55) да, аргумент что надо. Понятно, почему Вас в Связной не взяли.

    Reply
  57. fixin

    (56) в случае появления конкретики продолжу с Вами дискуссию.

    Reply
  58. starik-2005

    (57) аналогично.

    Reply
  59. TODD22

    (35) BlaSo,

    Лучше использовать предопределенные и обращение по имени, чем в модулях будет написано НайтиПоКоду()

    Крайне вредная рекомендация про предопределённые элементы…. особенно в РИБе.

    Reply
  60. fixin

    (58) ок

    (59) не вижу ничего плохого в НайтиПоКоду, ровно как и в использовании операторов Перейти. Главное четко понимать преимущества того или иного решения.

    Reply
  61. TODD22

    (60) А я и не писал что это плохо… плохо раздавать советы про предопределённые элементы.

    Reply
  62. BlaSo

    (59) TODD22, Давайте конкретней, если пишите плохо, то напишите почему.

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

    (60) Минуса НайтиПоКоду:

    • Зависит от данных, пользователи по тем или иным причинам могут изменить коды
    • Поиск использования конкретного элемента в конфигурации (согласитесь или нет, но поиск по тексту НайтиПоКоду(«00001») как-то хуже чем поиск по конкретному имени, тем более если у вас много разных элементов)

    На больших и средних проектах, я при необходимости создаю специальный справочник, куда забрасываю предопределенные значения, а в режиме Предприятия для них указываются значения. Такой себе аналог констант, все настройки в одном месте и при чтении кода видно какое значение используется.

    Reply
  63. fixin

    (62) хохохо, если вы создаете код не в диапазоне работы пользователя, т.е. код вида ПЭ-*****, то пользователь ну ни в жизнь не догадается создать элемент с таким же кодом, к тому же задублировать ему система не даст. А поменять код имеющегося элемента ему тоже мозгов не хватит. Нет, можно конечно, страховаться и от падения метеорита из космоса, но мы же прикладные программисты, автоматизируем бухучет, а не взлет-посадку Боинга. Прошу соотносить риски и затраты.

    Reply
  64. petrov_al

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

    Reply
  65. fixin

    (64) ну надо будет покурить расширения, да. Думаю, это не панацея.

    Reply
  66. fixin

    Касательно расширений: http://v8.1c.ru/o7/201410ext/

    Это, конечно, хорошо, но пока не панацея.

    Можно перехватывать только события управляемых форм и обрабатывать их по-своему.

    Но нельзя изменить алгоритм общего модуля или менеджера документа. Возможно, 1с доработает этот момент, но пока расширения — не универсальный инструмент, применимый чаще для интерфейсных случаев, а не для изменения логики решения.

    Для логики опять же остаются только подписки (их в расширениях юзать нельзя, что странно) и непосредственная правка кода.

    Reply
  67. klinval
    Доработка общих команд типа «Движения документа» и «Структура подчиненности»



    Поэтому можно добавить свои команды, скопировав обработки модуля команды (они там примитивные).

    В своих командах указать свой собственный состав документов для команды.

    У нас в базе тоже есть своя команда на структуру подчинённости. Её делали давно и скорее всего не я. Сейчас глянул: она за собой потянула создание своего «критерия отбора» и общей формы структуры подчиненности. База: БП 3.0

    Вы как-то без этого обошлись или просто забыли об этом в статье упомянуть?

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

    При этом если сравнения вылетит, придется сохранять все сначала.

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

    В 8.3.8 вроде проблема уже решена. Ни разу не юзал, но описание тут. Если нет подписки на ИТС, то вкратце появилась возможность выгрузить (в том числе и автоматически выгружать) и загрузить настройки.

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



    Загрузить настройки… – настройки окна сбрасываются к настройкам по умолчанию, а затем выполняется загрузка настроек объединения из файла. Загруженный файл становится текущим для выполнения команды сохранения и автоматического сохранения настроек.
    Reply
  68. klinval

    (66) по поводу расширений соглашусь, что вроде как штука хорошая, но не панацея. Тоже их не пробовал на практике, но когда только вышли много читал про них и пришёл к выводу, что будет только сложнее с ними работать. Опустим момент, что общие модули нельзя изменять, допустим они это реализуют. Допустим есть изменения вида:

    Процедура 1СовскаяПроцедура()
    //Код 1С
    //Наш код аккуратно меняющий механизмы 1С под нас
    //Код 1С
    КонецПроцедуры
    

    Дальше как я понимаю я в расширение добавляю всю эту процедуру. И если 1С-овцы её изменят при обновлении я этого не замечу. Только интерактивно пользователь когда увидит (если заметит) мы поймём что что-то не так. При идеале конечно должны помочь выявить все эти изменения тесты, но во-первых не у всех они есть, во-вторых под каждый чих их придётся писать (было N часов на программирование, стало N*2), да и в-третьих тесты тоже не идеальны и пишутся не на 100% случаев и могут пропустить. А в процессе обновления пропустить дважды измененную процедуру труднее. Плюс если мы выявили такую ситуацию: в окне сравнения сейчас проще изменения внести чем после обновления анализировать в разных окнах код до и код после.

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

    Reply
  69. Yashazz

    Гений1С в своём духе. С очень умным видом приведены или устаревшие, или частные, или вообще сомнительные способы. Зато претензия на всеобщесть. Зато куча плюсов, хотя следование рекомендациям as is может плохо кончиться. И как всегда нежелание услышать собеседника в комментах. И главное, всё это уже стопицот раз было в тех или иных формах публиковано, но нет же, надо и свою нетленку выложить)

    Единственно, что скажу: ни в коем случае не связывайтесь с расширениями. Лучше курочить типовую и потом её обновлять — там всё зависит от вас, вашей грамотности и правильности кода. А в случае применения расширений всё будет зависеть от неуправляемого множества багов и косяков, которые авторы сего шедевра допустили в платформе.

    Reply
  70. TODD22

    (62) BlaSo,

    Давайте конкретней, если пишите плохо, то напишите почему.

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

    Если бы минус был бы только с гибкостью настройки для пользователя то вот такая обработка была бы не нужна:

    http://infostart.ru/public/305892/

    Можете по количеству скачавших понять сколько минусов с предопределёнными элементами. Например у меня была проблема в РИБе когда на 10 магазинов задвоились предопределённые элементы и разлетелись по 150 узлам… Конфигурация была самописная и на предопрелённые элементы было завязано огромное количество функций. И вот после их задвоения и обмена вся сеть встала. Минусов на самом деле больше чем плюсов….

    Reply
  71. Alex_E

    (69) Yashazz,

    Единственно, что скажу: ни в коем случае не связывайтесь с расширениями. Лучше курочить типовую и потом её обновлять — там всё зависит от вас, вашей грамотности и правильности кода. А в случае применения расширений всё будет зависеть от неуправляемого множества багов и косяков, которые авторы сего шедевра допустили в платформе.

    — как то вполне в духе первого предложения первого обзаца предыдущего поста, только про Вас))))

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

    Возможность изменять интерфейс, создавать свои подсистемы, добавлять свои обработки (модули менеджера которых вполне себе заменяют общие модули), свои отчеты…

    Конфигурация на БП 3.0, включена возможность изменения, обновления бывало выходили по паре раз за день, база легко обновляется, используются свои общие модули для подписок на события, свои регистры и справочники — это в изменениях типовой, и — главное -все эти изменения начиная с 8.3.6.* проделываются в окне сравнения, а вот формы типовых справочников/документов, где нужны были изменения, отчеты и обработки и своя подсистема «Алко» вполне себе сидят в расширении, и за год изменения пришлось вносить может пару раз, причем минимальные… С подпискам и на события и некоторыми изменениями общих модулей типовой это случалось гораздо чаще))))

    Reply
  72. Yashazz

    (71) Alex_E, ну почитайте мою статью про расширения (http://infostart.ru/public/441730/) и опровергните хоть единый факт из неё и идущих к ней комментариев. Кривой, ненадёжный, нестабильный механизм — такое нельзя использовать в серьёзных промышленных решениях. Насчёт модулей менеджера можете не рассказывать, вполне себе они нихрена не заменяют, если одно расширение вдруг не примонтировалось, а в другом есть их вызовы. Словом, если очень сильно повезёт и комариный чох на вашей стороне, то добавлять свои обработки можно. Не более. Если хотите спать спокойно после обновления платформы)))

    Reply
  73. Alex_E

    (72) Yashazz, Да я сплю спокойно, вот уже год, а если что то делать криво, то потом не стоит удивляться, что не работает…

    Это не токо к расширениям относится))))

    Про опрровергать что-то из Вашей статьи, оно мне надо? Вы из моего поста что опровергнули? Что модуль менеджера обработки из расширения

    вполне себе они нихрена не заменяют, если одно расширение вдруг не примонтировалось, а в другом есть их вызовы.

    — ну дык то прямое подтверждение, что если что-то сделать криво — чего удивляться, что не работает? Кто заставляет делать вызов из другого расширения, и уж тем более пускать в продакш не проверив?))))

    Reply
  74. fixin

    (67) klinval, да, прикольно появились кнопочки сохранения и загрузки. На практике еще не юзал, но кнопочки уже видел.

    (68) ну батенька, вы захотели, чтобы расширение замечало, что процедура менялась. Это из области фантастики, да и не нужно особо. Надо тестировать как-то расширение на новых релизах. Автотесты вам в помощь, если это серьезное расширение.

    (69) буду признателен, если вы выложите свои «гениальные» советы, а то беспочвенно очернять не конструктивно. Конструктивные замечания принимаются — видите, я даже посмотрел расширения. Ничего крамольного в них не вижу.

    (70) ну в РИБ надо внимательно относиться к предопределенным, таки да. А не пенять потом на то, что вы не изучили, как работают предопределенные элементы в новых платформах.

    (71) охотно верю, но без подписок и перехвата процедур и участков кода общих модулей и модулей документов это какое-то неполноценное решение, пусть допиливают. Это как RLS на измненение — ненужное и избыточное.

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

    Reply
  75. Alex_E

    (74)

    буду признателен, если вы выложите свои «гениальные» советы, а то беспочвенно очернять не конструктивно. Конструктивные замечания принимаются — видите, я даже посмотрел расширения. Ничего крамольного в них не вижу.

    буду признателен, если будет пояснение в каком именно месте и чё я так очернил?

    По поводу советов и пр. выложил здесь кастомизированное решение на расширении — вырезка из той конфигурации, о которой говорил выше — http://infostart.ru/public/363185/

    Ещё один совет, не про расширение — проверять изменённые типовые объекты (реквизиты объектов) на этапе подготовки обновления перед обновлением http://infostart.ru/public/333873/ — вроде пустяк, забыть где нить галочку поставить, а вот когда аукнется, уже и не пустяк будет)))

    Reply
  76. TODD22

    (74)

    А не пенять потом на то, что вы не изучили, как работают предопределенные элементы в новых платформах.

    А никто и не пеняет. Изучили как работают. Только изучение работы от ошибок не избавляет…. Так что мимо…

    Reply
  77. q_i
    Если просто добавить поле ввода ссылочного типа, то не будет работать кнопка выбора. Как эту проблему решить, пока не понятно, поэтому надо добавлять реквизит формы вручную.

    Без добавления реквизита формы вручную:

    …
    //Поле.Данные = «_ДокументРазовыхНачислений»;
    Поле.ТипЗначения = Новый ОписаниеТипов(«ДокументСсылка.РегистрацияРазовыхНачисленийРаботниковОрганизаций»);
    …
    Reply
  78. nixel

    (78) Sergey Ivanov,

    хороший вброс на вентилятор)

    Reply
  79. fixin

    (78) руки не пробовал перешить чуть повыше?

    Reply
  80. hulio

    Уважаемые коллеги, использующие методы «НайтиПо…()», убедительная просьба: делайте функции-обертки для вызова этих методов.

    Недавно столкнулся с конфигурацией, в которой конструкция «КакаятоСсылка = Справочники.КакойтоСправочник.НайтиПоКоду(«000001″)» встречалась раз эдак 300 или даже больше.

    Спрашивается, вот что мешало сделать функцию в общем модуле

    Функция НужнаяМнеСсылка() Экспорт
    Возврат Справочники.КакойтоСправочник.НайтиПоКоду(«000001»);
    КонецФункции
    

    ?

    Reply
  81. cool.vlad4

    (81) hulio, я такой же трешняк бывало видел. более того некоторые особо одаренные, делают глобальные переменные КакойтоСправочник = Справочники.КакойтоСправочник, поскольку видимо им лень писать Справочники.КакойтоСправочник. жаль нельзя задавать правила, по которым на некоторые участки кода выдавалось бы сообщение об вероятной ошибке .

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

    Reply

Leave a Comment

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