Регулярные выражения – это просто. Построитель и отладчик регулярных выражений

Публикация № 592108

Разработка - Инструментарий разработчика

Регулярные выражения

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

О чем эта статья

С чего начать

Раскрашиваем код программы

Обозначим цель и далее по порядку
Строим первые шаблоны.
Области программных модулей  и директивы компилятору
Литералы
Имена процедур и функций, переменные и зарезервированные слова
Комментарии и описания методов (процедур и функций)
Остались только спец.символы
Обсудим полученный результат
Обещанное: список зарезервированных слов

Построитель регулярных выражений

Основные элементы управления
Текст
Найдены
Уникальные
Замены
Дерево
Параметры
Код 1С
Конструктор выражений

А дальше что?

Литература

Вложения

Обновления



О чем эта статья

Начну с того, что…  я не люблю писать статьи. В последний раз, когда мне это хотелось сделать, а было это четверть века назад, я начитался эротических переживаний Эдуарда Тополя, возомнил себя этаким Дон Жуаном, и вознамерился  явить миру собственные неповторимые  впечатления этой стороны своей жизни. Но потом-таки отказался от сих злостных намерений, приняв непреложный тот факт, что слишком уж интимно это. Собственно, любой жизненный опыт, накопленный нами (вами) – это интимно. Потому что он скрывает немало наших ошибок и маленьких достижений. Это ценно для нас. Но он меркнет на фоне таких же достижений других людей. И не это главное. А главное то, что всегда найдутся добрые люди, которые не смогут его принять (понять), не промолчав об этом  (и тут Остапа понесло!).

Таки да, это очередная статья о регулярных выражениях, о коих писалось уже немало на этом ресурсе. Зачем еще одна? Попытаюсь кратко  ответить на этот вопрос.

Данная публикация, прежде всего, о  построителе регулярных выражений. Впервые с ними (с выражениями) я  столкнулся лет 6-7 назад в замечательной книге  Андрея Михайлова «1С:Предприятие 7.7/8.0 Системное программирование» (2-е издание, 2007г.). Идея их использования в 1С мне понравилась уже тогда, но все это был лишь небольшой опыт, ограниченный написанием несложных регулярных выражений. И для этого ничего не требовалось кроме некоторого знания их синтаксиса и умения подключить в 1С объект VBScript.RegExp, присутствующий на любом компьютере.

Сложности начались потом, когда мне любопытно стало разобраться  в некоторых  задачах, требующих написания сложных регулярных выражений. Да простит меня читатель этих строк, но тогда я еще не имел привычки за каждым решением проблемы сразу же устремляться в интернет, а пытался что-то сделать своими руками . Ну и  придумал простенький сборщик выражений.  (Найти готовый?! Нет, нет, нет, - мы не ищем легких путей!). В основу положил их (выражений) параметрическое описание, как  в примере ниже:

<Описание параметра> = (?:<ПС><Знач><ПС><Имя параметра><ПС>(?:=<ПС><Значение по умолчанию>){0,1})

<ПС> = \s*

<Знач> = (?:Знач)?

<Значение по умолчанию> = (?:<Булево>|<Число>|<Дата>|<Строка>|Неопределено)

<Имя параметра> = <Идентификатор>

<Строка> = "[^"]*"(?:"[^"]*")*(?:"[^"]*\s*?|[^"]*(?:"[^"]*")*")*?

<Число> = [-+]?\d+\.?\d*

<Булево> = (?:Истина|Ложь|True|False)

<Дата> = '[ 0-9.-/]*'

<Идентификатор> = [_А-Яа-яA-Za-z][_А-Яа-яA-Za-z0-9]*


На выходе получал собранное до кучи регулярное выражение:

(?:\s*(?:Знач)?\s*[_А-Яа-яA-Za-z][_А-Яа-яA-Za-z0-9]*\s*(?:=\s*(?:(?:Истина|Ложь|True|False)|[-+]?\d+\.?\d*|'[ 0-9.-/]*'|"[^"]*"(?:"[^"]*")*(?:"[^"]*\s*?|[^"]*(?:"[^"]*")*")*?|Неопределено)){0,1})

В дальнейшем, если регулярное выражение в начале или в конце имеет пробельные символы в своем составе,- заключаю его в парные символы „“, которые не являются частью выражений. Например, шаблон для поиска в тексте длинных промежутков из пробелов, минимум 5 символов: „ {5,}“. Понятное дело, наличие в этом шаблоне пробела в самом начале, не очевидно...

Попробуйте через несколько недель подсунуть это регулярное выражение мне, сонному, поутру и задайте вопрос: «что это?». Я буду долго чесать репу, мысленно отвлекаясь на тему нелегкого человеческого бытия во вселенной, пытаясь судорожно восстановить в воспаленном мозгу ответ на заданный вопрос. И то, что речь шла о разборе списка параметров процедуры,  вспомню не сразу.

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

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

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

Перейти к оглавлению

С чего начать

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

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

Потратив некоторые усилия на освоение регулярных выражений, мы непременно придем к выводу из заголовка статьи: «Регулярные выражения – это просто!». Не потому что не требуют каких-то предварительных усилий на проникновение в них, а потому что позволяют решать сложные задачи простыми методами. А к этим простым методам я и причисляю их самые, не смотря на столь отталкивающий вид.

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

А можно, как вариант для особо нетерпеливых, загрузить уже полностью готовый пример на закладке  «Код 1С», пункт контекстного меню в области текстового поля ввода «Прочитать из файла» (файл Код1С.rep), а потом «Включить в проект». И дальше методом научного втыка.

Перейти к оглавлению

Раскрашиваем код программы

Обозначим цель и далее по порядку

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

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

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

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

(//[ \t]*(?:Процедура|Функция|Procedure|Function).*(?:\n[ \t]*//.*$)*)(?=\s*(?:(?:Процедура|Функция|Procedure|Function)|(?:^[ \t]*&.*$)))|(//.*$(?:\n[ \t]*//.*$)*)|(^[ \t]*#(?:Область|КонецОбласти).*$)|(^[ \t]*&.*$)|("[^"]*"(?:"[^"]*")*)|([-+]?\d+\.?\d*)|('[-./: 0-9]*')|((?:[_А-ЯЁа-яёA-Za-z][_А-ЯЁа-яёA-Za-z0-9]*)(?=(?:\s*\()))|((?:[_А-ЯЁа-яёA-Za-z][_А-ЯЁа-яёA-Za-z0-9]*))

С его помощью мы препарируем программный модуль 1С, выделив различные элементы, а именно, и в таком порядке:

  • описания процедур и функций (в виде комментариев);
  • комментарии (прочие, разные);
  • области программных модулей;
  • директивы компилятору;
  • литералы: Число, Дата, Строка;
  • имена процедур, функций;
  • прочие идентификаторы переменных и/или зарезервированные слова;
  • спецсимволы: ()[] =+-и др.

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

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

<Раскраска> = <Описание метода>|<Комментарий>|<Область>|<Директива компилятору>|<Литерал Строка>|<Литерал Число>|<Литерал Дата>|<Имя метода>|<Переменная или зарезервированное слово>

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

Акцентирую так же ваше внимание на том, что это только пример и он не претендует на полную завершенность. Скорее, это демонстрация возможностей.

Перейти к оглавлению

Строим первые шаблоны.

Перед вами окно построителя регулярных  выражений:

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

В обл.1т вставим текст из прилагаемого файла модуль.txt. В обл.2 наберем с клавиатуры или скопируем через буфер обмена шаблон „//.*$“. Немного помедитировав над этим шаблоном с помощью справки, узнаем в этом шаблоне строку комментария, которая начинается с // и далее произвольный текст до конца строки. Как видите, начало строки „^“ мы не указали, ибо комментарий может быть начат с любой позиции строки текста.

После нажатия кнопки «Найти» получим результат поиска в обл.8, удовлетворяющий шаблону (см. картинка ниже):

Обратите внимание, что основная закладка Текст имеет две вложенные закладки (внизу):

  • Текст, обл.1т – сюда мы вставляем текст, используемый при отладке регулярного выражения;
  • Раскраска, обл.1р – здесь показывается полученный результат, будучи выделен цветом. Красным цветом все, что удовлетворяет шаблону; зеленым – выбранная двойным щелчком мыши строка в обл.8.

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

Для дальнейшего, параметризуем это простенькое выражение, - выполним присвоение имен.  Как правило, эти имена более громоздкие, чем самое выражение, но… они написаны человеческим языком, что наводит на мысли; заодно «документируют» проделанную работу. Спустя годы, вернись вы к рассмотрению этих же диких символьных конструкций, не будет значительных  затруднений в их интерпретации (проверено на себе). Итак:

  • давим кнопку обл.3;
  • в открывшемся конструкторе выражений выделяем фрагмент „.*“ нашего выражения;
  • вызываем контекстное меню, пункт «Присвоить имя значению»;
  • вводим имя «Текст»;
  • потом выделяем полученное после подстановки имени выражение, и таким же образом присваиваем имя «Строка комментария»

Получим это:

  

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

Первые регулярные выражения в построителе мы получили, с помощью конструктора выражений.  Причем, вызвали его, нажав кнопку обл.3.  Если в обл.2 выражение есть ни-что-иное, как параметр (см. на картинке выше), можно получить доступ к редактированию значения этого параметра, нажав  кнопку обл.4.

Давайте теперь занесем в построитель выражение раскраски.  Для этого, сначала наберем выражение <Раскраска> (кнопка обл.3), а потом нажмем кнопку обл.4 и сформируем значение параметра <Раскраска> (разумеется, лучше скопировать в конструктор, а не набирать). Приведу еще раз текст выражения:

<Раскраска> = <Описание метода>|<Комментарий>|<Область>|<Директива компилятору>|<Литерал Строка>|<Литерал Число>|<Литерал Дата>|<Имя метода>|<Переменная или зарезервированное слово>

По окончании этого, можете на закладке «Параметры» просмотреть список всех параметров, подготовленных в процессе работы. Новые появляются в этом списке по нажатию любой из кнопок, запускающих в работу регулярное выражение  - «Тест», «Найти», «Заменить». Нажмите «Тест» – параметров прибавится в список. (Построитель  ругнется на пустые значения параметров, но мы это игнорируем.). Редактировать  значения параметров можно уже отсюда, кликая  мышью в колонке значений.

Другая возможность – на закладке «Дерево». Структуру текущего параметра в виде дерева можете получить нажатием кнопки обл.5. Мне представляется работа с параметрами из дерева наиболее удобной. Но некоторые операции возможны только из списка. По ходу ознакомитесь со всем этим.

А мы перейдем к редактированию новых параметров, их тестированию…

Перейти к оглавлению

Области программных модулей  и директивы компилятору

Область программного модуля, - указание редактору модулей:

  • занимает целую строку от ^ и до $;
  • начинается символом #, перед которым можно натыкать пробелов;
  • а за ними или слово Область, обозначающее начало области, с последующим наименованием области;
  • или слово КонецОбласти.
<Область> = (?:^<ПР>#(?:Область|КонецОбласти)<Текст>$)
<ПР> = [ \t]*
<Текст> = .*

Конструкция (?:…) группирует шаблон. <Текст> - это имя области, когда требуется. Параметром  <ПР> обозначен пустой промежуток в строке, из пробелов и горизонтальных табуляций.

Значения определили и можем запустить в отладку выражение «Область», воспользовавшись контекстным меню, команда «Выполнить поиск». Смотрим картинку:

Директива компилятору теперь покажется совсем знакомой и простой:

  • занимает целую строку от ^ и до $;
  • начинается символом &, перед которым можно натыкать пробелов;
  • а за ними, собственно, директива.
<Директива компилятору> = (?:^<ПР>&<Текст>$)
<ПР> = [ \t]*
<Текст> = .*

Перейти к оглавлению

Литералы

<Литерал Число> = [-+]?\d+\.?\d*

<Литерал Дата> = '[-./: 0-9]*'

<Литерал Строка> = "[^"]*"(?:"[^"]*")*

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

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

Тем из вас, кто впервые имеет дело с регулярными выражениями, литерал типа Строка может показаться несколько сложным. Но давайте немного отформатируем выражение:

1.  "[^"]*"
2.  (?:"[^"]*")*

Первый фрагмент описывает строчные  литералы как последовательность любых символов (кроме апострофов, но включая перенос на следующую строку \n), заключенную в кавычки, размещенную в одной или нескольких строках. Например:

А = "строчный литерал";
Б = "а это строчный литерал
    |с переносом на следующую строку";

Второй фрагмент  учитывает, что в составе литерала могут быть кавычки и они должны быть удвоены:

А = "строчный литерал""с апострофами";
Б = "строчный литерал""с апострофами и
    |с переносом на следующую строку";

Перейти к оглавлению

Имена процедур и функций, переменные и зарезервированные слова

<Идентификатор> = (?:[_А-ЯЁа-яёA-Za-z][_А-ЯЁа-яёA-Za-z0-9]*)

<Переменная или зарезервированное слово> = <Идентификатор>

<Имя метода> = <Идентификатор>(?=(?:<ПС>\())

<ПС> = \s*


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

Я специально не разделяю переменные и зарезервированные слова 1С, хотя и предполагается в дальнейшем их раскраска разными цветами. И вот почему. К глубокому прискорбию, мне  выделить зарезервированные слова никак не удается по той простой причине, что в библиотеке VBScript.RegExp задекларированная граница слова \b распространяется только на слова, написанные буквами [A-Za-z]. Поэтому, пожелай я выделить только слово шаблоном \bЕсли\b в тексте, ничего хорошего из этого не выйдет. И это не было бы так печально, если бы мы могли посмотреть, а что стоит перед этим словом. Посмотреть, что стоит за ним – можем (т.н. заглядывание вперед) ; что перед ним – увидеть возможности нет (заглядывание назад). Так что, выделяем зарезервированные слова вместе с именами переменных, а потом уж, имея список зарезервированных слов, разделяем их перед раскрашиванием текста. А вот как получить, не напрягаясь, перечисление всех зарезервированных слов, я расскажу немного ниже.

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

<Имя метода> = <Идентификатор>
               (?=
                   (?:
                       <ПС>\(
                   )
               )

Идентификатор являет собой  имя процедуры или функции тогда и только тогда, когда за ним следует открывающая скобка. Конструкция (? =…) как раз и позволяет  посмотреть, что там следует за идентификатором. Но только посмотреть,-  дальше разбор программного модуля идет с позиции, где закончился сам идентификатор.

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

И напоследок рассмотрим самые сложные в этой статье...

Перейти к оглавлению

Комментарии и описания методов (процедур и функций)

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

<Комментарий> = (?:<Строка комментария>(?:\n<ПР><Строка комментария>)*)

<Строка комментария> = (?://<Текст>$)

<ПР> = [ \t]*

<Текст> = .*

<Строка комментария> была рассмотрена нами раньше. Если выполнить это выражение на нашем примере, получим три найденных результата:

В первом комментарии – 2 строки, во втором – 8 строк.

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

<Описание метода> = (?://<ПР><Метод><Текст>(?:\n<ПР><Строка комментария>)*)(?=<ПС>(?:<Метод>|<Директива компилятору>))

<Метод> = (?:Процедура|Функция|Procedure|Function)

<Строка комментария> = (?://<Текст>$)

<ПР> = [ \t]*

<Текст> = .*

<Директива компилятору> = (?:&<Текст>)

Какие моменты отражены в этом выражении? Этот специальный комментарий, в первой строке после //, имеет одно из зарезервированных слов. Список слов вынесен отдельно под именем <Метод>. Далее в  строке следует текст -  краткое описание метода. Потом последовательность знакомых строк комментариев. Но… после такого специального комментария следует либо директива компилятору, либо описание заголовка метода опять-таки с зарезервированного слова <Метод>. Отформатируем для наглядности сие описание:

1.  (?://<ПР><Метод><Текст>
        (?:\n<ПР><Строка комментария>)*
    )
2.  (?=<ПС>
        (?:<Метод>|<Директива компилятору>)
    )

Первая группа – это собственно комментарий (с фиксированным началом); вторая – заглядывание вперед, что же следует за ним. Запустив на выполнение это выражение, получим один результат:

Перейти к оглавлению

Остались только спец.символы

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

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

  • выполнить замену всех найденных вхождений строк на спецсимвол •;
  • полученый результат скопировать в обл.1т построителя;
  • и выполнить поиск символов на основании шаблона [^•\s]+, исключающего пробельные символы и символ подстановки.

Ожидаемый результат – это только спецсимволы в программном модуле:

Перейти к оглавлению

Обсудим полученный результат

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

Дерево кроме наименований и значений параметров включает  также колонки З(амещать) и И(звлечь). Как вы уже догадались, первая повелевает при сборке выражения делать подстановки значений параметров вместо наименований;  вторая указывает на те параметры, соответствия которым необходимо извлечь во время обработки текстов.  Но здесь есть одна неприятная особенность, связанная с реализацией построителя выражений. Имена этих извлекаемых параметров должны быть уникальны. Но… что мы видим на картинке? Я пытаюсь извлечь во время обработки программного модуля директивы компилятору, выставляю флажок напротив имени <Директива компилятору>, и автоматически он выставляется во всех других местах, где эта директива задействована, в данном случае, когда мы делаем заглядывание вперед в <Описание метода>. На картинке это видно…

Как я поступаю в таком случае? Попросту замещаю в таких критических точках имена параметров их значениями. В нашем случае, редактирую значение параметра <Описание метода>, и в его определении делаю замену параметра <Директива компилятора> его  значением, - конструктор выражений позволяет это сделать легко.

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

//	Выражение = <Раскраска>
//
//	Левая скобка параметра = <
//	Правая скобка параметра = >
//	Шаблон имени = [А-ЯA-Z][-_ А-Яа-я0-9A-Za-z]*?
//
//	+-	<Раскраска> = <Описание метода>|<Комментарий>|<Область>|<Директива компилятору>|<Литерал Строка>|<Литерал Число>|<Литерал Дата>|<Имя метода>|<Переменная или зарезервированное слово>
//	++	<Область> = (^<ПР>#(?:Область|КонецОбласти)<Текст>$)
//	++	<Директива компилятору> = (^<ПР>&<Текст>$)
//	++	<Описание метода> = (//<ПР><Метод><Текст>(?:\n<ПР><Строка комментария>)*)(?=<ПС>(?:<Метод>|(?:^<ПР>&<Текст>$)))
//	++	<Комментарий> = (<Строка комментария>(?:\n<ПР><Строка комментария>)*)
//	++	<Литерал Строка> = ("[^"]*"(?:"[^"]*")*)
//	++	<Литерал Число> = ([-+]?\d+\.?\d*)
//	++	<Литерал Дата> = ('[-./: 0-9]*')
//	++	<Имя метода> = (<Идентификатор>(?=(?:<ПС>\()))
//	++	<Переменная или зарезервированное слово> = (<Идентификатор>)
//	+-	<ПС> = \s*
//	+-	<Метод> = (?:Процедура|Функция|Procedure|Function)
//	+-	<Идентификатор> = (?:[_А-ЯЁа-яёA-Za-z][_А-ЯЁа-яёA-Za-z0-9]*)
//	+-	<ПР> = [ \t]*
//	+-	<Текст> = .*
//	+-	<Строка комментария> = //<Текст>$


idТекст = ".*";
idИдентификатор = "(?:[_А-ЯЁа-яёA-Za-z][_А-ЯЁа-яёA-Za-z0-9]*)";
idПС = "\s*";
idСтрокаКомментария = "//" + idТекст + "$";
idМетод = "(?:Процедура|Функция|Procedure|Function)";
idПР = "[ \t]*";
idПеременнаяИлиЗарезервированноеСлово = "(" + idИдентификатор + ")";
idИмяМетода = "(" + idИдентификатор + "(?=(?:" + idПС + "\()))";
idЛитералДата = "('[-./: 0-9]*')";
idЛитералЧисло = "([-+]?\d+\.?\d*)";
idЛитералСтрока = "(""[^""]*""(?:""[^""]*"")*)";
idДирективаКомпилятору = "(^" + idПР + "&" + idТекст + "$)";
idОбласть = "(^" + idПР + "#(?:Область|КонецОбласти)" + idТекст + "$)";
idКомментарий = "(" + idСтрокаКомментария + "(?:\n" + idПР + idСтрокаКомментария + ")*)";
idОписаниеМетода = "(//" + idПР + idМетод + idТекст + "(?:\n" + idПР + idСтрокаКомментария + ")*)(?=" + idПС + "(?:" + idМетод + "|(?:^" + idПР + "&" + idТекст + "$)))";
idРаскраска = idОписаниеМетода + "|" + idКомментарий + "|" + idОбласть + "|" + idДирективаКомпилятору + "|" + idЛитералСтрока + "|" + idЛитералЧисло + "|" + idЛитералДата + "|" + idИмяМетода + "|" + idПеременнаяИлиЗарезервированноеСлово;
idPattern = idРаскраска;
	
RegExpLocal = Новый COMОбъект("VBScript.RegExp");
	
RegExpLocal.Multiline = Истина;
RegExpLocal.Global = Истина;
RegExpLocal.IgnoreCase = Истина;
RegExpLocal.Pattern = idPattern;
	
Найдено = RegExpLocal.Execute(ОбрабатываемыйТекст);
Для каждого Стр Из Найдено Цикл

	Начало = Стр.FirstIndex;
	Длина = Стр.Length;
	Значение = Стр.Value;
		
	vidОписаниеМетода = Стр.SubMatches(0);
	vidКомментарий = Стр.SubMatches(1);
	vidОбласть = Стр.SubMatches(2);
	vidДирективаКомпилятору = Стр.SubMatches(3);
	vidЛитералСтрока = Стр.SubMatches(4);
	vidЛитералЧисло = Стр.SubMatches(5);
	vidЛитералДата = Стр.SubMatches(6);
	vidИмяМетода = Стр.SubMatches(7);
	vidПеременнаяИлиЗарезервированноеСлово = Стр.SubMatches(8);
		
КонецЦикла;

Перейти к оглавлению

Обещанное: список зарезервированных слов

Помнится, я стенал по поводу того, что затруднительно выделить зарезервированные слова одним регулярным выражением. Но полный перечень этих слов мы можем получить быстро и легко. Обратимся к справке 1С:Предприятие, Встроенный язык, Общее описание встроенного языка, Формат исходных текстов программных модулей, Формат программного модуля, Зарезервированные слова.

  •  через буфер обмена скопируем все зарезервированные слова в обл.1т построителя выражений
  • используем для поиска зарезервированных слов <Идентификатор>
  • на закладке «Уникальные» отсортируем список слов
  • выделим все слова или только часть их
  • вызовем контекстное меню, присвоим выделенным словам имя.

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

Для примера, я создал такие:

<Зарезервированные слова> = (?:<Зарезервированные слова русские>|<Зарезервированные слова английские>)
<Зарезервированные слова русские> = Цикл|Функция|Тогда|Процедура|Продолжить|Прервать|Попытка|Пока|По|Перем|Перейти|Новый|Не|КонецЦикла|КонецФункции|КонецПроцедуры|КонецПопытки|КонецЕсли|Каждого|Исключение|ИначеЕсли|Иначе|Или|Из|И|Если|Для|Выполнить|ВызватьИсключение|Возврат
<Зарезервированные слова английские> = While|Var|Try|To|Then|Return|Raise|Procedure|Or|Not|New|In|If|Goto|Function|For|Execute|Except|EndTry|EndProcedure|EndIf|EndFunction|EndDo|ElsIf|Else|Each|Do|Continue|Break|And

Перейти к оглавлению

Построитель регулярных выражений

Основные элементы управления

Обл.2 – проектируемое регулярное выражение. Рекомендуется представлять его одним параметром, как на картинке. Для выбора готовых выражений (параметров), наберите в этом поле один-два фрагмента его наименования и в сформированном списке выполните окончательный выбор.

Кнопки «Тест», «Найти», «Заменить» - основные операции с использованием регулярного выражения из обл.2. Разумеется, любую из них предваряет процедура сборки выражения из его параметрического описания. Готовое после сборки выражение можно посмотреть в обл.9.

Обл.3 – по нажатию этой кнопки открывается конструктор выражений для редактирования содержимого обл.2.

Далее, элементы управления в обл.4-7 используются только тогда, когда выражение в обл.2 - параметр.

Обл.4 - по нажатию этой кнопки открывается конструктор выражений для редактирования значения параметра из обл.2

Обл.5 – значение выражения в обл.2 представляется в виде дерева;

Обл.6 – переключение на список параметров, активизируется строка с параметром из обл.2

Обл.7 – Почти то же самое, что и кнопка «Найти» для текущего выражения в обл.2, но перед началом поиска в  обл.1т подгружается отладочный текст, связанный с параметром (см. ниже).

Перейти к оглавлению

Текст

На странице «Текст» имеются внизу две закладки: «Текст» И «Раскраска».  С раскраской все понятно. А вот обл.1т, в которую вставляется  текст для тестирования регулярных выражений, требует пояснений.

Кроме основных команд, связанных с текстовым полем, в контекстном меню есть еще две команды.

«Сохранить в буфер» - по выбору этой команды, отладочный текст «закрепляется» за параметром из обл.2.

«Восстановить из буфера» - этой командой «закрепленный» за параметром из обл.2 отладочный текст подгружается в текстовое поле обл.1т.

Восстановление отладочного текста выполняется и в других случаях:

  • по нажатию кнопки обл.7, запускающей на выполнение выражение из обл.2;
  • при запуске выражения на выполнение из дерева или списка параметров.

Перейти к оглавлению

Найдены

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

Двойной клик мыши в обл.8 осуществит подсветку найденной строки в раскраске обл.1р.

Обл.10 – это общее количество извлеченных SubMatches, в контексте этой обработки – количество извлеченных параметров выражения. Рекомендуется конструировать выражение таким образом, чтобы имена этих параметров были уникальны, не повторялись в выборке. Тогда, в обл.11 имеем перечисление всех выбранных параметров. При указании строки в обл.12 дается расшифровка имени найденного значения в обл.13.

Перейти к оглавлению

Уникальные

На этой закладке представлены найденные уникальные значения параметров регулярного выражения с пометкой И(звлечь). Переключение между параметрами выполняется элементом обл.14. Числовые значения параметра соответствуют индексу параметра в SubMatches; имя параметра отображается в обл.15. Значению переключателя, равному -1, соответствует общий список найденных строк в обл.8. При активизации строки в обл.16, приводится список ссылок найденных значений в обл.17. Двойной клик в обл.17 осуществит подсветку найденной строки в раскраске обл.1р.

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

Перейти к оглавлению

Замены

На этой закладке в обл.19 можно просмотреть результат  замены найденных значений согласно указанному шаблону в обл.18.

Перейти к оглавлению

Дерево

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

  • текущее выражение, которое мы имеем в обл.2;
  • основные выражения – это все наши проекты. Др. словами,параметры, не задействованные в описаниях других выражений
  • все выражения, независимо от уровня иерархии

Кнопка обл.21 разворачивает полностью дерево в режиме просмотра.

Кнопка обл.22 сворачивает и возвращает дерево в режим редактирования.

Кнопка обл.23 обновляет дерево. Иногда, автоматическое обновление не выполняется. Например, после выбора параметра в обл.2.

Кнопка обл.24 переключает дерево между режимами просмотра-редактирования.

Из контекстного меню осуществляется запуск текущего выражения на выполнение: тестирование или поиск. При  этом,

  • текущее выражение устанавливается в обл.2,
  • восстанавливается отладочный текст, связанный с выражением,
  • а потом, собственно, выполняется команда «Тест» или «Найти».

Через контекстное меню вы можете так же переключиться на выражение в списке параметров.

И, разумеется, двойной клик мыши в колонке «Значение» запустит конструктор выражений на редактирование значения параметра.

Перейти к оглавлению

Параметры

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

Мне представляется наиболее удобным использовать в качестве ограничительных скобок параметров – угловые.  Но это не очень красиво выглядит, когда в обработке находятся HTML  и/или XML документы, использующие эти же ограничители для тэгов. Так что, вы можете при необходимости ввести другие ограничители. Разумеется, во всех имеющихся выражениях, включая их варианты,  будет выполнена замена ограничителей.

Шаблон имени носит скорее технический характер. Возможно, кто-то из вас пожелает его ужесточить, назначив таковым <Идентификатор>. Я постарался, по возможности, имена параметров нормализовать, устранив концевые пробелы и заменив последовательности пробелов одним; отследить уникальность имен параметров, но иногда это затруднительно сделать, когда в именах имеются пробелы, как сейчас. Но вот так исторически сложилось. И это  не было у меня проблемой до сих времен, - надо быть лишь аккуратным в работе.

Иногда хочется иметь ограничитель  в конце обрабатываемого текста. Здесь вы можете указать этот конец текста в виде последовательности символов. Во время обработки он будет добавлен в конец тестового текста.

Ряд операций доступен из  контекстного меню.

"Выполнить тестирование", "Выполнить поиск":

- осуществляется запуск текущего выражения на выполнение: тестирование или поиск. При  этом,

  • текущее выражение устанавливается в обл.2,
  • восстанавливается отладочный текст, связанный с выражением,
  • а потом, собственно, выполняется команда «Тест» или «Найти».

"Переименовать параметр":

 -введенное новое имя устанавливается  во всех имеющихся выражениях , включая их варианты.

"Пометить на удаление параметр", "Удалить все параметры".

"Скопировать":

- осуществляет операцию копирования существующего параметра с присвоением ему другого (уникального) имени.

Перейти к оглавлению

Код 1С

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

Желательно использовать этот код совместно с комментариями, ибо это не только комментарии, но и «путь назад, в построитель». При необходимости, из комментариев можно полностью восстановить параметрическое выражение в построителе. Или в виде комментариев передать его кому-то другому, при условии, что получатель тоже использует этот же построитель выражений.

На этой закладке доступны несколько команд из контекстного меню.

«Заполнить весь проект»

В текстовое поле в виде комментариев записываются все параметры и их значения (без вариантов). Можно использовать для создания резервной копии выражений или для обмена.

«Включить в проект»

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

«Сохранить в файл», «Прочитать из файла»

В комментариях не нуждаются

Перейти к оглавлению

Конструктор выражений

Предполагается, что конструктор выражений облегчит нам (вам) жизнь в процессе их построений.  И набор кнопок  в обл.1 тому будет порукой. Но как по мне, большая часть из них – от Лукавого. Никакого выигрыша в скорости проектирования выражений не дают, а только лишь выручают в случае склероза,- помогают вспомнить все доступные элементы шаблонов, не прибегая к справке. Но таковы традиции жанра.

По своему действию они немного различаются.

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

"Бирюзовые" либо вставляют "пустые" элементы, либо обрамляют загодя выделенные фрагменты выражения в обл.4. Это бывает удобно, ибо частенько приходится группировать элементы.

"Зеленая" кнопка вообще не есть элемент шаблона напрямую. Она обозначает пустой параметр с обрамляющими скобками (угловыми, по умолчанию).  Активизируется комбинацией клавиш Shift+Ctrl+ПРОБЕЛ. В текущую позицию курсора в обл.4 вставляет угловые скобки и помещает фокус в обл.3 для набора имени параметра.

В обл.3 мы также можем попасть по нажатию Ctrl+ПРОБЕЛ, без вставки угловых скобок.

Имя параметра или его значение можно вставить из списка параметров  в обл.2. Двойной клик мыши выбирает имя. Прочие действия возможны из контекстного меню. Полагаю, в комментариях не нуждаются. Быструю фокусировку списка обеспечивает комбинация Ctrl+Alt+ПРОБЕЛ.

Во время редактирования выражения в обл.4, выделенным фрагментам можно присваивать имена. Таким нехитрым образом создаются новые параметры. После чего помещаются в конец списка обл.2  на зеленом фоне. Замечу, что это не единственный способ. Можно ведь попросту включать новые параметры в состав выражения, а потом уже из дерева или из списка редактировать их значения.

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

Я воспользовался тем простым фактом, что символы "Табуляция" и "Перевод строки" в шаблоне регулярного выражения  вы не встретите (разве что их обозначения \t и \n). И потому использовал их для удобного форматирования выражений. Можно вставлять их в выражение где угодно, и сколько угодно, лишь бы было удобно для обзора.

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

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

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

В процессе набора  имен в обл.3, предлагается список выбора уже существующих параметров. Обновляется  в процессе набора текста в обл.3.  В позицию курсора в обл.4, после выбора из этого динамичного списка, вставляется

  • либо имя параметра;
  • либо его значение, если строка в списке помечена слева жирной точкой.

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

Всякий раз, когда вы заходите на страницу "Варианты", - создается вариант  (измененного!) выражения (если его еще нет в списке). "Интересные" варианты можно

  • поименовать в списке обл.5;
  • просмотреть в обл.6;
  • прокомментировать в обл.7;
  • пометить как "архивированный" нажатием кнопки в обл.8. и этой же кнопкой исключить из архива;
  • и, разумеется, выбрать для дальнейших модификаций на закладке "Редактор" из списка обл.5.

Надеюсь, что этого краткого описания конструктора выражений будет достаточно, чтобы начать работу. А навыки потом уже какие-то выработаются в процессе.

Перейти к оглавлению

А дальше что?

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

Я давно уже смотрю масляными глазками на внешнюю компоненту А.Орефкова, RexV8.  Хотелось бы опробовать эту более мощную альтернативу VBScript.RegExp. А значит, появится еще один конструктор выражений в составе этой обработки.

И еще... как у всех программистов, по завершении работы. Многое хотелось бы изменить в том, что сделано. В будущем. Всего более напрягает, что наработанные тяжким трудом регулярные выражения хранятся не где-нибудь, а в настройках обработки. Не раз было так, что сижу полусонный, медитирую над очередным выражением, творю; параллельно программирую эту самую обработку, а потом- БАЦ... запускаю изменения на тестирование и... нет уже тех выражений, ибо не было нормального завершения программы. Правда, вам это не грозит, почти... И то, что имеется возможность выгрузки параметров в файл,- лишь частичное решение проблемы.

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

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

Перейти к оглавлению

Литература

  1. Михайлов А., 1С:Предприятие 7.7/8.0 Системное программирование
  2. Фридл Д., Регулярные выражения
  3. Гойвертс Я., Регулярные выражения. Сборник рецептов
  4. Фицджеральд М., Регулярные выражения. Основы
  5. Форта Б., Регулярные выражения. 10 минут на урок

Перейти к оглавлению

Вложения

Во вложении к этой статье, в архивном файле, вы найдете все упомянутое в статье, а именно

  • коротенькую chm-справку по регулярным выражениям;
  • текст программного модуля, использованный в демонстрациях;
  • программный код 1С для раскраски;
  • файл внешней обработки.

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

Желаю приятного просмотра!

Обновления

14.03.2017 13:00 - Косметические исправления по форме. Перезалито.

15.03.2017 16:30 - Не регулировалась высота текстового поля обл.4  в конструкторе выражений. Исправлено. Перезалито.

24.03.2017 09:30 - Слегка приглажен код. Добавлено оповещение пользователям об изменении публикации (на форме гиперссылка Статья на infostart.ru). Настройка оповещений описана в статье

182

Скачать файлы

Наименование Файл Версия Размер
Построитель регулярных выражений, версия 1.0
.zip 118,21Kb
13.03.17
112
.zip 118,21Kb 112 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. kauksi 206 13.03.17 16:01 Сейчас в теме
Лет 12 назад использовал регулярные выражения чтобы парсить адреса для прокси. А зачем они в реальном мире так и не понял.
7. Fragster 940 14.03.17 11:12 Сейчас в теме
(1) отключать "защиту от опасных действий" для конкретных баз. Кстати, не увидел этого (более актуального) кейса в статье.
2. romasna 249 13.03.17 16:06 Сейчас в теме
Имхо, они избавляют от нервенной болезни при парсинге традиционными (процедурными) методами.
3. su_mai 88 14.03.17 09:05 Сейчас в теме
Большая работа, однако в платформе 1С нет и похоже не будет уже "никогда" :) поддержки регулярных выражений. Жаль, но использование скриптов не всегда допустимо. Для отладки RegExp я использую Notepad++.
5. romasna 249 14.03.17 10:18 Сейчас в теме
(3) Ну что с того, что Фирма 1С все еще не предоставила нам в работу объект под названием РегулярныеВыражения? Дык ведь и препон к их использованию она не ставит никаких. К тому же, у нас есть Орефков. Я не успел опробовать, но полагаю, что наши возможности в плане использования регулярных выражений такие же, как и у разработчиков 1С, благодаря его компоненте.
Ну, а кто чем пользуется при отладке выражений, - это дело вкуса и привычек. Множественность подходов только приветствуется. Предлагаемый здесь максимально приближен к среде, в которой мы работаем. Коды открытые. Если что-то не нравится в их работе и вас не стошнит от них, - меняйте себе на здоровье, нам на потеху.
8. starik-2005 1981 14.03.17 11:13 Сейчас в теме
(3)
Большая работа, однако в платформе 1С нет и похоже не будет уже "никогда" :) поддержки регулярных выражений

Это не совсем так (даже совсем не так). Смотрите тут.
Vladimir Litvinenko; +1 Ответить
28. su_mai 88 17.03.17 03:54 Сейчас в теме
(8) Это понятно, часто можно найти выход, но такой код никто не даст в типовую "конфу" включить. Непосредственной поддержки регулярных выражений, явно задекларированной 1С, нет.
29. starik-2005 1981 17.03.17 10:24 Сейчас в теме
(28)
такой код никто не даст в типовую "конфу" включить. Непосредственной поддержки регулярных выражений, явно задекларированной 1С, нет.
Такой код уже много куда включен. И это явно задекларированный 1С способ, ибо у них в системе есть объект (ОбъектXDTO), тип которого системой проверяется на петтерн регулярного выражения. Он есть в конфигураторе, так что нельзя сказать, что это не 1С.
4. madonov 155 14.03.17 10:04 Сейчас в теме
Хорошая статья, спасибо.

А еще порадовал заголовок:
"Регулярные выражения – это просто."
А потом статья на 40 экранов =)) .
pvlunegov; AlexGroovy; jaroslav.h; motorsoft; manlak; VladC#; brr; Nelli_A86; ABudnikov; Дмитрий74Чел; Serega-artem; jif; sulfur17; spock; Brawler; ProX; Berckk; TreeDogNight; +18 Ответить
6. romasna 249 14.03.17 10:19 Сейчас в теме
(4)Ах, заголовок... надо же было чем-то привлечь внимание?! Просто рекламный трюк!
10. Fragster 940 14.03.17 12:27 Сейчас в теме
9. starik-2005 1981 14.03.17 11:14 Сейчас в теме
Хорошая статья, хоть и не читал )))
dgolovanov; корум; +2 2 Ответить
11. Alias 153 14.03.17 12:51 Сейчас в теме
"После снятия режима совместимости, ширина поля приобретает стандартную ширину "40". На это влияет установленное по умолчанию свойство "АвтоМаксимальнаяШирина". Для восстановления прежнего вида необходимо отключить свойство "АвтоМаксимальнаяШирина" для поля." (с) - рекомендации к адаптации интерфейсов к режиму "без совместимости".

Сейчас поля Текст, МаскаРезультата, Код1С и др. в режиме "без совместимости" слишком узкие.
Ну это так, мелочи. Вообще, конечно, обработка монументальная :)
12. romasna 249 14.03.17 12:57 Сейчас в теме
(11)Хм... я долго (не скажу, что вечно!) колупался с этой проблемой, но так и не решил. Спасибо. принято к исполнению. :)
14. romasna 249 14.03.17 13:12 Сейчас в теме
(11) Залил новый архивный файл с изменениями. Еще раз спасибо за подсказку.
13. tormozit 5641 14.03.17 13:05 Сейчас в теме
Отлично. Пользуюсь обычно RegexBuddy для отладки регулярных выражений. Но ограничения VBScript реализации периодически ставят палки в колеса. Поэтому отладчик+конструктор на языке 1С будет полезен. А уж иерархическое описание выражения даже в RegexBuddy отсутствует. В своих разработках я много использовал сложные регулярные выражения и без иерархического описания просто нереально было бы их использовать.

Для создания редакторов кода на встроенном языке и языке запросов на управляемых формах очень пригодится. Вопрос только в скорости работы на больших текстах.
15. romasna 249 14.03.17 13:17 Сейчас в теме
(13) Я тестировал обработку на больших программных модулях, точнее отдельные регулярные выражения. И когда VBScript отрабатывал менее чем за 1сек., секунд 10-15 уходило на обработку результата в цикле и показ на форме этой обработки. Это все, что могу сказать. Ускорить VBScript и иже с ним мы никак не сможем, а все остальное, - надо рассматривать конкретные случаи.
16. bulpi 159 14.03.17 14:49 Сейчас в теме
Автор молодец. Качайте, народ, пока бесплатно! :)
17. romasna 249 14.03.17 14:56 Сейчас в теме
(16)Где бесплатно? Я уж который день пытаюсь удовлетворить на этом ресурсе свои меркантильные интересы... платим денежку 1sm и качаем! ;)
18. AlX0id 14.03.17 15:08 Сейчас в теме
https://regex101.com/ - that's all, folks %)

Не, труд, конечно, большой.. но есть гугл, есть онлайн-сервисы..
VladC#; premierex; kraynev-navi; +3 Ответить
25. romasna 249 16.03.17 19:14 Сейчас в теме
(18)Это дело вкуса, прежде всего, привычек... Но я попытался понять, как ты , будучи программистом 1С и настроив сложное(?) выражение в указанном тобой веб-сервисе, в дальнейшем используешь в 1С? Я увидел в этом сервисе 4 разных процессора регулярных выражений на закладке FLAVOR. Это ведь должна быть какая-то внешняя компонента .dll, которую нужно потом использовать в 1С? На VBScript, который я знаю, эти настроенные в веб-сервисе выражения не сработают за небольшим исключением, как не сработал мой уже отлаженный пример в предложенном веб-сервисе (ни с одним из процессоров). Что я упустил?
Многоопытный Сергей Старых в (13), пользуясь довольно навороченным конструктором регулярных выражений (из Гугла!), таки не преминул отметить некоторые неувязочки с 1С. И вот представь.... ты тратишь кучу времени на отладку регулярного выражения в стороннем программном продукте, переносишь в 1С, а он... хе-хе... не работает.
Не лучше ли, когда инструмент максимально интегрирован в среду, где твои выражения будут использоваться?
26. AlX0id 16.03.17 19:51 Сейчас в теме
(25)
Хм. Воткну в шаблон Regexp, нет? )
В веб-сервисе я сделаю первичную отладку выражения, а затем, пользуясь инструментами разработчика того же Сергея, в консоли кода отлажу его вполне себе легко :)
Я, кстати, не фанат усложнять регэкспы, так что бОльшая часть используемых мной - кроссплатформенна вполне. Сложные регэкспы, я все же полез бы ладить в Регексбадди, да.
27. romasna 249 16.03.17 20:13 Сейчас в теме
19. starik-2005 1981 14.03.17 17:19 Сейчас в теме
(0)
Особенности: используются модальные и синхронные вызовы.
А зачем?
20. romasna 249 14.03.17 18:24 Сейчас в теме
(19)Извини меня за непонимание, но к чему этот вопрос? Если тебя действительно волнует ответ на него, скачай обработку и посмотри где я использую эти вызовы и для чего. Я не посчитал нужным убирать модальные вызовы, - мне они не мешают... мне с ними легче. А если мне что-то не нравится в программном коде и он доступен, - я его меняю.
21. starik-2005 1981 14.03.17 23:06 Сейчас в теме
(20)
но к чему этот вопрос?
Так XXI в. на дворе, не?
22. romasna 249 14.03.17 23:49 Сейчас в теме
(21)Лучшее - враг хорошего. ;)
23. starik-2005 1981 15.03.17 10:48 Сейчас в теме
(22)
Лучшее - враг хорошего
Не стоит верить народной мудрости, распиаренной Шахиджаняном - тут он прав лишь в том, что если плохому танцору жмут ботинки, то лучше бы ему и не пытаться танцевать лучше. А кто способен - тот обязан стремиться к лучшему, иначе так и будет ключи подавать Вот, например, лучшее - это регулярные выражения, а хорошее - это сотни if-then-else. Многие по Вашей же логике выбирают второе, "и оправдана сия премудрость чадами ее" (с).
24. romasna 249 15.03.17 13:00 Сейчас в теме
(23)Сергей, я тебя услышал. Я наблюдаю за тобой с того самого момента, как ты сделал свой второй (9) комментарий.
Спасибо за усилия, направленные на улучшение обработки. Немногие способны проявлять столько заботы в случаях, когда им эта обработка, в-общем-то, безразлична. :)
30. sashocq 191 20.03.17 21:57 Сейчас в теме
Труд проделан громадный. Но ценность (в виде накопленного опыта) имеет только для автора велосипеда.
Сам я не вижу смысла менять легкий, удобный и бесплатный Expresso на эту обработку. Он и дерево строит и показывает что где нашлось, все регэкспы делаю в нём. Тут, видимо, кому что. Онлайн сервисами пользоваться не люблю, предпочитаю десктопные приложения. RegexBuddy по скриншотам понравился. Но, похоже, тот же Expresso, только за 40$. Если кто-нибудь посоветует ещё инструментов, естественно, посмотрю с интересом.
Публикацию прочитал по диагонали, ибо бОльшую часть текста автор решает какую-то свою задачу. Саму же обработку оценил по скриншотам - желания скачать не появилось. Создалось впечатление, что это такой большой тяжёлый монстр, с которым можно работать только в полный экран.
31. romasna 249 20.03.17 22:31 Сейчас в теме
(30)Извини, но если бы ты читал, а не "прочитал по диагонали", то заметил бы, что я не решаю здесь никакие задачи, а демонстрирую эту обработку на примере, в основном, для людей, которым это в новинку. Увы, не все такие продвинутые, как ты! ;) Но как ты заметил совершенно справедливо, - "кому что". Не пытаюсь навязывать свое мнение...
32. Darklight 20 21.03.17 13:49 Сейчас в теме
Респект автору - наконец-то боле менее масштабно подняли эту тему для сферы 1С. Конечно дальше хорошо бы развивать тему с использованием RexV8
33. romasna 249 21.03.17 14:13 Сейчас в теме
(32)На самом деле, эта тема довольно широко освещалась здесь, стоит только выполнить поиск. А развитие этой обработки, как я писал уже выше, будет. В частности, в приоритете RexV8. Ну и немного других "бантиков". Я часто возвращаюсь к тому, что уже сделано, в зависимости от настроения. :)
34. so-quest 130 10.05.17 09:41 Сейчас в теме
Статья понравилась. Однозначно уважуха за такое.
Вопрос - а что помешало сделать свой движок для регэкспов? что бы не использовать vbscript?
35. romasna 249 10.05.17 09:55 Сейчас в теме
(34)Оставляю в стороне оценку сложности разработки такого движка в 1С. Но я знаю, что VBScript отрабатывает регулярные выражения очень быстро (и этого достаточно). А насчет эффективности движка, запрограммированного в 1С, есть у меня сомнения. К тому же, если бы фирма 1С посчитала нужным и важным, то обеспечила бы прямой доступ к движку, который использует сама... но этого мы не наблюдаем.
36. starik-2005 1981 10.05.17 11:04 Сейчас в теме
(35)
но этого мы не наблюдаем
Так не туда смотрите )))
37. romasna 249 10.05.17 12:28 Сейчас в теме
(36)Мне знакомо, что регулярные выражения доступны через офсеты в XDTO. И знакомо также, что такое их использование позволяет разве что проверить соответствие строки регулярному выражению. Не более. Куда еще нужно посмотреть, чтобы можно было выполнить замену? Или найти набор строк, удовлетворяющих регулярному выражению. И все это путем встроенных в 1С механизмов.
При этом я не беру в расчет усилия авторов разработок в 1С, например, такие: Регулярные выражения без COM объектов и внешних компонент - к платформе это не имеет отношения.
Куда смотреть еще?
38. starik-2005 1981 10.05.17 17:02 Сейчас в теме
(37)
Куда смотреть еще?
Куда-нить сюда.1С юзает данную либу. Думаю, что можно как-то к ней нарыть доступ без отдельных внешних компонент. В линухе это обычная .so-либа, как в винде - не в курсе. Подключается ли она, как нативная компонента - не в курсе, но 1С ее юзает, ибо без нее не работает. Про регулярки и icu есть тут.
39. romasna 249 10.05.17 17:11 Сейчас в теме
(38)Если сможешь получить этот отдельный доступ, - поделись с нами, пожалуйста. А я пока поюзаю внешнюю компоненту Орефкова, для указанной тобой ICU, или VBScript (в силу недалекого ума). :)
40. starik-2005 1981 10.05.17 17:17 Сейчас в теме
(39)
А я пока поюзаю
А я на Linux не могу это юзать. Отсутствие кроссплатформенности - это для меня серьезный минус.

Ну и то, что часть функционала все-таки вытащена в 1С в тот же XDTO-механизм, некоторым образом заставляет меня с осторожностью относится к словам некоторых товарищей.
41. romasna 249 10.05.17 17:19 Сейчас в теме
(40)Каких товарищей? И к каким словам?
42. starik-2005 1981 10.05.17 22:26 Сейчас в теме
(41)
И к каким словам?
Ну, например, к этим:
Для работы с юникодом V8 использует кроссплатформенную библиотеку ICU, которая помимо прочего, содержит и функционал по работе с регулярными выражениями. По какой-то неизвестной причине, 1С не "вытащила" этот функционал "наружу", и пользоваться им из языка 1С возможности нет.
43. pvlunegov 144 04.12.17 10:11 Сейчас в теме
Автором проделана Титаническая работа по созданию движка для сохранения и внутренней документации Регулярок в 1с.
Многие комментатору так и не поняли смысла этой задачи.
Я смысл понял и скачал разработку.
К сожалению, в своей практике применить пока не могу, потому что для широкого применения регулярок ими РЕГУЛЯРНО нужно пользоваться и изменить мышление.

Автору просьба привести примеры МАССОВОГО использования Регулярок в одной конфигурации в рамках его разработки с комментированием, функциями, и т.п.
44. tormozit 5641 05.05.18 11:05 Сейчас в теме
жив буду - летом закончу полностью и опубликую
Автор жив?=)
45. romasna 249 05.05.18 11:48 Сейчас в теме
(44) Да, конечно. :) И все еще полон решимости, но имею недостаток возможностей. Слава Богу, не указал, в каком это году будет. Но летом...
46. tormozit 5641 20.05.18 21:07 Сейчас в теме
Автор проделал действительно большую работу и очень наглядно описал возможности своего инструмента. Но управляемая форма имеет ряд неудобств для решения такой задачи. Например редактировать и раскрашивать проверочный текст в одном поле нельзя из-за невозможности редактировать текст поле HTML.

Я добавил аналогичный инструмент "конструктор регулярного выражения" в подсистему "Инструменты разработчика". Он тоже собирает выражение в похожем стиле (параметризовано), но сделан естественно на обычной форме. В нем редактирование и раскраска проверочного текста производятся в одном поле.
47. romasna 249 21.05.18 07:21 Сейчас в теме
(46)
Мы уйдем без следа — ни имен, ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше тут не было — после не будет.
Ни ущерба, ни пользы от этого нет.

Омар Хайям.
Оставьте свое сообщение

См. также

Вам нравятся запросы в 1С? 14

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

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

1 стартмани

03.07.2019    11462    1    m-rv    79       

Подборка программ для взаимодействия с ЕГАИС Промо

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

Модель объекта 10

Инструменты и обработки Программист Конфигурация (md, cf) v8 Абонемент ($m) Инструментарий разработчика

Подсистема позволяет описать модель данных объекта, где описана зависимость между реквизитами, и затем использовать эту модель в разных сценариях работы с объектом. Версия платформы: 8.3.6 и выше. С небольшими доработками будет работать на 8.2.

1 стартмани

30.06.2019    4700    1    vadim1980    0       

Безопасная работа с транзакциями во встроенном языке 190

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    17851    8    tormozit    44       

Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо

Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).

29700 руб.

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 563

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки

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

1 стартмани

31.01.2019    31480    283    bonv    117       

Редактор объектов информационной базы 8.3 44

Инструменты и обработки Программист Пользователь Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Россия Windows Абонемент ($m) Инструментарий разработчика Универсальные обработки

Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.37 от 14.12.2019

2 стартмани

23.01.2019    12158    157    ROL32    28       

Перенос документов и справочников ERP 2 / КА 2 / УТ 11 => БП 3.0 Промо

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

19700 руб.

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019) 178

Инструменты и обработки Программист Архив с данными v8 v8::Mobile БУ УУ Android Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Абонемент ($m) Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Мобильная разработка

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    25146    229    informa1555    189       

Навигатор по конфигурации базы 1С 8.3 108

Инструменты и обработки Программист Пользователь Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Россия Windows Абонемент ($m) Инструментарий разработчика Универсальные обработки

Универсальная внешняя обработка (СДРНавигаторУпр) для просмотра метаданных конфигураций баз 1С 8.3. Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д. Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы. Отображает структуру хранения объектов базы данных, для регистров доступен сервис "Управление итогами". Небольшой набор сервисных функций для повседневной работы. Для программистов и пользователей. Платформа 8.3, управляемые формы. Версия 1.1.0.47 от 25.11.2019

3 стартмани

28.10.2018    18568    202    ROL32    47       

Базовый курс для начинающих 1С-программистов. Пятый поток. Онлайн-курс с 12 февраля по 15 апреля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500/9500 рублей

Работа с публикациями "Инфостарт" 14

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    10813    10    RocKeR_13    16       

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции 65

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    17465    23    informa1555    26       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.127.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

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

29700 руб.

Работа с данными выбора 41

Инструменты и обработки Программист Архив с данными v8 Россия Абонемент ($m) Практика программирования Работа с интерфейсом

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

1 стартмани

17.07.2018    24547    14    kalyaka    15       

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") 105

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    21047    86    m-rv    57       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.

29700 руб.

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному 242

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    29710    28    dsdred    34       

Как выполнить отчет на СКД через COM и получить данные отчета? 86

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    19178    10    wowik    3       

Базовый курс по разработке мобильных 1C-приложений для Android-устройств. Третий поток. Онлайн-интенсив с 11 февраля по 05 марта 2020 г. Промо

Данный онлайн-курс предусматривает изучение базовых принципов создания приложений для операционной системы Android, работающих на мобильной платформе “1С:Предприятие”. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие” при разработке прикладных решений для “обычных” компьютеров, но пока ещё не занимался разработкой 1С-приложений, предназначенных для работы на мобильных устройствах.

7500 рублей

Работа со схемой запроса 176

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

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

1 стартмани

24.04.2018    30473    75    kalyaka    34       

Регистры правил [Расширение] 14

Инструменты и обработки Системный администратор Программист Расширение (cfe) v8 v8::Права УТ11 Абонемент ($m) Инструментарий разработчика Информационная безопасность

Регистры правил - права доступа, запрет редактирования, автоподстановка реквизитов и т.д.

10 стартмани

15.03.2018    11891    28    33lab    0       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Заполняем по шаблону (по умолчанию) 69

Инструменты и обработки Программист Архив с данными v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

08.02.2018    18932    20    mvxyz    17       

Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов 124

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Если вам интересно проверить контрагенте в ФНС, вам поможет данная публикация. Весь алгоритм работы строится на основе данных, полученных с сервиса http://npchk.nalog.ru совершенно бесплатно.

1 стартмани

01.02.2018    26630    62    rpgshnik    46       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула 8

Отчеты и формы Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Печатные формы документов Практика программирования Универсальные функции

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

1 стартмани

29.12.2017    24952    21    agent00mouse    0       

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП 26

Инструменты и обработки Программист Расширение (cfe) v8 БП3.0 Абонемент ($m) Практика программирования Универсальные печатные формы

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

1 стартмани

06.12.2017    19581    52    kwazi    6       

Онлайн-курс "Технология выполнения проектов ERP-класса – процессный подход". Третий поток. Курс проходит с 21 января по 18 марта 2020 года. Промо

Курс разработан Внедренческим центром «Раздолье». Курс предназначен для подготовки аналитиков, архитекторов и руководителей проектов автоматизации процессов управления с использованием комплексных ИТ-систем (1С:ERP, 1С:УХ, 1С:КА, 1С:УТ). В основе курса лежит методика применения процессного подхода.

9000 рублей

Программное формирование форматированной строки в стиле html+inline CSS 53

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Работа с интерфейсом Инструментарий разработчика

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

1 стартмани

18.11.2017    21283    25    bonv    6       

Расширения конфигураций 1С: учимся перехватывать методы 115

Инструменты и обработки Программист Расширение (cfe) v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

1 стартмани

30.05.2017    89208    14    signum2009    45       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов 178

Статья Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) Практика программирования Математика и алгоритмы Универсальные функции Производительность и оптимизация (HighLoad)

Восстановление партий, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

26.05.2017    40454    168    DarkAn    86       

Набор подсистем "Умные таблицы" 64

Инструменты и обработки Системный администратор Программист Архив с данными v8 Беларусь Россия Казахстан Абонемент ($m) Инструментарий разработчика

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

1 стартмани

22.05.2017    25422    99    Silenser    33       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения.

6500 рублей

Комбинатор. Подбор суммы из набора чисел. Обработка для 1С версии 8.х (УФ) 10

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

19.05.2017    12924    42    romasna    30       

Простой способ индексирования интервалов 184

Статья Программист Конфигурация (md, cf) v8 Абонемент ($m) Практика программирования

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

1 стартмани

28.09.2016    33232    39    ildarovich    22