Упражнения на Перфоленте. Парсим технологический журнал 1С

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

Администрирование - Администрирование данных 1С - Сервисные утилиты

программа язык программирования Перфолента Сергей Рогаткин технологичесий журнал

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

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

Подтолкнула меня к экспериментам статья Go. Разбор лога технологического журнала. Достойная альтернатива perl'у

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

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

Итак, поехали… Для начала, мне очень понравилась картинка в указанной статье, демонстрирующая многопоточную обработку файлов ТЖ (здесь и далее ТЖ равно «технологический журнал») и я решил, что и на Перфоленте попробую сделать похожую структуру программы. Затем, сделал вывод, что мне не хочется изобретать и использовать массу параметров командной строки. Проще сделать копию программы для другого отбора и обработки строк, ведь исходный код всегда под рукой. Постепенно накопятся все необходимые мне варианты.

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

 

//***************************
#ИспользоватьСтандартнуюБиблиотеку
Программа ПарсерТЖ
    //---------------------------
    Процедура Старт

    КонецПроцедуры
КонецПрограммы    

 

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

 

   //выбираем все лог файлы из текущей папки
   //загрузим все ядра процессора
   Рез=ПараллельныеДействия.ДляКаждого<Файл>(
                   ФС.ВыбратьФайлы(ЭтаПрограмма.Каталог,"*.log"),
                   ПолучитьДелегат(,ОбработатьФайл,"ДействиеПроц<Файл>"))

 

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

Синтаксис оператора ПолучитьДелегат такой:

ПолучитьДелегат( Объект , ИмяМетода, "ТипДелегата")

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

 

Напишем эту процедуру чуть ниже процедуры Старт:

 

    //---------------------------
    Процедура ОбработатьФайл(Ф тип Файл
    
        Ив = Новый ИнтервалВремени
        
        Чт = Новый ЧтениеТекста(Ф)

        Пт = Новый ПостроительТекста

        Кво=0
        Цикл 
            Стр=Чт.ПрочитатьСтроку
            ПрерватьЕсли Стр Это Неопределено
            
            //началом строки события считаем шаблон ^\d\d:\d\d\.\d+
            //однако проверка только разделителей вполне надёжна и достаточна
            Если Сред(Стр,3,1)=":" И Сред(Стр,6,1)="." 
               Если Пт.Количество <> 0
                   Кво++
                   ОтборСтрок(Пт.ВСтроку)
               КонецЕсли    
               Пт.Очистить
            КонецЕсли
            Пт.Добавить(Стр)
        КонецЦикла
        Если Пт.Количество <> 0
            Кво++
            ОтборСтрок(Пт.ВСтроку)
        КонецЕсли    
        
        Чт.Закрыть
        
        ВыводСтроки "Обработали файл: "+Ф+"  Количество строк = "+Кво+"  Время, сек: "+Ив.ВсегоСекунд
        
    КонецПроцедуры    

 

Готово… Теперь наши файлы обрабатываются и для каждой строки вызывают процедуру ОтборСтрок(ТекущаяСтрока). Объект ПостроительТекста используем для ускорения конкатенации строк. Объект ИнтервалВремени используем для измерения времени обработки файла. Строки приходится склеивать потому, что в файле ТЖ могут быть многострочные фрагменты в определении одного события. Формально, в ТЖ события заканчиваются символами ВКПС, а многострочные строки разделяются символом ПС, но, к сожалению, для объекта ЧтениеТекста это одно и то же.

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

Процедура получилась простая:

 

    //---------------------------
    //В этой процедуре отберем только интересующий нас вид строк
    Процедура ОтборСтрок(Стр тип Строка
        Если Найти(Стр,ФильтрСобытия)=0
            Возврат
        КонецЕсли
        Если ИспользоватьФильтрДанных И Найти(Стр,ФильтрДанных)=0
            Возврат
        КонецЕсли
        ОчередьСтрок.Добавить(Стр)
    КонецПроцедуры   

 

Как видно, мы используем в виде накопителя отобранных строк некий объект ОчередьСтрок, а так же еще несколько имен: ФильтрСобытия, ФильтрДанных, ИспользоватьФильтрДанных. Это всё поля, которые мы определили в модуле Программа:

 

Программа ПрасерТЖ

    Поле ФильтрСобытия тип Строка = ",SDBL,"
    Поле ФильтрДанных тип Строка = "Context=" 
    Поле ИспользоватьФильтрДанных тип Булево = НЕ ФильтрДанных.Пустая

    Поле ОчередьСтрок тип Очередь<Строка> = Новый Очередь<Строка

 

В Перфоленте у объектов есть Поля, которые похожи на переменные модуля 1С, но все же это не переменные, переменные в Перфоленте «живут» только в методах.

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

 

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

 

       
       
//обработаем все найденные строки
       Рез=ПараллельныеДействия.ДляКаждого<Строка>(
                   
ОчередьСтрок,
                   
ПолучитьДелегат(,ОбработатьСтроку,"ДействиеПроц<Строка>"))

 

Ничего нового по сравнению с обработкой файлов в этом фрагменте кода нет, разве что тип Файл сменился типом Строка.

Напишем процедуру окончательной обработки строки лога:

 

    //---------------------------
    //Получим из строки интересующие нас данные
    Процедура ОбработатьСтроку(Стр тип Строка
        
//получим длительность события
        Длительность = Число(Стр.Сред("-",","))
        
        
//получим контекст
        //Контекст = Стр.Сред("Context='","'")
        
        
//а можно воспользоваться и регулярным выражением
        Контекст = ""
        
Рег = Новый РегулярноеВыражение("(?<=Context=').*?(?=')")
        
Если Рег.Совпадает(Стр)
            
Контекст=Рег.НайтиСовпадения(Стр)[0].Значение
        КонецЕсли
        
        
        
//нам все же понадобится блокировка, т.к. несколько потоков могут одновременно попытаться увеличить значение по одному и тому же контексту

        Блокировка ОчередьСтрок
            //сложим время одинаковых контекстов

            Было = Результат.Получить(Контекст)
           
Результат.Вставить(Контекст, Было+Длительность)

        КонецБлокировки

      
    
КонецПроцедуры  

 

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

Результат в этот раз мы собираем в коллекцию типа Соответствие<Строка,Число>. Выглядит немного необычно для программистов 1С, но не для программистов C#. В данном случае, мы просто указываем, что ключ соответствия будет иметь тип Строка, а значение будет иметь тип Число. Другие типы в этой коллекции сохранить нельзя. Можно ли использовать обычное Соответствие? Можно, но скорость его работы будет меньше и понадобятся блокировки, т.к. обычное Соответствие не является потокобезопасным.

 

    Поле Результат тип Соответствие<Строка,Число> = Новый Соответствие<Строка,Число

 

Осталось обработать результат. А давайте сохраним его в файл Эксель и откроем.

 

      
       
//обработаем результат, например, создадим табличку
       Док=Новый ТабличныйДокумент
       НомСтр=1; 
       
Для КлючЗнач Из Результат
           //берем только длительные события
           ПродолжитьЕсли КлючЗнач.Значение<400000 
           
Док.УстановитьЗначениеЯчейки(НомСтр  , 1,КлючЗнач.Значение
           
Док.УстановитьЗначениеЯчейки(НомСтр++, 2,КлючЗнач.Ключ
       
КонецЦикла

       //сохраним и откроем в Экселе
       Док.Записать(ЭтаПрограмма.Каталог+"ТабличныйДокумент.xlsx") 
       
ЗапуститьПриложение(ЭтаПрограмма.Каталог+"ТабличныйДокумент.xlsx")  

 

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

 

А что со скоростью?

Вполне сопоставимо со скоростью программы на Go, у меня даже быстрее получилось, но не факт, что на любом компьютере будет так же. Тестовый файл размером 5,7 ГБ, около 10 млн. строк, пережевался за 5 минут.

 

А что с потреблением памяти и допустимым размером файлов лога?

Во время обработки файла размером 5,7 ГБ максимальное потребление памяти программой составило 1,2 ГБ. Файлы больше указанного размера я не проверял, но скорее всего проблем не будет.

 

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

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

Наименование Файл Версия Размер
Исходный текст программы парсинга ТЖ на языке Перфолента

.pfl 6,06Kb
31.07.19
0
.pfl 1.0.0 6,06Kb Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Evil Beaver 6783 31.07.19 17:56 Сейчас в теме
У вас Если без Тогда? т.е. переносить операции на другую строку уже нельзя?

Если А = 1 и 
    БольшоеСложноеДействие() // это все еще выражение условия?
    В = 3; // а это тело условия?
КонецЕсли;


И что такое "ПродолжитьЕсли"? Такое есть в VB.NET? Я в C# не встречал
2. Perfolenta 188 31.07.19 18:03 Сейчас в теме
(1) можете смело писать Тогда, оно просто не обязательное... можете переносить так как написали в своем комментарии, хотя я больше люблю, что бы И было не в конце строки, а в начале следующей...
да, ПродолжитьЕсли это оригинальный оператор Перфоленты...
еще есть:
ПрерватьЕсли Условие
ВозвратЕсли Условие
можно и с пробелом:
Прервать Если Условие
Возврат Если Условие
3. Evil Beaver 6783 31.07.19 18:06 Сейчас в теме
Кажется перфоленте не хватает описания формальной грамматики языка где-нибудь в открытом доступе. А то читаешь и удивляешься чего только не надо будет узнать...

P.S. я пожалуй пока останусь при своем мнении, что это совсем другой язык, даже не "похожий на 1С", и учить его не полезнее, чем сразу учить C#. Я могу ошибаться.
GreenDragon; kuntashov; +2 Ответить
4. Perfolenta 188 31.07.19 18:07 Сейчас в теме
(3) это верно, я файл документации только на четверть написал... надеюсь, как и обещал к новому году выкатить...
5. Perfolenta 188 31.07.19 18:08 Сейчас в теме
(3) для начала можно просто по 1с-ному писать... постепенно узнавая что-то новое... я не думаю, что у вас лично возникла проблема с пониманием хотя бы одной строки кода...
а для чистых 1С-ников да, есть новинки, но не так много, что бы нельзя было понять их смысл... а как иначе привнести в язык современные новинки?
Как прикажете записать кортежи не меняя синтаксис 1с? пришлось менять... старался осторожно подходить, что бы не слишком страшно выглядело...
6. Evil Beaver 6783 31.07.19 18:18 Сейчас в теме
(5) Нуу... я в уме переводил на шарп или на VB. Но это как раз говорит о том, что когнитивная нагрузка языка довольно большая. А чисто по 1С-ному разве можно? У вас же строгая типизация, переменные объявлять надо.
7. Perfolenta 188 31.07.19 18:21 Сейчас в теме
(6) объявлять типы обязательно только для полей, свойств и в сигнатурах методов... переменные можно все неявно инициализировать, как и делают в 1с чаще всего... я сначала начинал делать то, что получилось у вас, но потом понял, что ни как не впишусь в рамки 1С и начал "реформу" языка, старая сохранить наследственность от 1С, но не более того...
8. Evil Beaver 6783 31.07.19 18:36 Сейчас в теме
(7) ну потому что MSIL и CLR рассчитывают на строгую типизацию, поэтому я на ранних этапах забросил идею компиляции в MSIL или использования LLVM
9. Perfolenta 188 31.07.19 18:40 Сейчас в теме
(8) вам повезло :) я не ожидал того объема работ, который пришлось и еще предстоит сделать... там еще и подводных камней оказалось предостаточно... документация Microsoft та еще штучка... особенно обидно, когда что-то делаешь, а потом натыкаешься где-то на сноску мелким шрифтом и понимаешь, что делал все не правильно...
25. Darklight 22 02.08.19 11:14 Сейчас в теме
(8)Зря забросили идею компиляции в LLVM
Есть языки с динамической типизацией, имеющие компилятор в LLVM (ну если я не ошибаюсь - я тут пока профан, но тема мне очень интересна), например JavaScript, Python, Ruby

Вот тутесть небольшая статья "Динамическая компиляция программ на языке JavaScript в статически типизированное внутреннее представление LLVM"

Хотя я лично за языки со статической типизацией (и верю что будущее развития языка платформы 1С Предприятие именно в статике) - но и динамические тоже нужны - особенно для скриптов и макросов, но если они ещё и компилятор в LLVM получат - так вообще очень круто выходит - за LLVM будущее!
16. Perfolenta 188 02.08.19 00:51 Сейчас в теме
(6)
А чисто по 1С-ному разве можно? У вас же строгая типизация, переменные объявлять надо


Сегодня, ради проверки ответа на ваш вопрос, я взял библиотеку для OneScript под названием TRun1C, думаю знаете такую... в ней 1921 строка кода... прилично...
У меня ушло примерно 20 минут, что бы превратить ее в DLL библиотеку!
Ушло бы и меньше, но я же не автор библиотеки, так что на беглое изучение кода потратился...
Я только обернул ее в класс, прописал типы в сигнатуры методов и еще несколько мелочей, вроде замены слова Экспорт на атрибут &ВидноВсем... и все, библиотека нормально откомпилировалась и заработала...
т.е. в самих методах мне почти ничего не пришлось менять... все по односкриптному осталось...
Вывод... для начала вполне можно писать по одинэсному, изучив минимальные требования к оформлению программы... и прочитав немного о переменных и типах, например тут http://promcod.com.ua/subcat.asp?cat=perfolenta-programmig-language&subcat=perfolenta-syntax
22. Darklight 22 02.08.19 11:00 Сейчас в теме
(5)Простите, а где у Вас здесь продемонстрирован кортеж?
23. Perfolenta 188 02.08.19 11:05 Сейчас в теме
(22) это к слову пришлось... пример с кортежами есть в дистрибутиве...
выглядят кортежи примерно так:

к3 = $(400,"Hello_5")


или вот функция возвращающая кортеж:

Функция ПолучитьКортежValueTuple() тип $<Целое,Строка> //работает
        
        Возврат $(200,"Hello_2") //работает
        
        //и более длинные варианты того же самого:
        
        Возврат $<Целое,Строка>(200,"Hello_2") //работает
        Возврат Новый $<Целое,Строка>(200,"Hello_2") //работает
        Возврат Новый ValueTuple<Целое,Строка>(200,"Hello_2") //работает
        Возврат ValueTuple.Create<Целое,Строка>(200,"Hello_2") //работает
        
КонецФункции
Показать
27. Darklight 22 02.08.19 11:18 Сейчас в теме
(23)Здорово! А именнованные поля кортежей поддерживаются? А деконструкция? А Свитчи?
29. Perfolenta 188 02.08.19 11:29 Сейчас в теме
(27) ну вы прям всё сразу от меня хотите :)
именованые поля пока не поддерживаются, я их отложил в долгий ящик... т.к. не считаю их слишком уж полезными...
деконструкция уже есть, но пока только в переменные и в массив... в цикле Для уже есть, но в опубликованном дистибутиве этого еще нет...
со свитчами сложнее, сделать их совсем просто, но я ни как не могу придумать хороший русскоязычный вариант... мучаюсь с этим...
с одной стороны хочется такой же мощный Select как на VB, но с другой стороны простинький как в С# мне тоже нравится... короче как остановлюсь на чем-то так и появится...
33. Darklight 22 02.08.19 11:36 Сейчас в теме
(29)Именованные поля очень полезны - я при работе с кортежами предпочитаю как раз с ними работать!
40. Perfolenta 188 02.08.19 12:51 Сейчас в теме
(33) может быть... хотя я обычно именование полей в кортежах не использую... у меня в программах кортежи это временные транзитные структуры.. а если надо долгоживущую, то я обычную структуру делаю..
я обязательно именованные поля сделаю, но значительно позже... сейчас еще большой список задач, которые я считаю более важными...
59. Perfolenta 188 08.08.19 15:28 Сейчас в теме
(27) сделал "свитчи" :)
выглядит так

Выбор [Для] <expr> :
( Когда <expr> [ПРИ <expr>] [, <expr> [ПРИ <expr>]] [ Тогда ] : <stmt>+ : )+
[ Иначе : <stmt>+ : ]
КонецВыбора

работает...

      Для Инд=1 По 8
       
           Выбор Для Инд
           Когда 1,3,5 Тогда
               ВыводСтроки "Не четные"
           Когда 2,4,6 //ключевое слово Тогда не обязательное
               ВыводСтроки "Четные"
           Когда 35
             Тогда
               ВыводСтроки "Таких не бывает"
           Иначе
               ВыводСтроки "Больше 6"
           КонецВыбора        
       
       КонецЦикла
    
       Для Инд=1 По 8
       
           //каждый блок в одну строку
           Выбор Инд //ключевое слово Для не обязательное
           Когда 1,3,5 Тогда ВыводСтроки "Не четные"
           Когда 2,4,6;      ВыводСтроки "Четные" 
           Когда 35;         ВыводСтроки "Таких не бывает"
           Иначе             ВыводСтроки "Больше 6"
           КонецВыбора        
       
       КонецЦикла
       
       Для Каждого Об тип Объект Из {5, 10, 15, "Привет", "А"с, "Ф"с, Истина, '20191231'}
       //а можно просто 
       //Для Об Из {5, 10, 15, "Привет", "А"с, "Ф"с, Истина, '20191231'}
       
           //с дополнительным условием ПРИ      
           Выбор ТипЗнч(Об)
           Когда Тип("Целое") При Об>10,
                 Тип("Целое") При Об=10
                ВыводСтроки "Целое >= 10"
           Когда Тип("Целое") При Об<10 Тогда
                ВыводСтроки "Целое < 10"
           Когда Тип("Символ") При Об<"Я"с и Об>"О"с Тогда
                ВыводСтроки "Символ"
           Когда Тип("Дата")
                ВыводСтроки "Дата"
                Прервать //это прерывание цикла, а не выход из блока, как в C#!!!!
           Иначе       
                ВыводСтроки "Другое значение: "+Об+" ТипЗнч="+ТипЗнчСтр(Об)
           КонецВыбора        
   
       КонецЦикла

Показать
61. Darklight 22 19.08.19 10:07 Сейчас в теме
(59)Это хорошо!
А свитчи-выражения?


Когда 2,4,6; ВыводСтроки "Четные"

Такая запись (с точкой запятой посреди оператра) выглядит очень непривычно и как-то не логично (даже не знаю - есть ли где-то ещё, в других языках такие конструкции - где точка с запятой может разделять секции одного оператора, хотя - конечно же такое есть - это цикл for например в c ++ (и некоторых других, схожих с ним языках) "for (int i = 1 ; i < 100; i++)" - но тут внутри скобок список из трёх отдельных выражений, а не одно семантическое выражение, разделённое на части через ";" - но мне никогда такая запись не нравилась - в Kotlin или Python это реализовано более изящно, но это лирика - речь не про циклы, а про применение ";" внутри одного оператора - ну очень коряво это, на мой взгляд.

А по поводу свитчей - всё же посмотрите лучше в сторону Kotlin и его оператора "when"
62. Perfolenta 188 19.08.19 19:03 Сейчас в теме
(61)
Такая запись (с точкой запятой посреди оператра) выглядит очень непривычно и как-то не логично

ну почему же не привычно... на языке 1с в одну строку именно через точку с запятой и пишут... точка с запятой может использоваться везде где нужен разделитель... кстати, в данной конструкции ее можно было даже и не ставить, я просто тестировал разные варианты написания.... компилятор Перфоленты в большинстве случаев прекрасно переваривает отсутствие ;
А свитчи-выражения?

не понял что вы имеете ввиду? в моем предыдущем комментарии, в самом начале, там где формальное описание, <expr> означает выражение...
А по поводу свитчей - всё же посмотрите лучше в сторону Kotlin и его оператора "when"

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

кстати... в Перфоленте функциональную форму котлиновского оператора when частично заменяет оператор ?(условие1, результат1, условие2, результат2 ..., условиеN, результатN, результатИначе)
63. Darklight 22 20.08.19 10:43 Сейчас в теме
(62)
ну почему же не привычно... на языке 1с в одну строку именно через точку с запятой и пишут...

Речь идёт не о разделение разных операторов друг от друга, а о составных операторах, состоящих их нескольких вложенных секций выражений. Покажите мне в 1С такой оператор, где секции составного оператора разделены ";" ? Хотя я сам уже знаю ответ ("если а = 1 тогда б=1; иначе б=2 конецесли" - в 1С это допустимая синтаксическая конструкция в составном операторе условия - но тут "иначе" - это одновременно и операторная скобка (двусторонняя) новый оператор. Лично мне допустимость ";" перед "иначе" не нравится. Мне больше по душе Сишный вариант (или Паскалевский...) - когда перед оператором точка с запятой не ставится.

Точка с запятой - в абсолютном большинстве случаев - воcпринимается как разделение разных операторов друг от друга, когда, условно, любой из них может отсутствовать и никак синтаксически не связан с соседями (исключение - оператор "for" - в Си подобных языках - но там особый случай и особая семантика применения).

Говоря о Kotlin я намекал о лаконичности, простоте и унифицированности синтаксической конструкции "when", которая семантически тяготеет к функциональным языкам и оператору "match" - минимум ключевых слов, максимум наглядности и унифицированности (в данном случае с лямда выраженияями): оператор "when" всей своей семантической конструкцией представляет просто список сопоставления с образцом в формате лямбда-выражения, которые и так ассоциированы с некоторым функциональным сопоставлением, а вернее отображением левой части в правую (обычно)


fun describe(obj: Any): String
{
when (obj) {
1 -> return "Единица"
in 1..10 -> return "издеваетесь?"
in 10..100 -> return "маловато будет"
in 100..1000 -> return "кота прокормлю"
in 1000..1000000 -> return "на хлеб с икрой!"
is Cat -> return "Кот!"
"Hello Kitty" -> return "Приветствуем котика"
is Long -> return "Long"
!is String -> return "Не строка"
'а', 'е', 'ё', 'и', 'о', 'у', 'я', 'э', 'ы', 'ю' ->return "$obj гласная"
else -> return "Unknown (Неведома зверушка)"
}
}
Показать


Или в виде выражения (но это уже другое предложение):

fun describe(obj: Any): String =
when (obj) {
1 -> "Единица"
in 1..10 -> "издеваетесь?"
in 10..100 -> "маловато будет"
in 100..1000 -> "кота прокормлю"
in 1000..1000000 -> "на хлеб с икрой!"
is Cat -> "Кот!"
"Hello Kitty" -> "Приветствуем котика"
is Long -> "Long"
!is String -> "Не строка"
'а', 'е', 'ё', 'и', 'о', 'у', 'я', 'э', 'ы', 'ю' ->"$obj гласная"
else -> "Unknown (Неведома зверушка)"
}

[/IS-QUOTE]

Единственное, что Kotlin так и не поддерживает пока несколько условий в одной строке сопоствления, напримерh C# может так (switch case when):


object a = get_a();
switch (a)
{
case int a when a == 0: Console.WriteLine("а - это целое число = 0");
break;
case double a when a > 0: Console.WriteLine("а - это дробное число > 0");
break;
case string a when a.length > 0: Console.WriteLine("а - это строка, длинной больше нуля");
break;
case object a when a != null: Console.WriteLine("а - это существующий объект");
break;
default: Console.WriteLine("а - не известно");
}

Показать


Правда в таком синтаксисе лишние case и break излишни напрягают!
Кстати, ";" тут тоже есть - но они не отделют две части составного подвыражения case друг от друга - а отделяют отдельные строки сопоставления с образцом.

Кстати, с недавних пор C# тоже поддерживает switch-выражения


var operation = 2;

var result = operation switch
{
1 => "Case 1",
2 => "Case 2",
3 => "Case 3",
4 => "Case 4",
_ when value > 10 => "case > 10",
_ when value <= -10 => "case <= -10",
_ => "No case availabe"
};
Показать


И заметьте - синтаксис преобразился и стал очень похож на Kotlin (тоже описывается лямбда-выражений)
Кстати, применение символа "_" для секции иначе/дефолт - я считаю более логичным (первый раз такое заметил в Scala - там вообще очень любят этот символ обрабатывать особым образом), странно почем так не сделали в Kotlin (правда там для этого применяют ключевое слово "it"). Даже применять "_" можно несколько раз - и доп. условия "when" поддерживаются.
И тут уже нет ";" внутри составного оператора - что для едино-вычисляемого выражения было бы вообще дико (наличие внутри ";").
Так что - можете смотреть на новый синтаксисиc switch'ей в C# 8.0 - он более продвинут даже чем в Kotlin - только если уж делать такой - то унифицированно для switch классических операторов и выражений
64. Perfolenta 188 20.08.19 11:30 Сейчас в теме
(63)
Хотя я сам уже знаю ответ ("если а = 1 тогда б=1; иначе б=2 конецесли"

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

и Котлин и Шарп наследники синтаксиса Си, поэтому не удивительно, когда они приходят к похожим решениям...
но Перфолента наследует синтаксис 1С, поэтому я не могу делать его Си-подобным и не хочу...
я просто пытаюсь здравые идеи других языков красиво выразить в синтаксисе Перфоленты...
например, благодаря вам, я решил, что надо добавить оператор В (in), я и раньше о нем думал, но теперь пришел к мнению, что он точно будет...
еще, задумался над необходимостью диапазонов 1..10, может тоже сделаю, но еще не решил... надо определиться какие операции будут доступны с диапазонами и что они из себя внутренне будут представлять...
Спасибо за ваши советы, они заставляют думать о том, о чем не думал до этого... вы уже повлияли на развитие Перфоленты :)
65. Darklight 22 20.08.19 12:20 Сейчас в теме
(64)

и Котлин и Шарп наследники синтаксиса Си, поэтому не удивительно, когда они приходят к похожим решениям...
но Перфолента наследует синтаксис 1С


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

Просто Вы определитесь - либо Вы стараетесь делать свой язык максимально близким к семантики языка 1С, которая растёт из фортрана, паскаля и бейсика (VB - Это уже совсем другой язык, менее похожий на 1С чем классический бейсик) - с минимальными ответвлениями, выходящими за общий стиль (но тогда у вас уже есть много противоречащих отступлений); либо разрабатываете абсолютно новый язык - лишь напоминающий 1С (в основном лишь базовой семантикой и русскими ключевыми словами), практически без обратной совместимости.

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

Вот, например C# и VB сейчас развиваются именно так. Их тяготит груз прошлого - ориентированности на своих "прародителей" в виде C++ и VB6 более ранних версий. Не могу сказать, что мне это нравится - но у них нет выхода - создатели языков хотя их развивать и шагать в ногу со временем, но языки уже не новые - и у них есть много груза "из прошлого" который они тянут ради совместимости и приемственности, которые были в них внедряны на этапе их первоначального проектирования чтобы привлечь программистов, знакомых с языками-прорадителями!

Вот Python - сделал ход - отказался от совместимости с устревшим синтаксисос при переходе на 3-тю редакцию - это болезненное решение, но думаю со временем там всё устаканится.

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

А Вы изначально хотите в новом языке тянуть груз прошлого - как это было с вышеназванными языками. Но Вы тут единоличный автор - царь и бог - и только Вам сейчас решать какие перспективы будут у Вашего языка лет так через 10.

Да, и ещё, не всегда, когда семантика языка логически может допускать отсутствие того или иного ключевого символа/слова - его стоит полностью исключать / делать не обязательным. Тем более когда язык только находится на этапе разработки (лучше опустить его позже - когда будет ясно, что без него действительно выходит более красивый и понятный код, который будет проще набирать). А во многих таких случая - лучше делать автоподстановку в IDE пропущенных слов, однозначно подразумеваемых в семантической конструкции - так часто делает например Visual Studio).
Ну и с ";" будьте поаккуратнее - если синтаксис подразумевает опущение данного символа, то это не значит что его следует позволять ставить там, где его обычно совсем не ожидаешь (исходя из общей практики программирования).

Ну и ещё :-) Я бы всё-таки больше смотрел сейчас в строну того, как в императивные языки проникают веяния из функциональных языков (активно развиваемые ещё со времён Scala - где это одна из основных фишек всей семантики языка, а не отдельных вкраплений синтаксиса) - тут и тотальное применение лямбда-подобного синтаксиса, и упрощённое определение функций высшего порядка + продвинутая функциональная логика их комбинаций, и упрощённый матчинг (сопоставление с образцом), и ориентированность того, что практически каждый оператор - может быть выражением и т.п. Это мировая тенденция - скрещивать императивный и функциональный стили программирования - это она рождает очень красивые и мощные гибриды - и на это стоит сразу ориентироваться при проектировании нового языка!

Ну и про нулабельнымие классы - тоже не стоит забывать - лучше сразу заложить (как в Kotlin), что все переменные классов в простом синтаксисе не могут быть нулабельными (неопределябельными/пустоватыми) - что если переменная/поле допускает значение "неопределено" то это явно должно быть обозначено при её определении. Это уже общепризнаный правильный подход - но пока малораспространнёный именно из-за груза совместимости с прошлым. Не повторяйте эту ошибку. Ну и вводите сразу операторы - безопасного обращения к нулабельным объектам и быстрой проверки на нулабельность (в C# и в Kotlin тут всё крассиво придумано).


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

Ну и :-))))) откажитесь от полей - делайте только свойства - как это реализовано в Kotlin
66. Perfolenta 188 20.08.19 16:27 Сейчас в теме
(65) на данный момент у меня два основных требования:
1) Перфолента это расширение языка 1с, т.е. код написанный по правилам языка 1С должен работать с минимальными переделками...
2) Все, что есть в Net должно вызываться...

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

От полей я не откажусь, т.к. они есть в Net и особых проблем не вызывают... а вот защиту от неопределенности обязательно буду развивать...
В неявном объявлении переменных я тоже проблемы не вижу... они ведь получают при этом тип и дальше операции с ними проверяются на типобезопасность... это не то же самое, что переменные неопределенного типа...
67. Darklight 22 20.08.19 17:12 Сейчас в теме
(66)
код написанный по правилам языка 1С должен работать с минимальными переделками...

Учитывая, что 1С это язык с динамической типизацией, а Перфолента - статически типизированный язык - поддерживать это правило практически не возможно! Совместимость будет - но лишь отчасти!

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

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

По поводу Полей лишь опять отошлю к синтаксису Kotlin - в Java тоже есть Поля - но Kotlin (который полностью совместим с Java) обходится без них с целью упрощения своего синтаксиса, да и поля - нынче в ООП вообще уже не в моде - почти всегда в современных ООП языках в классах объявляют (и рекомендуют) Свойства с автогенерируемыми аксессорами. И Kotlin изящно избавился в своём синтаксисе от полей (хотя после компиляции они конечно же есть - но они скрыты - их генерирует компилятор). Да и синтаксис C# для объявдения Свойств, например, не далеко отошёл от объявления полей - сейчас может не так изящно, как в Kotlin, зато тоже способствует тенденции к снижению объявления в классах именно Полей.
И, соответственно, поля из библиотек .NET конечно же должны быть доступны. Но Вот в классах, спроектированных на "Перфоленте" я бы оставил лишь Свойства. Kotlin это не мешает - это прекрасно Java-совместимый язык!

Неявное объявление переменной, не важно статическая она или нет, это всегда проблема вложенности. Если у меня, скажем, в классе - объявлено Поле/Свойство с именем "Организация" (типа, скажем "Строка") и я, скажем, в методе это класса неявно введу якобы локальную переменную "Организация" (присваивая её строку) - то явно присвою значение Полю/Свойству класса, а не локальной переменной, действующей внутри только метода. А теперь представьте обратную ситуацию - у меня была локальная переменна "Организация", объявленная неявно в методе класса - а потом в классе (а может в его предке) появилось Поле/Свойство "Организация", то при перекомпиляции - код в методе вместо локальной переменной, начнёт менять это Поле/Свойство - причём будет это совршенно неожиданно - ведь этот код даже не менялся!

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

Так что, неявное объявление переменных - плохая практика. Не говоря уже о том, что тут просто трудно при анализе текста понимать - где объявление новой переменной, а где присвоение значения уже объявленной ранее переменно/поля/свойства!

Поэтому в подавляющем большинстве языков нет неявного объявления переменных! Тем более в статически типизипрованных!

Но если уже так хочется оставить неявное объявление переменных - сделайте опцию компиляции (выключенную по умолчанию) и директиву компиляции модуля (метода) для случаев требования высокой обратной совместимости с кодом 1С

Хотя я не вижу в этом (в обратной совместимости) никакого смысла - уж очень далеки платформы 1С и .NET друг от друга! Да и сам язык 1С уже очень сильно морально устарел - зачем тащить весь этот хлам в светлое будущее - мне не понятно!

Хотите делать язык с полностью русским синтаксисом - делайте! Хотите клепать его по шаблонам современного VB - да пожалуйста - но оглядывайтесь на то, за что ругают актуальны языки , и создавайте то, что будет востребовано через и 20 и 30 лет. А не канет в лету как только 1С откажется от своего морально устаревшего языка в угоду современным тенденциям и ориентации за запад - где в ходу совсем другие подходы в семенатики программирования!

Хотите привлечь 1С-ник - да пожалуйста - сделайти им синтакический сахар и опции глубокой совместимости - так сказать - на переходный период!
Но я бы лушче смотрел в сторону привлечения программистов, кто уже программирует на платформах .NET и Java, JavaScript - эти компьюнити даже поотдельности пожирнее будут чем 1С-ское сообщество - и новых адепотов Перфоленты лучше переманивать здесь. А 1С-ники потом и сами набегут: одни просто позарившись на русский синтаксис, другие - в надежде как раз найти отдушину от надоевшего и устаревшего языка 1С, погрузившись в новые возможности и крассивые и мощные синтаксические конструкции!

ну а если к языку ещё и компиляторы в LLVM и в байткод 1С прикрутить (хотя бы ограничено) - то сфера применения языка расширится многократно - и тут как раз его могут предпочесть за красивые фишки, которых нет в других языках, даже в проектах, которые пишутся на других платформах!

Вы царь и бог - решать Вам!
AlX0id; Fox-trot; Perfolenta; +3 Ответить
68. Perfolenta 188 20.08.19 19:08 Сейчас в теме
(67)
Спорить с Вами не хочу

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

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

да, у меня есть директива компиляции #ТребоватьОбъявлениеПеременных, но по умолчанию она выключена... т.к. целевая группа (одинэсники) привычна к неявному объявлению... описанные вами проблемы бывают и у меня, но достаточно редко, что бы считать это слишком серьезной проблемой...
Еще есть директивы #ЗапретитьПозднееСвязывание и #ЗапретитьСужающиеАвтоКонвертацииТипов, но на данный момент их включить нельзя... это в целях отладки языка, т.к. автоконвертации типов и позднее связывание очень сложные штуки, я на них очень много времени убил... хочу, что бы при любых тестах ошибки всплывали... когда все отлажу, то позволю включать эти директивы...

Но я бы лучше смотрел в сторону привлечения программистов, кто уже программирует на платформах .NET и Java, JavaScript

а зачем это им? они уже серьезно потратились на изучение англоязычного программирования... и оправдывая это перед самим собой, начинают утверждать, что русский язык не пригоден для программирования... ни кто из гуру не хочет снова стать чайником...
тем более, что их языки более развиты и стабильны чем мой, который я в одиночестве еще даже не доделал...
моя цель это новички и те, кто сможет получить дополнительные плюшки от нового языка переиспользуя уже полученный опыт 1с... они тоже не слабо потратились на его изучение...
я вовсе не копирую VB, но и он тоже стал донором некоторых конструкций, как и C#, и Kotlin, и Python тоже стали, я стараюсь у всех самое лучшее взять, но с перестилистикой...
ну а если к языку ещё и компиляторы в LLVM и в байткод 1С прикрутить

это я просто не потяну... мне бы выполнить все планы по Net... а там еще работы и работы... а дальше много будет зависеть от того, найду ли я схему монетизации... если не найду и пойду в опенсорс, то развитие будет очень медленным...
69. Darklight 22 20.08.19 20:26 Сейчас в теме
(68)Про совместимость я написал выше - лучше определится - либо стараться максимально быть приближенным к классчиескому 1С, тащить к себе всю его ущербность, и ориентироваться только на его аудиторию. Либо создавать что-то более совершенное, и привлекать адептов сразу со всех сторон. Но, Вы. всё-таи выбрали вариант совместимости - что же это Ваше право. Просто я не на этой стороне, уж простите. Была бы возможность программировать для платформы 1С на языке, скажем C# или Java - я бы программировал на нём и забыл бы это бред синтаксиса 1С как страшный сон. Хотя лично я не долюбливаю ни тот ни другой язык. Даже в более, "любbмих" (вру) мною , Scala и Kotlin мне много чего не нравится, и я не считаю их идеальными и даже близко. Увы - идеального языка для меня не существует - и сейчас я вообще вынашиваю планы о разработке совершенно иного императивного языка - технически более более близкого например к Transact SQL (который, к слову, мне тоже не очень нравится семантически, мне более подуще семантика языка LINQ to SQL/Entity framework) чем, скажем, к Kotlin. Но это язык более высокго порядка абстрации, подразумевающий взаимодействие с кодом, написанном в более классическом стиле (с применением LLVM не важно на каком языке и в какой парадигме).

Говоря же о других (не 1С-ных) комьюнити, я в-первую очередь думал ещё не о закоренелых адептов "вражеских лагерей", а о тех, кто только делает первые шаги на поприще программирования. А сейчас yjdbxrb чаще всего изучают Java, JavaScript, C#, Python
Вот их, в первую очередь, и стоило бы "переманивать" (направлять в "своё" русло). Но "старым" "примитивным" языком с несовременной семантикой построения алгоритмов их не привлечь - их будут манить мощные и изящные фишки более активно развивающихся языков, ну и их востребованность (и как следствие - деньги и количество вакансий) будет их привлекать ещё больше!

Ну а сообщество 1С-адепотов - оно не долговечно - пройдёт ещё лет 30 и компания 1С уж наверняка анонсирует новую платформу - и поверьте, там не будет языка 1С в знакомом виде - это будет либо глубокая переработка (ещё больше, чем это было при переходе с 7.7 на 8.0), либо тотальная замена на другой язык (иначе он попросту останется "костяными счётами в мире суперкомпьютеров"). Таковы интересы компании - для которой сейчас западный рынок становится более привлекательным, чем русскоговорящий (тут они уже завоевали достаточно, и лишь будут стараться удерживать эти объёмы при дальнейшей эволюции). Возможно русский синтаксис сохранят, а может и нет.... не так уж много программистов кому он действительно нужен! А проблем с глобализацией разработок создаёт ого-го как много!

А по поводу монетизации - есди Вы выпустите бесплатный компилятор в .NET и платные в LLVM и в байткод 1С - то это могло бы быть оправдано. Ну компилятор в байткод 1С уж точно был бы востребован - т.к. многим программистам захотелось бы писать для платформы более продвинутый код - но так, чтобы он интегрировался с самой платформой, хотя бы на уровне простого взаимодействия: классический код, метаданные и библиотеки из конфигурации должен быть доступны в Перфоленте, а код перфоленты - должен быть доступен к вызову хотя бы на уровне процедур и функций общих модулей (хотя моудли объектов тоже можно было бы задействовать). Вот это была бы бомба! А если она ещё и на мобильной платформе работала....
70. Perfolenta 188 21.08.19 01:03 Сейчас в теме
(69)
и сейчас я вообще вынашиваю планы о разработке совершенно иного императивного языка

я желаю вам удачи, но могу сказать, что сам просто не представлял объем работы необходимый для создания современного языка... теперь представляю... а ваша задумка грандиознее моей, так что готовьтесь... :)
пройдёт ещё лет 30

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

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

у языка 1с фишек нет, а вакансии есть... это не прямая корреляция... реклама и маркетинг больше влияют на развитие и распространение языка, чем любые его фишки... вспомните классику "написано однажды - работает везде" и сколько бабла на раскрутку этого слогана было потрачено...
да и сколько раз за 30 лет я слышал о новых крутых парадигмах и языках, но если честно, то большинство кода в мире пишется на обычных циклах и условных операторах... мало чем отличающихся от старых... достаточно примеры в GitHabe посмотреть на том же Шарпе...
10. Steelvan 01.08.19 14:31 Сейчас в теме
(3) со вторым абзацем согласен

В прошлом году тоже "новый" язык оприлюдили.
РусскийФокс называли.

Что-то автор перестал его продвигать в массы после нескольких публикаций.
13. Perfolenta 188 01.08.19 15:27 Сейчас в теме
(10) я общаюсь с автором Русского Фокса, он изначально утверждал, что для себя его делает... и он продолжает его делать, выкладывает ролики в Ютубе...
на мой взгляд у него одна проблема, Майкрософт бросила Фокс, совсем...
А Net пока ни кто бросать не собирается, более того, планы его развития изложены на годы вперед... так что мне на этот счет легче, чем Андрею Ошнурову...

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

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

Пока это просто "смотрите что могу". Поделка.
До продукта нужна обертка в сайт с разделами:
*) Примеры применения;
*) Документация:
*) Ссылки на выполненные работы с выгодой по сравнению с 1С;
*) Форум техподдержки;

Может и прозвучит грубо, но мое мнение такое, что автор это сделал для самовыражения.
Если бы он хотел этим зарабатывать, то доделал и выкатил бы сразу полный комплект сопутствующей атрибутики (сайт, примеры, документация). И это было бы воспринято серьезно с самого начала.
Обнародование "как есть, разбирайтесь сами" признак того, что это побарахтается немного и повторит судьбу onescript (будет пущено на самотек с доработками сообщества и минимальным участием авторов как регуляторов).

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

Все вышенабранное является личным мнением автора и может отличаться от мнения редакции :)
14. Perfolenta 188 01.08.19 15:42 Сейчас в теме
(11) да, вы все верно написали... без какой-то схемы монетизации всё будет жить и двигаться плохо... на грани выживания...
но для того, что бы двинуться в бизнес нужен продукт, а его сначала сделать надо... вот и делаю...
изначально я тоже думал, что лучше выкатить уже готовый продукт... но после нескольких экспериментов над 1с-никами, которые согласились попробовать Перфоленту (до опубликования), я понял, что знакомить людей с новым языком можно заранее... это работает... люди попробовали и стали делать для себя маленькие, но полезные программки... конечно, с моей помощью, но начали и у них получается, всё работает...
язык и коммерческий продукт на его основе это все же разные вещи...
Что вы можете сделать из того, что не можете на 1С?
Много чего, например, скорость работы кода Перфоленты может в сотни раз превышать скорость работы 1С... можно сделать службу Windows, независимое от лицензий 1С приложение, собственно всё, что делают люди выбирая C# или VB вместо 1С...
17. vasvl123 99 02.08.19 06:57 Сейчас в теме
(11) На 1С чего не пытаешься сделать, только учетная система получается)
Perfolenta; +1 Ответить
19. Perfolenta 188 02.08.19 09:33 Сейчас в теме
12. Steelvan 01.08.19 15:17 Сейчас в теме
Деньги двигатель всего.

На этом можно зарабатывать ?
Если да, то отлично.
Если нет, то вы у своей семьи украли КолВоЧасов * 1000руб (+/-).
15. Perfolenta 188 01.08.19 15:46 Сейчас в теме
(12) я это хорошо понимаю, поэтому думаю о том, как продукт будет монетизироваться... но на данный момент продукт еще доделать надо... пока был только анонс, что не противоречит практике маркетинга...
а у семей, в капитализме, все самозанятые вынуждены время красть, к сожалению...
я не могу себе позволить уйти с работы в 17-00, как это делали мои родители в СССР, или уйти в отпуск на 30 дней, абсолютно не вспоминая о работе, как это делал мой отец...
43. for_sale 800 02.08.19 18:37 Сейчас в теме
(15)
Кем это они у вас так замечательно работали??

И при чём тут капитализм? Я сейчас при капитализме ушёл на вольный хлеб - не нарадуюсь. В том числе и потому, что не надо никуда ездить, и работать можно, когда хочешь.
44. Fox-trot 115 02.08.19 18:57 Сейчас в теме
(43)
И при чём тут капитализм?

при социализме самозанятых почти не было, кругом работали от звонка до звонка
такие дела
Perfolenta; +1 Ответить
45. Perfolenta 188 02.08.19 22:39 Сейчас в теме
(43) обычными рабочими на обычном заводе работали...
при капитализме отдельный человек не показатель уровня жизни... чем ближе вы к вершине пирамиды, тем толще ваш бутерброд... как известно, под чертой средней зарплаты на много больше людей, чем над ней...
я тоже почти всю жизнь работаю сам на себя и на свой уровень жизни не жалуюсь, но клиентов на месяц не бросишь... поэтому и в отпуск нормальный сходить не могу...
46. for_sale 800 03.08.19 09:22 Сейчас в теме
(45)
Ну так, получается, капитализм тут не при чём? Вы организовываете свою работу и свой уровень жизни. Вы также, как и при социализме, можете пойти на завод и вкалывать там до седьмого пота в грязи, шуме, гари, крике среди пьяных коллег, половина из которых - бывшие уголовники (нет, я не обобщаю, это флешбеки из моего собственного заводского опыта). Зато скорее всего в положенный день вы получите положенную сумму и сможете с радостью раз в году хоть на месяц съездить в Турцию, а может даже и в Крым. У меня родители тоже на заводе, половину жизни при социализме, половину при капитализме, поверьте, если вы действительно хотите социализм и работать на заводе, то сейчас на заводе ничего не изменилось))

Но ведь вы не захотели на завод? Вы воспользовались тем, что дал вам капитализм - выбором, и выбрали другой путь, в тепле, с кондиционером, с чашечкой горяченького и обалденным видом за окном (опять не обобщаю, а делюсь своим нынешним опытом) и возможностью ругать проклятый капитализм и со слезой счастья вспоминать родной социализм))
47. Perfolenta 188 03.08.19 13:11 Сейчас в теме
(46) такое впечатление, что вы про разницу между капитализмом и социализмом ничего не знаете...
я бы и работал на заводе, был бы инженером кораблестроителем, на которого учился... только от него остались рожки да ножки... огромная территория на которой можно сталкера снимать... как и от остальных заводов и фабрик в городе... мне просто пришлось стать самозанятым в 90-е, что бы с голоду не помереть...
капитализм ничего не дал, он забрал... может быть вы не помните центральные улицы города застеленные на километры покрывалами, на которых лежали пожитки граждан надеявшихся хоть что-то продать, а я прекрасно помню... в этом суть капитализма, ни кто ни кому не нужен...
Сейчас на заводе кое-что изменилось... наш завод, на полученную прибыль, построил целый микрорайон для своих рабочих, несколько пансионатов и пионерских лагерей на море для своих рабочих и их детей, он содержал несколько десятков технических и гуманитарных кружков и спортивных секций, где я мог заниматься бесплатно, выбирая то, что нравится... а сегодня, вся эта прибыль уходит хозяевам, которые имели ввиду и рабочих и их детей... именно поэтому народ у нас недавно собрал деньги и поставил памятник директору нашего завода, с говорящей фамилией Заботин... который, помимо всего остального, построил яхтклуб для нас, а не купил яхту себе, как делают нынешние...
Артано; +1 1 Ответить
48. for_sale 800 03.08.19 13:52 Сейчас в теме
(47)
Мда... Такое впечатление, что вы про разницу между капитализмом и развалившимся социализмом ничего не знаете. Это не капитализм - это разваленный, неспособный выжить социализм дал нам разруху и продаваемые пожитки. Я никак в толк не возьму - если он такой офигенный, этот социализм - почему же не то, что американцы какие-то, а даже вы в нём не живёте? Послушаешь - так всё офигенно было, да только развалился почему-то. А уже 100 лет гниющий капитализм шагает по планете.

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

Вы даже не понимаете, что вы сами можете быть директором завода и строить яхтклубы (или покупать яхты), что вы можете вообще не работать и жить припеваючи (или не припеваючи), что вы можете поехать в любую другую страну или в любой другой регион, можете строить заводы с нуля или придумывать языки программирования. Всё, что вам надо - это миска супа, работа с 9 до 18, нормированный отпуск раз в году и чтобы для вас кто-нибудь строил микрорайоны, яхтклубы и кружки, но только чтобы это был кто угодно, только не вы.
49. Perfolenta 188 03.08.19 15:54 Сейчас в теме
(48) гниющий капитализм никуда не шагает... он гниет, как и 100 лет назад...
он мог бы сделать нормальной жизнь людей в Африке, в латинской Америке, на ближнем востоке, много еще где, но он несет только смерть и разрушения ради собственной прибыли... они сами это прекрасно понимают... просто посмотрите их фильмы о будущем... оно мрачное...

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

съесть, то он съест, но кто ему даст... ваши слова напоминают речевки о походе в Европу на нашем украинском майдане... чашечка кофе с утра в парижском кафе по безвизу... ага... этот безвиз доступен очень не многим... а остальным только в виде "съездить в Париж и умереть"... вы прекрасно знаете, что 1% американцев владеет 82% богатства и не собирается ни с кем делиться...
Артано; +1 1 Ответить
55. Fox-trot 115 04.08.19 07:57 Сейчас в теме
(48)
Вы даже не понимаете, что вы сами можете быть директором завода и строить яхтклубы (или покупать яхты), что вы можете вообще не работать и жить припеваючи

вот он предел мечтаний
ржунимагу
Perfolenta; +1 1 Ответить
56. for_sale 800 04.08.19 09:39 Сейчас в теме
(55)
Неисключено) А вы, наверное, хотите осудить чей-то предел мечтаний?)) Показать "правильный" предел?))
18. vasvl123 99 02.08.19 07:01 Сейчас в теме
(12) А если в рабочее время, то обокрали работодателя
20. Perfolenta 188 02.08.19 09:36 Сейчас в теме
(18) я, к счастью, сам себе работодатель... хотя, если разобраться, то клиенты это тоже начальники и работодатели... только они не имеют возможности тебя уволить, но могут уволиться сами..
21. Perfolenta 188 02.08.19 10:51 Сейчас в теме
Только что проверил интересный момент: оказывается, C# и VB.Net не умеют делать цикл Для Каждого (foreach) по нескольким перечислителям, а Перфолента умеет!!!
Например, в стандартной библиотеке Перфоленты есть тип Матрица, который можно обойти в цикле Для Каждого двумя способами: по значениям и по элементам матрицы.
Для Значение тип ДВещ Из МояМатрица //цикл по IEnumerable<ДВещ>
   //
КонецЦикла 
Для Элемент тип ЭлементМатрицы Из МояМатрица  //цикл по IEnumerable<ЭлементМатрицы>
   //
КонецЦикла 

C# и VB.Net могут только первый перечислитель обойти по значениям, а второй не могут....
вот такой вот курьёз :) кое в чем Перфолента круче, хотя пока, конечно, в ней еще многого нет, что есть в этих двух языках... только работаю над многими вещами...
24. minimajack 63 02.08.19 11:07 Сейчас в теме
(21) чесно говоря ничего не понял...хотя пытался)
26. Perfolenta 188 02.08.19 11:15 Сейчас в теме
(24) значит цикл Для Каждого вам не понятен... все просто, когда вы пишете Для Каждого система определяет по какому типу можно пройтись в указанной коллекции...
например, когда вы идете по объекту СписокЗначений, то вы на каждом шаге получаете тип ЭлементСпискаЗначений...
но в Перфоленте коллекция может давать возможность обходить ее по разным типам содержимого... представьте, что СписокЗначений можно было бы обойти сразу по значениям или по представлениям, а не только по элементам....
28. Darklight 22 02.08.19 11:22 Сейчас в теме
(26)Дайте, пожалуйста, более наглядный пример - заинтриговали
32. Perfolenta 188 02.08.19 11:34 Сейчас в теме
(28) вот на C#
using System;
using Промкод.Перфолента;

namespace Энумерабле2
{
    class Program
    {
        static void Main(string[] args)
        {
            Матрица matr=new Матрица(3,3);
            foreach (Double element in matr)
            {
                Console.WriteLine($"Element: {element}");
            }
            foreach (ЭлементМатрицы element2 in matr) //ОШИБКА!!!
            {
                Console.WriteLine($"Element: {element2}");
            }

            Console.ReadLine();

        }
    }
}
Показать

то же самое на Перфоленте работает...
35. Darklight 22 02.08.19 11:39 Сейчас в теме
(32)Что-то пример какой-то не удачный. Всё равно мне не понятно
36. Perfolenta 188 02.08.19 11:58 Сейчас в теме
(35) что именно не понятно? есть коллекция, например, СписокЗначений как в 1С, его можно обойти в цикле Для Каждого получая на каждой итерации объект типа ЭлементСпискаЗначений из которого можно получить Значение....
а было бы хорошо, если бы можно было сразу по значениям пройтись...
вот в данном примере это и продемонстрировано...
сначала проходим по значениям матрицы, которые имеют тип Double, а потом по элементам матрицы, которые имеют тип ЭлементМатрицы и содержат информацию о строке и колонке значения...
в Перфоленте я так могу, а в C# и VB нет...
37. minimajack 63 02.08.19 12:06 Сейчас в теме
(36) это никому не надо, если надо - есть методы коллекций values(), keys() и т.п.
38. Perfolenta 188 02.08.19 12:09 Сейчас в теме
(37) надо или не надо это спорный вопрос... а вот собственные спецификации они криво реализовали это факт... у меня же работает, а я по ихним же спецификациям делал...
41. minimajack 63 02.08.19 12:56 Сейчас в теме
(38)
В СписокЗначений лежат ЭлементСпискаЗначений в котором значение типа ЭлементСпискаЗначений...
Как выбрать Значение?
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить(1,"1");
СписокЗначений.Добавить(2,"2");

СписокЗначений2 = Новый СписокЗначений;

Для каждого ключЗнач Из СписокЗначений Цикл
	СписокЗначений2.Добавить(ключЗнач, ключЗнач.Представление);
КонецЦикла;

Для каждого ключЗнач Из СписокЗначений2 Цикл
	Сообщить(Строка(ТипЗнч(ключЗнач)) + " " + ТипЗнч(ключЗнач.Значение));
КонецЦикла;
Показать

Элемент списка значений Элемент списка значений
Элемент списка значений Элемент списка значений
42. Perfolenta 188 02.08.19 13:00 Сейчас в теме
(41) вы про 1С или про Перфоленту спрашиваете?
ответ в обоих случаях - никак...
я пока двойной перечислитель только в объекте Матрица сделал... а СписокЗначений и другие 1с-ные коллекции почти такие же как в 1С... но думаю, что сделаю и в них тоже такую возможность... а может и не буду...
30. Darklight 22 02.08.19 11:29 Сейчас в теме
У вас вот этот код
 Рег = Новый РегулярноеВыражение("(?<=Context=').*?(?=')")

Выполняется внутри процедуры "ОтборСтрок" которая вызывается циклически - это не очень хорошее решение - т.к. регулярне выражение каждый раз компилируется заново а это (в зависимости от выражения) может быть достаточно затратной операцией. Да ещё и объекты постоянно создаются заново - засоряя память и ускоряя процесс сборки мусора.
Я не знаю насколько потокобезопасен класс "РегулярноеВыражение" но лучше его вынести за рамки потока - либо сделать глобальную коллекцию предкомпилированных паттернов (используемую всеми потоками) - либо сделать для каждого параллельного алгоритима отдельный экземпляр(ы) (что сложнее в силу применения параллельного цикла, где очень сложно управлять асинхронностью).
В общем - тут неплохо бы показать оба подхода для людей, которым асинхронное программирование пока чуждо!
31. Perfolenta 188 02.08.19 11:32 Сейчас в теме
(30) вы прямо читаете мои мысли... я сначала вообще без регулярных выражений написал, а потом решил, что надо добавить пример с регулярным выражением... думал его вынести из процедуры, но потом решил, что так будет не наглядно... в производительности просадка копеечная, я проверял...
34. Darklight 22 02.08.19 11:38 Сейчас в теме
(31)Тут больше дело в показательноси хотя да, это палка о двух концах либо показывать как проще, либо показывать как нужно!
39. Perfolenta 188 02.08.19 12:31 Сейчас в теме
(34) наглядность и "синтаксический сахар" почти всегда побеждает соображения производительности, пока критически в них не упрется...
Оставьте свое сообщение

См. также

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

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

25.03.2019    32991    tormozit    44    

Telegram bot API - разбор документации с примерами

WEB v8 Абонемент ($m)

Перевод документации на язык 1С.

1 стартмани

06.04.2020    29894    leongl    43    

Методика обновления формы объекта данных при изменении объекта

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

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

1 стартмани

09.03.2020    6817    tormozit    13    

Конвертация данных 2. Использование исходящих и входящих данных. Свойство "Получить из входящих данных"

Обмен данными 1С Перенос данных из 1C8 в 1C8 v8 КД Абонемент ($m)

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

17.02.2020    12295    Drivingblind    31    

План подготовки к аттестации на 1С: Специалиста по платформе (+ Ссылки на материалы) Промо

Решение задач на 1С:Специалист v8 Россия Абонемент ($m)

Хочу поделиться собственным планом подготовки к аттестации на 1С: Специалист по платформе 8.3 со ссылками на материалы (и указанием стоимости).

1 стартмани

23.12.2017    21563    tmn72.1C    38    

Как в 1С создать паутинку "как на Инфостарте"

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

Добрый день, уважаемы коллеги! В этой статье я расскажу, как в 1С создать отчет - "паутинку" на примере отчета по компетенциям сотрудника (разрабатывала на платформе 1С:Предприятие 8.3 (8.3.13.1865).

1 стартмани

15.01.2020    8887    user660153_aleks.pisanets    17    

Краткое руководство по внесению изменений в конфигурацию

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

13.01.2020    15882    sapervodichka    41    

Разбираемся с web-kit в 1С, на примере интеграции TinyMCE в управляемую форму в УТ 11.4. Допиливаем обмен с сайтом в УТ 11.4

Обмен данными 1С Интеграция Адаптация типовых решений v8 v8::УФ УТ11 Абонемент ($m)

Многие уже знают, что в релизе платформы 8.3.14.1565, браузер Internet Explorer был заменен на Web-Kit, это на самом деле большой шаг вперед, но я уверен, многим, как и мне, пока не совсем понятно, что к чему. Возник опыт использования web-kit в 1С, вызова JS из 1С и вызова 1С из JS. Давайте вместе попробуем понять, чем одно отличается от другого, и заодно сделаем, что-нибудь полезное. Да и наверняка многим придется переписывать свои подобные поделки после обновления на новую платформу, так что надеюсь мой опыт окажется полезным.

2 стартмани

08.12.2019    7830    Бэнни    25    

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

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

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

2 стартмани

08.05.2018    26568    wowik    3    

"Живые" картинки со Snap.SVG

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

В статье рассмотрен пример использования http-сервисов для визуализации данных

1 стартмани

24.10.2019    12879    blackhole321    7    

Полезные процедуры и функции для программиста

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

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

1 стартмани

07.10.2019    28057    HostHost    40    

Вебхук. Путь Телеграма

Внешние источники данных Интеграция v8 Абонемент ($m)

Долгое (на самом деле нет) и нелегкое путешествие телеграма к неведомым (из за РКН) конфигурациям 1С. Памятка себе.

1 стартмани

03.10.2019    15955    platonov.e    18    

Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример Промо

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

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

1 стартмани

19.01.2018    55234    rpgshnik    27    

Что умеет Русский Фокс?

Языки и среды Россия Абонемент ($m)

Краткий обзор русскоязычного объектно ориентированного 1С подобного языка программирования Русский Фокс.

1 стартмани

30.09.2019    3460    andreosh    20    

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

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

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

1 стартмани

06.09.2019    18672    Dementor    30    

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

Практика программирования v8 Абонемент ($m)

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

1 стартмани

27.08.2019    10541    ids79    21    

Как нарисовать граф на 1С Промо

Практика программирования v8 Абонемент ($m)

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

1 стартмани

09.08.2013    69819    ildarovich    117    

Обмен большими данными между клиентом и сервером

Внешние источники данных v8 Абонемент ($m)

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

1 стартмани

27.08.2019    13039    logos    24    

Простая выгрузка данных в универсальном формате Enterprise Data

Обмен через XML v8::УФ Розница УНФ ERP2 ЗКГУ3.0 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

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

2 стартмани

26.08.2019    11349    Iyar    3    

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

Практика программирования v8 1cv8.cf Абонемент ($m)

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

2 стартмани

24.08.2019    9737    BenGunn    22    

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

Практика программирования v8 Абонемент ($m)

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

1 стартмани

28.09.2016    39040    ildarovich    22    

Использование HTTP-сервиса для создания "фронтенда" HTML/CSS/jQuery с кэшированием

WEB v8 1cv8.cf Абонемент ($m)

В статье описан способ создания "фронтенда" на HTML/CSS/jQuery и скрипт кеширования AJAX запросов на PHP.

1 стартмани

06.08.2019    13437    Sedaiko    24    

Процедура ПриКомпоновкеРезультата

Практика программирования v8 1cv8.cf Абонемент ($m)

Коллекция кода

1 стартмани

26.07.2019    34452    vasilev2015    63    

В 1000 раз быстрее

Практика программирования Разработка ИТ-компания Абонемент ($m)

Реализация алгоритма трассировки лучей на новом языке программирования "Перфолента"

1 стартмани

24.07.2019    5571    vasvl123    6    

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

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

01.02.2018    34577    rpgshnik    49    

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

Учет ТМЦ Практика программирования Учет ТМЦ v8 УУ Абонемент ($m)

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

3 стартмани

24.06.2019    14183    informa1555    17    

1С:Ассемблер. Немного летнего веселья!

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

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

1 стартмани

21.06.2019    27567    Evil Beaver    122    

Простые примеры сложных отчетов на СКД

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

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

1 стартмани

12.06.2019    28305    Hatson    22    

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

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

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

1 стартмани

10.05.2018    43198    dsdred    36    

XDTO для чайников

Обмен через XML v8 1cv8.cf Абонемент ($m)

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

1 стартмани

29.05.2019    25941    HAMMER_59    39    

Ops средствами 1С:Предприятие

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

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

1 стартмани

23.04.2019    17039    blackhole321    28    

1C + Python + Django Rest Framework + Vue.js. Опыт несложной full-stack разработки

Практика программирования Внешние источники данных Обмен через XML WEB Разработка v8 1cv8.cf Абонемент ($m)

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

1 стартмани

22.04.2019    31344    riposte    63    

Некоторая работа с данными через COM Промо

Практика программирования v8 Абонемент ($m)

В статье приведены примеры работы с Платформой 8.X через COM (точнее, через объект COMConnector). Примеры кода были использованы при реализации прикладных задач в процессе трудовой деятельности.

2 стартмани

05.12.2012    56875    wowik    32    

Аутентификация на внешних сервисах посредством OAuth

Информационная безопасность Внешние источники данных v8 v8::УФ 1cv8.cf Абонемент ($m)

Пример подключения к сервисам Google из 1С с помощью протокола OAuth и получения данных с внешнего сервиса.

1 стартмани

03.04.2019    18786    binx    123    

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

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

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

1 стартмани

12.03.2019    32104    ni_cola    29    

Баг или фича? Неожиданное поведение платформы

Практика программирования Тестирование и исправление Разработка v8 1cv8.cf Абонемент ($m)

Рассмотрим несколько случаев неожиданного поведения платформы 1С, а также что с этим можно cделать.

18.02.2019    22571    YPermitin    89    

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

Инструментарий разработчика Практика программирования v8 v8::Запросы Абонемент ($m)

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

1 стартмани

24.04.2018    42473    kalyaka    34    

Универсальное расширение 1С для Google Таблиц и Документов

Внешние источники данных v8 1cv8.cf Абонемент ($m)

Эта статья для тех, кто использует G Suite и 1С. Готовое решение для выгрузки отчетов и печатных форм из баз 1С в Google Диск в формате Google Таблиц и Google Документов. Информация по его внедрению. Описание создания и настройки проекта в GCP.

1 стартмани

31.01.2019    15504    Maria18    22    

Внешние компоненты мобильной платформы 1С для ОС Андроид

Разработка внешних компонент Мобильная разработка v8::Mobile Абонемент ($m)

На трех простых примерах описана процедура разработки внешних компонент для Андроид. Статья написана по мотивам доклада на конференции INFOSTART 2018 EDUCATION.

31.01.2019    15692    IgorKissil    25    

HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX

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

Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.

1 стартмани

29.01.2019    27723    Synoecium    46    

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

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

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

26.05.2017    48487    DarkAn    86    

Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки

Практика программирования Vanessa Automation v8 Абонемент ($m)

Третья часть цикла публикаций, посвященных Vanessa-ADD и автоматизации тестирования. Переходим к практике.

1 стартмани

28.01.2019    18700    Vladimir Litvinenko    43    

1c + kafka.apache

Практика программирования v8 Россия Абонемент ($m)

Пример построения микросервисов с использованием apache kafka. Данная статья будет полезна интеграторам, программистам. Версия и релиз технологической платформы не имеет значения.

1 стартмани

27.01.2019    13525    dmarenin    69    

Обмен без правил. От простого к сложному

Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Пишем обмен с нуля, разбираемя с разными способами сериализации, учимся редактировать XML документы, создаем XDTO и Web service, осваиваем Script variant - English.

1 стартмани

16.01.2019    22127    nbeliaev    26    

Агрегатное суммирование строк в запросе – сложно, но не невозможно Промо

Математика и алгоритмы v8 Абонемент ($m)

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

1 стартмани

09.09.2013    77120    ildarovich    53    

Реализация простого http-сервиса "Просмотр карточки номенклатуры(товара) в браузере"

Практика программирования v8 1cv8.cf Абонемент ($m)

Практический пример реализации простого http-сервиса средствами 1С Предприятие 8.3. Обеспечивает просмотр списка товаров и просмотр данных товара в браузере.

1 стартмани

07.12.2018    21694    dmitry1975    32    

Разработка внешних компонент на ассемблере goAsm

Практика программирования Абонемент ($m)

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

1 стартмани

26.11.2018    10684    chessman    40    

Дата создания ссылки SQL запросом

Универсальные функции Абонемент ($m)

Функция, которая позволяет получить дату создания объекта 1С с помощью SQL запроса.

1 стартмани

23.11.2018    5066    MaxxG    3    

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

Практика программирования v8 Абонемент ($m)

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

1 стартмани

27.11.2012    44894    ildarovich    46    

Использование подсистемы БСП "Заполнение объектов"

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

Применение механизмов БСП для добавления новых команд заполнения к формам различных объектов. Использование расширений конфигурации для доработки. Шаблоны для реализации собственных команд заполнения.

1 стартмани

23.11.2018    24856    ids79    23    

Группировка измерений в заголовках СКД

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

Методика создания общей шапки над измерениями в таблице созданной при помощи СКД. Без всякого кода. Только штатными средствами.

1 стартмани

07.11.2018    17563    dusha0020    11    

Go. Разбор лога технологического журнала. Достойная альтернатива perl'у

Сервисные утилиты Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Началось все с того, что я познакомился с перловыми скриптами для парса ТЖ которые размещены на kb.1c.ru (например в этой статье https://kb.1c.ru/articleView.jsp?id=113). По началу мне дико понравилось то, что перл разбирал гигабайты логов за считанные минуты, но позитив мой угасал обратно пропорционально с тем, насколько глубже я погружался в "кроличью нору" ....

1 стартмани

24.10.2018    19681    lazarenko    39