1С с "плюсами"

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

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

74
- Разработана методика подключения внешней компоненты, снимающая ограничения на типы данных аргументов и возвращаемого значения.
- Проведено документирование основных типов данных (объектов, интерфейсов) платформы.
- Разработан объект «Делегат» для реализации функциональных объектов (указатель-на-функцию).
- Разработана концепция итератора произвольного доступа для основных контейнеров платформы с целью сопряжения со стандартной C++ библиотекой.
- В процессе разработки механизм 1С классов (наследование, интерфейсы) для возможности использования парадигм объектно-ориентированного программирования на уровне кода.

 

 И еще, тезисно:

- Файлов к скачиванию здесь пока не будет. Все еще весьма сыро. Основной целью публикации является дискуссия.

- Тесты проводились для win32::v8.3.4.365 - v 8.3.6.2237. Для win64, lin32, lin64 и для v8.2.19.130 только оценена возможность – работать будет при минимальных изменениях.

- В процессе экспериментов ни один проприетарный байт не пострадал. Т.е. оригинальные бинарники 1С я не патчу ни на диске, ни в памяти.

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

- 1С начал изучать вплотную недавно, много еще не знаю. До этого VB++C/C++. Целью работ был перенос части возможностей VB в 1С.

- Также заранее прошу прощения за стиль изложения – эпистолярный жанр не мой конек.

 

 Итак...

            Решаем простейшую задачу: Есть ТаблицаЗначений и в ней колонки [количество] и [цена]. Нужно вычислить СУММА([количество] * [цена]).

Здесь и далее время выполнения алгоритма засекается через ::GetTickCount(), т.е. является относительной величиной.

Код 1С:

Функция СчитатьТаблицу(Котейнер)
        перем элем;
        перем итого;                    
        итого = 0;
        для каждого элем из Котейнер цикл
                итого = итого + элем[1] * элем[2];
        КонецЦикла;
        возврат итого;
КонецФункции

Код Си (иллюстративно):

...
cRows = pITable->getRowCount();
for (iRow = 0; iRow < cRows; iRow++)
{
    if (pITable->getValueAt(iRow, 1).getIValue()->getNumeric(numQty) && 
                      pITable->getValueAt(iRow, 2).getIValue()->getNumeric(numPri))
    {
        numTot += numQty * numPri;
    }
}
pOutRetValValue->assign(numTot);
... 

 

Результаты:

*----------- сумма произведений по ТаблицеЗначений ---------------

* строк = 100 000

* посчитано СУММА([кол]*[цена]) в Си: результат = 333 328 333 350 000, время = 94

* посчитано СУММА([кол]*[цена]) в 1С: результат = 333 328 333 350 000, время = 547

* ИТОГ: подсчет в Си быстрее чем в 1С в 5,8 раз.

*----------- ------------------------------------- ---------------

Обратите внимание, что я работаю методами платформы с типами данных платформы и разница не на ...%, а в ...раз.

 

Сортируем..

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

1С:

Процедура СортироватьМассивВставкамиВозр(М)
   перем колво;
   перем к;
   перем к_этот;
   перем к_пред;
   перем елмЭтот;
   перем елмПред;
   колво = М.Количество();
   для к = 1 по колво - 1 цикл
       к_этот = к;
       пока к_этот >0цикл
          к_пред = к_этот -1;
          елмЭтот = М[к_этот];
          елмПред = М[к_пред];
          если елмЭтот < елмПред тогда
              М[к_этот]= елмПред;
              М[к_пред]= елмЭтот;
          иначе
              Прервать;
          КонецЕсли;
          к_этот = к_пред;
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры

Си:

...
        for(int i = 1; i < iSize; i++){
                for(int j = i; j > 0; j--){
                        mValThis = pParaArrIArr->getAt(j);
                        mValPrev = pParaArrIArr->getAt(j - 1);
                        if( mValThis < mValPrev){
                                pParaArrIArr->setAt(j - 1, mValThis);
                                pParaArrIArr->setAt(j, mValPrev);
                        }
                        else{
                                break;
                        }
                } 
        }
...

Для Си, конечно, несколько многословно, но я намеренно показываю, что код переносится чуть-ли не один в один.

 

С++:

...
        v8com_array_iterator _First(pParaArrIArr, 0);
        v8com_array_iterator _Last(pParaArrIArr, pParaArrIArr->size());
        std::sort(_First, _Last);
...

 

1С с предикатом:

процедура СортироватьМассивВставкамиПред(М, Предикат)
   перем колво;
   перем к;
   перем к_этот;
   перем к_пред;
   перем елмЭтот;
   перем елмПред;
   перем елмЭтотМеньшеПред;
   колво = М.Количество();
   для к =1по колво -1цикл
         к_этот = к;
         пока к_этот >0цикл
              к_пред = к_этот -1;
              елмЭтот = М[к_этот];
              елмПред = М[к_пред];
              выполнить("елмЭтотМеньшеПред = " + Предикат + "(елмЭтот, елмПред)");
              если елмЭтотМеньшеПредтогда
                   М[к_этот]= елмПред;
                   М[к_пред]= елмЭтот;
              иначе
                   Прервать;
              КонецЕсли;
              к_этот = к_пред;
         КонецЦикла;
   КонецЦикла;
КонецПроцедуры

В параметр предикат передаем "МодТест.СравнитьЗначенияНаМеньше"

Функция СравнитьЗначенияНаМеньше(знач знач1, знач знач2) экспорт
        возврат ?(знач1 < знач2, истина, ложь);
КонецФункции

Для компоненты с предикатом посложнее... Делаем объект «Делегат»:

перем<делегат>;
<делегат> = <компонент>.СоздатьДелегат(<объект>[.ЭтотОбъект],“<имя-метода>”);
<делегат>.Вызвать(<список-параметров-метода>);

Т.е. создаем в компоненте объект инициализируемый ссылкой на объект (модуль) платформы и строкой с указанием, какой из методов (функций или процедур) вызвать с переданными при вызове параметрами. У этого объекта-делегата единственное назначение – передать параметры и управление в указанный метод объекта платформы (и вернуть результат, если это функция). Платформа не поддерживает конструкции вида <имя-переменной>(...), поэтому, после некоторых раздумий, я решил не фиксировать какой-либо определенный синтаксис. Делегат можно .Вызвать(...), .Выполнить(...), .Обработать(...), хоть .СделайМнеОоЛаЛа(...), в зависимости от семантики.

Процедура ТестДелегата()
   сообщить("*---------- ТестДелегата -----------");
   хДел = СПП.СоздатьДелегат(МодТест,"ТестДелегата_Функция");
   хРез = хДел.Вызвать(202);
   сообщить("* Делегат вызван, результат: " + хРез);
   сообщить("*---------- ------------ -----------");
КонецПроцедуры
Функция ТестДелегата_Функция(пара)экспорт
   сообщить("* вызов делегата, аргумент = "+ пара);
   возврат пара +1;
КонецФункции

 

*---------- ТестДелегата -----------

* вызов делегата, аргумент = 202

* Делегат вызван, результат: 203

*---------- ------------ -----------

 

С учетом этого код сортировки плюсами c предикатом выглядит как то так:

...
        v8com_array_iterator _First(pParaArrIArr, 0);
        v8com_array_iterator _Last(pParaArrIArr, pParaArrIArr->size());
        v8com_compare_callback _Comp(pParaIDelegat);

        std::sort(_First, _Last, _Comp);
...

 

Результаты:

*-------------------- сортировка массива ---------------------

*Количество элементов массива: 1 500          

*{802, 974, 846, 95, 355, 377, 933, 222, 968, 64, 198, 395, 966, ..., 136, 611, 161}

* сортировка 1С  вставками, возр.  ==  3 078

* сортировка Си  вставками, возр.  ==    329

* сортировка С++ вставками, возр.  ==    235

* сортировка С++ std::sort, возр.  ==     17

* С++ std::sort с предикатом, возр. ==     94

* Си вставками с предикатом, возр. ==  2 064

* 1С  вставками с предикатом:       == 56 969

*

*Проверка массививов: ОК

*{1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, ..., 992, 993, 994, 996, 996, 997, 997, 999}

*

* С вставками быстрее, чем 1С вставками в 9,4 раз

* С++ вставками быстрее, чем 1С вставками в 13,1 раз

* С вставками быстрее, чем С++ вставками в 0,7 раз

* С++ сорт быстрее, чем 1С вставками в 181,1 раз

* С++ сорт быстрее, чем С вставками в 19,4 раз

* С++ сорт быстрее, чем С++ вставками в 13,8 раз

* С++ сорт быстрее, чем С++ сорт с предикатом в 5,5 раз

* С++ сорт с предикатом быстрее, чем 1С сорт вставками в 32,7 раз

* С сорт вставками с предикатом быстрее, чем 1С сорт вставками в 1,5 раз

* 1С вставками с предикатом медленнее, чем 1С  сорт вставками в 18,5 раз

* 1С вставками с предикатом медленнее, чем Си  вставками с предикатом в 27,6 раз

* 1С вставками с предикатом медленнее, чем С++ сорт с предикатом в 606,1 раз

*-------------------- ------------------ ---------------------

Замечу, что количество элементов массива подобрано для получения некоторых характерных значений. Если их порядка 300, то с std::sort сравнить не получается – там просто 0. Если порядка 5000, то ждать пока 1С отсортирует с предикатом приходится неприемлемо долго. Графики в зависимости от количества элементов массива, конечно, были бы любопытны. Также интересно поведение std::_Insertion_sort(), влияние InterlockExhangeXXX, сравнение с контейнером над тривиальными типами данных, сравнение разных компиляторов, поведение в режиме отладки, т.д., т.п. При наличии времени и интереса это все, конечно, можно сделать.

Общие выводы:

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

2)      Любой простенький алгоритм, написанный на языке 1С, несравнимо проигрывает вылизанному алгоритму из существующей С/С++ библиотеки, коих миллион.

 

Ну и в заключение, коль скоро у нас есть Делегат, можно похулиганить с полиморфизмом:

// Зоопарк делегатов
процедура ТестДелегатовЗоо()  экспорт
   перем мойЗоопарк;
   мойЗоопарк =новый Массив;
   мойЗоопарк.Добавить(СоздатьСтруктуруЖивотное_Кошка("Мурка"));
   мойЗоопарк.Добавить(СоздатьСтруктуруЖивотное_Собака("Шарик"));
   ТестДелегатовЗоо_ОпроситьЗоопарк(мойЗоопарк);
КонецПроцедуры
Функция СоздатьСтруктуруЖивотное_Собака(Имя)
   возврат СоздатьСтруктуруЖивотное(Имя, СоздатьДелегат(МодТест,"ЖивотноеСобака_Голос"));
КонецФункции
Функция СоздатьСтруктуруЖивотное_Кошка(Имя)
   возврат СоздатьСтруктуруЖивотное(Имя, СоздатьДелегат(МодТест,"ЖивотноеКошка_Голос"));
КонецФункции
Функция СоздатьСтруктуруЖивотное(Имя, Голос)
   возвратновый ФиксированнаяСтруктура("Имя, Голос", Имя, Голос);
конецфункции
Функция ЖивотноеКошка_Голос()           экспорт
   возврат"Мяу";
КонецФункции
Функция ЖивотноеСобака_Голос()         экспорт
   возврат"Гав";
КонецФункции
процедура ТестДелегатовЗоо_ОпроситьЗоопарк(З)
   перем Ж;
   сообщить("*");
   сообщить("*------- Перекличка в зоопарке делегатов -----------");
   длякаждого Ж из З цикл
                 Сообщить("* Животное '" + Ж.Имя + "' отозвалось '" + Ж.Голос.Вызвать() + "'");
   КонецЦикла;
   сообщить("*------- ------------------------------- -----------");
   сообщить("*");
КонецПроцедуры

*------- Перекличка в зоопарке делегатов -----------

* Животное 'Мурка' отозвалось 'Мяу'

* Животное 'Шарик' отозвалось 'Гав'

*------- ------------------------------- -----------

 

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

//Зоопарк классов
функция ПолучитьОписательКлассаЖивотное()
   перем К;
   К = СоздатьОписательКласса("КлассЖивотное");
   К.ДобавитьПоле("Имя");
   К.ДобавитьПоле("м_ВремяРождения");
   К.ДобавитьМетод("ДайВозраст", МодТест,"КлассЖивотное_ДайВозраст");
   К.ДобавитьАбстрактныйМетод("ДайГолос");
   возврат К;
КонецФункции
функция ПолучитьОписательКлассаЖивотноеКошка()
   перем К;
   К = ПолучитьОписательКлассаЖивотное();
   К.ПереопределитьМетод("ДайГолос", МодТест,"КлассЖивотноеКошка_Голос");
   возврат К;
КонецФункции
функция ПолучитьОписательКлассаЖивотноеСобака()
   перем К;
   К = ПолучитьОписательКлассаЖивотное();
   К.ПереопределитьМетод("ДайГолос", МодТест,"КлассЖивотноеСобака_Голос");
   возврат К;
КонецФункции
функция КонструкторЖивотного(Класс, Имя, ВремяРождения)
   Класс.Имя = Имя;
   Класс.м_ВремяРождения = ВремяРождения;
   возврат Класс;         
КонецФункции
функция СоздатьКлассЖивотное_Собака(Имя)
   //туду: возврат ПолучитьОписательКласса("ЖивотноеСобака").Конструкторы[..].Вызвать(<список-параметров>);
   //                     => .Вызвать(<класс-интерфейфейс-конструктора>, <параметры>)
   возврат КонструкторЖивотного(СоздатьКлассПоОписателю(ПолучитьОписательКлассаЖивотноеСобака()), Имя, ДайТики()-456);
КонецФункции
функция СоздатьКлассЖивотное_Кошка(Имя)
   возврат КонструкторЖивотного(СоздатьКлассПоОписателю(ПолучитьОписательКлассаЖивотноеКошка()), Имя, ДайТики()-567);
КонецФункции
функция КлассЖивотное_ДайВозраст(Класс, Еденицы)                               экспорт
   перем х;
   х = ДайТики()- Класс.м_ВремяРождения;
   возврат Окр(?(Еденицы = ТипЕдиницыШкалыВремени.Минута, х/60, х),1);      //чё-то для теста
КонецФункции
функция КлассЖивотноеКошка_Голос(Класс)                                        экспорт
   возврат"Мур-Мяу";
КонецФункции
функция КлассЖивотноеСобака_Голос(Класс)                                       экспорт
   возврат"Гав-Гав";
КонецФункции
процедура ТестКлассовЗоо()  экспорт
   перем мойЗоопарк;
   мойЗоопарк =новый Массив;
   мойЗоопарк.Добавить(СоздатьКлассЖивотное_Кошка("Мурка"));
   мойЗоопарк.Добавить(СоздатьКлассЖивотное_Собака("Шарик"));
   ТестКлассовЗоо_ОпроситьЗоопарк(мойЗоопарк);
КонецПроцедуры
процедура ТестКлассовЗоо_ОпроситьЗоопарк(З)
   перем Ж;
   сообщить("*");
   сообщить("*------- Перекличка в зоопарке классов -----------");
   длякаждого Ж из З цикл
       Сообщить("* Животное '"+ Ж.Имя +"', возраст = "+ Ж.ДайВозраст(ТипЕдиницыШкалыВремени.Минута)+", отозвалось '"+ Ж.ДайГолос()+"'");
   КонецЦикла;
   сообщить("*------- ----------------------------- -----------");
   сообщить("*");
КонецПроцедуры

*------- Перекличка в зоопарке классов -----------

* Животное 'Мурка', возраст = 9,5, отозвалось 'Мур-Мяу'

* Животное 'Шарик', возраст = 7,9, отозвалось 'Гав-Гав'

*------- ----------------------------- -----------

 

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

- о множественном наследовании думать или как все, кроме плюсов?

- и вообще Класс он НАСЛЕДУЕТСЯ ОТ ?, РАСШИРЯЕТ ?

- class <name> : private <base-class> - такое надо?

- this, me, self- как? В текущей реализации это просто переменная. Пишу Класс, будут конфликты можно переименовать. Но все же...

- private - ЧАСТНЫЙ? ВНУТРЕННИЙ?

- mustoverride – ПЕРЕОПРЕДЕЛЯЕМЫЙ ОБЯЗАТЕЛЬНО?

- ...

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

У кого какие мысли?

 

Спасибо.

 

 

 

 <необходимое дополнение>

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

 

 

 

74

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

Комментарии
Избранное Подписка Сортировка: Древо
1. baton_pk 396 14.10.15 00:15 Сейчас в теме
Ну, добро пожаловать в мир 1С. Не буду ругать и ставить минус, многие через ЭТО проходят на каком-то этапе освоения 1С. :-)
boggonzikov; denis_aka_wolf; Ta_Da; dabu-dabu; Evil Beaver; artbear; lena8push; shalimski; sorb; zqzq; +10 Ответить
2. JohnyDeath 295 14.10.15 00:27 Сейчас в теме
(1) А за что ругать?

(0) Умеет наследоваться от классов-метаданных, например от Документ.ПриходныйКассовыйОрдер ?
4. baton_pk 396 14.10.15 08:06 Сейчас в теме
(2) JohnyDeath,
А за что ругать? 

за то что, опять вот это вот: "язык 1С медленный", "язык 1С корявый" и тому подобные. и почему объектно-ориентироанная модель, а не прототипная, как в javascript?
ещё и пощупать нечего :(
6. sorb 14.10.15 08:36 Сейчас в теме
(2) JohnyDeath, куча народу, начиная работать с 1С, идут в монастырь со своим уставом пытаются натянуть свои представления о том, как все должно быть устроено, вместо того, чтобы изучать местную методику разработки. Приведенные примеры - сферические кони, за которые в продакшне обычно увольняют. Сортировать массив - это круто, но знание существующих УКЗ в 1С позволит не заниматься такой ерундой. Перебирать строки для вычисления суммы? Ну как-бы это вообще с точки зрения 1С ошибка проектирования. Скомпилированный код выполняется быстрее интерпретируемого? Спасибо, кэп. Наследование? Давайте разбирать конкретные сценарии применения - обычно при обсуждении проблем с поддержкой и развитием больше, чем выгод.
Ну и про отладку, обработку исключений тактично опущено, спишем на то, что пока речь о сырье.

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

В общем, ругать не хочется, хочется следить за развитием событий :)
Ziggurat; antonst1; maljaev; davydoff; denis_aka_wolf; Sheff; pallid; bulpi; dj_serega; biz-intel; ekaruk; mindcannon; Созинов; BorovikSV; +14 1 Ответить
3. script 207 14.10.15 01:39 Сейчас в теме
Дык а когда можно будет хоть что нибудь пощупать?
pvlunegov; Созинов; sorb; artbear; marsohod; CSiER; kuntashov; +7 Ответить
5. DitriX 1718 14.10.15 08:26 Сейчас в теме
Просто в 1с - очень редко бывают случаи когда надо сделать то, о чем ваы говорите, в основном - такие объемы данных и расчеты выполнются на стороне SQL серверов, т.е. вытягиваются запросами.
Вы немного путаете подходы. Это тоже самое, что и сравнивать разгон от 0 до 100 у болида и у полноценного джипа, т.е. - да, болид выйграет, тут вопросов нет, но вот только с нашими дорогами - эти сферические кони в вакууме (я о полученных цифрах) - даром не нужны.

Как то так.
logarifm; awk; s_vidyakin; Liris; denis_aka_wolf; Sheff; ProgrammistC; BigRig; bulpi; opx; herfis; DrAku1a; mindcannon; Ta_Da; Evil Beaver; gubanoff; dabu-dabu; zqzq; ya.Avoronov; lena8push; shalimski; sorb; nihfalck; baton_pk; +24 Ответить
16. AlX0id 14.10.15 11:31 Сейчас в теме
(5) DitriX,
А как же РАУЗ с миллионами операций? В общем-то, там бы сильно не помешало ускорить вычислительный процесс.. Вынести на SQL сложные запросы да еще и так, чтобы они там более-менее оптимально выполнялись - возможно далеко не всегда.

А статье, конечно, не хватает "чего пощупать" )
invertercant; jan27; +2 Ответить
7. artbear 1159 14.10.15 09:07 Сейчас в теме
Тема интересная, но без демки и/или кода выглядит слабовато.
ЗЫ я занимался аналогичными проблемами в компоненте 1С++ для 1С 7.7 12 лет назад :)
pvlunegov; fishca; +2 Ответить
8. fishca 1160 14.10.15 09:30 Сейчас в теме
Все эти порядки, которые выигрываются кодом на С++, съедаются медленным получением данных из СУБД.
Но смысл продолжать конечно есть, быстрая обработка никогда и никому еще не мешала.
В идеале хотелось бы видеть 1С++ для 8.х.
И да, даешь демку, хотя бы и сырую, будем высушивать общими усилиями.
invertercant; djam_arttek; Созинов; Evil Beaver; +4 Ответить
9. Evil Beaver 6358 14.10.15 09:37 Сейчас в теме
Ого как, 1С++ добрался и до восьмерки! Простите, но мы не узнаём вас в гриме... Откуда вы?
nSpirit2; +1 Ответить
10. nSpirit2 14.10.15 09:59 Сейчас в теме
Ну все примеры хороши проблема в том что они совершенно не жизненны.
Я не знаю как у остальных господ но у меня задачи сортировки массивов последний раз были в институте. В реальной разработке на 1с где большая часть данных получается запросами получение не сортированных данных из базы очень редкий случай.
Но разработка несомненно очень интересная будем ждать того что можно пощупать
denis_aka_wolf; BorovikSV; +2 Ответить
11. Evil Beaver 6358 14.10.15 10:04 Сейчас в теме
Кстати, по существу:

ООП в 1С - в чистом виде - не надо. Почему - дискутировали уже много, не буду повторяться.
Но раз уж пошла такая пьянка, то:

- о множественном наследовании думать или как все, кроме плюсов?

Не надо. От такого отказались в яве, шарпе и остальных.
- и вообще Класс он НАСЛЕДУЕТСЯ ОТ ?, РАСШИРЯЕТ ?

Он НАСЛЕДУЕТ (но и РАСШИРЯЕТ тоже, почему нет)
- class <name> : private <base-class> - такое надо?

Зачееем??
- this, me, self- как? В текущей реализации это просто переменная. Пишу Класс, будут конфликты можно переименовать. Но все же...

У 1С-ников это называется "ЭтотОбъект"
- private - ЧАСТНЫЙ? ВНУТРЕННИЙ?

Зачем тащить синтаксис C++ в 1С? У 1С уже есть свои лексические конструкции для инкапсуляции.
- mustoverride – ПЕРЕОПРЕДЕЛЯЕМЫЙ ОБЯЗАТЕЛЬНО

Ваще сотона! не надо этого. Для начала дайте что-то пощупать, чтобы мы поняли о чем речь.

А вообще - очень клево! Мы тут все любим всякие такие штуки, даже если они просто экспериментальные. Удачи вам!
RomanRomans; fishca; sorb; +3 Ответить
12. Зеленоград 14.10.15 10:17 Сейчас в теме
Автор, вам плохо а медленном языке с русской нотацией и сложными объектами?

Это ДРУГОЙ язык. Не для embedded, не для realtime - но для быстрого создания прототипов открытых учётных систем специалистом любой квалификации с большим количеством готового кода среднего качества с фрагментарной документацией.
bulpi; biz-intel; Evil Beaver; +3 Ответить
13. nSpirit2 14.10.15 10:21 Сейчас в теме
(12) Зеленоград,
фрагментарной документацией

Хорошо что с этим потихоньку начали бороться :D
14. BorovikSV 1331 14.10.15 10:35 Сейчас в теме
(0) Автор а можете уточнить каков тип у переменных numTot, numQty,numPri? (Из первого примера на Си)
А то как то представили кусок кода, скрыв самое интересное )
20. Evil Beaver 6358 14.10.15 15:41 Сейчас в теме
(14) BorovikSV, ну судя по фрагменту кода, автор получил доступ к реализации объектов внутри 1С, например, к ТаблицеЗначений и IValue. И дергает похоже родную реализацию таких вещей, как getRowCount и IValue::getNumeric.

Другое дело, непонятно зачем он пытается сравнивать скриптовый код и код на C++. Еще и цифры приводит. Можно подумать, кто-то сомневается, что машинный код быстрее....
21. BorovikSV 1331 14.10.15 16:03 Сейчас в теме
(20) Evil Beaver,
numTot += numQty * numPri;
где там объектами пахнет? Просто умножение и сложение.
Сдается мне что numTot, numQty,numPri имеют тип DOUBLE.
22. baton_pk 396 14.10.15 16:07 Сейчас в теме
(21) BorovikSV, может, у него операторы переопределены для Numeric-ов
23. Evil Beaver 6358 14.10.15 16:16 Сейчас в теме
(22) baton_pk, он получает некий Numeric из "родного" IValue методом getNumeric. Я сильно подозреваю, что тип значения - это внутренний тип Number/Число, реализованный внутри платформы. С операторами тогда получается интереснее. Он не только нашел, где внутри dll перегружен operator*(V8Numeric,V8Numeric), но и прописал это объявление в своих *.h И сколько таких еще вещей нужно было раскопать и описать. Иными словами, там проделана немалая работа (если это не фейк). Хочется посмотреть.
25. BorovikSV 1331 14.10.15 17:15 Сейчас в теме
(23) Evil Beaver,
Некий getNumeric может называться и ExtractAsDouble, это ничего не меняет и не объясняет. Ведь мы не можем делать выводы о типах из названия метода.
Сомневаюсь что человек перегружал арифметические операторы для встроенного некого гипотетического INumeric. На это указывает крайне скудное описание возможностей. Отсутствие демо.
Ведь на кой черт заниматься "фантиками", если рабочего прототипа который можно показать еще нет?

Пока все указывает на Double. Если так - то математика будет отличаться от 1С, которая использует длинную арифметику.

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

Предположим что заголовки для INumeric уже имеются на 100%, и даже пусть это на 100% совпадает с заголовками у 1С.

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

Я уж не говорю и том, что это хрен запустишь в продакшн, какие модуля на VB (C++) напишут средненькие 1С-ники, и наконец что случится при переходе на 8.4
26. Evil Beaver 6358 14.10.15 17:28 Сейчас в теме
(25) BorovikSV, возможно и double, однозначных выводов сделать нельзя. Просто при взгляде на то, как вызывается API, мне кажется, что там платформенные numerics. Однако, если так, то получается, что автор должен был прописать все сигнатуры в h-файлах и каким-то образом залинковать их с платформой. А если там даже и double, то все равно pValueTable->getRowsCount() он обязан был где-то прописать, чтобы это компилировалось.

Итого, у меня есть несколько вариантов:
1. Найден способ доступа к API платформы, который позволяет сгенерировать еще и h-файлы классов.
2. Этот код не реальный C++ код, а гипотетический. Никаких headers и вызовов в стиле pValueTable->getRowsCount() еще нет.
3. Это вообще фейк
4. Автор реально запилил все header-s для всех классов платформы. И не просто запилил, а нашел все перегруженные операторы и адреса реализаций внутри dll.
4.1 Ник автора кажется мне очень любопытным.
32. orefkov 1978 14.10.15 19:52 Сейчас в теме
(23) Evil Beaver, ну, за Numeric могу сказать только то, что его внутренняя реализация не менялась с 7.7. Да-да, этот класс 1С полностью перетащила из 7.7 в 8ку, только название изменила с CNumeric на Numeric. Особо искать его методы не приходится - торчат наружу из core8x.dll. Пока автору просто - можно напрямую линковаться к core83.dll, так как 8.2 в списке поддерживаемых не значится. А в 8.4 возможно надо будет линковаться уже к core84.dll.
15. Evil Beaver 6358 14.10.15 11:25 Сейчас в теме
Вброс:
При подробном взгляде на ник автора посетила крамольная мысль.
pITable->getValueAt(iRow, 1).getIValue()->getNumeric(numQty)

Концептуально напоминает то, как сделано IValue в 1Script, только на C++. А не наблюдаем ли мы утечку информации о внутренностях платформы из недр конторы?
17. kiruha 380 14.10.15 12:57 Сейчас в теме
Здорово конечно, но почему столько публикаций пытается оптимизировать код 1С, который в общих затратах на вывод отчета 0.5% ?
18. Gilev.Vyacheslav 1838 14.10.15 14:51 Сейчас в теме
предлагаю автору сходить трудоустроиться в саму 1С, если талант, то дадут реализоваться, а если шапкозакидатель, то быстро всплывет....
logarifm; HiKS; dj_serega; IntelInside; sorb; +5 Ответить
19. Evil Beaver 6358 14.10.15 15:34 Сейчас в теме
Не, ну чего вы накинулись на человека? Вдруг там действительно что-то интересное? Надо же счупать а потом уже обсуждать. Афтар - пешы есчо!
sorb; fishca; kuntashov; +3 Ответить
30. sorb 14.10.15 19:03 Сейчас в теме
(19) Evil Beaver, да никто его не обижает - лично я испытал энтузазим, идет бурление хомячков и волнения мозга, что и наблюдается по обилию взволнованных комментов :)
24. Dach 284 14.10.15 16:24 Сейчас в теме
Будет реализация дополнительных плюшек к объекту Запрос, а особенно возможность управлять текстом, из которого запрос 1С трансформируется в запрос к СУБД?

Хочется всех возможностей T-SQL, которых нет в 1С, например явного указания как делать джойн (nested loops, merge...)
27. IntelInside 126 14.10.15 17:38 Сейчас в теме
Сразу отвечу всем. Большое спасибо за проявленный интерес к моей разработке. И отдельно за поддержку, в которой я остро нуждаюсь.
Сравнения по быстродействию проводятся с совершенно понятной иллюстративной целью. Я прекрасно знаю, что эффективность решения в целом практически как никак не зависит от быстродействия одного отдельно взятого алгоритма. Я прекрасно знаю парадигму, по которой обработкой массивов данных должен заниматься сервер. Даже более того. Я прекрасно знаю, что не только система учета, а и вся ИТ-инфраструктура организации это всего лишь один из управленческих инструментов, а на той кухне вообще другая аксиоматика и правила игры. В первоначальных вариантах публикации у меня были абзацы, рассматривающие эти вопросы. В окончательном варианте я их убрал, посчитав отвлекающими от сути. Все эти вопросы бесконечно дискутируемы, и, в лучшем случае позволяют понять собеседникам с какой стороны каждый из них ощупывает предмет дискуссии. Впрочем, у меня есть заготовки типа «О быстродействии, или ресурсы всегда ограничены», «О сервере, или где мои данные и крутятся ли они», «Об ООП, или программист это профессия или образ мышления», «1С 2025, или мой начальник – компьютер. Хороший. Многоядерный», «О Девятке, сложности систем и что Тик-Такает у Интела». Из каждой страница, а то и больше текста выйдет. Только основных тезисов и обоснования. Наверно буду готовить, но я так тяжело пишу...

Меня вот все больше волнует, что у меня в зоопарке кошка да собака. Это нелогично, и поэтому, требует внимания в первую очередь.

1С Прекрасная машинка! Иначи бы этим не занялся. Архитектура – просто хрустальный дворец, снимаю шляпу. Лидеры рынка. Успешная корпорация. ВМ? Да нормальная ВМ. Мне конечно видны нюансики, которые за кодом невидно... Но в целом прелесть, просто прелесть.

О Пощупать.
Для меня стала очевидна необходимость разбить проект на две части «классы» и «плюсы». Не в последнюю очередь ввиду см.<добровольные обязательства> к публикации. Срок для «классы» не ранее очередного релиза 1С, а скорее даже через один. Мы все во власти Создателя, и, в зависимости от его реакции (или отсутствия таковой) будет видно как кодить, что кодить и кодить ли вообще.
По «плюсам» ничего сказать не могу. Вероятно, в виде СДК его в публичном доступе не будет никогда. Это, конечно, не мешает выпустить библиотеку с АПИ по перемалыванию кортежей или еще какими полезняшками. Но опять – же, если реакция Создателя буде крайне негативной, то и полезность такой библиотеки сомнительна. Будем посмотреть. Тем более (отдаю должное проницательности <sorb>), в ексепшенах еще конь не валялся. И не только. Тут просто специфика своя. Не делать лишнего, т.к. не знаешь заранее принципиальную возможность положительного результата. Будут ексепшены, за вполне себе линейное время.
В любом случае, для «классы» сначала БНФ и спецификация. Для меня здесь важна дискуссия. Я действительно не мыслю как «1С-овец».
Уже спасибо за:
- ЭтотКласс – <Evil Beaver>, ЭтотОбъект не пойдет – конфликт имен, а ЭтотКласс в самый раз.
- КЛАСС <мой-класс> : НАСЛЕДУЕТ Метадата.ЧегоТоТам
К сожалению возможно, и, как минимум в первой версии будет запрещено. По позже распишу подробнее. Наследоваться можно будет только от своих классов. Иначе я не смогу гарантировать стабильность.

- MustOverride, NotOverridable, Overridable, Overrides нужно переводить. Вы просто по олицетворяйте себя с разработчиком на каждом уровне иерархии. Будет, наверное ОБЯЗАТЕЛЬНО ПЕРЕГРУЖАЕМАЯ. Ничего в голову не лезет.

- Кстати в БНФ нужно оставлять место для типизации. Назовем это чуйкой.

О себе. Развиртуализироваться пока не буду. Хоть в гриме, хоть без грима все равно не узнаете. Если коротко, то Б3-34, Квантовая механика, Практическая психология и конспекты MBA для меня не пустые звуки. Географически Харьков (но ветра нынче северные, пора в Питер, к Маме:).

Да! И не надо вопросов какой тип у mNumTot и прочего. Не корректно и все равно не отвечу. Я и так, наверное, слишком много сказал. Да.. Учитывайте еще гадая, что у плюсов есть дефайны и тайпдефы.

Нужно еще как-то потереть с oneScript и Снегопат. «Классы» в 1С так или иначе все равно будут. И им нужен будет визуальный построитель. (Tфу… прости господи).

Спасибо.
support; Evil Beaver; fishca; +3 Ответить
28. Evil Beaver 6358 14.10.15 17:45 Сейчас в теме
(27) Спасибо за ответы. Интересно. Ну про OneScript можете тереть свободно. baton_pk и я уже отметились в топике.
29. fishca 1160 14.10.15 17:49 Сейчас в теме
(27) ничего не понял, но интригуешь классно, жду.
40. shakmaev 339 15.10.15 16:08 Сейчас в теме
(27) (34) (39) Вы пишете:
Наверно буду готовить, но я так тяжело пишу...

Судя по длине и содержанию Ваших комментариев - писать Вам не так уж и тяжело. Так что ждем.
kuntashov; +1 Ответить
31. orefkov 1978 14.10.15 19:27 Сейчас в теме
Проблемы дёргать методы объектов напрямую - давно уже нет.
Что через IContext - универсальный 1Сный интерфейс, что у некоторых типов объектов (ТЗ, ДЗ и тп) - их спецефичными интерфейсами.
Если в snegopat.reborn просмотреть внимательно папки engine и v8api - всё это найдётся и видно для пытливого ума.
Однако автор рискует наступить на те же грабли, что и снегопат в свое время - релизозависимость от 1С.
Достаточно 1С немного изменить интерфейсы, "потроха" объектов - и С++ный адаптер перестает работать, пока автор не отразит эти изменения.

Как это было, когда 1С при переходе с 8.2 на 8.3 изменило внутренности своего объекта wstring, что сделать универсальный адаптер на С++ оказалось настолько сложно, что пришлось делать два отдельных snegopat.dll и snegopat83.dll.

Вот к примеру "блуждания" прямого вызова "Предупреждения":
// Предупреждение
#if ver >= 8.3.7
        21
#elif ver >= 8.3.6
    20
#elif ver >= 8.3.5
    19
#else
    18
#endif
#if ver < 8.3
    save int messageBox(const v8string&in text, uint type=0, uint timeout=0, uint caption=0, HWND parent=uint(-1), mbp& param=mbp(), int i1=0, int i2=0, int i3=0)
#else
    save int messageBox(const v8string&in text, uint type=0, uint timeout=0, uint caption=0, HWND parent=uint(-1), mbp& param=mbp(), int i1=0, int i2=0, int i3=0, int i4=0, int i5=0)
#endif
Показать

от релиза к релизу меняется как номер виртуальной функции, так и сигнатура вызова.

Возможно, то, что автор уже накопал - относительно стабильно, но это просто говорит о том, что накопано не так и много.

Ну и самое главное - замеры сортировки вставками на С++ надо сравнивать не с реализацией этого алгоритма на 1С, а с тз.Сортировать();
То есть использование этой компоненты для увеличения скорости работы - лукавство. Скорость работы интерпретатора 1С никогда не была "бутылочным горлышком", в которое упиралась производительность.
zarius; artbear; Ta_Da; dgolovanov; nSpirit2; herfis; Magister; kuntashov; sorb; +9 Ответить
34. IntelInside 126 15.10.15 11:03 Сейчас в теме
(31) orefkov,

Ждал Вашего комментария, Саша. Спасибо. Я, естественно, смотрел и Снегопат и Опенконф и 1С++ еще много, много работ уважаемых <ников>. Я вообще заниматься всем этим начал с тоски, что Снегопата под 8.3 нет. Не вру. Поставил платформу. Того нет, этого, пятого, десятого. Снегопат замерз. Тоска. Начал копать че-то зачем-то, уже не помню. Потом втянулся, интересно стало, что-то получаться началось. Как-то так.
В общем "чего я злой такой был - у меня Снегопата не было"(с).

Разница работы в design-time (у Вас) и в run-time (у меня) в первую очередь заключается в см. .<добровольные обязательства> к публикации. Я уже более чем уверен, что в какую-нибудь «чугунную» уже голову закралась мысль: «Я у них драйвер ЭККА куплю и поставлю, а он у меня все клиентскую базу выкачает». Безопасники они такие. Это их работа. И не такие уж они и чугунные. У меня у одного знакомого безопасника второе высшее экономическое образование. Высшее. Экономическое. Второе. У безопасника. А стоимость данных на серверах клиентов 1С существенная. А 1С дает определенные гарантии. Поэтому сейчас ничего существенного планировать (кодить) нельзя. Нужно ждать реакции Создателя. Это его мир. Мы лишь жалкие черви, которым Он позволил плодиться и размножаться. Если в следующем релизе все будет закрыто, перемешано, зашифровано, прикрыто пакером – это одна история. Если нее-а, и будет объявлено о сертификации производителей драйверов оборудования и прочих разработчиков компонент (ессно за денюжку), с изменением АПИ загрузки – другая. Если просто пройдет утечка, что де, скоро ожидается очередная 1С v9 с ООП, триггерами, с преферансом и поэтессами, и, в том числе с существенно усиленной безопасностью – третья. Ждем..с. Если чё (вариант 1), прошу прощения...
В случае существенного злонамеренного изменения АБИ я сливаюсь и иду читать Радченко (ну или таксовать). Наверное. Бороться с Создателем – это не для моей печени. Хотя и жаль. Да 8.3.6.ххх уже очень неплохая лошадка. Ну в общем есть варианты.

Охват кода у меня действительно небольшой. Мне много не надо. Я намеренно стараюсь не лазить дальше коре и не глубже интерфейса. Интерфейс – это контракт. На случаи текущего изменения АПИ/АБИ... Ну что ж. Это жисть. Определенную надежду дает только достаточная стабильность документированного АПИ, неспешность 1С-ников в обновлении версий, ну и с десяток тысяч строк .idc файла. Как говориться «с помощью доброго слова и пистолета...». Тоже сыренько, но и говорить о продакшене пока рано. Еще раз. Я пытаюсь сжиться с платформой, а не воевать с ней. Ну например. Я не нашел глобального контекста. Вернее я знаю как он формируется, нашел место, где по моему мнению, он живет, но добыть его оттуда функций нет. Я знаю как там устроено, за интерфейсом, но туда не лезу. Нет функции – значит так надо. Обхожусь явной передачей контекста. Может я плохо искал, может он самой платформе просто не нужен, может там какие нюансы в маршалинге. Нах. Платформа не дает и я не даю. Мне Ваше решение с коллективным тестированием через AS не подойдет. У меня runtime. Оно либо должно работать как часы, либо... Нету либо.

О сортировке. Это скоро станет смешным. Я начну искать задачу где мать всех языков сущих буде уступать 1С. Я уже не рад что оно быстрее. Шутка. Моя мысль в том, что метод .Сортировать() есть тольку у ТЗ. И без предиката. У других контейнеров его просто нет. Относительно ТЗ.Сортировать() я даже не проверял, но уверен что он будет быстрее, чем я могу сделать при работе через интерфейс. Ну обязан просто. Контейнеры 1С non-swap-compatable и мне на каждом шаге приходится зависать на InterLock…, несмотря на то что другим потоком рядом и близко не пахнет. А у других контейнеров .Сортировать() вообще нет. Ни с предикатом ни без. И ЧастичноСортировать() нет и count_if и seach_n нет и индексирования бинарным деревом нет, только hashmap for general purposes. И объединять\разъединять\транспонировать нет. И еще мноого чего нет. И правильно. И не должно быть. Я перед их Архитектором, в том числе, и за это снимаю шляпу. При увеличении радиуса в два раза объем растет в квадрате, кубе, и дальше. Каждая фича платформы это увеличение радиуса, а объем это затраты на сопровождение, согласование, тестирование и пр. всех этих фич. А измерений проблемы у них тоже дай бог сколько. И не надо все тащить в платформу. Она и так перегружена. Архитектурные ограничения. «Назначение границ» у Высоцкого... Граница это воображаемая линия нарисованная кровью. Это не для детей.
А вот возможность подключить must have, если знаешь что делаешь. Засяду наверное за литературщину вместо БНФ. Все равно делать пока нечего.

И ЕЩЕ РАЗ ВСЕМ. ХВАТИТ ОБСУЖДАТЬ ABI ПЛАТФОРМЫ В ОТКРЫТУЮ. То что для нас по-приколу, для других «Обнаружена возможность исполнения неподписанного кода». Это закончится просто тем, что 1С прихлопнет лавочку удобным для нее способом и пойдем все читать Радченко v9.

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

И еще раз! Основной вопрос всех времен и народов:
ПОЧЕМУ 1С ЭТОГО НЕ СДЕЛАЛА? Вы, естественно, понимаете, что я ничего конгениального не сделал. О платформе и ее эволюции Вы знаете больше всех нас вместе взятых.
Каково Ваше мнение?

Спасибо.
33. DrAku1a 1303 15.10.15 03:17 Сейчас в теме
(0), Замерь производительность суммирования и сортировки на "Цикле в одну стоку"
39. IntelInside 126 15.10.15 15:52 Сейчас в теме
(33) DrAku1a,
относительно цикла-в-строку

Я выполнил Вашу просьбу (платформа 8.3.6.2237):
Код в строку:
Функция СчитатьТаблицуЦиклВСроку(Котейнер)
        перем элем;    перем итого; итого = 0; для каждого элем из Котейнер цикл       итого = итого + элем[1] * элем[2]; КонецЦикла;  возврат итого;
КонецФункции


(по сравнению с тем, что в статье)

Отладка:
*----------- сумма произведений по ТаблицеЗначений ---------------
* строк = 100 000
* посчитано СУММА([кол]*[цена]) в С++: результат = 333 328 333 350 000, время = 94
* посчитано СУММА([кол]*[цена]) в 1С 'по-людски' : результат = 333 328 333 350 000, время = 1 453
* посчитано СУММА([кол]*[цена]) в 1С 'в-строку' : результат = 333 328 333 350 000, время = 484
* ИТОГ: подсчет в С++ быстрее чем в 1С в 15,3 раз.
* : подсчет в 'в-строку' быстрее чем 'по-людски' в 3 раз.
*----------- ------------------------------------- ---------------
Рантайм:
*----------- сумма произведений по ТаблицеЗначений ---------------
* строк = 100 000
* посчитано СУММА([кол]*[цена]) в С++: результат = 333 328 333 350 000, время = 94
* посчитано СУММА([кол]*[цена]) в 1С : результат = 333 328 333 350 000, время = 547
* посчитано СУММА([кол]*[цена]) в 1С 'в-строку' : результат = 333 328 333 350 000, время = 484
* ИТОГ: подсчет в С++ быстрее чем в 1С в 5,8 раз.
* : подсчет в 'в-строку' быстрее чем 'по-людски' в 1,1 раз.
*----------- ------------------------------------- ---------------

Все то-же. В режиме отладки все медленнее в ~3 раза. В рантайме практически нос-к-носу. Очевидная очевидность. Возможно для версии 8.2... были какие-то нюансы. Именно по этому на первом месте всегда должна быть читабельность и сопровождаемость кода. Всегда. В платформе все уже давно все поменялось, а Ваш ‘в-строку’ так и продолжает глаз резать. Написанное пером не вырубишь топором. Если не хватает быстродействия и алгоритмически все нормально, то, для алгоритма завязанного на БД, нужно менять структуру данных. Нормализовать, денормализовать, индексировать, материализовать, etc. Обычно там все черти сидят. Это самое сложное и самое верное. Второе – это как раз то, что я предлагаю. Внешняя библиотека на более быстром языке, а 1С не дает. Но там опять же все ‘по-людски’: по возможности стандартный алгоритм, а не велосипед. И все аккуратно, читабельно и сопровождаемо. Далее, а Вы уже в плюсах, там шире выбор алгоритмов, ну и на совсем худой МПО, уже наработанные методики и по разворачиванию циклов, и оптимизации под конвеер процессора, многопотоковость и еще бог-пойми-чё. Но опять-же отдавая отчет что и как, и главное зачем, Вы делаете.
Естественно все при условии, что железо в порядке и каких еще глупостей нет.

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

PS: На моей версии платфомы код содержащий оператор ВЫПОЛНИТЬ наоборот в отладке выполняется быстрее, чем в рантайме в те-же 3 раза. Я на это уже обращал внимание. Это, вероятно, курьез. Не стоит из этого выводить новую парадигму программирования.

Спасибо.
djam_arttek; baton_pk; +2 Ответить
43. IntelInside 126 19.10.15 13:11 Сейчас в теме
(33) DrAku1a, я опять к Вам. Прошу прощения, но Ваша статья просто кладезь решений пытливого ума зажатого рамками системы. Это не ирония, это с уважением.

Рассмотрю пример со строкой. В статье разбирается работа функции РазложитьСтрокуВМассивПодстрок() и предлагаются различные варианты алгоритма. Я сначала немного расширю проблематику, а затем вернусь к split. Не переключайтесь.

Данная задача относится к классу задач обработки текстовой информации. Таких задач великое множество. Несчетно. Т.е. практически бесконечно в прямом математическом понимании слова. Сказать обработать строку это все равно, что сказать обработать «данные». Т.е. ничего не сказать. Или сказать все. Так уж случилось, что наша цивилизация отсчитывает свой срок от момента зарождения письменности и любая сущность и\или явление мира данного нам в ощущение имеют свое текстовое представление. Конечно на нынешнем этапе развития технологий обработки информации (и особенно учитывая тенденции) это утверждение можно расширить до «... вербальное представление», но это отдельная тема. Поэтому и количество алгоритмов обработки строк и библиотек этих алгоритмов, наверное, в точности равно количеству пермутаций от количества всех программистов. Ну это как когда у двух юристов всегда не менее трех мнений: мнение первого, мнение второго и одно их общее. И естественно, видя это безобразие, Великие решили эту задачу и дали нам это решение в пользование. Имя этому решению РегулярныеВыражения. Примеров приводить не буду. Все о них слышали, многие пользовались, и как в любой популяции, некоторые даже получают удовольствие от этого (садо)мазохизма. По сути РегулярныеВыражения это некоторый такой <процессор> обработки текстовых данных, которому вы ставите задачу на понятном ему языке и он выполняет ее оптимальным для данной задачи образом. Совсем как SQL сервер: у него там где то как то лежат и еще крутятся нужные нам данные, мы ему пишем запрос на его языке, и он выполняет его оптимальным с его точки зрения образом. Только в случае с Регекспами, Великие, решив задачу в-общем потеряли к ней интерес и язык запросов (.т.е. так называемый язык-регулярных-выражений) представляет собой какую то маловразумительную мешанину скобочек и закорючек. Где то видел мнение, что если регексп длиннее строки, то понять как он работает можно, только переписав его заново. В самой платформе библиотека регекспов присутствует. Кое где используется. Орефков предпринимал попытку вытащить их из недр платформы и добавить в виде объекта, чтобы можно было пользоваться через НОВЫЙ <>. Некоторые подключают реализацию от MS как com-объект. Но в общем и целом Регексп-От-1С отсутствует. Попытаюсь предположить почему. В том виде, в котором они сейчас существуют это совершенно не читабельный и не сопровождаемый код. Нельзя от одного нормального человека требовать, чтобы он написал нормальный регексп, а от другого нормального человека требовать, чтобы он его прочитал, и еще не дай бог подправил. На данном этапе регексп это Всерьез, но не доступно. Это не 1С-Way. Ведь, насколько я понимаю, этот слоган не разработчикам адресован. Он адресован Людям Принимающим Решения. Информационная среда организации это такая же собственность организации как, например, здание. И те кто принимает решение просто обязаны знать (хотя чаще они такие вещи просто чуют), что за каждой Собственностью стоит Стоимость Владения.
Вот если бы формализовать язык регекспов по типу SQL, чтобы можно было писать что-то типа:
строкаРегексп = “НАЙТИ [ДА ЗАМЕНИТЬ] СОВПАДЕНИЯ В <> ГДЕ ЭЛЕМЕНТ <ЕЛ> ...”; // Ну Вы поняли
объектРегексп = НОВЫЙ РегулярноеВыражение(строкаРегексп);
резульРегексп = объектРегексп.Обработать(<строка>);
<работа с результатом>
Плюс к этому визуальный построитель. Отладчик. Отразить в документации и методической литературе. Добавить блок вопросов в экзаменационные билеты. Аттестация, курсы углубленного изучения, отдельный сертификат 1С-Профи-В-Регекспах. Вот тогда в блестящем, монолитном и архитектурно совершенном дворце 1С появится такая же прекрасная и совершенная восточная башенка, чудесно дополняющая весь архитектурный ансамбль. (Простите, не удержался – дитё сейчас 3D-пазл «Храм Спаса-на-крови» собирает.)
Вот тогда 1С может гарантировать своим Клиентам, что предлагаемый ею продукт решает их задачи наилучшим и наиоптимальнейшим образом. Доступно и Всерьёз.

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

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

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

1С это целый мир. Достаточно четко очерченный своим кругом задач, люди, его населяющие, свой язык и, если хотите, своя религия. Функция Создателя – генерировать правила. Самостоятельная реализация это опционально. Примеров такого подхода вокруг масса.

Собственно вот что в моем понимании «классы», интерфейсы, компоненты, модульность архитектуры и «плюсы».
Почему 1С этого не делает?


И про split(). Собственно говоря, к регекспам этот алгоритм отношения не имеет....
Тяжело я пишу, тяжело, но пишу... Думал, на выходные закончу, но у жены свои планы...
Скоро будет.

PS. Андрею – статья достаточно старая, и, если Вы посчитаете дальнейшие ссылки на нее не уместными – можете просто промолчать – я больше этого делать не буду. Спасибо.

PPS. Всем. Судя по характеру комментариев, при подготовке публикации «плюсы» сыграли со мной злую шутку. Там не зря не конкретизируется class <name> : <ba se> - это НАСЛЕДУЕТ или РАСШИРЯЕТ. ‘:’ - и все, а остальное Ваш мыслеобраз уместный в данном контексте. Вот и я суть оставил, а остальное опустил. Не уверен, что и в этом опусе я соблюдаю баланс. В любом случае с радостью принимаю кирпичи со всех сторон и обещаю постараться донести их до алтаря мироздания.
Спасибо
44. brr 177 19.10.15 14:08 Сейчас в теме
(43) не пойдет создатель на контакт, во время 7.7 не шёл и сейчас не пойдет
45. IntelInside 126 19.10.15 17:06 Сейчас в теме
(44) brr,
Спасибо. Я в общем и не рассчитывал (вру). Значит 1С STD не будет. Пространство для маневра сужается до 1С boost или dealwithfire.dll. Жду релиза.
35. bulpi 157 15.10.15 12:51 Сейчас в теме
1с этого не сделала, потому, что 97% 1с-ников не поняли НИЧЕГО из того, что Вы написали . И я среди них :) А рынок 3% не формируют.
36. jan27 685 15.10.15 12:57 Сейчас в теме
(35) такое чувство, что вы этим гордитесь, не надо говорить за всех
CyberCerber; artbear; baton_pk; +3 Ответить
37. fishca 1160 15.10.15 13:12 Сейчас в теме
То что для нас по-приколу, для других «Обнаружена возможность исполнения неподписанного кода». Это закончится просто тем, что 1С прихлопнет лавочку удобным для нее способом и пойдем все читать Радченко v9

Существует ведь 8.3z, так что если бы хотели прикрыть, то прикрыли давно.
38. nSpirit2 15.10.15 13:20 Сейчас в теме
(37) fishca, А откуда она :D Кажется Z версия есть только 8.2 платформы 8.3 не сертифицирована еще.
(34)
1С v9 с ООП, триггерами, с преферансом

Вот это к сожалению очень мало вероятно. Я еще глупо надеюсь что 1с когда нибудь откажется от обратной совместимости с обычными формами.
41. djam_arttek 6 16.10.15 12:07 Сейчас в теме
42. fjay69 31 16.10.15 15:08 Сейчас в теме
Из всего обсуждения я извлёк одну мысль: наступает момент, когда быстродействием кода приходится жертвовать в пользу читаемости кода. Перефразирую: можно написать очень быстрый код, но посторонний человек в нём ни черта не разберёт. Можно написать не очень быстрый код, но который легко сопровождается. Писать легко читаемый быстрый код дано только избранным.
46. logarifm 1052 10.12.15 22:08 Сейчас в теме
Не ну отлично человек начал изучать 1С. Правда обычно это люди делают с другой стороны, ну вот он начала залазить с выхлопной трубы, начал классы переписывать.
47. info1i 34 16.12.15 02:42 Сейчас в теме
Давно эту статью прочел, возможность понравилась. Только тогда я еще тоже не знал, куда можно применить эту возможность. Но когда вспомнил про парсинг сайтов, регулярные выражения и сложные математические вычисления, то сразу вспомнил о необходимости использования не1Совского быстрого языка с мгновенным получением(записью) данных в 1С-базе. Думаю, использование этой связки будет лучшим способом решения сложных задач интеграции и математики.
48. baton_pk 396 01.08.17 09:14 Сейчас в теме
(0) прошу прощения, в этом деле есть подвижки??
Оставьте свое сообщение

См. также

Быстрое создание наполненных коллекций 58

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

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

28.10.2019    3198    SeiOkami    51       

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования 41

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Универсальные функции Обмен через XML

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

24.10.2019    3156    kraspila    25       

Обертка функций Excel на русском. Ускорение процесса разработки. 41

Статья Программист Нет файла v8 Windows Бесплатно (free) Загрузка и выгрузка в Excel Универсальные функции

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

24.10.2019    2294    DmitryKotov    6       

Полезняшки по СКД и построителям. Просто код 45

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Универсальные функции

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    4040    Yashazz    45       

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

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

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

07.10.2019    8998    HostHost    23       

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

Статья Программист Нет файла v8 v8::БУ БУ Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

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

05.09.2019    6738    YPermitin    22       

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

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

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

02.09.2019    4914    SeiOkami    35       

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

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

22.08.2019    4921    ildarovich    16       

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

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

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

22.08.2019    4242    ids79    7       

Отслеживание выполнения фонового задания 141

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

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

17.08.2019    10506    ids79    16       

PinkRabbitMQ - Native API компонента 1С с открытым исходным кодом, для обмена сообщениями через RabbitMQ 137

Инструменты и обработки Программист Архив с данными v8 Бесплатно (free) Разработка внешних компонент

PinkRabbitMQ представляет собой Native API компоненту для 1С Предприятия 8 (Windows 32bit и 64bit) с открытым исходным кодом на с++ (можно собрать компоненту самостоятельно). PinkRabbitMQ это низкоуровневая компонента которая реализует обмен по протоколу AMQP с брокером сообщений RabbitMQ. Для организации высокоуровнего обмена между информационными базами предназначен Адаптер. Компонента разрабатывается в рамках проекта Адаптер.

29.07.2019    7146    445    Begemoth80    110       

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

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

25.07.2019    12817    4    AlbinaAAA    23       

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

Статья Программист Руководитель проекта Нет файла v8 Бесплатно (free) Математика и алгоритмы Рефакторинг и качество кода

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

22.07.2019    8267    Stepa86    29       

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

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

16.07.2019    8213    YPermitin    34       

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

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

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

25.06.2019    21063    ids79    17       

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

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

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

24.06.2019    7815    RonX01    63       

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

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы

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

28.05.2019    3993    Oleg_nsk    93       

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

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

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

20.05.2019    11118    YPermitin    5       

Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4 101

Статья Программист Нет файла v8 v8::УФ ERP2 УТ11 КА2 Россия УУ Бесплатно (free) Практика программирования Универсальные функции Разработка

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

22.03.2019    9566    ids79    14       

Работа со строками: от простого к сложному 26

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

Простые примеры работы со строками, в конце более читаемый разбор сложных текстов.

14.01.2019    8677    Evg-Lylyk    17       

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке 485

Статья Программист Нет файла v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Зарплата Управление персоналом (HRM) Бесплатно (free) Универсальные функции

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

14.11.2018    35498    GeterX    93       

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

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

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

10.11.2018    22289    ids79    40       

Кадровые данные сотрудников в ЗУП 3.1 в отчетах 39

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Россия Управление персоналом (HRM) Бесплатно (free) Универсальные функции

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

07.11.2018    14212    fromlion    14       

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

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

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

23.08.2018    22919    Rain88    42       

Минимализмы 3 355

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

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    37137    ildarovich    44       

Таблица значений в Таблицу HTML - функция с возможностью настройки цвета шапки, заголовков, выравнивания и размера колонок 83

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

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

22.12.2017    19600    rpgshnik    21       

Пример преобразования двоичных данных в строку 26

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

Доброго всем времени суток. Хочу поделиться маленьким решением маленькой проблемы. Думаю, будет интересно новичкам. Я не раз встречал на форумах вопрос: как преобразовать двоичные данные в строку? В частности, к примеру, частенько нужно получить хэш файла MD5 в текстовом виде, но как мы знаем 1С возвращает его в виде двоичных данных.

08.12.2017    12985    frkbvfnjh    19       

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

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы

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

21.11.2017    19335    real_MaxA    22       

Определяем контекст сеанса 1С программно (Тонкий/Толстый клиенты/HTTP-Сервис/Фоновое задание и т.д.) 31

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

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

08.11.2017    16116    azubar    9       

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

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

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

12.10.2017    14813    for_sale    58       

Групповая разработка конфигураций в крупном холдинге 68

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

15.08.2017    17552    stas_ganiev    15       

Разность дат 23

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

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

11.08.2017    10136    jun-ko    24       

Простой способ преобразовать UNICODE в строку или в структуру 23

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

Первая функция получает Строку, которая содержит строчки вида «Ключ=Значение». Вторая функция получает Структуру.

07.07.2017    7434    dimasts    5       

Автоматизация процесса 1С-разработки 91

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

07.06.2017    23032    ekaruk    9       

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

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

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

29.05.2017    12741    user621724_Dimav1979    11       

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

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

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

01.05.2017    22539    ikekoval    33       

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

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

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

16.12.2016    28641    alexandersh    48       

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

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

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

12.12.2016    14565    zhichkin    9       

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

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

17.11.2016    8902    ture    40       

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

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

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

11.10.2016    188498    pumbaE    31       

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

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

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

07.10.2016    32089    bpc222    20       

Парсер JSON (Штатные средства 1С 8.3.6) 59

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

Хочу поделиться функцией чтения json, реализованной с помощью штатных средств платформы.

29.09.2016    48010    dour-dead    21       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

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

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

27.09.2016    17265    serg_infostart    15       

Используем механизмы обмена данными БСП для произвольного обмена 150

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции Внешние источники данных БСП (Библиотека стандартных подсистем)

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

23.08.2016    28375    Патриот    22       

1С, Linux, Excel, Word, OpenXML, ADO, Net Core 31

Инструменты и обработки Программист Архив с данными v8 Бесплатно (free) Разработка внешних компонент

В данной статье показаны примеры кроссплатформенной работы с файлами Excel и Word (xlsx,docx) с помощью библиотеки OpenXML и Net Core

22.08.2016    17303    51    Serginio    14       

Склонение числа прописью 26

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

Склоняет число прописью до 999999 Пример: до склонения "Не позднее 3 (Три) дней", после - "Не позднее 3 (Трех) дней"

18.08.2016    16317    maxvcb    27