Вспомогательные инструкции в коде 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='\

89 Comments

  1. Cyberhawk
    Такой код всегда не будет компилироваться

    «Такой код никогда не будет компилироваться» звучит лучше

    Reply
  2. TODD22

    (2)

    Такой код всегда не будет компилироваться

    Тогда можно убрать слово «всегда».

    Reply
  3. Восьмой

    Блин Америку открыли — смысл статьи то в чем?

    До стучаться до разрабов EDT?

    Reply
  4. tormozit

    (3) Да можно, но для ясности хотелось подчеркнуть.

    Reply
  5. tormozit

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

    Reply
  6. Восьмой

    (6)

    Я еще в 2013 видел подобную статью на одном из форумов. И да — это прием исключительно для процесса разработки, разработчик который выкладывает подобное в релиз да еще и без комментариев — поступает весьма не вежливо.

    Reply
  7. tormozit

    (7) Какие комментарии для такого вспомогательного кода тебе кажутся вежливыми?

    Reply
  8. ADirks

    (7) Почему невежливо то? Мне, как разработчику, наоборот приятно, что кто-то озаботился о моём комфорте.

    На работе системы же это никак не скажется.

    Reply
  9. Восьмой

    (8) Коллега вы ради этого статью целую написали, чтобы донести в массы свою мысль. Так же ведь и с комментариями.

    Reply
  10. tormozit

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

    Reply
  11. t.v.s.

    Идея хорошая, спасибо за наводку.

    Предлагаю расширить вот так:

    #Область DesignerHelper
    //Содержимое этой области не несет полезной нагрузки и необходимо исключительно для облегчения процесса разработки
    #Если Сервер И Не Сервер Тогда
    Алгоритм = Справочники.ирАлгоритмы.ПустаяСсылка();
    #КонецЕсли
    #КонецОбласти
    

    Ну а в релизной версии скриптом эти области вырезать

    Reply
  12. Darklight

    Забавно, возьму на заметку. А так, конечно, буду ждать встроенных в платформу инструкций по «типизации» переменных и ещё более продвинутое выведение типов — как в современных строго и не строго типизированных языках программирования. Боюсь только ждать долго придётся… язык 1С и так уже отсатёт на 10-20 лет от современных тенденций в разработке программ, и, даже не пытается за ними следовать — с каждым десятилетием отставая всё больше и больше.

    Такое впечатление, что компания 1С «болт забила» на развитие языка. Ну, ей сейчас не до этого, ей нужно EDT «до ума разума» доводить. Мне кажется в следующем поколении 1С Предприятия (9-том) компания 1С вообще откажется от своего собственно языка и перейдёт на более популярный не то что в мире, даже в России — Java (ну или Java Script если надо будет оставить динамическую типизацию). Любовь к платформе Java компания не первый год питает. Вероятно и 1С: Предприятие 9 в большей своей части будет написана уже под Java runtime, с применением LLVM. Да и в попытке продвигать 1C Enterprise на запад — тоже полезно было бы не пытаться навязать им бейсикоподобную рухлять — а презентовать то, к чему пол мира уже привыкло — полноценный или почти полноценный Java-cинтаксис, хотя бы уровня 8-й генерации. Может и продвижение среды сразу более эффективно пойдёт на запад.

    Reply
  13. m.bolsun

    В TurboConf этот процесс можно автоматизировать. Программа сама создаст специальную секцию и будет в нее добавлять такие объявления типов.

    Reply
  14. Darklight

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

    
    Функция МояФункция(Праметр1, Параметр2)
    #Область Контракт
    //Содержимое этой области не несет полезной нагрузки и необходимо исключительно для облегчения процесса разработки
    Результат = Новый СписокЗначений();
    #Если Сервер И Не Сервер Тогда
    Параметр1= Справочники.ирАлгоритмы.ПустаяСсылка();
    Параметр2= Справочники.Номенклатура.ПустаяСсылка();
    Параметр2= Справочники.НоменклатурнаяГруппа.ПустаяСсылка();
    #КонецЕсли
    Если омОтладка.ЭтоОтладка() Тогда
    Если ТипЗнч(Праметр1) <> Тип(«СправочникСсылка.ирАлгоритмы») или  Праметр1.ПустаяСсылка() Тогда
    вызватьисключение «Параметр1 может быть только не пустым элементом типа «»СправочникСсылка.ирАлгоритмы»»»
    КонецЕсли;
    Если (ТипЗнч(Праметр2) <> Тип(«СправочникСсылка.Номенклатура»)
    ТипЗнч(Праметр2) <> Тип(«СправочникСсылка.НоменклатурнаяГруппа») )
    или  Праметр2.ПустаяСсылка()
    или  Праметр2.ЭтоГруппа()
    Тогда
    вызватьисключение «Параметр1 может быть только не пустым элементом типов «»СправочникСсылка.Номенклатура»», «»СправочникСсылка.НоменклатурнаяГруппа»» »
    КонецЕсли;
    КонецЕсли;
    #КонецОбласти //Контракт
    
    //какой-то код, заполняющий результат элементами справочника номенклатура
    
    #Область Контракт
    
    #КонецОбласти //Контракт
    Если омОтладка.ЭтоОтладка() Тогда
    Если ТипЗнч(Результат) <> «СписокЗначений» или не отОтладка.СодержитТолькоТип(Результат,»СправочникСсылка.Номенклатура») Тогда
    вызватьисключение «Результат не типа «»СписокЗначения»» или содержит элементы не типа «,»СправочникСсылка.Номенклатура»»»;
    КонецЕсли;
    КонецФункции //МояФункция
    
    

    Показать

    А ещё в такие контакты можно встраивать алгоритмы unit-тестирования, спящие пока не придёт время.

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

    Reply
  15. Восьмой

    Между прочим можно вот так:

    #Если КонтрактныйИнтерфейс тогда
    Документ = Новый ТаблицаЗначений;
    #КонецЕсли
    

    Прекрасно работает.

    Reply
  16. Rustig

    (0) профессионально описано!

    Reply
  17. Rustig

    (4) прочитайте внимательно 🙂

    Reply
  18. tormozit

    (16) Можно, но опасно. В будущем неизвестные идентификаторы могут объявить некорректными. Я лично просил разработчиков платформы так сделать, чтобы защитить от опечаток. Например Истина и Ложь уже являются таковыми. Остальные пока все еще разрешены и трактуются как Ложь.

    Reply
  19. tormozit

    (20) Способ для чего? Хорошо бы немного прокомментировать свой способ.

    Reply
  20. Dzenn

    (21) для явного указания типа, когда 1С не может его определить

    Reply
  21. Восьмой

    (20) Жесть какая-то

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

    Reply
  22. tormozit

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

    ВызватьИсключение «Отладка»;

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

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

    Reply
  23. Dzenn

    (23) почему «жесть»? Использую этот подход при отладке, потом такие строки убираю

    Reply
  24. tormozit

    (23) Поддержка комментариев кстати уже давно есть в конструкторе запроса ИР.

    Reply
  25. Восьмой

    (26) ИР штука хорошая и полезная, но хотелось бы в штатных конструкторах.

    Reply
  26. Dzenn

    (27) А что тут непонятного?

    Пришла, например, переменная Спр в качестве параметра функции, и я знаю, что это «СправочникОбъект.Номенклатура», а 1С этого не знает. Я инициализирую переменную, не забывая в ту же строку вставить «ВызватьИсключение «Отладка»», и дальше пользуюсь контекстными подсказками — реквизиты через точку, функции модуля и прочее. А когда написал весь нужный мне код — удаляю отладочную инициализацию. А если забыл удалить — 1С сама мне об этом напомнит вызовом исключения, когда буду отлаживать. Ну и плюс, все отладочные конструкции видны по CTRL-F.

    Reply
  27. Восьмой

    (29) Признаю свое невежество — прикольный способ, возьму на заметку.

    Reply
  28. Steelvan

    (2) Это правильно.

    В тему.

    Я регулярно на вопросы, типа «Вам пакет не нужен ?» отвечаю «Да», если не нужен 🙂

    Reply
  29. json

    Автор, спасибо за статью.

    Тоже давно использую Если Ложь, про способ прятать через директивы не знал.

    Кроме самого приема интересно было почитать про EDT и вычислитель типов

    Reply
  30. tormozit

    (31) Да, вопросы с отрицанием перед глаголом тоже в этом плане раздражают. Для однозначного восприятия ответа они требуют включения глагола в ответ. А ведь задающему вопрос часто всего то нужно убрать частицу «не» перед глаголом, чтобы отвечающий мог использовать варианты «да/нет».

    Reply
  31. tormozit

    (29)

    если забыл удалить — 1С сама мне об этом напомнит вызовом исключения

    Это если код линейный, что бывает далеко не всегда. Если будет например оператор ветвления, то опасность оставить такой код вырастает ощутимо, а каждый раз делать поиск маркера в тексте — утомительно.

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

    Reply
  32. Dzenn

    (34) я использую это в рамках одной процедуры/функции, а в рамках одной процедуры/функции нелинейного кода у меня не бывает в принципе

    Reply
  33. tormozit

    (35) Т.е. ты не используешь условный оператор (оператор ветвления) в методах?

    Функция ФУ(Фа)
    Если Фа = 1 Тогда
    Спр = Справочники.Номенклатура.НайтиПоКоду(«»).ПолучитьОбъект(); ВызватьИсключение «Отладка»;
    ИначеЕсли Фа = 2 Тогда
    Спр = Справочники.Номенклатура.НайтиПоКоду(«»).ПолучитьОбъект(); ВызватьИсключение «Отладка»;
    Иначе
    Спр = Справочники.Валюты.НайтиПоКоду(«»).ПолучитьОбъект(); ВызватьИсключение «Отладка»;
    КонецЕсли;
    КонецФункции

    Показать

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

    Reply
  34. Dzenn

    (36) использую, конечно, но стараюсь, чтобы процедуры/ функции были как пуля 😉 однозначными и линейными. Нелинейность и ветвления можно организовать в другой процедуре, в которой не будет нашей переменной

    Reply
  35. Armando

    (31) Чтобы было легче отвечать на такие вопросы, я вопросительное предложение воспринимаю как утверждение: «Вам пакет не нужен». Если утверждение верно говорю Да, иначе Нет.

    Reply
  36. kote

    Хмм.. а разве директивы не поддерживают Истина/Ложь?

    В конечном итоге — ЭтоСервер — это же тоже булева переменная, не?

    Reply
  37. tormozit

    (39) Причем тут имена переменных? Статью то прочитал? =)

    Reply
  38. tormozit

    (40)

    а разве директивы не поддерживают Истина/Ложь?

    Если сомневаешься, лучший способ проверить верность утверждения — проверить его самому. Тем более проверить это можно очень легко и быстро.

    В конечном итоге — ЭтоСервер — это же тоже булева переменная, не?

    Не понял. Что такое ЭтоСервер? Можешь подробнее описать свою мысль?

    Reply
  39. kote

    (42)

    Имел ввиду переменную Сервер в выражении

    #Если Сервер Тогда..

    Reply
  40. SerVer1C

    (23) Со времен 7.7 хочу простые операции: инкремент и декремент. Это же так просто. В «байт-коде» это же реализовано.

    Reply
  41. SerVer1C

    Автор знает интересные особенности в 1с. Плюсую!

    Reply
  42. Kutuzov

    (31) Я против того, чтобы изделия Бостон Механикс комментили на Инфостарте 😉

    Reply
  43. Darklight

    (19)Надо не просто запрещать — а дать возможность самим вводить такие термины. Как это можно было делать в Си (привет #define ну и #undef тоже хотя эта директива уже не так важна). Эх, так хочется иметь опции, которыми можно было бы управлять составом конфигурации при компиляции, в зависимости от использования в той или иной версии конфигурации/платформы или просто включать/выключать тот или иной используемый/неиспользуемый в данной ИБ функционал, в т.ч. отладочный.

    Reply
  44. Cyberhawk

    (2)

    1. Что в нем плохого (в общем случае)?

    2. Разве для тебя не очевидно, что в текущем конкретном случае от него явно больше пользы, чем от его отсутствия?

    Reply
  45. tormozit

    (50)

    1. Что в нем плохого (в общем случае)?

    Противоречит логике.

    Reply
  46. Cyberhawk

    (51) О какой логике речь?

    Reply
  47. tormozit

    (2) Лингвистический анализ проблемы https://rus.stackexchange.com/questions/38724/%d0%94%d0%b2%d0%be%d0%b9%d0%bd%d0%be%d0%­b5-%d0%be%d1%82%d1%80%d0%b8%d1%86%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b7%d0%b0%d1%87%d0%b5%d0%bc-%d0%be%d0%bd%d0%be-%d0%bd%d1%83%d0%b6%d0%bd%d0%be

    Reply
  48. tsukanov

    Про EDT:

    Более менее вменяемое указание типов разработчики могут сделать довольно легко.

    Для этого нужно только добавить в синтаксис языка необязательные аннотации типов:

    Функция Тест(Пар: Тип1)
    Перем Прм: Тип2
    КонецФункции

    Имена типов могут быть именами встроенных типов платформы, либо именами пользовательских типов.

    Для определения пользовательских в языке и платформе ничего менять не надо.

    Достаточно разрешить использовать имена пользовательских функций! )

    Т.е., учитывая, что EDT умеет выводить типы, мы можем определять свои типы просто написав соответствующую функцию.

    Например:

    Функция ТипПользователь()
    Пользователь = Новый Структура;
    Пользователь.Вставить(«Имя», «»);
    Возврат Пользователь;
    КонецФункции
    

    EDT легко выведет тип этой функции. И гипотетически может использовать имя этой функции в качестве типа.

    Т.е. мы могли бы написать:

    Функция Тест(Пар: ТипПользователь)
    Перем Прм: Тип2
    КонецФункции

    и EDT мог бы отслеживать ошибки и давать подсказки исходя из известного ему типа.

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

    Такой вот концепт )

    Reply
  49. Cyberhawk

    (54) Слов там всяких слишком уж много.

    По-твоему использование сочетания «никогда не» допускать никогда нельзя?

    Reply
  50. ADirks

    (54) что характерно, в 7.7 практически всё это сделано, кроме составных типов :))

    типизация для интеллисенса обозначается специального вида коммментариями

    Процедура тпЖурналПриВыводеСтроки(Источник, ОформлениеСтроки, ДанныеСтроки, ТипРегиона) Экспорт

    //ОформлениеСтроки//:ОформлениеСтроки

    Перем Яч;//:ОформлениеЯчейки

    что мешает запилить это всё в восьмёрке для меня загадка

    Reply
  51. ADirks

    или вот такую штуку почему не сделают? (динамический фильтр по подстроке в списке свойств/методов)

    прям очень не хватает

    Reply
  52. webester

    (46)Автор уважаем и широко известен в узких кругах своими шикарными проектами, конечно он что-то знает про 1С. Но приему 100 лет в обед, честное слово.

    Reply
  53. kuzyara

    (33) Профдеформация 😉 https://infostart.ru/public/152801/

    Reply
  54. zqzq

    Я тоже уже много лет использую шаблон

    #Если ДляСинтаксПодсказки Тогда
    <?>
    #КонецЕсли

    + Работает

    + Более наглядно чем Сервер И Не Сервер, которое может сбивать с толку

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

    Reply
  55. Ndochp

    (57)Нет интелисенса в 7.7. Точнее он такой же левый, как снегопат, турбоконф и тд и тп.

    1С (фирма) не умеет в типизацию, так как не видит в ней необходимости.

    Reply
  56. ADirks

    (62) Это в восьмёрке нифига толком нет, а у меня всё есть. А если чего-то не хватает, то я могу сам это сделать (и собственно много чего сделал).

    Если бы фирма 1С сделала конфигуратор с открытым интерфейсом (как OpenConf например), то и в восьмёрке бы давно всё было.

    Reply
  57. t.v.s.

    (63) Крайне занятная предъява. В чем гадость моего предложения?

    Reply
  58. SerVer1C

    (59) Да, кэп. Но понятное вам не означает, что это понимает каждый из сообщества данного сайта.

    Reply
  59. kaa_

    (64) Вот они EDT и пилят. Популяризут, рассказывают о расширениях..

    Reply
  60. SlavaKron

    Удивительно, как столь неважная проблема нашла так много откликов. Видимо, я что-то не понимаю.

    Reply
  61. webester

    (67) Я где-то утверждал обратное?

    Reply
  62. PerlAmutor

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

    По теме полезностей в конфигураторе. Хочется аналог PVS Studio, CppCheck и Coverity Scan, для статического анализа кода конфигурации, с доп.функционалом по проверке орфографии в названиях переменных и именах объектов метаданных.

    Reply
  63. Steelvan
  64. PerlAmutor

    (72) Почему JavaScript?

    Reply
  65. tormozit

    Указал в статье ссылку на тему партнерского форма, где я пытался в очередной раз объяснить разработчикам EDT потребность в подобных инструкциях. Помогайте, кто имеет доступ.

    Reply
  66. teploukhov

    Статьи автора — мои самые любимые статьи на сайте. Очень много приемов взял на вооружение именно благодаря Сергею. Но данная конкретная статья является жутким баяном-бабаяном.

    https://infostart.ru/public/65470/

    Reply
  67. tormozit

    (75) Спасибо за ссылку. Я ее не нашел поиском. Добавил в статью раздел «Другие статьи по этой теме»

    Reply
  68. PerlAmutor

    (76) Вот так проходят десятилетия в 1С. Старые проблемы, старые решения…новые статьи.

    Reply
  69. tormozit

    Похоже разработчики EDT все таки нас услышали на партнерском форуме и сообщили о планах предоставить универсальный способ указывать типы для design-time в любом месте кода.

    Reply
  70. tormozit

    Добавил раздел «Ссылки на методы»

    Reply
  71. tsukanov

    (55) В EDT 1.10 походу таки сделали (только через комментарий)

    Сам еще не проверял, но говорят что это https://edt.1c.ru/docs/new/versiya-1-9-0/#i156__giperssylki-na-moduli-protsedury-i-parametry

    влияет на подсказку через точку внутри процедуры.

    Reply
  72. strek_ivan

    Объясните, в чём был смысл всего этого?

    Reply
  73. tormozit

    (81) Позволь задать несколько наводящих вопросов.

    1. Читал ли ты статью?

    2. Все ли термины в статье тебе понятны?

    3. Используешь ли ты описанные в статье помощники среды разработки?

    4. Тебе удобнее работать с этими помощниками или без них?

    Reply
  74. Perfolenta

    (60) этот точно… из классики: «на просьбу, закрой окно, программист реагирует не верно»…

    Reply
  75. for_sale

    (2)

    Не знаю, насколько позволительно программисту не отличать двойное отрицание и усиление отрицания дополнительными частицами 😉

    Reply
  76. for_sale

    (14)

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

    Reply
  77. for_sale

    (43)

    intellisens зло, а греховоды, которые им пользуются, будут гореть в геенне вечной рекурсии! Покайтесь грешники, ибо воздаст вам Главный Компилятор по делам вашим! Проще верблюду пройти через игольное ушко, чем использующему интеллисенс — во врата Последнего Релиза
    Reply
  78. tormozit

    (84) Под двойным отрицанием я подразумевал двойное отрицание с точки зрения логики, а не лингвистики. С точки зрения лингвистики ты прав, правильно это называть «усиление отрицания» и я уже давал ссылку на подробный анализ в этом плане http://forum.infostart.ru/forum9/topic201740/message2065519/#message2065519

    Reply
  79. for_sale

    (87)

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

    Reply
  80. DrBlack
    #Если Сервер И Не Сервер Тогда

    Можно проще, просто:

    #Если _ Тогда

    Эта инструкция будет удалена

    Reply
  81. tormozit

    (89)

    #Если _ Тогда

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

    Reply
  82. PLAstic

    (14) Туброконф пашет в 8.3.13?

    Reply
  83. tormozit

    (91)

    Прошу пояснить, в чем выражается наше схождение с ума. Разве я давал в статье рекомендации по именованию переменных? Кажется нет. Если тебе так показалось, то поясни подробнее, где я к этому призываю. Может быть лучше по теме статьи поделишься своим мнением?

    Reply
  84. m.bolsun

    (92) да, и в 8.3.14 тоже

    Reply
  85. tormozit

    (95) Как венгерская нотация поможет среде разработки понимать тип переменной?

    Reply
  86. ManyakRus

    (96) венгерская нотация поможет программисту понимать тип переменной,

    не надо надеяться на среду разработки, надейтесь на себя (и на стандарты)

    Reply
  87. Бэнни

    (97) вы немного не поняли. Люди здесь пытаются расширить контекстную подсказку. Чтобы не держать все в голове и не печатать больше чем стоило бы. А вы на борот стремитесь побольше хранить в голове. Написанного кода с каждым днем все больше и больше, а мозгов все меньше и меньше.

    Reply
  88. rpgshnik

    (12)

    #Область DesignerHelper

    //Содержимое этой области не несет полезной нагрузки и необходимо исключительно для облегчения процесса разработки

    #Если Сервер И Не Сервер Тогда

    Алгоритм = Справочники.ирАлгоритмы.ПустаяСсылка();

    #КонецЕсли

    #КонецОбласти

    Вот это топчик, закинул в шаблон 🙂

    Reply

Leave a Comment

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