Если хочется ООП с наследованием и полиморфизмом

Публикация № 1690230 21.07.22

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

ООП парадигма объектно-ориентированное программирование наследование полиморфизм абстракция классы виртуальные методы

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

Исследуем применение ООП-подхода на примере сортировки коллекций. Вариантов для эмуляции объектов (экземпляров класса) средствами 1С мне видится всего два: с помощью объекта метаданных (например Обработка) и с помощью универсальной коллекции языка 1С (например Структура). Первый описан неоднократно, например, здесь. В этом варианте поля класса являются реквизитами обработки, а методы класса - функциями и процедурами в модуле объекта обработки. Остановимся более подробно на втором варианте.

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

Создадим для примера класс (общий модуль) КлассБазовый, и определим в нем конструктор.

Функция СоздатьОбъект() Экспорт
	Результат = Новый Структура;
	Результат.Вставить("Класс",КлассБазовый);

	Результат.Вставить("ТипОбъекта",Результат.Класс);

	Возврат Результат;
КонецФункции 
 

Функция ТипОбъекта(Объект) Экспорт
	Возврат Объект.Класс;
КонецФункции 

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

Функция СоздатьОбъект()Экспорт
	// наследуем поле "Класс" и метод "ТипЗначения()" класса-родителя
	Результат = КлассБазовый.СоздатьОбъект();
	
	// Переопределим поле "Класс"
	Результат.Вставить("Класс",КлассНовый);
	
	Возврат Результат;
КонецФункции 

В конструкторе мы переопределим поле Класс, но метод ТипОбъекта() нас вполне устраивает, нам переопределять его не надо. При создании экземпляра класса КлассНовый значение элемента структуры ТипОбъекта будет унаследовано от класса КлассБазовый и не будет переопределено в конструкторе. Это означает, что мы, глядя на объект класса КлассНовый, увидим, что метод ТипОбъекта() определен в классе (общем модуле) КлассБазовый:

НовыйОбъект = КлассНовый.СоздатьОбъект();
Модуль = НовыйОбъект.ТипОбъекта;
Сообщить(Модуль.ТипОбъекта(НовыйОбъект)); 

или, покороче:

НовыйОбъект = КлассНовый.СоздатьОбъект();
Сообщить(НовыйОбъект.ТипОбъекта.ТипОбъекта(НовыйОбъект)); 

Конструкция "НовыйОбъект.ТипОбъекта.ТипОбъекта(НовыйОбъект)" выглядит... м-м-м странно и наверняка вызовет язвительную усмешку у тру-ООП-программистов, но мы же проводим исследование, верно? Зато такой подход позволяет эмулировать позднее связывание, т.е. когда только в момент вызова определяется какой из методов вызывать, а также дает возможность эмулировать таблицу виртуальных методов - место хранения ссылок на методы классов. Таблица здесь не является таблицей в прямом смысле этого слова, она "размазана" по элементам структур разных классов. 

Более подробный пример для класса КлассУпорядоченнаяКоллекция:

Функция СоздатьОбъект()Экспорт
	// наследуем поля и методы класса-родителя
	Результат = КлассБазовый.СоздатьОбъект();
	
	// Поля
	Результат.Вставить("Класс",КлассУпорядоченнаяКоллекция);
	Результат.Вставить("Предмет");
	
	// Абстрактные методы, которые не определены в этом классе
	Результат.Вставить("ВывестиЭлемент");
	
	// Новые методы
	Результат.Вставить("Количество", Результат.Класс);
	Результат.Вставить("Получить", Результат.Класс);
	Результат.Вставить("Вывести", Результат.Класс);
	
	Возврат Результат;
КонецФункции 


Функция Количество(Объект)Экспорт
	Возврат Объект.Предмет.Количество();
КонецФункции 

Функция Получить(Объект, Индекс)Экспорт
	Возврат Объект.Предмет.Получить(Индекс);
КонецФункции 

Процедура Вывести(Объект)Экспорт
	ВГраница = Объект.Количество.Количество(Объект) - 1;
	Для Индекс = 0 По ВГраница Цикл  
		Элемент = Объект.Получить.Получить(Объект, Индекс);
		Объект.ВывестиЭлемент.ВывестиЭлемент(Объект, Элемент);
	КонецЦикла; 	
КонецПроцедуры

Предмет здесь - некая коллекция (Массив, СписокЗначений, ТаблицаЗначений), для которой определено отношение порядка, т.е. каждый элемент имеет свой порядковый номер - индекс.

Для этого класса определены очевидные методы Количество() и Получить(), а вот с методом Вывести() ситуация интереснее. Алгоритм вывода коллекции простой - в цикле от 0 до верхней границы получаем очередной элемент и выводим его. Вполне возможна ситуация, когда у какого-либо потомка появится свой, переопределенный метод Количество() или метод Получить(). Поэтому вызов этих методов происходит посредством обращения к элементам структуры-объекта, содержащим ссылки на общие модули. Методы, которые можно переопределить в классах-потомках называются виртуальными методами. Метод же ВывестиЭлемент() вообще не определен для этого класса (в этом общем модуле). Предполагается, что этот метод должен быть определен в классе-потомке (необязательно потомке первого уровня!). Такие методы, как ВывестиЭлемент(), называются абстрактными методами, а классы с такими методами - абстрактные классы.

Вернемся однако к нашей основной задаче - сортировке. Я не буду останавливаться на процессе проектирования, а сразу покажу результат:

Иерархия классов:

Наследование методов для КлассМассивЧисловой и КлассМассивСтруктур:

Здесь жирным шрифтом помечены методы, определенные или переопределенные в классе, серым цветом - унаследованные, курсивом - абстрактные методы.

Похожим образом определен и класс КлассСписокЗначений.

Процедура сортировки описана в абстрактном классе КлассУпорядоченнаяКоллекция, она использует приватный (не экспортный) метод СравнитьИПоменять()

Процедура Сортировать(Объект)Экспорт
	ВГраница = Объект.Количество.Количество(Объект) - 1;
	Для Индекс = 1 По ВГраница Цикл  		
		Индекс2 = Индекс;
		Пока Индекс2 > 0 Цикл
			Если Не СравнитьИПоменять(Объект, Индекс2 - 1, Индекс2) Тогда
				прервать;
			КонецЕсли; 
			Индекс2 = Индекс2 - 1;
		КонецЦикла; 		
	КонецЦикла; 	
КонецПроцедуры

Функция СравнитьИПоменять(Объект, Знач Индекс1, Знач Индекс2)
	Результат = Ложь;	
	Элемент1 = Объект.Получить.Получить(Объект, Индекс1);
	Элемент2 = Объект.Получить.Получить(Объект, Индекс2);
	Если Объект.СравнитьЭлементы.СравнитьЭлементы(Объект, Элемент1, Элемент2) Тогда
		Объект.Установить.Установить(Объект, Индекс1, Элемент2);
		Объект.Установить.Установить(Объект, Индекс2, Элемент1);
		Результат = Истина;
	КонецЕсли; 
	Возврат Результат;
КонецФункции 

Методы СравнитьЭлементы() определены в классах-потомках последнего уровня, но это не мешает их использовать в процедуре Сортировать() у предка. 

Метод СравнитьЭлементы() класса КлассМассивЧисловой:

Функция СравнитьЭлементы(Объект, Элемент1, Элемент2)Экспорт
	Возврат Элемент1 > Элемент2;
КонецФункции 

Что же у нас получилось в итоге такого моделирования ООП?

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

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

А теперь о картинке в заголовке статьи. 

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

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

К статье приложена конфигурация с примерами сортировок числового массива, массива структур "Фамилия,Имя,Отчество" и списка значений (дата - представление даты). Работа проверялась на платформе 8.3.18.1363.

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

На этом всё. Как всегда, приветствуются замечания / дополнения / комментарии.

Предыдущая статья:

Следующая статья:

 

 
 Некоторые из прочих моих публикаций

 

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

Наименование Файл Версия Размер
Примеры ООП

.dt 45,04Kb
0
.dt 45,04Kb Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. a_a_burlakov 221 21.07.22 14:01 Сейчас в теме
Если хочется ООП с наследованием и полиморфизмом...
Если хочется функционального программирования с функциями высшего порядка и map, filter, reduce...
Если хочется низко-низкоуровневого программирования с битами и байтами...

Ответ, по-моему, один: переходите на другие языки. Наша 1С - она особа весьма специфичная и неприхотливая. Это как девушка, которая выросла и работает в деревне. Её не нужны цветы, конфеты и прочий синтаксический сахар, у неё любимый шрифт - это древний и уродливый Courier New. Но вот крепким хозяйственникам она очень нравится: она многого не требует, кучу денег не забирает, косметикой не балуется, но и трактор заведёт, и поле вспашет, и скотину не потеряет. Правда, и в своё хозяйство не пускает кого попало. Словом, молодец девка, но на любителя. А тем, кто любит вот эти все шуры-муры, красоту и цветочки - нужно к столичным барышням обращаться.

А на 1С натягивать ООП, низкоуровневое и функциональное программирование - это всё равно что сельской девушке дать Mercedes Benz или Lamborghini. Ради шутки можно, но ей это в хозяйстве не нужно. Даже если её посадить за Lamborgini, она будет на свой трактор оглядываться - так воспитана...
cheshirshik; abeliavtsev; mysm; Sejix; PLAstic; Alxby; Jeka44; PowerBoy; +8 Ответить
2. Alxby 935 21.07.22 14:12 Сейчас в теме
3. Alxby 935 21.07.22 14:19 Сейчас в теме
(2)Я ведь не зря вставил такую картинку в статью - у кого-то ностальгия, вызванная импринтингом, кто-то прочитал "Java за две недели", а кто-то хочет чистый код по Мартину. В этом нет ничего плохого - поиграться и вернуться к крепкому хозяйству.
a_a_burlakov; +1 Ответить
4. a_a_burlakov 221 21.07.22 14:22 Сейчас в теме
(3) Да, я согласен, и свой пост не в упрёк написал, и с выводами в самой статье согласен. )
5. TimurD 5 21.07.22 14:55 Сейчас в теме
Согласен, что полноценного ООП сейчас внедрять не нужно в 1С (возможно в отдаленном будущем). Но наследование и полиморфизм кто бы что не говорил - очень крутая штука (в тему про абстрактные объекты, формы и пр.). Самого посещают мысли сделать (пусть и ограниченно) наследование и полиморфизм, скажем, в виде плагина на ЕДТ. Но пока интересной мысли не пришло в голову как это в текущей парадигме 1С реализовать.
6. Alxby 935 21.07.22 15:10 Сейчас в теме
(5)Наследование и полиморфизм в первую очередь требуется для сокращения объема кода при описании схожего функционала для разных сущностей. Для решения большинства задач 1С (не для всех) можно выделить общий код в отдельный метод и оставаться в рамках процедурного подхода. С формами, не с кодом, - да, не помешало бы.
7. PLAstic 290 22.07.22 10:09 Сейчас в теме
Не понимаю, зачем...

У меня 20+ лет в 1С из них примерно 10 во франче и я не могу привести практических примеров, когда бы мы такие сели и задумались "даа... а вот был бы у нас полиморфизм..."
Я пришёл после Borland C++ Builder, где ООП вполне было и оно там было востребовано. Здесь же это в принципе не надо, здесь Предметно-Ориентированное Программирование.
8. Alxby 935 22.07.22 10:19 Сейчас в теме
(7)Я с Вами согласен, но найдется и много несогласных: "Нуралиев! Дай нам ООП!. Почему 1С не развивается? Там даже ООП нету! ". А объяснить, зачем оно нужно, обычно не могут.
9. cheshirshik 37 05.03.23 16:04 Сейчас в теме
Тем не менее сама 1с иногда использует подходы ООП в своих типовых конфигурациях. Например я нечто похожее видел в ЗУП. Не типовое использование обработки, когда по сути обработка представляет в себе некий объект принимающий в эскпортные переменные (как в свойства) какие-то данные и выдающая на выходе в такую же экспортную перменную некий результат, а расчет происходит внутри обработки в закрытых процедурах и функциях.
10. Alxby 935 05.03.23 16:46 Сейчас в теме
(9)Вполне может быть. Идея с обработкой в общем-то лежит на поверхности. Здесь на сайте есть не одна статья о таком подходе.
cheshirshik; +1 Ответить
11. cheshirshik 37 05.03.23 20:52 Сейчас в теме
(10)
Речь не о идеи, а о практическом примирением. 😉 Причём самим вендером. 😀
Оставьте свое сообщение

См. также

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

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

Не желаете ли очередную порцию интересных задач?

03.01.2023    1143    Alxby    18    

4

Почему НДС отличается на одну копейку: решение с помощью таблицы значений

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 НДС Абонемент ($m)

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

1 стартмани

12.12.2022    1519    0    kucar_ip    5    

2

Если хочется низко-низкоуровневого программирования с битами и байтами

Математика и алгоритмы Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

01.12.2022    726    Alxby    16    

9

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

Механизмы платформы 1С Платформа 1С v8.3 План видов характеристик Абонемент ($m)

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

1 стартмани

20.09.2022    2874    Alxby    9    

45

Кодим обозреватель 1С кодом и отладка в режиме "Предприятие"

WEB-интеграция Языки и среды Инструментарий разработчика Платформа 1С v8.3 Абонемент ($m)

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

10 стартмани

25.08.2022    1855    1    Steelvan    2    

5

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

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

Разбор трассировки асинхронных вызовов в дракон-схемах

Языки и среды Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

16.08.2022    1393    0    flex81    2    

1

Найди слова

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример примитивной автоматизации с помощью 1С (и не только).

3 стартмани

11.08.2022    2219    0    SerVer1C    10    

5

IDN и Punycode в 1С

Универсальные функции Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка "Punycode конвертер".

1 стартмани

01.05.2022    2638    2    SpaceOfMyHead    2    

7

Реализация задачки с собеседования: найти максимальное число, но не более, чем ограничено параметром

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

31.03.2022    3233    0    serverstar    15    

2

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    5207    6    kalyaka    11    

36

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

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

3 500 рублей

Вычисление хеша по алгоритму fnv1a

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Вычисление средствами платформы хеш суммы по алгоритму fnv1a 32/64.

1 стартмани

01.02.2022    3136    0    dim_zal    0    

5

Решение задачи Эйнштейна на 1С (управляемые формы)

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

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

1 стартмани

13.08.2021    4577    2    VGorkunov    4    

8

Разработка с учетом Показателей

Математика и алгоритмы Анализ и проектирование ИТ-систем Платформа 1С v8.3 Россия Абонемент ($m)

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

1 стартмани

04.06.2021    4600    0    blockcode    1    

1

Машинное обучение и анализ данных

Математика и алгоритмы Идеи и тренды в разработке Платформа 1С v8.3 Абонемент ($m)

Данная конфигурация предназначена для автоматизации процесса машинного обучения и анализа данных средствами 1С.

1 стартмани

04.05.2021    7637    19    cdrw3    11    

15

Алгоритм и обработка для проведения розыгрыша среди анкет

Математика и алгоритмы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Описанный алгоритм (и приложенная обработка) позволяют организовать проведение розыгрыша среди анкет практически на любой управляемой конфигурации и платформе 1С 8.

1 стартмани

12.03.2021    4371    0    delta    2    

2

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

Алгоритм Карацубы

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация метода Карацубы - функции быстрого умножения, которая позволяет перемножать два n-значных числа с битовой вычислительной сложностью (реализация на платформе 1С:Предприятие 8.3 (8.3.9.2233))

1 стартмани

31.08.2020    4260    2    Tatsiana    3    

3

Решение задачи Эйнштейна на платформе 1с

Математика и алгоритмы Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

12.08.2020    5786    4    itmind    2    

7

Конструктор Json Schema с функцией валидации JSON

WEB-интеграция Языки и среды Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Абонемент ($m)

Инструмент для создания Json-схем по формату 4 драфта. В современном мире модно пользоваться Http-сервисами и Json, но если для старого доброго xml все уже придумано и xsd схемы можно рисовать в 1С из коробки, то с json и его форматом Json schema все не так хорошо. Зачастую нужно стандартизировать формат сообщений обмена json и для этого можно воспользоваться Конструктором. Есть возможность проверить свой Json на соответствие схеме. Схемы после выгрузки проходят валидацию в Liquid studio 2020. Стандартизируйте обмен Json с комфортом и удобством.

1 стартмани

16.07.2020    11573    40    Segate    8    

17

Пример программирования методом Конечных автоматов на базе написания парсера CSV

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

Способ реализации программирования методом Конечного автомата на примере написания парсера CSV-файла с обработкой двойных кавычек и многострочным текстом в ячейках.

1 стартмани

17.06.2020    6359    0    Salimbek    3    

3

Расчет времени циклов солнца

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расчет времени восхода, полдня, заката и прочих стадий движения светила на горизонте.

1 стартмани

25.05.2020    3514    0    116hrus    0    

2

Готовые переносы данных из различных конфигураций 1C Промо

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

Treemapping. Демонстрационная обработка

Математика и алгоритмы Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример реализации диаграммы вида Treemap на 1С

1 стартмани

27.02.2020    8407    16    randomus    4    

30

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

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

06.01.2020    4525    5    WalterFOX    1    

3

Алгоритмы поиска пути в графе. Часть 2

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Новые возможности, ранее реализованных алгоритмов поиска пути в графе на платформе 1С 8.3.

1 стартмани

13.08.2019    13211    11    RonX01    10    

92

Алгоритмы поиска пути в графе

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализуем алгоритмы поиска пути в графе на платформе 1С 8.3, такие как алгоритм А*, поиск в ширину, жадный поиск, алгоритм Дейкстры и вконце волновой.

1 стартмани

09.07.2019    28780    14    RonX01    11    

116

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

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

Сортировка кучей (пирамидальная сортировка, heap sort)

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Алгоритм сортировки массива кучей (пирамидальная сортировка).

1 стартмани

29.03.2019    6302    4    FirstSmart    0    

5

Случайная неслучайная скидка

Ценообразование, анализ цен Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Абонемент ($m)

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

1 стартмани

24.01.2019    4162    0    Hokum    1    

1

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

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

Математика и алгоритмы Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Схожесть строк. Метод Джаро-Винклера. В обработке реализован алгоритм нечеткого сравнения строк.

3 стартмани

20.04.2018    30195    114    Serg1701    20    

141

Решение задачи коммивояжера алгоритмом Литтла

Математика и алгоритмы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

12.04.2018    15442    41    van_za    20    

52

Умножение больших чисел методом Карацубы

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Алгоритм умножения больших чисел методом Карацубы, более эффективный, чем метод умножения в столбик.

1 стартмани

10.01.2018    8948    0    Kosmovski    10    

-2

Определение похожести строк или фраз (алгоритм нахождения расстояния Дамерау Левенштейна)

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация алгоритма поиска расстояния Дамерау Левенштейна (Damerau–Levenshtein distance) для определения похожести слов или фраз.

1 стартмани

14.12.2017    14591    74    PerlAmutor    14    

47

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

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

Математика и алгоритмы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

19.05.2017    27281    88    romasna    31    

11

Тестируем алгоритмы для торговых роботов срочного рынка РТС

Займы, кредит, лизинг Математика и алгоритмы Платформа 1С v8.3 Финансовые услуги, инвестиции Россия Управленческий учет Абонемент ($m)

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

1 стартмани

29.04.2017    16837    14    rrider    2    

14

Задачи по программированию на 1С

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Сборник задач по программированию. Начало...

1 стартмани

18.04.2017    30451    7    Xershi    12    

7

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

Оптовая торговля Учет ТМЦ Математика и алгоритмы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Управленческий учет Абонемент ($m)

В статье рассматривается алгоритм пополнения склада по теории ограничений систем. Сами подходы описаны в книге Элия М. Голдратта «Я так и знал! Теория ограничений для розничной торговли».

1 стартмани

26.01.2017    22902    17    vva    6    

21

Набор математических функций

Универсальные функции Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Небольшой набор математических функций для работы с массивами чисел.

1 стартмани

12.01.2017    21816    7    SvoyakMartin    23    

22