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

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

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

- Разработана методика подключения внешней компоненты, снимающая ограничения на типы данных аргументов и возвращаемого значения.
- Проведено документирование основных типов данных (объектов, интерфейсов) платформы.
- Разработан объект «Делегат» для реализации функциональных объектов (указатель-на-функцию).
- Разработана концепция итератора произвольного доступа для основных контейнеров платформы с целью сопряжения со стандартной 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С в целях несанкционированного доступа к данным, не публиковать такую информацию и обеспечить сохранность таковой информации от несанкционированного доступа третьих лиц.

 

 

 

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. baton_pk 402 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 299 14.10.15 00:27 Сейчас в теме
(1) А за что ругать?

(0) Умеет наследоваться от классов-метаданных, например от Документ.ПриходныйКассовыйОрдер ?
4. baton_pk 402 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 226 14.10.15 01:39 Сейчас в теме
Дык а когда можно будет хоть что нибудь пощупать?
pvlunegov; Созинов; sorb; artbear; marsohod; CSiER; kuntashov; +7 Ответить
5. DitriX 1829 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 1201 14.10.15 09:07 Сейчас в теме
Тема интересная, но без демки и/или кода выглядит слабовато.
ЗЫ я занимался аналогичными проблемами в компоненте 1С++ для 1С 7.7 12 лет назад :)
pvlunegov; fishca; +2 Ответить
8. fishca 1183 14.10.15 09:30 Сейчас в теме
Все эти порядки, которые выигрываются кодом на С++, съедаются медленным получением данных из СУБД.
Но смысл продолжать конечно есть, быстрая обработка никогда и никому еще не мешала.
В идеале хотелось бы видеть 1С++ для 8.х.
И да, даешь демку, хотя бы и сырую, будем высушивать общими усилиями.
invertercant; djam_arttek; Созинов; Evil Beaver; +4 Ответить
9. Evil Beaver 6861 14.10.15 09:37 Сейчас в теме
Ого как, 1С++ добрался и до восьмерки! Простите, но мы не узнаём вас в гриме... Откуда вы?
nSpirit2; +1 Ответить
10. nSpirit2 14.10.15 09:59 Сейчас в теме
Ну все примеры хороши проблема в том что они совершенно не жизненны.
Я не знаю как у остальных господ но у меня задачи сортировки массивов последний раз были в институте. В реальной разработке на 1с где большая часть данных получается запросами получение не сортированных данных из базы очень редкий случай.
Но разработка несомненно очень интересная будем ждать того что можно пощупать
denis_aka_wolf; BorovikSV; +2 Ответить
11. Evil Beaver 6861 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 1370 14.10.15 10:35 Сейчас в теме
(0) Автор а можете уточнить каков тип у переменных numTot, numQty,numPri? (Из первого примера на Си)
А то как то представили кусок кода, скрыв самое интересное )
20. Evil Beaver 6861 14.10.15 15:41 Сейчас в теме
(14) BorovikSV, ну судя по фрагменту кода, автор получил доступ к реализации объектов внутри 1С, например, к ТаблицеЗначений и IValue. И дергает похоже родную реализацию таких вещей, как getRowCount и IValue::getNumeric.

Другое дело, непонятно зачем он пытается сравнивать скриптовый код и код на C++. Еще и цифры приводит. Можно подумать, кто-то сомневается, что машинный код быстрее....
21. BorovikSV 1370 14.10.15 16:03 Сейчас в теме
(20) Evil Beaver,
numTot += numQty * numPri;
где там объектами пахнет? Просто умножение и сложение.
Сдается мне что numTot, numQty,numPri имеют тип DOUBLE.
22. baton_pk 402 14.10.15 16:07 Сейчас в теме
(21) BorovikSV, может, у него операторы переопределены для Numeric-ов
23. Evil Beaver 6861 14.10.15 16:16 Сейчас в теме
(22) baton_pk, он получает некий Numeric из "родного" IValue методом getNumeric. Я сильно подозреваю, что тип значения - это внутренний тип Number/Число, реализованный внутри платформы. С операторами тогда получается интереснее. Он не только нашел, где внутри dll перегружен operator*(V8Numeric,V8Numeric), но и прописал это объявление в своих *.h И сколько таких еще вещей нужно было раскопать и описать. Иными словами, там проделана немалая работа (если это не фейк). Хочется посмотреть.
25. BorovikSV 1370 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 6861 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 2068 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 6861 14.10.15 11:25 Сейчас в теме
Вброс:
При подробном взгляде на ник автора посетила крамольная мысль.
pITable->getValueAt(iRow, 1).getIValue()->getNumeric(numQty)

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

Хочется всех возможностей T-SQL, которых нет в 1С, например явного указания как делать джойн (nested loops, merge...)
27. IntelInside 127 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 6861 14.10.15 17:45 Сейчас в теме
(27) Спасибо за ответы. Интересно. Ну про OneScript можете тереть свободно. baton_pk и я уже отметились в топике.
29. fishca 1183 14.10.15 17:49 Сейчас в теме
(27) ничего не понял, но интригуешь классно, жду.
40. shakmaev 343 15.10.15 16:08 Сейчас в теме
(27) (34) (39) Вы пишете:
Наверно буду готовить, но я так тяжело пишу...

Судя по длине и содержанию Ваших комментариев - писать Вам не так уж и тяжело. Так что ждем.
kuntashov; +1 Ответить
31. orefkov 2068 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 127 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 1405 15.10.15 03:17 Сейчас в теме
(0), Замерь производительность суммирования и сортировки на "Цикле в одну стоку"
39. IntelInside 127 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 127 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 179 19.10.15 14:08 Сейчас в теме
(43) не пойдет создатель на контакт, во время 7.7 не шёл и сейчас не пойдет
45. IntelInside 127 19.10.15 17:06 Сейчас в теме
(44) brr,
Спасибо. Я в общем и не рассчитывал (вру). Значит 1С STD не будет. Пространство для маневра сужается до 1С boost или dealwithfire.dll. Жду релиза.
35. bulpi 177 15.10.15 12:51 Сейчас в теме
1с этого не сделала, потому, что 97% 1с-ников не поняли НИЧЕГО из того, что Вы написали . И я среди них :) А рынок 3% не формируют.
36. jan27 715 15.10.15 12:57 Сейчас в теме
(35) такое чувство, что вы этим гордитесь, не надо говорить за всех
CyberCerber; artbear; baton_pk; +3 Ответить
37. fishca 1183 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 32 16.10.15 15:08 Сейчас в теме
Из всего обсуждения я извлёк одну мысль: наступает момент, когда быстродействием кода приходится жертвовать в пользу читаемости кода. Перефразирую: можно написать очень быстрый код, но посторонний человек в нём ни черта не разберёт. Можно написать не очень быстрый код, но который легко сопровождается. Писать легко читаемый быстрый код дано только избранным.
46. logarifm 1082 10.12.15 22:08 Сейчас в теме
Не ну отлично человек начал изучать 1С. Правда обычно это люди делают с другой стороны, ну вот он начала залазить с выхлопной трубы, начал классы переписывать.
47. info1i 92 16.12.15 02:42 Сейчас в теме
Давно эту статью прочел, возможность понравилась. Только тогда я еще тоже не знал, куда можно применить эту возможность. Но когда вспомнил про парсинг сайтов, регулярные выражения и сложные математические вычисления, то сразу вспомнил о необходимости использования не1Совского быстрого языка с мгновенным получением(записью) данных в 1С-базе. Думаю, использование этой связки будет лучшим способом решения сложных задач интеграции и математики.
48. baton_pk 402 01.08.17 09:14 Сейчас в теме
(0) прошу прощения, в этом деле есть подвижки??
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76823    Serginio    108    

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

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

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

07.10.2020    995    ellavs    1    

Самый простой парсинг и обработка веб-страниц в 1С

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

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    4850    YPermitin    18    

Пользовательское поле СКД одной процедурой

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

Быстрое создание пользовательского поля "выражение" одной процедурой

05.08.2020    1596    Yashazz    0    

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

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

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

10.11.2018    35333    ids79    40    

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Универсальные функции v8 БП3.0 УТ11 Россия Бесплатно (free)

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

10.07.2020    3083    quazare    5    

Вывод дерева в табличный документ СКД

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

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    2674    Yashazz    6    

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

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

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

18.02.2020    4941    randomus    20    

Универсальные функции с примерами использования Промо

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

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

26.02.2016    41340    unichkin    46    

Сходство Джаро - Винклера. Нечеткое сравнение строк

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

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

25.12.2019    7103    brooho    17    

Полезности | Дерево значений | Обычные формы |

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

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

04.12.2019    5730    Mellow    7    

Использование XML-схемы из макета внешней обработки

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

Простой способ использования XML-схем из макета внешней обработки.

28.10.2019    10995    Olesia_Matusevich    10    

Минимализмы 3 Промо

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

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

19.02.2018    46846    ildarovich    45    

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

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

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

28.10.2019    7238    SeiOkami    66    

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

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

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

24.10.2019    11557    kraspila    30    

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

Загрузка и выгрузка в Excel Универсальные функции v8 Бесплатно (free)

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

24.10.2019    7293    DmitryKotov    6    

Выполнение произвольного кода в фоновых заданиях Промо

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

Если надо быстро провести 100`000 документов...

13.01.2016    24702    unichkin    13    

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

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

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

10.10.2019    10097    Yashazz    45    

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

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

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

05.09.2019    29405    YPermitin    24    

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

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

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

02.09.2019    9901    SeiOkami    35    

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

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

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

24.03.2014    45411    ildarovich    116    

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

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

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

22.08.2019    12561    ildarovich    19    

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

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

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

22.08.2019    15236    ids79    8    

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

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

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

17.08.2019    32180    ids79    16    

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

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

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

07.08.2015    67479    tormozit    27    

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

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

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

25.07.2019    54385    AlbinaAAA    28    

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

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

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

22.07.2019    16684    Stepa86    33    

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

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

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

16.07.2019    27706    YPermitin    34    

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

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

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

24.12.2012    296835    Evil Beaver    173    

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

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

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

25.06.2019    54143    ids79    25    

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

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

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

24.06.2019    14300    RonX01    65    

Распределение оплаты по товарам Промо

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

Учебная задача. Оплата приходит по заказу. Требуется запросом распределить её по товарам. Практическая задача была сложнее. Упростил специально для иллюстрации. Сначала собираем в одну таблицу заказы и товары. Затем ОБЪЕДИНТЬ ВСЕ с оплатами. Потом намазываем оплату на товар.

04.08.2014    19181    Трактор    5    

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

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

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

28.05.2019    8013    Oleg_nsk    96    

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

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

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

20.05.2019    28718    YPermitin    7    

Сохранение запроса со всеми параметрами и временными таблицами

Универсальные функции v8 v8::УФ Россия Бесплатно (free)

Функция сохранения запроса со всеми параметрами и временными таблицами в формате *.q1c для открытия в консоли запросов с диска ИТС.

13.05.2019    6535    Serge R    5    

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

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

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

07.05.2013    110435    bpc222    327    

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

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

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

22.03.2019    18096    ids79    16    

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

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

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

15.01.2019    11949    IVC_goal    7    

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

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

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

14.01.2019    31944    Evg-Lylyk    17    

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

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

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

1 стартмани

30.04.2014    35141    bforce    22    

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

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

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

05.12.2018    13406    _ASZ_    33    

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

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

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

14.11.2018    91782    GeterX    121    

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

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

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

1 стартмани

04.12.2013    30763    juntatalor    49    

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

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

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

07.11.2018    34569    fromlion    23    

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

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

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

23.08.2018    39150    Rain88    46    

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

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

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

27.06.2013    50159    bpc222    52    

Простой способ программно открыть заполненную форму нового (незаписанного) документа в тонком клиенте

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

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

09.06.2018    11410    Serge R    12    

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

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

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

15.03.2018    12157    vasilev2015    24    

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

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

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

12.03.2018    19307    ildarovich    19