Парсер запросов 1С. Часть 1: Введение, разбор математических выражений

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

Разработка - Математика и алгоритмы

Парсер теория компиляторов запросы

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

Для начала, определю цели данной серии публикаций.

  1. Создание функции, выполняющей полноценный парсинг запросов 1С в некоторую древовидную структуру.
  2. Создание функции, выполняющей обратное преобразование
  3. Создание обработки "Конструктор запросов" на управляемых формах

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

Также следует определить требования к парсеру:
  1. Он должен быть однопроходным (т.к. грамматика языка запросов не предполагает необходимости двупроходной обработки, как, например, грамматика языка C++)
  2. Он должен включать в себя лексический и синтаксический анализ. В перспективе необходима разработка тонкого анализа связи с метаданными конфигурации (семантический анализ).
  3. Он должен адекватно обрабатывать исключения

В первой части статьи я опишу разбор математических выражений. Эта тема очень хорошо освещена в русской и зарубежной литературе, впервые я познакомился с ней в книге "О чем не пишут в книгах по Delphi". На хабре достатоно поискать по ключевым словам "Парсер" или "Теория компиляторов". Более того, в данное время существуют генераторы парсеров, которые на основе данных о грамматике языка составляют исходный код парсера (Вики: Сравнение генераторв парсеров (англ.)). Однако, этот метод я рассматривать не буду - настоящий 1С-ник должен полагаться только на свой код.

Итак, какие же знания требуются для написания парсера?

Формальные грамматики.

Для описания грамматики языка Алгол Джоном Бэкусом и Питером Науром была раработана формальная система описания синтаксиса. Она называется БНФ (Бэкуса-Наура форма, BNF Вики: Форма Бэкуса-Наура). Данная система позволяет описывать одни категории с использованием других, постепенно наращивая сложность, и ее вполне реально использовать для решения поставленной задачи. Забегая вперед, скажу, что сама фирма 1С описывает свой язык запросов с помощью этой грамматики. Чтобы в этом убедиться, достаточно открыть справку по языку запросов.

Следующие операторы используются в БНФ:

::=

присваивание

|

Операция ИЛИ

 Имя

Литерал

[Имя]

Необязательный литерал

(Имя)

Литерал, повторяющийся 0 или более раз

При описании грамматики БНФ сначала необходимо дать определение абстракции нижнего уровня:

Цифра :: = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

С помощью этого выражения мы указываем, что литерал может принимать одно из значений '0' ... '9'

Абстракция более выского уровня - вещественное число:

Знак ::= '-' | '+'

Разделитель ::= '.'

Число ::= [Знак] Цифра (Цифра) [ Разделитель (Цифра) ]

Число может иметь знак (+, -) а может не иметь его. Далее должна идти хотя бы одна цифра (или более). Затем может идти разделитель дробной и целой части (а может не идти). Если есть разделитель, то далее может идти одна цифра (или более) (спасибо (9)) .

Простейшее математическое выражение должно удовлетворять следующим требованиям:

  1. Допустимы операции + - * /
  2. Приоритет операций: Скобка > Умножение = Деление > Сложение = Вычитание

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

Оператор1 ::= '+' | '-'

Оператор2 ::= '*' | '/'

Множитель ::= Число | '(' Выражение ')'

Слагаемое ::= Множитель [Оператор2 Множитель]

Выражение ::= Слагаемое [Оператор1 Слагаемое]

Требование наличия скобок делает нашу грамматкику рекурсивной (на моменте вычисления множителя).

Программная часть.

Теперь определимся с программной частью. Непосредственно синтаксис БНФ будет разбирать синтаксический анализатор. Но с точки зрения грамматики выражение 2+2 является корректным, а 2 + 2 - нет, и для решения этой проблемы (обычно выражения с переносами строки и пробелами читаются легче) будет использоваться лексический анализатор. Его целью будет пропуск незначащих символов и извлечение лексемы (в нашей грамматике это может быть Число, Операция или одна из Скобок, которую он передаст на вход синтаксического анализатора.

Лексический анализатор.

Функция СледующийЛитерал(Литерал, ТекстЗапроса, ТекПоз)

    Если
ТекПоз <= СтрДлина(ТекстЗапроса) Тогда

       
// Пропустить пробелы
       
НезначащиеСимволы = " " + Символы.ПС + Символы.Таб;
        Пока
Найти(НезначащиеСимволы, Сред(ТекстЗапроса, ТекПоз, 1)) > 0 Цикл
           
ТекПоз = ТекПоз + 1;
        КонецЦикла;

       
// Извлечь литерал
       
ТекСимвол = Сред(ТекстЗапроса, ТекПоз, 1);

        Если
Найти("()*/+-", ТекСимвол) > 0 Тогда

           
Литерал = ТекСимвол;
           
ТекПоз = ТекПоз + 1;

        ИначеЕсли
ЭтоЦифра(ТекСимвол) Тогда

           
Литерал = ИзвлечьЧисло(ТекстЗапроса, ТекПоз);

        Иначе

            ВызватьИсключение
"Неизвестный символ в позиции " + Формат(ТекПоз, "ЧГ=0");

        КонецЕсли;

        Возврат Истина;

    Иначе

       
Литерал = Неопределено;
        Возврат Ложь;

    КонецЕсли;

КонецФункции

Функция
ИзвлечьЧисло(ТекстЗапроса, ТекПоз)

   
ТекСимвол = Сред(ТекстЗапроса, ТекПоз, 1);
   
Результат = "";

   
// Целая часть
   
Пока ЭтоЦифра(ТекСимвол) И ТекПоз <= СтрДлина(ТекстЗапроса) Цикл
       
ТекПоз = ТекПоз + 1;
       
Результат = Результат + ТекСимвол;
       
ТекСимвол = Сред(ТекстЗапроса, ТекПоз, 1);
    КонецЦикла;

   
// Дробная часть
   
Если ТекСимвол = "." Тогда
       
Результат = Результат + ".";
       
ТекПоз = ТекПоз + 1;
       
ТекСимвол = Сред(ТекстЗапроса, ТекПоз, 1);
        Пока
ЭтоЦифра(ТекСимвол) И ТекПоз <= СтрДлина(ТекстЗапроса) Цикл
           
ТекПоз = ТекПоз + 1;
           
Результат = Результат + ТекСимвол;
           
ТекСимвол = Сред(ТекстЗапроса, ТекПоз, 1);
        КонецЦикла;
    КонецЕсли;

    Возврат
Число(Результат);

КонецФункции

Функция
ЭтоЦифра(ТекСимвол)

    Возврат
ТекСимвол >= "0" И ТекСимвол <= "9";

КонецФункции

Синтаксический анализатор.

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

Функция Выражение(ТекЛитерал, ТекстЗапроса, ТекПоз) Экспорт

    Если
ТекЛитерал = Неопределено Тогда
       
// При первом вызове необходимо сдвинуть автомат на первую позицию
       
Если Не СледующийЛитерал(ТекЛитерал, ТекстЗапроса, ТекПоз) Тогда
            ВызватьИсключение
"Пустая строка";
        КонецЕсли;
    КонецЕсли;

   
Результат = Слагаемое(ТекЛитерал, ТекстЗапроса, ТекПоз);
    Пока Не
ТекЛитерал = Неопределено И Найти("+-", ТекЛитерал) > 0 Цикл
       
Литерал = ТекЛитерал;
       
СледующийЛитерал(ТекЛитерал, ТекстЗапроса, ТекПоз);
        Если
Литерал = "+" Тогда
           
Результат = Результат + Слагаемое(ТекЛитерал, ТекстЗапроса, ТекПоз);
        Иначе
           
Результат = Результат - Слагаемое(ТекЛитерал, ТекстЗапроса, ТекПоз);
        КонецЕсли;
    КонецЦикла;

    Возврат
Результат;

КонецФункции

Функция
Слагаемое(ТекЛитерал, ТекстЗапроса, ТекПоз)

   
Результат = Множитель(ТекЛитерал, ТекстЗапроса, ТекПоз);
    Пока Не
ТекЛитерал = Неопределено И Найти("*/", ТекЛитерал) > 0 Цикл
       
Литерал = ТекЛитерал;
       
СледующийЛитерал(ТекЛитерал, ТекстЗапроса, ТекПоз);
        Если
Литерал = "*" Тогда
           
Результат = Результат * Множитель(ТекЛитерал, ТекстЗапроса, ТекПоз);
        Иначе
           
Результат = Результат / Множитель(ТекЛитерал, ТекстЗапроса, ТекПоз);
        КонецЕсли;
    КонецЦикла;

    Возврат
Результат;

КонецФункции

Функция
Множитель(ТекЛитерал, ТекстЗапроса, ТекПоз)

    Если
ТекЛитерал = "(" Тогда

        Если
СледующийЛитерал(ТекЛитерал, ТекстЗапроса, ТекПоз) Тогда
           
Результат = Выражение(ТекЛитерал, ТекстЗапроса, ТекПоз);
            Если
ТекЛитерал = ")" Тогда
               
СледующийЛитерал(ТекЛитерал, ТекстЗапроса, ТекПоз);
            Иначе
                ВызватьИсключение
"Ожидается ) в позиции " + Формат(ТекПоз, "ЧГ=0");
            КонецЕсли;
        Иначе
            ВызватьИсключение
"Ожидается выражение в позиции " + Формат(ТекПоз, "ЧГ=0");
        КонецЕсли;

    ИначеЕсли
ЭтоЦифра(Сред(Строка(ТекЛитерал), 1, 1)) Тогда
       
Результат = ТекЛитерал;
       
СледующийЛитерал(ТекЛитерал, ТекстЗапроса, ТекПоз);
    Иначе
        ВызватьИсключение
"Неизвестный литерал в позиции " + Формат(ТекПоз, "ЧГ=0");
    КонецЕсли;

    Возврат
Результат;

КонецФункции

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

Наименование Файл Версия Размер
Обработка для теста парсера математических выражений
.epf 6,72Kb
04.12.13
19
.epf 0.1 6,72Kb 19 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. juntatalor 62 04.12.13 17:44 Сейчас в теме
В функциях, которые в самой публикации, съелась половина кода.
Раскрасил "Разукрашкой", все Ок.
2. tsmgeorg@gmail.com 04.12.13 18:49 Сейчас в теме
Да, бывает, иногда весело отвлечься от повседневных будней, спасибо за статью
3. omut 04.12.13 19:46 Сейчас в теме
Увлекательно написано, автору спасибо :)

Небольшое замечание: если правильно понял, то вместо
Число ::= [Знак] Число (Число) [ Разделитель Число (Число) ]
должно быть "Число ::= [Знак] Цифра (Цифра) [ Разделитель Цифра (Цифра) ]"
8. juntatalor 62 04.12.13 23:18 Сейчас в теме
(3) omut, да, спасибо за внимательное чтение - поправил!
(5) andrewks, а вы попробуйте выполнить запрос "ВЫБРАТЬ .25 КАК Поле1". С точки зрения запросов 1С .25 - НЕ число.
9. andrewks 1273 04.12.13 23:47 Сейчас в теме
(8)
С точки зрения запросов 1С .25 - НЕ число.


зато "25." число ;)
juntatalor; +1 Ответить
10. juntatalor 62 05.12.13 00:00 Сейчас в теме
(9) andrewks, да, действительно, и что интересно - реализация функции ИзвлечьЧисло() понимает такие числа. Ошибка в записи синтаксиса, сейчас поправлю.
4. vandalsvq 1147 04.12.13 22:41 Сейчас в теме
Жду продолжения. Интересная тема
5. andrewks 1273 04.12.13 22:54 Сейчас в теме
"Число ::= [Знак] Цифра (Цифра) [ Разделитель Цифра (Цифра) ]"


а разве .25 не число?

целая часть необязательна, если она опущена, подразумевается 0

правильнее так:

Число ::= [Знак] Цифра (Цифра) [ Разделитель Цифра (Цифра) ] | [Знак] Разделитель Цифра (Цифра)
7. omut 04.12.13 23:08 Сейчас в теме
(5) andrewks, не число. Если вы используете такую запись в коде 1С, тогда, конечно... :)
6. andrewks 1273 04.12.13 23:00 Сейчас в теме
31. so-quest 131 11.12.13 06:26 Сейчас в теме
(6) andrewks, есть уже. нафиг только никому не нужно :)
11. baton_pk 401 05.12.13 13:37 Сейчас в теме
Шлёпну плюс собрату по (не)счастью :) Со школьных лет увлекаюсь синтаксическими разборами выражений. Вот сейчас тоже на досуге пилю парсер языка запросов с последующим исполнением.

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

Если есть желание, тут можно посмотреть, что у меня получается:
https://github.com/dmpas/e8-query-parser/blob/master/query-driver.e8s

Буду рад услышать Ваше мнение :) Заодно прикладываю обработку погонять.
Прикрепленные файлы:
ЗапросПоТаблицамЗначений.epf
brr; Elisy; JohnyDeath; shakmaev; juntatalor; +5 Ответить
13. juntatalor 62 05.12.13 19:41 Сейчас в теме
(11) baton_pk, вычисление прикрутил, чтобы показать, что это действительно работает :)

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

Реализованный функционал:
Пакет запросов, запрос, описание запроса (по синтаксической диаграмме 1С), вложенные запросы
ВЫБОР ... КОГДА ...
ВЫРАЗИТЬ(... КАК) [Только для примитивных типов, для таблиц пока нет]
Все логические конструкции (В (включая вложенные запросы), ПОДОБНО, МЕЖДУ, ЕСТЬ, ССЫЛКА)
Да и много чего еще

Баги и нереализованное:
Простое выражение (например, имя поля, параметр или константа ИСТИНА / ЛОЖЬ) не считаются корректным логическим выражением. Обязательно надо указывать сравнение, например ГДЕ ИСТИНА - не работает, а ГДЕ 1 = 1 - работает.
Нет проверки на необходимость функции быть агрегатной
Да и еще куча всего. Зато есть динамический построитель таблиц базы данных.

Прикрепленные файлы:
КонструкторЗапросов9.epf
garik80; brr; baton_pk; +3 Ответить
16. baton_pk 401 06.12.13 08:53 Сейчас в теме
(13)
Посмотрел Вашу обработку - внушает :) Мы даже пишем почти одинаково :)

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

Вы при разборе выражения указываете, считать его логическим или нет. У Вас, кстати, при разборе конструкции ВЫБОР не совсем верно отрабатывает проверка на логичность. Как сделано у Вас:

ВЫБОР КОГДА <тут разбираем логическое выражение> ТОГДА <тут разбираем нелогическое выражение> ....

Однако в выражении ТОГДА тоже может быть логическое выражение, если извне мы разбираем именно логическое выражение:

ГДЕ ВЫБОР КОГДА 1=1 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ИСТИНА

В данном случае, пытаясь разобрать инструкцию ВЫБОР, Вы не знаете, должна она быть логической или нет, пока не дойдёте до знака сравнения.

С другой стороны, с точки зрения 1С такой запрос имеет место быть:

ВЫБРАТЬ 1 ГДЕ (1 + 3) = ИСТИНА


Лично я разбираю выражение независимо от его типа - проблемы с вычислением будут отрабатываться на этапе исполнения. Если мы выполняем отбор по условию ГДЕ или в конструкции КОГДА, то на этапе исполнения ожидаем получить там что-нибудь булёвое, и если не получаем - бросаем исключение.
juntatalor; +1 Ответить
17. juntatalor 62 06.12.13 09:13 Сейчас в теме
(16) baton_pk, с Вашими доводами согласен целиком и полностью.
Вообще у меня на каком-то этапе разбора выражений произошел кризис - я понял, что не могу автоматически отличить логическое выражение от математического. Приняв это как данность, я накрутил ручную установку флага "Логическое" и успокоился. Пока речь шла о простых условиях, все было нормально. Но сейчас уже есть ВЫБОР ... КОНЕЦ и параметры виртуальных таблиц. Сейчас уже всерьез задумался, что автоматическое определение типа выражения - логическое / математическое - это необходимость.
18. juntatalor 62 06.12.13 09:18 Сейчас в теме
(16) baton_pk, кстати, как Вам моя процедура ДобавитьИсточник()? Вроде бы достаточно неплохо обрабатывает соединения (ну, за исключением, как мы уже говорили, некоторой корявости с математикой / логикой).
baton_pk; +1 Ответить
19. baton_pk 401 06.12.13 10:36 Сейчас в теме
(18)
В смысле разбора я примерно так и думал его делать. У меня нет чёткого понимания, как это должно отрабатываться уже непосредственно при исполнении. Это влияет на порядок построения дерева, а это влияет на разработку непосредственно разбора.

Да, и ещё: у Вас обязательно наличие слова "КАК". Знаю я людей, которые патологически презирают это слово :):)

Ещё неясный момент с выборкой всех полей по "*". У Вас отрабатывается только "ВЫБРАТЬ * ИЗ Т1,Т2", когда вполне может быть запрос: "ВЫБРАТЬ Т1.Поле1, Т1.Поле2, Т2.* ИЗ Т1, Т2"
23. juntatalor 62 06.12.13 14:07 Сейчас в теме
(19) baton_pk, Насчет * - внес в TODO лист.

КАК обязательно только для вложенных запросов, для обычных таблиц нет.
25. baton_pk 401 06.12.13 14:31 Сейчас в теме
(23) я не только про таблицы, я ещё и про поля.
14. juntatalor 62 05.12.13 20:08 Сейчас в теме
(11) baton_pk, как вы серьезно к разработке подошли! Очень понравился такой "Отладочный" режим выполнения запросов. Изучаю Ваш труд и готовлю следующую публикацию. Хотел в ней уже начать разбираться непосредственно с запросами, но получается очень объемно, возможно, придется все же сначала полностью закончить с математическими выражениями.
15. baton_pk 401 05.12.13 22:07 Сейчас в теме
(14)
я сейчас размышляю над соединениями таблиц - там есть, над чем подумать. На этом пока заткнулся. Покуриваю стандарт SQL-92 - труд здоровенный, но некоторые вещи там описаны хорошо.

Завтра на работе посмотрю Ваш конструктор.
12. Yashazz 3204 05.12.13 19:00 Сейчас в теме
Йессс! Подобные публикации таки опровергают гнусное мнение, что "одинэснег - не программист". Спасибо!
20. German 873 06.12.13 10:51 Сейчас в теме
Парни GoldParser(x32) или Antlr. Зачем такие велосипеды? Все уже давно сделано в том числе написана грамматика для языка запросов 1С
JohnyDeath; awk; +2 Ответить
21. baton_pk 401 06.12.13 11:03 Сейчас в теме
(20) German,
я так понимаю, что у juntatalor интерес чисто академический - тут по-определению будут сплошь одни велосипеды.
22. comol 4306 06.12.13 11:16 Сейчас в теме
Эх... детство, отрочество, молодость....


(20) German, да. да... Такие крутяцкие программулены, изучаешь в каком формате им нужно семантику или синтаксис скармливать, пишешь правила и фигак оно всё парсит, и более того даже код на c++ генерит для парсера...

мы в школеунивере развлекались с Flex и Bison...
awk; juntatalor; German; +3 Ответить
28. awk 714 09.12.13 10:22 Сейчас в теме
(20) German, (22) comol, А мне javacc нравится..
24. tormozit 5801 06.12.13 14:09 Сейчас в теме
Я здесь был (подписался)
26. AllexSoft 06.12.13 17:57 Сейчас в теме
Интересно что получится в итоге....
27. juntatalor 62 06.12.13 19:31 Сейчас в теме
(26) AllexSoft, то, что обещано в пункте 3, конечно же! :-)
3. Создание обработки "Конструктор запросов" на управляемых формах

После выходных выложу вторую часть статьи. Под конец недели работы много, никак не допишу.
29. ignor 222 09.12.13 15:08 Сейчас в теме
30. so-quest 131 11.12.13 06:22 Сейчас в теме
Мои пять копеек - сравнение литералов - медленная операция. в своем сканере сдеала так - сперва весь поток преобразовывается в массив чисел (используется кодсимвола) и затем просто сравнение чисел. Но вообще-то предыдущие участники правы - детство все это - эффективнее чем автомат у тебя не получится, потребности помнить пробельный символы в твое задаче нет, выгоднее использовать типовые инструменты, чем изобретать свой лисапед. тем более для голдпарсера есть вывод кода сразу в 1С, без использования активХ.

Вот если бы ты для PEG парсера преобразователь нарисовал - было бы лучше...
32. juntatalor 62 11.12.13 10:07 Сейчас в теме
(30) so-quest, да уже столкнулся с тем, что сравнивать литералы действительно очень медленно. Пока что провел замеры различных алгоритмов, как ни странно, выигрывает Найти(ВесьАлфавит, ТекСимвол). Примерно равный результат дает перевод алфавита в Соответствие и сравнение литерала методом Соответствие.Получить(). Хуже Найти(ЗаглавныйАлфавит, Врег(ТекСимвол), перевод через КодСимвола с последующим сравнением числа и прямое сравнение символов.
С КодСимвола() все сложно. Не спорю, что если все перевести в числа, и потом сравнивать - работает быстрее, но эффективно это будет только если много раз парсить один и тот же запрос (тут встает вопрос - зачем?) - потому что на каждый новый запрос нужно будет создавать новый массив чисел, а это сильные временные затраты на КодСимвола (как-то уж очень неспешно она работает).
Вообще, убедился в очередной раз, что для критичных с точки зрения производительности процессов скриптовые языки подходят плохо. Нет высокоуровнего доступа к процессору и памяти, в результате чего код, который отрабатывает на C за микросекунды в 1С работает секунды (хотя, казалось бы - простая операция сравнения).
37. so-quest 131 12.12.13 07:44 Сейчас в теме
(32) Скорость и 1С это как селедка и шампанское. крайне редко вместе уживаются. Хотяб потому что операция сравнения простая только если знаешь тип.
(33) baton_pk, руками писать понимаемый код можно только пока работаешь один. когда начинаешь работать в команде - все же требуется использование типовых (либо признаных такими) инструментов. Просто потому что там уже решены проблемы со скоростями, обработкой ошибок и наработаны практики использования. Ты же не изобретаешь каждый раз УниверсальныйОтчет или не пишешь каждый день с ноля конвертацию данных.
Что касается голдпарсера - так это даже не смешно - нечего там изучать (тем более зная теорию ) - это же просто генератор таблиц для автоматов.

lesenoklenok; +1 Ответить
38. baton_pk 401 12.12.13 08:25 Сейчас в теме
(37) so-quest,
Просто потому что там уже решены проблемы со скоростями

Ага, помнится, на одном жёлтом неназываемом здесь форуме очень дико ругались на производительность GoldParse, ANTLR и иже с ними. Самому, к сожалению, пока не довелось сравнить скорости, потому в эту сторону рассуждать не буду.

Ты же не изобретаешь каждый раз УниверсальныйОтчет или не пишешь каждый день с ноля конвертацию данных

Боже упаси! :-D

нечего там изучать (тем более зная теорию )

Для меня "нечего там изучать" - это открыл, вбил, нажал, получил. Если за 5-10 минут у меня это не получилось, значит, надо всё-таки хоть чуть-чуть поизучать. В универсальном отчёте тоже вроде бы нечего изучать, ан нет - сам убил не один час своей жизни, объясняя людям, что это и как этим пользоваться.

это же просто генератор таблиц для автоматов

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

Потому опять же, "нечего изучать" - Вы тут немножко лукавите всё-таки.

PS
руками писать понимаемый код можно только пока работаешь один

Нет, если следовать стандартам. В 1С их пока-что маловато и тем не следуют. Да и практика оценки кода (Code Review) тут совершенно никак не применяется :(.
Прикрепленные файлы:
Grammatika_yazyka_zaprosov_1C_8.2_goldparser_1.32.c
Grammatika_yazyka_zaprosov_1C_8.2_goldparser_1.32.cpp
40. so-quest 131 12.12.13 09:20 Сейчас в теме
(38) baton_pk, производительность ANTLR это конечно да... Та еще песня. По голдпарсеру - все от радиуса кривизны рук зависит. ничто не мешает переписать шаблон генерации так что бы скорость тебя удовлетворяла (на любом удобном тебе языке). Ручной парсер нужен там где граматику не сделать (лисп/схема (макросы чтения все портят)). Или сделать, но она неоправданно сложная станет (С++ или С). В случае с 1С - излишне.
Все вышеописаное - имхо.
И да - лучше все же flex\bison чем голдпарсер, ручной парсер.


Кстати, выложи свой парсер 1С - глянуть.
43. baton_pk 401 12.12.13 09:40 Сейчас в теме
(40) so-quest,
Прикладываю его старую версию на C++. Сейчас всё на чистый C переписаваю. У файла куча внешних зависимостей, но если Вам только код глянуть, то в самый раз. В добавок, вывод байт-кода тоже можно было бы отбросить.

Эта штука у меня без ошибок разобрала все общие модули УПП. Отрабатывает директивы препроцессора произвольной вложенности. Добавлена пара фишек от себя, в частности:

https://github.com/dmpas/e8-engine-examples/blob/master/0.2.4/pre-or-and.e8s
https://github.com/dmpas/e8-engine-examples/blob/master/0.2.4/assert.e8s
https://github.com/dmpas/e8-engine-examples/blob/master/0.2.4/altnames.e8s
Прикрепленные файлы:
Translator.cpp
33. baton_pk 401 11.12.13 10:15 Сейчас в теме
Не смог сдержать буйный интерес и поставил себе GoldParser. Неслабый инструмент, но требующий глубокого изучения.
Если стоит выбор, изучать теорию лексического разбора или изучать GoldParser, то конечно же лучше изучить GoldParser. Но если выбор в том, писать ли свой парсер, зная теорию лексического разбора, или изучать GoldParser с нуля, то я уж лучше напишу свой парсер сам :)

Приведу цифры:
На поставить(/посмотреть/потыркать/попробовать и т.д) GoldParser у меня ушло примерно 1.5-2 часа, чтобы понять, что это такое и с чем едят. Парсер языка 1С с преобразованием в байт-код я написал за 7 часов. Без байт-кода это как-раз бы и вышло 1.5-2 часа. Ну, если б я писал парсер хотя бы каждый месяц, я бы безусловно освоил и GoldParser, и его собратьев, но т.к. парсеры приходится писать крайне редко, а разбор математических конструкций я пишу чуть ли не с закрытыми глазами, а на выходе получаю код целиком и полностью мне известный, то буду писать парсеры руками.

Поэтому опять же, не ищите в статье практического смысла. Он тут исключительно академический.
34. WalterMort 314 11.12.13 14:42 Сейчас в теме
Уже писал нечто подобное (конструктор запроса УФ), да всё руки не доходят завершить. В целом, прочитать запрос в дерево полдела. Там ещё веселья добавляется в разного рода камнях. Преобразовать таблицу "связи" в конкретное выражение в тексте запроса, например, только на первый взгляд тривиальная задача.
baton_pk; +1 Ответить
35. Pashkatancor 69 12.12.13 03:52 Сейчас в теме
36. slavik27 14 12.12.13 07:06 Сейчас в теме
39. tormozit 5801 12.12.13 08:48 Сейчас в теме
Возможно кто то не знает, конструктор запроса я свой уже сделал в ИР http://devtool1c.ucoz.ru/index/konstruktor_zaprosa/0-38 . Если кто то захочет писать свой, то думаю мой код ему драматически сократит затраты по времени.
GoldParser на сервере мне не удалось использовать. Может быть кто то знает волшебный способ? Тогда бы до конструктора запроса под тонкую форму осталось часов 20-30.
Yasen; German; baton_pk; +3 Ответить
41. so-quest 131 12.12.13 09:21 Сейчас в теме
(39) tormozit, я тебе уже рекламировал свой шаблон генератора для голдпарсера, что помешало использовать?
42. tormozit 5801 12.12.13 09:27 Сейчас в теме
(41) Объектная модель GoldParser у тебя не воссоздана. Она у меня активно используется в коде конструктора запросов. Т.е. придется много кода переделывать необратимо, либо засорять и без того сложную логику ветвлениями "если парсер такой, то делаем так, иначе делаем так".
44. ikekoval 103 17.12.13 16:31 Сейчас в теме
Статья очень понравилась. Жду продолжения (подпись)
45. magolubev 30.12.13 12:53 Сейчас в теме
Вспомнил институтские годы, парсеры на Lex/Yacc...
По делу - согласен с baton_pk, необходимо промежуточное представление программы в форме обратной польской записи
46. lesenoklenok 23 28.01.14 09:47 Сейчас в теме
Очень интересная статья, подробно описано.
47. baton_pk 401 20.02.14 08:49 Сейчас в теме
(0) Где обещанное продолжение??
48. so-quest 131 22.11.14 21:38 Сейчас в теме
Моя попытка продолжения http://www.cyberforum.ru/1c-custom/thread1307974.html#post6887051 - собираю критику к 1 главе.
Оставьте свое сообщение

См. также

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    30762    0    ids79    40    

Партионный учет по двум количественным показателям

Математика и алгоритмы Учет ТМЦ v8 1cv8.cf Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

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

26.03.2020    2408    0    lastcontra    4    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

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

18.02.2020    3758    0    randomus    18    

[После]Новогодние задачи

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

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

30.12.2019    2605    0    Alxby    23    

Как работает серверный вызов в 1С Промо

Математика и алгоритмы v8::УФ Бесплатно (free)

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    52088    0    pahich    82    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    21910    0    YPermitin    24    

"Хочу универсально!" [Часть 1]

Математика и алгоритмы Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

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

02.09.2019    8843    0    SeiOkami    35    

Иерархия без "В ИЕРАРХИИ"

Математика и алгоритмы v8 Бесплатно (free)

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    10636    0    ildarovich    19    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

Практика программирования Математика и алгоритмы Оптовая торговля Оптовая торговля v8 1cv8.cf УУ Бесплатно (free)

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

24.03.2014    43877    0    ildarovich    116    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    12058    0    ids79    7    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    36295    4    AlbinaAAA    25    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

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

24.07.2019    24651    0    skv_79    35    

Приемы обработки больших данных в 1С Промо

Универсальные обработки Математика и алгоритмы Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    64534    0    tormozit    27    

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

Практика программирования Математика и алгоритмы Разработка v8 Бесплатно (free)

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    4922    0    vandalsvq    16    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    14699    0    Stepa86    33    

Что делает "В ИЕРАРХИИ" в запросе?

Математика и алгоритмы v8 Бесплатно (free)

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    20428    0    YPermitin    34    

XDTO - это просто Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    282412    0    Evil Beaver    173    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    42603    0    ids79    20    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Практика программирования Математика и алгоритмы v8 1cv8.cf Россия Бесплатно (free)

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

24.06.2019    12868    0    RonX01    65    

Организация хранения промежуточных данных

Математика и алгоритмы v8 Бесплатно (free)

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    3731    0    scientes    1    

Самоучитель языка запросов 1С. Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    107376    0    bpc222    327    

Вычисление 200 тысяч знаков числа pi

Математика и алгоритмы v8 Россия Бесплатно (free)

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    6849    0    Oleg_nsk    96    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Практика программирования Математика и алгоритмы Разработка v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    22682    0    YPermitin    7    

Даем названия переменным: как префиксы экономят наше время

Практика программирования Математика и алгоритмы Разработка v8 Бесплатно (free)

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

06.05.2019    5981    0    Designer1C    81    

Решение транспортной задачи запросом Промо

Математика и алгоритмы v8 Бесплатно (free)

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

1 стартмани

30.04.2014    34248    10    bforce    22    

Заметки по SQL: Срез последних - аналог запроса

Математика и алгоритмы Практика программирования v8 1cv8.cf Россия Бесплатно (free)

В статье описывается создание среза последних данных средствами классического языка запросов. Причем метод построения запроса был разработан еще во времена, когда автор работал с СУБД Oracle 9i и программировал на PL SQL. Основная идея заключается преобразовании запроса с подзапросом, в запрос без подзапроса (в примерах описывается преобразование до двух вложенных подзапросов). Запросы тестировались на реальных базах данных. Платформа - 1С:Предприятие 8.3 (8.3.10.2561).

15.01.2019    10074    0    IVC_goal    7    

Многопоточное восстановление последовательностей

Производительность и оптимизация (HighLoad) Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    11848    0    _ASZ_    33    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 Бесплатно (free)

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    48834    0    bpc222    51    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

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

23.08.2018    35014    0    Rain88    46    

Теорема номер тринадцать

Математика и алгоритмы v8 Бесплатно (free)

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

15.03.2018    11610    0    vasilev2015    24    

"Взлом" теста "1С:Профессионал" методом машинного обучения

Практика программирования Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

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

12.03.2018    18260    0    ildarovich    19    

v8: Концепция минимального изменения конфигурации для легкого обновления Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

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

28.01.2013    37245    0    MarSeN    57    

Введение в CI для 1С

Математика и алгоритмы v8 Россия Бесплатно (free)

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

21.11.2017    22591    0    real_MaxA    22    

#Область ВНЕШНИЕ_ВЫЗОВЫ или MVC в 1С, библиотечность и упрощение интеграции кода

Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

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

12.10.2017    17136    0    for_sale    58    

Пишем игру Минер. Обработка событий ActiveX в 1С

Практика программирования Математика и алгоритмы v8 Россия Бесплатно (free)

Пример демонстрирует обработку событий генерируемых компонентой ActiveX в 1С.

29.05.2017    14293    0    user621724_Dimav1979    12    

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

Математика и алгоритмы v8 Бесплатно (free)

Данная публикация предназначена для начинающих разработчиков и является продолжением статьи "Обработчики событий при записи объектов. Зачем и что за чем?" (ссылка далее). Содержит пример использования несколько обработчиков событий для решения одной задачи и объясняется почему выбраны именно они.

27.09.2012    193285    0    AlbinaAAA    65    

Как я доступ на kb.1c.ru получал

Решение задач на 1С:Специалист Математика и алгоритмы v8 Россия Бесплатно (free)

kb.1c - база знаний по технологическим вопросам крупных внедрений и не только. В этой базе знаний собираются методики и решения технологических проблем эксплуатации 1с, check-list'ы и инструкции по настройке ПО на серверах. Какие-то из размещенных статей дублируются на ИТС. Когда я искал пути получения доступа к нему я столкнулся с проблемой: мало кто доподлинно знает как получить доступ к нему, не работая у франчайзи 1с. Я опишу путь, который прошёл я, как физическое лицо.

01.05.2017    25217    0    ikekoval    34    

Улучшение стандарта "Структура модуля"

Математика и алгоритмы v8 1cv8.cf Россия Бесплатно (free)

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

26.03.2017    13885    0    o.nikolaev    23    

"Распределение в запросе" или "избавляемся от перебора"

Математика и алгоритмы Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

Хороший перебор - это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.

16.12.2016    32242    0    alexandersh    48    

Альтернативные способы работы с XML. Часть 2: Введение в xPath или запросы к XML Промо

Обмен через XML Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

В предыдущей статье "Введение в DOM или объектная модель документа" было описано понятие объектной модели документа (DOM), раскрыты плюсы и минусы использования модели при разборе файлов XML, приведено сравнение с построчным последовательным разбором. Были представлены варианты выборки данных с помощью объекта 1С ДокументDOM. Теперь настало время познакомить читателей с самым, на мой взгляд, интересным способом извлечения данных из XML - при помощи языка запросов xPath.

09.08.2012    41253    0    1cspecialist    13    

Планы обмена. Квитировать или гарантировать?

Практика программирования Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Планы обмена предлагают использовать две стратегии удаления обработанных изменений: квитирование и гарантированная доставка сообщений. Как сделать правильный выбор?

12.12.2016    16424    0    zhichkin    9    

Некоторые принципы оптимизации запросов 1С (+SQL)

Математика и алгоритмы v8 Бесплатно (free)

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

17.11.2016    10271    0    ture    40    

Использование git для доработки типовых конфигураций 1С

Математика и алгоритмы v8 Беларусь Украина Россия Бесплатно (free)

Рассмотрены способы доработок типовой конфигурации 1C для различных изменений, и на картинках продемонстрирован подход к разработке с использованием git и частично с тестами.

11.10.2016    202619    0    pumbaE    31    

От Hello world - к защите конфигураций за 1 минуту Промо

Защита и шифрование Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Вы всегда хотели но боялись создать COM объект? Тогда мы идем к вам! С обычным блокнотом, где будем программировать на c#, и таймером ...

19.05.2012    33985    0    O-Planet    130    

Оптимизация запросов 1С:Предприятие – от теории к практике

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

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

07.10.2016    36568    0    bpc222    20    

Регистры сведений 1С. Как это устроено.

Математика и алгоритмы v8 Бесплатно (free)

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

05.08.2016    176441    0    Sergey.Noskov    156    

Переводим расширения на 8.3.8. Памятка.

Практика программирования Математика и алгоритмы v8 Россия Бесплатно (free)

Типовые конфигурации переходят на новую платформу 8.3.8 без режима совместимости. А значит нужно переделывать расширения под эти условия. В статье небольшая памятка о переводе расширения на 8.3.8

29.07.2016    45848    0    mrXoxot    12    

Новые функции СКД 8.2.14 Промо

Математика и алгоритмы v8::СКД 1cv8.cf Россия Бесплатно (free)

Демонстрация новых функций СКД 8.2.14

29.06.2011    212833    0    fishca    51    

Подобие Объектно-ориентированного программирования в 1С (ПООПс)

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Статья для тех кто знаком с ООП и опустил руки.

24.07.2016    12025    0    adam26    54    

Опыт практического применения методики BDD на 1С. Написание сценариев

Математика и алгоритмы Практика программирования Vanessa Automation v8 Бесплатно (free)

Эта статья открывает цикл публикаций, в которых я хочу поделиться опытом использования методики BDD при разработке на 1С. В этой статье речь пойдёт о написании сценариев.

03.07.2016    22517    0    oleynik.dv    131    

Заметки про запросы. Последовательность.

Математика и алгоритмы Практика программирования v8 Бесплатно (free)

Рассуждения, основанные на контрпримерах. Определяем последовательность операций с помощью одной только консоли запросов. Версия 2.

27.05.2016    33731    0    vasilev2015    31    

Оптимизация планирования доставки грузов. Алгоритм кластеризации k-means (метод K-средних).

Математика и алгоритмы v8 УТ10 УПП1 Бесплатно (free)

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

10 стартмани

09.02.2016    29895    0    mi1man    4