Шаблон обработки (1.0 / 29.05.12 / CaSH)

Опубликовал CaSH_2004 в раздел Программирование - Практика программирования

Один из кирпичиков при помощи которого можно быстро улучшить свою обработку: стандартизировать, добавить ссылки на страничку разработки и свою собственную, добавить поддержку версий с автоматическим уведомлением о более новой версии

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

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

Вот созрел чтобы написать статью о некоторой стандартизаци которую я веду у себя при разработке, и похоже некоторые другие разработчики тоже. Сподвигло на нее то что иногда у разных людей есть настолько удобные фишки которые непроизвольно начинаеш искать в других обработках, хочеться "воткнуть" в свои, но не тяп-ляп, а "по уму". Понятно что у всех свои предпочтения, кто-то любит наваять "одну большую кнопку" как любят клиенты, а если потребуеться 2-я то подвинуть 1-ю и присобачить ее исходя из тех же принципов. Иногда просто тошно смотреть на творчество таких товарищей.

И вот я надумал составить и выложить некоторый стандарт, который я полагая, может устроить многих при разработке. Причем я постараюсь максимально его "разжевать" и выложить все наработки. Все мы кроме того что разработчики вместе с тем и пользователи, причем чаще всего своих собственных творений. Так что данная стандартизация преследует 2 цели: удобство разработки и удобство пользования. У многит тут отсутствует вообще понятие о разработок, то ли не доросли, то ли переросли, то ли просто не заморачиваються. Однако хотел бы заметить 2 сложно оспариваемые вещи:

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

2. многие поголовно утверждают что все разработки "Apple" очень удобны и соответственно бешенно популярны (сам я лично не пробовал т.к. не испытывал такой потребности)

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

Итак, начнемс-с-с-с... со структуры, предопределенныых полей в обработках/отчетах очень мало всего 3: Имя, Синоним, Комментарий. Попробуем обойтись ими.

Имя и Синоним должны как-то соответствовать друг другу. В идеале Имя это Синоним без пробелов с заглавнми буквами в каждом слове если их несколько. Так повелось в 1С издревна и это очень удобно, хотя мне иногда встречались в типовой 1С Справочники которые не соответствуют этим принципам. Рассмотрим какие последствия из-за нарушения этого принципа: при выводе таблиц баз (справочников, документов и прочее) приходиться всегда предусматривать вывод как Имени так и Синонима чтобы легко найти объект, что очень обременительно.

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

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

Процедура ПриОткрытии()
   
Форма.Заголовок = Форма.Метаданные().Синоним + " (" + Форма.Метаданные().Комментарий + ")";
КонецПРоцедуры

Далее я подглядел у alexk-is что очень удобно когда можно прямо из обработки перейти на ее страничку или страничку автора ведь часто забываеш где взял обработку и для чего она. У milkers взял то что прямо из обработки можно за нее плюсануть, т.к. не всегда есть время заходить и плючовать когда много обработок. Вобщем решил я все это сложить в один механизм. И тут есть интересный способ которым я начал пользоваться после того как в модуле формы у меня стала каша из того что множество обработчиков кнопок. И решил я это упростить вот так: предположим у нас есть команданая панель с кучей кнопок, команды у них схожи, а вот процеду рнаплодилось много, тогда мы просто пишем одну процедуру где прописываем все команды но только выполяем их в зависимости от того какая кнопка была нажата. Причем вызывать эту процедуру можно даже без указания кнопки, а просто передав действие строкой - просто и изящно!

Процедура КоманднаяПанельУниверсальноеДействие(Кнопка)
   
Задача = ?(ТипЗнч(Кнопка) = Тип("Строка"), Кнопка, Кнопка.Имя); // универсально получаем Задачу и выполняем ее
   
Если Задача = "ОткрытьСайт" Тогда
       
ЗапуститьПриложение("http://www.infostart.ru/");
    ИначеЕсли
Задача = "ОткрытьСтраницуАвтора" Тогда
       
ЗапуститьПриложение("http://infostart.ru/profile/55562/public/");
    КонецЕсли;
КонецПроцедуры

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

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

//==================================================================================================
// Описание:
//      Предназначена для выведение переданных значений в кавычках, позволяющих определить начало и конец
//      значения и выделения его на фоне общего текста сообщения
Функция Кавычки(Значение, Сокращать=Ложь) Экспорт // Версия 1.1 / 20.02.10 / CaSH
   
Возврат "["+?(Сокращать,СокрЛП(Значение),Значение)+"]";
КонецФункции   
// Кавычки()

//==================================================================================================
// Описание:
//      Устанавливает заголовок вормы обработок по единому образцу из методанных обработки
Процедура УстановитьЗаголовокФормы(Форма) Экспорт // Версия 1.1 / 09.12.09 / CaSH
   
Форма.Заголовок = Форма.Метаданные().Синоним + " (" + Форма.Метаданные().Комментарий + ")";
КонецПроцедуры 
// ОформитьЗаголовокФормы()

//==================================================================================================
// Описание:
//      Возвращает из версии представления "1.2.3.4" число "001002003004" для возможности сравнния версий между собой
// Параметры:
//      [КоличествоРазрядов] - количество групп из которых состоит версия, для большей универсальности
Функция ПолучитьВерсию(Знач СтрокаВерсии, КоличествоРазрядов = 2)

   
// хитрый вариант преобразования строки с разделителями в массив строк
   
НовыйМассив = ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{0,{""S"",""" + СтрЗаменить(СтрЗаменить(СтрокаВерсии, """", """"""), ".", """},{""S"",""") + """}}}");
   
СтрокаВерсии = ""; Счетчик = 0;
    Для каждого
ЭлементМассива Из НовыйМассив Цикл
        Попытка
           
Значение = Число(ЭлементМассива);
        Исключение
           
Значение = 0;
        КонецПопытки;
       
СтрокаВерсии = СтрокаВерсии + Формат(Значение, "ЧЦ=3; ЧН=; ЧВН=");
       
Счетчик = Счетчик + 1;
    КонецЦикла;

    Пока
Счетчик < КоличествоРазрядов Цикл
       
СтрокаВерсии = СтрокаВерсии + "000";
       
Счетчик = Счетчик + 1;
    КонецЦикла;

    Возврат
Число(СтрокаВерсии);
КонецФункции
// ПолучитьВерсию()

Далее привожу сам модуль формы. Имейти ввиду что создав форму я сразу же переименовываю элемент "КоманднаяПанель1" в более понятное "КоманднаяПанельФормы". В добавок у вас должна быть в конфигурации "БиблиотекаКартинок.Информация32", если ее нет поставьте заменитель в метод "ПоказатьОповещениеПользователя()" или вообще удалите упоминание о картинке - все и так заработает 

Перем IE, АдресСтраницыРазработки, ПроверятьОбновлениеРазработкиПриОткрытии; // БЛОК: ОБНОВЛЕНИЕ ВЕРСИИ РАЗРАБОТКИ

// БЛОК: ОБНОВЛЕНИЕ ВЕРСИИ РАЗРАБОТКИ
////////////////////////////////////////////////////////////////////////////////////////////////////


//==================================================================================================
// Описание:
//      Т.к. IE не дает сразу ответа то ожидаем его вызывая процедуру и смотря статус IE а потом выполняем
//      обработку полученного заголовка с указанной страницы
Процедура ПродолжитьПроверкуВерсийРазработки()

    Если
IE.ReadyState < 4 Тогда
       
ПодключитьОбработчикОжидания("ПродолжитьПроверкуВерсийРазработки", 0.1, Истина);
        Возврат;
    КонецЕсли;
   
ВерсияНовая = IE.Document.Title;
   
IE.Quit();
   
IE = Неопределено;
   
ЗаголовокСообщения = "Проверка обновления разработки на infostart.ru";
   
Разработка = Метаданные().Представление();
    Если Не
Найти(ВерсияНовая, Разработка) Тогда
       
ПоказатьОповещениеПользователя(ЗаголовокСообщения, , "Тема " + Кавычки(ВерсияНовая) + " страницы " + Кавычки(АдресСтраницыРазработки) + " не соответствует разработке " Кавычки(Разработка), БиблиотекаКартинок.Важно);
    КонецЕсли;
   
НомПоз = Найти(ВерсияНовая, "(");
    Если
НомПоз = 0 Тогда
       
Сообщить("Ошибка разбора заголовка " + Кавычки(ВерсияНовая) + " страницы разработки " + Кавычки(АдресСтраницыРазработки) + ". Проверка обновления прервана.
        |   Ошибка: Нет скобок для версии
        |   Причины: либо неправильная страница либо она недоступнадля получения версии разработки"
, СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;
   
ВерсияНовая = Сред(ВерсияНовая, НомПоз + 1);
   
ВерсияНовая = Лев(ВерсияНовая, Найти(ВерсияНовая, "/") - 1);

   
ВерсияСтарая = Метаданные().Комментарий;
    Если
ЗначениеЗаполнено(ВерсияСтарая) Тогда
        ВерсияСтарая = Лев(ВерсияСтарая, Найти(ВерсияСтарая, "/") - 1);
    КонецЕсли;

    Если
ПолучитьВерсию(ВерсияНовая) > ПолучитьВерсию(ВерсияСтарая) Тогда
        Если
Вопрос("Разработка " + Кавычки(Разработка) + " имеет версию " + ВерсияСтарая + "
            |На infostart.ru опубликована более новая версия "
+ ВерсияНовая + "
            |
            |Открыть страницу разработки?"
, РежимДиалогаВопрос.ДаНет, 90, КодВозвратаДиалога.Да, ЗаголовокСообщения, КодВозвратаДиалога.Да) = КодВозвратаДиалога.Да Тогда
           
РаботаССайтом("ОткрытьСтраницуРазработки");
        КонецЕсли;
    Иначе
       
ПоказатьОповещениеПользователя(ЗаголовокСообщения, , "Обновлений для разработки " + Кавычки(Разработка) + " нет", БиблиотекаКартинок.Важно);
    КонецЕсли;

КонецПроцедуры
// ПродолжитьПроверкуВерсийРазработки()

//==================================================================================================
// Описание:
//      Из-за использование процедуры ПодключитьОбработчикОжидания() которая не принимает параетров
//      пришлось вынести отдельно
Процедура ПроверитьОбновлениеРазработки()
   
РаботаССайтом("НачатьПроверкуВерсий");
КонецПроцедуры
// ПроверитьОбновлениеРазработки()

//==================================================================================================
// Описание:
//      Сводная процедура содержащая все возможные команды чтобы их не держать в разных местах
Процедура РаботаССайтом(Кнопка)

   
Задача = ?(ТипЗнч(Кнопка) = Тип("Строка"), Кнопка, Кнопка.Имя); // универсально получаем Задачу и выполняем ее

   
Если Задача = "ОткрытьСайт" Тогда

       
ЗапуститьПриложение("http://www.infostart.ru/");

    ИначеЕсли
Задача = "ОткрытьСтраницуАвтора" Тогда

       
ЗапуститьПриложение("http://infostart.ru/profile/55562/public/");

    ИначеЕсли
Задача = "ОткрытьСтраницуРазработки" Тогда

       
ЗапуститьПриложение(АдресСтраницыРазработки);

    ИначеЕсли
Задача = "РекомендаватьРазработку" Тогда

       
ЗапуститьПриложение(АдресСтраницыРазработки + "?rate=1");

    ИначеЕсли
Задача = "ПроверитьОбновлениеРазработки" Тогда

       
ПроверитьОбновлениеРазработки(); // небольшая зацикленность но для порядка нужна

   
ИначеЕсли Задача = "НачатьПроверкуВерсий" Тогда

       
Состояние("Подключение к Internet Explorer...");
       
ПоказатьОповещениеПользователя("Запрос номеров версий...", , "Для разработки " + Кавычки(Метаданные().Представление()) + " выполняеться запрос на последнюю версию на сайт www.infostart.ru через браузер Internet Explorer", БиблиотекаКартинок.Информация32);
       
СтрокаОбъекта = "InternetExplorer.Application";
        Попытка
           
IE = Новый COMОбъект(СтрокаОбъекта);
        Исключение
           
Сообщить("Не удалось создать COM-объект: " + Кавычки(СтрокаОбъекта) + "
            |   Ошибка: "
+ ОписаниеОшибки(), СтатусСообщения.Внимание);
            Возврат;
        КонецПопытки;
       
IE.Visible = 0;
       
IE.Silent = -1;
       
IE.Navigate(АдресСтраницыРазработки);
       
ПродолжитьПроверкуВерсийРазработки();

    ИначеЕсли
Задача = "ПроверятьОбновлениеРазработкиПриОткрытии" Тогда

       
ПроверятьОбновлениеРазработкиПриОткрытии = Не ПроверятьОбновлениеРазработкиПриОткрытии;
       
ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ПоддержкаРазработки.Кнопки.ПроверятьОбновлениеРазработкиПриОткрытии.Пометка = ПроверятьОбновлениеРазработкиПриОткрытии;
       
СохранитьЗначение(Метаданные().ПолноеИмя() + "_" + Задача, ПроверятьОбновлениеРазработкиПриОткрытии);
        Если Не
ПроверятьОбновлениеРазработкиПриОткрытии Тогда
           
ОтключитьОбработчикОжидания("ПроверитьОбновлениеРазработки");
        КонецЕсли;

    КонецЕсли;

КонецПроцедуры
// РаботаССайтом()

//==================================================================================================
Процедура ПриОткрытии()

   
УстановитьЗаголовокФормы(ЭтаФорма); //$+ CaSH Универсальный механизм

    // БЛОК: ОБНОВЛЕНИЕ ВЕРСИИ РАЗРАБОТКИ
   
ПроверятьОбновлениеРазработкиПриОткрытии = ВосстановитьЗначение("ПроверятьОбновлениеРазработкиПриОткрытии");
   
ПроверятьОбновлениеРазработкиПриОткрытии = ?(ПроверятьОбновлениеРазработкиПриОткрытии = Неопределено, Истина, ПроверятьОбновлениеРазработкиПриОткрытии);
   
ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ПоддержкаРазработки.Кнопки.ПроверятьОбновлениеРазработкиПриОткрытии.Пометка = ПроверятьОбновлениеРазработкиПриОткрытии;
    Если
ПроверятьОбновлениеРазработкиПриОткрытии Тогда
       
ПодключитьОбработчикОжидания("ПроверитьОбновлениеРазработки", 10, Истина);
    КонецЕсли;

КонецПроцедуры
// ПриОткрытии()

АдресСтраницыРазработки = "http://infostart.ru/public/86911/"; // должно заканчиваться на "/" // БЛОК: ОБНОВЛЕНИЕ ВЕРСИИ РАЗРАБОТКИ

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

Кстати нумерация версий должна быть такой: 1.001.102 (3 разряда по 3 цифры), т.е. версия 1.1 это = 1.001, а не 1.100, собственно мне хватает 2 разряда, поэтому я указываю в функции ПолучитьВерсию() КоличествоРазрядов = 2, а количество цифр в разряде не более 3-х!

 

Файлы

Наименование Файл Дата Размер Кол. Скачив.
Шаблон обработки.epf
.epf 13,63Kb
29.05.12
69
.epf 29.05.12 13,63Kb 69 Скачать

См. также

Лучшие комментарии

1. Altair777 30.05.2012 15:30
Автор, а Вы прогоняли текст публикации в Ворде? ;)

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


И это еще не считая 5 десятков недостающих запятых и 2 десятков прочих стилистических ошибок.
Ответили: (4) (18)
+ 2 [ mefio; iov; ]
# Ответить
15. Жолтокнижниг (файл скачал) 02.06.2012 22:35
соединение=новый HTTPСоединение("infostart.ru");
файл=ПолучитьИмяВременногоФайла();
соединение.Получить("public/20017/",файл);
тд=новый ТекстовыйДокумент;
тд.Прочитать(файл);
РегулярноеВыражениеX=Новый COMОбъект("VBScript.RegExp");
РегулярноеВыражениеX.Global = Истина;
РегулярноеВыражениеX.IgnoreCase = Истина;
РегулярноеВыражениеX.MultiLine = Истина;
РегулярноеВыражениеX.Pattern="<span class=""tool mdate"">\[(.+?)\]</span>";
наборы=РегулярноеВыражениеX.Execute(тд.ПолучитьТекст());
Сообщить(Дата(наборы.Item(0).SubMatches(0)+":00"));
...Показать Скрыть


Время выполнения 0,565 сек.
Ответили: (16) (17)
+ 2 [ the1; bambr1975; ]
# Ответить

Комментарии

1. Altair777 30.05.2012 15:30
Автор, а Вы прогоняли текст публикации в Ворде? ;)

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


И это еще не считая 5 десятков недостающих запятых и 2 десятков прочих стилистических ошибок.
Ответили: (4) (18)
+ 2 [ mefio; iov; ]
# Ответить
2. Altair777 30.05.2012 15:34
И по самой публикации - "Все что можно я выкидываю с модуля формы в модуль обработки"
А почему процедура РаботаССайтом(Кнопка) в форме, а не в модуле? Не умеете обратиться к реквизитам формы из модуля обработки?
Ответили: (3) (4) (9) (22) (25)
# Ответить
3. maddy 30.05.2012 17:14
(2) Altair777, Логично же -- клиентский код на стороне клиента! :)

Резюмируя: надо уже переходить на управляемые формы b "чтобы небыло мучительно больно" разделять клиентский и серверный код даже в обычных формах.
Ответили: (4) (5) (22)
− 1 [ Altair777; ]
# Ответить
4. CaSH_2004 30.05.2012 20:08
(1) Вообще-то я накидал это в полночь за 1 час, так что было не до Word'а. А по существу согласен с критикой, просто если бы не сделал тогда потом руки бы не дошли точно т.к. делал по настроению, а так буду вылизывать статью т.к. уже выложил и деваться некуда :)

(2) Хотя в принципе правильное замечание и я с ним согласен, но в (3) примерно сказали то что я бы сказал по другому т.к. не собираюсь пока на управляемые формы:
сделано потому как передача в модуль есть просто создание дополнительной процедуры-перенаправления, т.к. действия ведуться непосредственно с формой и их реально мало и нет смысла сокращая код в одном месте раздувать его в другом. В Модуль я засовываю обычно то что можно использовать повторно в других местах, типа Экспорта, а вызывать переход на сайт проще сделать там где вызвал т.к. одну строку кода (а там в основном именно так) не имеет смысла вызываь через Экспорт. Вобщем я бился за компактность

Если есть конкретные предложения с удовольствием выслушаю.
# Ответить
5. CaSH_2004 30.05.2012 20:10
(3) Интересно что я пришел к тому же выводу исходя вроде-как из других принципов. С управляемыми формами вообще не работал и даже ткорию не сильно читал - только общую. Так что размещение функционала происходила согласно его логике.
# Ответить
6. mtv:) 31.05.2012 11:15
(0) CaSH_2004,
на твою просьбу:"Также буду благодарен всем кто предложит удобные фишки для реализации в шаблоне (пока на уме только переоткрытие)" - советую заглянуть в публикацию Коллекция полезных кнопок и процедур для отчетов и обработок v2.02. Может какие-нибудь фишки из нее тебе понравятся и подойдут...
Ответили: (7) (8)
# Ответить
7. CaSH_2004 31.05.2012 13:54
(6) Как раз вчера лазил и "открыл" ее для себя заново, т.е. я и раньше видел, но тут второпя я совсем забыл про нее.
Думаю нужна просто ссылка, т.к. кроме "перезагрузки" все остальное спецефичное для отчета например, т.е. просто каркас идей, а не готовый шаблон
Кстати еще вчера удивился почему из кнопок редактирования ТабДокумента у тебя только самая сложная - "фиксация", я так у себя весь комплеект вставил (даже черно/белый режим - некоторым он пригодился)
# Ответить
9. Erne100 31.05.2012 14:45
(2) Altair777, Как раз таки она на месте. Где ж как не на клиенте собираетесь запускать приложение?
Ответили: (10)
− 1 [ Altair777; ]
# Ответить
10. Altair777 31.05.2012 17:42
(9) Erne100, а при чем тут вообще это?!

В (3) была написана шутка (возможно, глупая). А потом ее тупо обыгрывают.
Внимательно читайте что написано в 2.
Ответили: (22)
− 1 [ Erne100; ]
# Ответить
11. Жолтокнижниг (файл скачал) 01.06.2012 16:22
Поповоду проверки версии, а может парсить страничку регуляркой? Но как я понял получишь дату изменения публикации, условно ее можно считать датой изменения обработки
Ответили: (12)
# Ответить
12. CaSH_2004 01.06.2012 19:22
(11) Конечно можно, но
1. разбираемый текст примитивен и не стоит того
2. честно говоря не успел заняться регуляркой - руки не доходят плотно изучить, а копи-пастить неохота
Ответили: (14)
# Ответить
13. iov (файл скачал) 02.06.2012 18:31
(0)исправлено - претензий нет.
Ответили: (16)
# Ответить
14. Жолтокнижниг (файл скачал) 02.06.2012 21:58
(12)
разбираемый текст примитивен
что ты понимаешь под примитивен? пробовал исходник странички посмотреть?
не стоит того
почему же? получишь универсальный метод.
# Ответить
15. Жолтокнижниг (файл скачал) 02.06.2012 22:35
соединение=новый HTTPСоединение("infostart.ru");
файл=ПолучитьИмяВременногоФайла();
соединение.Получить("public/20017/",файл);
тд=новый ТекстовыйДокумент;
тд.Прочитать(файл);
РегулярноеВыражениеX=Новый COMОбъект("VBScript.RegExp");
РегулярноеВыражениеX.Global = Истина;
РегулярноеВыражениеX.IgnoreCase = Истина;
РегулярноеВыражениеX.MultiLine = Истина;
РегулярноеВыражениеX.Pattern="<span class=""tool mdate"">\[(.+?)\]</span>";
наборы=РегулярноеВыражениеX.Execute(тд.ПолучитьТекст());
Сообщить(Дата(наборы.Item(0).SubMatches(0)+":00"));
...Показать Скрыть


Время выполнения 0,565 сек.
Ответили: (16) (17)
+ 2 [ the1; bambr1975; ]
# Ответить
16. CaSH_2004 03.06.2012 00:40
(13)
Совпадение?
А то как же! Публикацию читал хоть? Все честно скопировано у других авторов, или ты предлагаеш самому все картинки рисовать? Код скопирован тоже у них, они его в свою очередь скопировали еще у когонибудь (кое-кто даже не подправив и при этом еще и урезал функционал :)
В публикации указано что:
Далее я подглядел у alexk-is что очень удобно когда можно прямо из обработки перейти на ее страничку или страничку автора ведь часто забываеш где взял обработку и для чего она. У milkers взял то что прямо из обработки можно за нее плюсануть, т.к. не всегда есть время заходить и плюcовать когда много обработок.

Или ты любитель только картинки разглядывать?

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

(14) Я имел ввиду сам текст, а не исходник. Р-р-ребята я не в курсе что для этого нужно исходники смотреть, постараюсь оглядываться :)

(15) Спасибо за 0,5 - конечно попробую, а то так как есть оно тормозит прилично. Как я уже сознался содрал это у alexk-is и думал что так и надо, но я не против новых фокусов
Ответили: (18)
# Ответить
17. CaSH_2004 03.06.2012 00:57
(15) Ну вот проверил код, занимательно (в итоге получаю дату), но получается что с твоей подачи нужно все таки изучать регулярку. А я так хотел этого избежать, так что или выложи пожалуйста работоспособный код, или ждем пока я найду время это переварить. Как никак это все твориться в свободное время, а работы завались
# Ответить
18. iov (файл скачал) 03.06.2012 01:25
(16)исправлено - претензий нет.
Ответили: (20)
# Ответить
19. Жолтокнижниг (файл скачал) 03.06.2012 01:49
А я так хотел этого избежать, так что или выложи пожалуйста работоспособный код, или ждем пока я найду время это переварить
регулярки вещь хорошая, как то давненько их юзал, а тут опять свое применение нашли, советую изучить, времени немного потратишь, а профиту немерено, правда если не злоупотреблять. по поводу роботоспособного кода, ето уже когда свое доделаю могешь посмотреть, понравилась твоя идея с обновлением с сайта, попытаюсь к себе применить. Надо придумать как хранить время последнего обовления
# Ответить
20. CaSH_2004 03.06.2012 11:17
(18) ответ смотри в личке

Москва не сразу строилась, а ты хочеш чтобы хопа - и все красиво и удобно и бесплатно! Чем-то приходиться жертвовать. Я тоже за красивое описание, но еще больше за красивый код (функциональный, универсальный, легкодорабатываемый и читаемый)
Проведем опрос (не знаю как это сделать правильно). Какой вариант лучше:
1. Очень мало публикаций, но все качественно оформленные, появляются раз в месяц-другой (при этом мне кажеться что ресурс загнеться)
2. Пбликаций много, но оформление страдает, появляются каждый день по несколько, авторы выкладывают идеи, критики их пилят :) потом авторы дорабатывают (это как сейчас - ресурс живет и очень даже)

Далее: программное добавление кнопок это первое что пришло мне в голову, однако есть проблема с картинками,
1. некогда их загонять в архив и вытягивать оттуда,
2. и разработчику так будет сложнее внедрять чем просто скопировал меню и все
Так что идея пока бесперспективная

(19) Я тоже задумался как можно закачать обновление, было бы супер
Давай идеи в студию и про рабочий код не забывай! Спасибо за уделенное внимание поднятой проблеме стандртизации!
Ответили: (21)
# Ответить
21. iov (файл скачал) 03.06.2012 20:26
(20) а ты хочешь дать палец на халяву и не боятся что его либо обосрут либо по локоть отхватят?
Тыж на ресурсе программистов тут платить друг другу то не хотят... А потыкать в чужие ошибки - вообще за развлечение... Статью исправил - молодец - комментарии я убрал - претензий нет. Ждем от тебя следующей публикации.
# Ответить
22. Erne100 11.06.2012 07:22
(10) Altair777, а где тут(3) шутка?
Внимательно читайте код и поменьше минусуйте не подумав))
Поясню:
ЗапуститьПриложение("http://www.infostart.ru/");

логичнее выполнять на клиенте, а в управляемом приложении
вообще нельзя корректно выполнить на сервере
(если конечно клиент и сервер не на одной машине).
То же самое можно сказать и про:
IE = Новый COMОбъект(СтрокаОбъекта);

Вообще странно, что именно Вы(с Вашим опытом) этого не увидели.
И потому на шутку больше похожа ваша придирка к чужим словам (2).
К первому(1) Вашему посту претензий нет - Вы же модератор.
Но во втором, похоже, Вы увлеклись.
Ответили: (23)
− 1 [ Altair777; ]
# Ответить
23. Altair777 12.06.2012 12:05
(22) Erne100, очередной бред...
Есть разница откуда это запускать - из модуля обработки или из модуля формы обработки? В 2 речь шла именно об этом.

И хватит говорить про управляемое. Данная обработка написана для обычного.
Ответили: (24)
# Ответить
24. Erne100 12.06.2012 13:59
(23)
Есть разница откуда это запускать - из модуля обработки или из модуля формы обработки?

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

З.Ы. Возможно мой мозг окончательно повернулся в сторону управляемых)))
Ответили: (25)
# Ответить
25. Altair777 12.06.2012 14:26
(24) Erne100, > В том и дело что нет разницы

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

Посмотрите любой отчет в типовых. Где находится "стандартная" процедура "СформироватьОтчет"?
# Ответить
26. Erne100 12.06.2012 18:33
В пылу дискуссии чуть не забыл главное - поставить плюс автору шаблона.
# Ответить
27. Evil Beaver 26.11.2012 17:34
Интересная штука. Обработка отличная, работа проделана колоссальная, но стиль кода!!! Я плакал кровавыми слезами когда все это увидел!
Почему, почему такой спагетти-код, переменные с именами "ы" и "ъ", которые нигде к тому же не используются? Почему перебор колонок табличного макета делается так:
ЗначениеЯчейкиСинонима=Лев(Ячейка.Имя,Поз)+Строка(Число(Прав(Ячейка.Имя,СтрДлина(Ячейка.Имя)-Поз))+4);
ЗначениеЯчейкиИндексаКартинки=Лев(Ячейка.Имя,Поз)+Строка(Число(Прав(Ячейка.Имя,СтрДлина(Ячейка.Имя)-Поз))+3);


Зачем эти мозго*ство с формулами, почему не:
Область.Лево+1;
Область.Лево+2;


Одно и то же ведь, а читать легко и приятно.

С одной стороны, писал человек опытный, с другой - руки бы оторвать за такое качество кода....
Ответили: (28)
# Ответить
28. CaSH_2004 26.11.2012 18:09
(27) Это точно к данной публикации относится? Я не нашел ничего про "ЗначениеЯчейкиСинонима" или "ЗначениеЯчейкиИндексаКартинки". Укажите где это?
# Ответить
29. Evil Beaver 26.11.2012 18:25
Позор на мою седую голову. Да, написал в другое окно. Тысяча извинений!
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл