Создание внешних компонент 1С по технологии NativeAPI на языке Eiffel

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

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

32
Статья знакомит с новым средством создания NativeAPI внешних компонент для 1С - языком Eiffel. Она будет интересна высококвалифицированным разработчикам 1С, которые имеют также опыт программирования на других языках. Eiffel - это высокоуровневый кроссплатформенный полностью объектно-ориентированный язык, обладающий красотой и элегантностью. Как инструмент создания внешних компонент он способен составить конкуренцию C++.

Вступление

За годы своего развития платформа 1С:Предприятия становилась все более открытой. Возможность работы с текстовыми файлами и табличными данными в dbf-формате в 90-е годы в 2000-е дополнилась доступностью многих современных средств интеграции. Здесь и веб-сервисы, и поддержка схем xml при обменах со сторонними системами, и возможность подключения к внешним источникам данных, и встроенный почтовый клиент. К сожалению, в развитии технологии внешних компонент наблюдается противоположный процесс. Это можно видеть, последовательно просмотрев диски ИТС с демонстрационными примерами от самой фирмы 1С. С выходом технологии разработчикам были доступны образцы создания компонент на C++ и Delphi, затем в список языков включили Visual basic 6, еще позже C#. Тогда 1С декларировала, что компоненту можно создать на любом компилируемом языке, поддерживающем COM. Ситуация резко изменилась после выхода версии 8.2 и создания технологии NativeAPI. Теперь программисты вынуждены довольствоваться ее демонстрацией только на C++. Причины такого сужения доступных средств лежат на поверхности, прежде всего это необходимость поддержки 64-битной архитектуры и кроссплатформенность.

Не будем уподобляться многим программистам (в том числе очень авторитетным), которые не переносят C++. Автор этой статьи придерживается более философского подхода, который можно сформулировать, как «каждому инструменту - свое место», но он не уверен, что технология внешних компонент является монопольным правом C++. Другое дело, что этот язык трудно вытеснить из-за жестких ограничений, накладываемых на формат компоненты 1С: необходимость создания машинных исполняемых файлов для каждой платформы (а не промежуточных образов как в Java или C#), возможность статической сборки компоненты в один, независящий от внешних библиотек и сред, файл. Кроме того, возросшие вкусы современных программистов выдвигают повышенные требования к инструменту замены: полноценная поддержка ООП, включая автоматическую сборку мусора, красота и элегантность; иными словами, необходимо оставить всю мощь, гибкость и эффективность C++, но убрать его недостатки и сложность. Казалось бы, требования невыполнимые и невозможно найти такой язык и платформу. Но автор смело заявляет: Есть такой язык!

История развития технологии внешних компонент

Давайте посмотрим, как менялся подход 1С к созданию внешних компонент с конца 90-х по настоящее время.

Кроме перечисленных плюсов и минусов COM-компонент, следует отметить, что для их создания программисту 1С достаточно незначительно расширить багаж своих знаний. Недостаток, указанный в третьем пункте думаю знаком даже программистам, не писавшим компоненты: стоит написать вместо ПодключитьВнешнююКомпоненту -  ЗагрузитьВнешнююКомпоненту в надежде что 1С сама установит файл, и (привет системным администраторам!) потребуется регистрация компоненты в реестре Windows, которая невозможна без прав локального администратора. А если мы создаем компоненту на .NET, то нужно писать свой инсталлятор или пользоваться инструментами платформы .NET ( утилита regasm).

Технология внешних компонент на основе NativeAPI

Теперь посмотрим на внешние компоненты, разработанные на основе NativeAPI.

  • Эта технология удобна для 1С-разработчиков тем, что установка компоненты не требуется, 1С ее разворачивает и устанавливает сама.
  • А недостатком является сложность их создания. Фактически, сейчас в качестве примера компонент использует только C++.
    Конечно, можно создавать внешние компоненты и на Delphi. Но нюанс в том, что Kylix (компилятор приложений, написанных на Delphi, для работы под Linux) начиная с 2002 года уже не поддерживается, поэтому, у таких компонент могут возникнуть проблемы с кроссплатформенностью.

Язык программирования Eiffel

Язык Eiffel был разработан Бертраном Мейером, одним из ведущих специалистов по объектно-ориентированному программированию (ООП) во второй половине 80-х годов, промышленный компилятор и среда разработки выпущены в середине 90-х, им же основанной фирмой Eiffel Software (тогда ISE). Уже в те годы Eiffel удовлетворял всем критериям объектной-ориентированного языка, которые указаны на слайде:

Сила языка Eiffel заключается в его бескомпромиссном рационализме. Никаких лишних понятий и концепций, не имеющих выражения в языке или математической модели, которой является теория абстрактных типов данных. По сути, абстрактный тип данных – это класс без его конкретной реализации. Абстрактный тип данных определяется набором аксиом, характеризующих его поведение. Аксиомы при реализации типа как класса преобразуются в сущности (features), которые делятся на запросы, команды и конструкторы. Запрос возвращает данные о состоянии экземпляра класса (объекта), команда – изменяет это состояние, конструктор создает объект класса.

Уже первые версии реализации языка и среды разработки (Eiffel Studio) значительно опережали «конкурентов» (Java и позже появившейся C#) в плане следования стандартам ООП. Eiffel служил и служит лабораторией, где впервые реализуются новые (и как правило успешные) возможности, которые со временем появляются в более распространенных языках и средах. Например, множественное наследование до сих пор недоступно программистам Java и C#, ковариантность шаблонов появилась в C# только в net framework 3.5 и в это же время в Java. Ковариантное согласование параметров (аргументов) невозможно в других языках. Например, для команды копирования в базовом классе в Eiffel можно написать:

copy (other: like Current)

В классе-потомке аргумент other будет согласованно изменять свой тип. Неотъемлемой чертой Eiffel является идея контрактного программирования, берущая начало в теории абстрактных типов данных. Контракты позволяют на порядок повысить качество программного продукта и облегчают отладку. Контракты – прямое выражение алгебраического подхода моделирования внешнего мира, присущего программным объектам. Аксиоматические сущности предельно четко выражаются через классы и контракты. (Контракты были введены в C# начиная с версии 4.5.)

Синтаксис класса в Eiffel

На скриншоте показано, как может выглядеть реализация класса натуральных чисел в аксиоматике Пеано.

  • В разделе invariant в конце класса описываются инварианты (аксиомы) класса.
  • Члены класса (features) не делятся как в традиционных языках на поля, свойства и методы. По их функциональности они могут быть разделены на запросы и команды. Запросы предоставляют информацию и состоянии класса, команды - модифицируют это состояние. 

Примеры технологий, реализованных в Eiffel раньше других языков программирования

В Eiffel были реализованы многие революционные подходы, которые потом "перетекли" в другие промышленные языки. Например:

  • Ковариантность, которая в .NET появилась в 2000-х годах, а в Eiffel была изначально.
  • Контрактное программирование, для которого только после выхода .NET версии 4.5 появились аддон для VisualStudio и соответствующий namespace.
  • Многопоточное программирование на основе async/await, которые совсем недавно появились в .NET. Аналогичный по простоте механизм был введен в Eifel в серенине 2000-х.
  • Проблема обращение к нулевой ссылке, когда вызывается метод или свойство переменной, которая еще не инициализирована. В Eiffel изначально предлагается очень простое решение этой проблемы. (см. операторы detachable/attached языка).

Дополнительные возможности Eiffel, которые позволяют создавать полноценные внешние компоненты

Рассмотрим, как Eiffel удовлетворяет требованиям по сборке внешних компонент:

 

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

Средства интеграции Eiffel c С++

В первом примере читатели статьи, пасавшие NativeAPI компоненты лего узнают выделение памяти для объектов, создаваемых в компоненте и передаваемых в 1С. Имена параметров из Eiffel предваряются в C++ знаком $. Пример демонстрирует интеграцию кода C++ в Eiffel. Второй пункт слайда - вызов процедур Eiffel из C++ реализуется с помощью библиотеки CECIL, которая включает функции и макросы преобразования типов и API для управления сборщиком мусора. Для использования CECIL скомпилированный проект на Eiffel studio собирается утилитой make (nmake) в статическую библиотеку (*.lib), которая затем подключается к проекту на C++. Именно этим способом собирается внешняя компонента, реализуемая на языке Eiffel.

Архитектура шаблона внешней компоненты для 1С, написанного на Eiffel

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

EiffelStudio для диаграмм классов употребляет BON (business object notation) нотацию, которую будем использовать и мы. В ней класс отображается в виде овала, связи между классами в виде сплошной (родитель – потомок) или пунктирной стрелки (поставщик – клиент). В виде прямоугольника мы обозначили набор экспортируемых для dll функций. Как известно, их назначение – дать декларативное описание объекта (или объектов) компоненты и создать по запросу указанный объект. Чтобы не заставлять программиста, использующего этот шаблон, каждый раз модифицировать код на C++, требуется Eiffel класс COMPONENTNAMES, который возвращает имена объектов компоненты. Как и в EiffelStudio класс выделен более светлым фоном, потому что он заморожен, т.е. не допускает наследования.

Запуск движка Eiffel средствами CECIL рассмотрим на примере экспортной функции GetClassNames:

Для старта необходимо подготовить ряд параметров среды (командную стоку, глобальные переменный ОС) и вызвать функцию eif_rtinit(), что делается в процедуре EifEnvInit. Окончание работы должно завершаться reclaim() для освобождения памяти и принудительного вызова сборщика мусора либо завершение работы произойдет автоматически при завершении процесса или выгрузке DLL, что актуально для внешней компоненты. Код функции представляет собой пример вызова сущности класса Eiffel из C++. eif_create выделяет память для объекта, но не вызывает конструктор класса, поэтому за ее вызовом требуется вызов конструктора для инициализации свойств и соблюдения инварианта класса. В данном примере инициализация не требуется, поэтому вызов отсутствует. Объекты Eiffel в C++ могут иметь тип EIF_OBJECT или EIF_REFERENCE, а также для некоторых типов EIF_INTEGER, EIF_POINTER и др. Оба типа представляют собой указатели, различие между ними в том, что EIF_OBJECT является «зафиксированным» в памяти объектом, который защищен от манипуляций сборщика мусора (перемещение в памяти с целью оптимизации), а EIF_REFERENCE – нет. Понятно, что вызовы сущностей из C++ должны производится только от EIF_OBJECT, но по окончании работы с объектом необходимо обязательно перевести его в нефиксированный статус вызовом eif_wean. Аналогичная инициализация среды Eiffel выполняется функцией GetClassObject, возвращающей EiffelAddIn, который служит по сути классом-оберткой над объектом компоненты в Eiffel. Его методы вызывают соответствующие сущности класса ECOMPONENTBASE. Их структура однотипна, приведем для примера код метода CallAsProc:

Массив параметров tVariant преобразуется тип TUPLE. Кортеж TUPLE[X1…Xn] в Eiffel определяется как последовательность n элементов, которая может быть больше чем n. Они широко используются в агентах (указателях на функции), inline агентах (анонимных функциях) и лямбда выражениях. Класс EiffelAddIn содержит также служебные процедуры для преобразования строк и параметров, передаваемых из 1С в Eiffel и обратно. Типу tVariant соответствует тип V8_ARG, который будет рассмотрен позже.

Базовый класс ECOMPONENTBASE, реализация свойств и методов компоненты

Класс ECOMPONENTBASE является передаточным звеном между декларативными вызовами свойств и методов компоненты из 1С и реальным ее объектом в Eiffel. Таким образом он должен выполнять две функции: предоставлять сущности для вызовов из промежуточного слоя C++ (класс EiffelAddIn) и отражать вызовы на объект компоненты, который от него наследуется. Поскольку среда и компилятор языка Eiffel не использует промежуточные метаданные, вроде байт-кода или msil, он не имеет развернутых средств рефлексии. В какой-то степени класс ECOMPONENTBASE их заменяет. Посмотрим на его инициализацию и некоторые свойства:

Напомним, что свойства (запросы) класса, которые в других языках называются полями в Eiffel’е всегда доступны только для чтения. Запрос addinname должен быть обязательно переопределен в классе-потомке (deferred), это имя класса-компоненты в 1С, которое создается инструкцией Новый(«AddIn.name»). Команда make – вспомогательная и служит для вызова из конструктора наследника, например:

В секции объявления наследования (inherit) указывается, что сущность make базового класса переопределяется. Кроме инструкции redefine в этой секции могут встречаться ряд других (undefined, select, rename, export), служащих для управления видимостью и разрешения конфликтов при множественном и дублируемом наследовании. Eiffel позволяет сделать любую сущность – конструктором, в свою очередь конструкторы базового класса не являются таковыми у потомка. В секции create происходит объявление make конструктором, а внутри можно видеть вызов предшественника Precursor. Сущность make служит для сохранения контекста 1С и указателя на менеджер памяти в компоненте. Также они инициализируют описатели свойств и методов V8_PROP и V8_METHOD, код которых рассмотрим позднее. Описатели хранятся списком LINKED_LIST[G]:

Инварианты класса очевидны и всегда подразумеваются программистом, пишущим класс, но только в Eiffel’е они имеют явное выражение.

Класс V8_ARG является представление типа Variant, а это означает, что он может содержать значение переменной языка 1С:Предприятия, которая передается в компоненту. На его примере рассмотрим неявную конвертацию типов в Eiffel:

Конструктор класса может быть одновременно конвертером, если он дополнительно объявлен в секции convert и в этой же секции объявлена функция обратной конверсии.

И в заключение, рассмотрим устройство механизма рефлексии для параметров и свойств компоненты.

Класс V8_FEATURE определяет общие свойства свойств и методов и алгоритм их поиска для методов FindMethods и FindProps:

Переопределив сущность is_equal базового класса ANY, мы получаем возможность поиска путем пообъектного сравнения в списках LINKED_LIST.

В Eiffel в отличие от платформы NET отсутствует рефлексия типов, поэтому описатели свойств и методов компоненты приходится писать в подобном стиле:

Пожалуй, это единственный минус в архитектуре компоненты.

В заключение раздела на примере сущности callasfunc познакомим читателей с синтаксисом попытки приведения типов в Eiffel:

В кортеже параметров (TUPLE) могут быть члены любого типа, поэтому такая проверка гарантирует правильную обработку типов и исключает вызов к нулевой ссылке (Void reference exception). Ее использование в данном контексте – требование языка, оно необходимо для правильной работы динамического связывания

Заключение

Как известно, описание любого паттерна должно состоять из двух частей: указания по применению («как использовать») и описание самого шаблона. В предыдущих разделах мы постарались обратить внимание на ключевые места внутреннего строения компоненты, сейчас же нам осталось дать пошаговый алгоритм использования. Он очень простой:

Шаблон компоненты приложен к даной статье.

**************

Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2015 CONNECTION 15-17 октября 2015 года.

Приглашаем вас на новую конференцию INFOSTART EVENT 2019 INCEPTION.

32

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

Наименование Файл Версия Размер
Шаблон компоненты
.zip 33,45Kb
15.07.16
14
.zip 33,45Kb 14 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
1. I_G_O_R 57 22.08.16 22:51 Сейчас в теме
Ситуация резко изменилась после выхода версии 8.2 и создания технологии NativeAPI. Теперь программисты вынуждены довольствоваться ее демонстрацией только на C++.

Обычный com-объект, написанный на любом языке никто не отменял, эта технология всё еще работает и на клиенте и на сервере.

А кому надо NativeAPI писать на C#, тот использует технологию CLR Hosting API (между прочим, эту технологию юзает ms sql server, ms office и т.д.):
http://infostart.ru/public/300091/
если сильно хочется, c# (CoreCLR) можно и на линукс юзать:
http://infostart.ru/public/534901/

java можно по такому-же принципу использовать, используя JNI
2. dreadlord 23.05.17 11:10 Сейчас в теме
Благодарочка за труды!
Познавательно, кругозоро расширятельно !
Вот чего мне нужно было...
Ушел учить Eiffel ))
3. DenisCh 23.05.17 12:10 Сейчас в теме
4. o.nikolaev 193 18.10.17 14:18 Сейчас в теме
(3) Скажу больше - активно развивается! Eiffel слишком сильно опередил свое время. Общение Мейера с советскими учеными из Новосибирска :) позволило ему создать язык, лет на 20 перепрыгнувший все разработки в этой области.

Статья хорошая, компактная и толковая. Очень приятно видеть практичное и обоснованное использование лучшего языка программирования в мире :) применительно к платформе 1С.
5. DenisCh 18.10.17 14:28 Сейчас в теме
(4)Мне помнится, когда я с ним знакомился, нарисовал хелловорлд и получил екзешник на несколько мегабайт... Я был в шоке.. По тем временам (где-то 2003й год) это было очень много...
7. IgorKissil 233 18.10.17 19:40 Сейчас в теме
(4) Совершенно точно, Бертран гениально развил идеи академика Ершова (вспоминаю Е-нотацию на младших курсах универа в начале 90х :))
(5) Это и достоинство - вся ооп-машина со сборщиком мусора в нем, не нужен ни framework ни виртуальная машина. В современных реализациях можно формировать маленькие exe, если движок уже есть на компьютере.
6. SaschaL 18.10.17 15:04 Сейчас в теме
Статья написана познавательно. Возможно кому то она принесет пользу и в практическом плане
8. СергейЩ 08.08.18 11:23 Сейчас в теме
Интересно к 1с из Эйфель обратиться можно,? или к Excel?
Оставьте свое сообщение

См. также

Рекомендательный сервис на основе коллаборативной фильтрации на 1С. Расширение формы подбора для УТ 11.4 29

Инструменты и обработки Программист Расширение (cfe) v8 ERP2 УТ11 КА2 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m) Оптовая торговля Розничная торговля Практика программирования Математика и алгоритмы

В данной разработке реализован механизм рекомендаций товаров по принципу схожести товаров в корзине на основе алгоритма Item-to-Item от Amazon. Разобран алгоритм с демо базой и сделано расширение для УТ11.4 которое добавляет в форму подбора таблицу рекомендаций. Протестировано на 8.3.13.1865 на Управление торговлей, редакция 11 (11.4.8.63)

3 стартмани

25.09.2019    1727    5    informa1555    21       

Конвейер проверки качества кода 116

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Инструментарий разработчика Практика программирования Математика и алгоритмы Разработка

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    4640    10    Stepa86    35       

Еще раз о рабочих днях. Быстрый способ расчета в запросах 4

Статья Программист Архив с данными v8 Абонемент ($m) Практика программирования Математика и алгоритмы Разработка

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

1 стартмани

20.06.2019    1652    Alxby    3       

Функциональное программирование в 1С 6

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Математика и алгоритмы Разработка

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

1 стартмани

28.03.2019    5471    alexey.kutya    26       

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

Статья Программист Архив с данными v8 Абонемент ($m) Практика программирования Математика и алгоритмы Разработка

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

1 стартмани

04.03.2019    2508    Alxby    4       

РусскийФокс. Настройка NotePad++, 1C-подобные функции и операторы и создание объектов 11

Статья Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Создание объектов и настройка NotePad++. GitHub https://github.com/UfaScript/RusFox

1 стартмани

06.07.2018    7300    1    andreosh    12       

РусскийФокс — 1С-подобный язык программирования 8

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

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

1 стартмани

03.07.2018    6142    1    andreosh    50       

Жизненный цикл управляемой формы. Шпаргалка разработчика 233

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

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

1 стартмани

29.06.2018    21137    51    stas_ganiev    22       

Принципы ООП в 1С на примере реализации pattern Decorator 18

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

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

1 стартмани

21.06.2018    7796    4    lazarenko    6       

Строим "фасады" в 1С 60

Статья Программист Конфигурация (md, cf) v8 Россия Абонемент ($m) Практика программирования Математика и алгоритмы

Как реализовать функционал, чтобы не было “мучительно больно” при расширении требований.

1 стартмани

04.05.2018    14383    3    ktb    41       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8::УФ 1cv8.cf Абонемент ($m) Математика и алгоритмы

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

3 стартмани

20.04.2018    14088    66    Serg1701    19       

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

Статья Программист Внешний отчет (ert,erf) v8 1cv8.cf Абонемент ($m) Практика программирования Математика и алгоритмы

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

12.03.2018    15060    88    ildarovich    18       

Случайность, совпадение, закономерность. Генератор случайных чисел 6

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы Игры

Объект ГенераторСлучайныхЧисел удобно выдает случайные числа в заданном интервале значений. Исследование особенностей, рассуждения на тему случайных чисел, практика применения. Увлекательно в игровой форме можно исследовать работу генератора случайных чисел.

1 стартмани

20.01.2018    15538    2    Ликреонский    58       

Github и 1С. Пошаговая инструкция на конкретном примере 219

Статья Программист Архив с данными v8 Абонемент ($m) Математика и алгоритмы

Статья для тех, у кого есть неудержимое желание программировать и хочется доработать какую-то конфигурацию (или проект на 1С), выложенный на Github, но останавливают незнакомые слова Git, Github, Fork, Commit, Pull request, Merge, Issue.

1 стартмани

26.10.2017    34201    5    BlizD    51       

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

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

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

26.05.2017    38282    166    DarkAn    86       

Планы обмена. Скрестить ужа с ежом ... миссия выполнима =) 16

Статья Программист Архив с данными v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Небольшое исследование возможности улучшить работу планов обмена 1С средствами SQL Server: view and triggers. Результаты имеют больше теоретическое, чем практическое значение. Однако тем, кто ищет нестандартные решения, статья может понравиться =)

1 стартмани

10.01.2017    10565    3    zhichkin    4       

Многопоточная выгрузка одного сообщения обмена 15

Инструменты и обработки Программист Архив с данными v8 Абонемент ($m) Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8

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

1 стартмани

05.12.2016    11901    2    zhichkin    24       

1С+Классы. Версия-0 52

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Разработка внешних компонент Математика и алгоритмы

Разработано ООП-расширение языка 1С, включающее (но не ограничивающееся): Классы как абстрактные типы данных с элементами «переменная», «свойство», «функция», «процедура»; Интерфейсы как абстрактные классы без элементов состояния («переменная») и без привязки к реализации методов (свойств, процедур, функций) при определении; Имплементация (реализация) интерфейсов классами; - одиночное открытое наследование; Области видимости «внутренняя» (private), «экспорт» (public), «защищенная» (protected); Статические элементы классов (общие для всех экземпляров класса); Замещение (переопределение реализации) методов при наследовании – «виртуальные методы, свойства»; Сокрытие (затенение) обычных (не замещаемых) элементов при наследовании; Перегрузка процедур и функций по количеству и типам данных аргументов; Конструкторы класса; Деструктор класса; Слабые ссылки; Делегаты.

1 стартмани

28.10.2016    16397    14    IntelInside    68       

Генетический алгоритм для решения простой задачки 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы

Генетический алгоритм в решении задачи: Необходимо расставить правильно (по другому) скобки, чтобы получилось 850 (1 + 2) (3 + 4) (5 + 6) (7 + 8) (9 + 10) (11 + 12) (13 + 14) + 15

1 стартмани

26.09.2016    7585    4    eugeniezheludkov    4       

Объектные блокировки 25

Инструменты и обработки Программист Конфигурация (md, cf) v8 Россия Абонемент ($m) Практика программирования Математика и алгоритмы

При работе с объектными данными (справочники, документы, планы счетов и т.д.) система «1С:Предприятие» обеспечивает два вида объектных блокировок: пессимистическую и оптимистическую. Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей.

1 стартмани

17.08.2016    21658    7    Ranis1286    5       

Использование методов глобального контекста в системе компоновки данных или недокументированные возможности СКД 160

Инструменты и обработки Программист Внешний отчет (ert,erf) v8::УФ v8::СКД 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы

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

1 стартмани

05.08.2016    30348    27    klinval    39       

Еще один способ расчета остатков на каждый день в запросе 128

Инструменты и обработки Программист Внешний отчет (ert,erf) v8 Абонемент ($m) Математика и алгоритмы Практика программирования

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

1 стартмани

24.04.2016    28388    46    ildarovich    21       

Пример рекурсивной выгрузки иерархической структуры в XDTO 21

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы Внешние источники данных WEB

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

1 стартмани

26.02.2016    29174    14    starik-2005    3       

Нелинейная многомерная оптимизация - это просто. Часть 3. Имитация отжига 39

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Математика и алгоритмы Универсальные функции

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

1 стартмани

13.10.2015    14813    22    dusha0020    5       

Пример сериализации объектов в 1С 8.3 и их восстановления из сериализованных данных 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Windows Абонемент ($m) Математика и алгоритмы Обмен через XML Перенос данных из 1C8 в 1C8

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

1 стартмани

05.07.2015    22309    78    katkov_a    29       

Степень сходства двух наименований справочника 13

Статья Программист Внешний отчет (ert,erf) v7.7 v8 Windows Абонемент ($m) Математика и алгоритмы

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

1 стартмани

25.02.2015    17451    etmarket    33       

Написание простой обработки через тестирование 65

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы Практика программирования

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

1 стартмани

24.02.2015    23391    16    Alien_job    40       

Парсинг сайта без использования встроенного браузера для начинающих 115

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы WEB

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

1 стартмани

20.11.2014    34399    176    angernaughts    34       

Куайн (Программа, выводящая свой исходный код на экран) 1

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Обработка позволяет насладится реализацией этой интересной, и совершенно бесполезной с практической точки зрения задачей.

1 стартмани

25.08.2014    7916    atridis    7       

Определение кратчайших путей, критических путей одним запросом 104

Инструменты и обработки Программист Внешний отчет (ert,erf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы

Еще два примера применения алгоритма каскадного матричного умножения, впервые описанного в статье «Транзитивное замыкание запросом» http://infostart.ru/public/158512/

1 стартмани

07.04.2014    33790    58    ildarovich    31       

Пророк в своем отечестве или Читаем XML с помощью XDTO 188

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

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

1 стартмани

29.01.2014    39726    86    majmyl    53       

Полная методичка к курсу "Программирование 8.2" 203

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

580 страниц знаний! Публикую методичку, а точнее стенограмму курса по подготовке программистов 8.2.

10 стартмани

09.01.2014    47811    1366    GROOVY    100       

Включаем звук в 1С. Доступно и всерьез. 52

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы Универсальные функции

Как сделать воспроизведение звука в 1С без внешних компонентов? Решаем средствами интернета. Для тонкого, толстого и web-клиента.

1 стартмани

30.12.2013    72979    257    sikuda    27       

Методический материал. Работа с запросами 42

Инструменты и обработки Программист Курс v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Краткое методическое пособие для изучения запросов в 1С

1 стартмани

23.12.2013    16016    283    rayastar    27       

Определитель матрицы 12

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

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

1 стартмани

28.11.2013    10769    6    zaxarovsky    8       

Инверсии перестановок 2

Инструменты и обработки Программист Внешняя обработка (ert,epf) Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Дается способ нахождения инверсий в перестановке числовой последовательности. Вычисления выполнены с помощью языка запросов 1С.

1 стартмани

15.11.2013    9470    1    zaxarovsky    9       

Квадратный корень в запросе 1С 51

Инструменты и обработки Программист Архив с данными v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

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

1 стартмани

24.10.2013    24021    10    Elisy    53       

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

Статья Программист Нет файла v8 Абонемент ($m) Математика и алгоритмы

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

1 стартмани

09.09.2013    67831    59    ildarovich    53       

Задачи о 5 и 9 ферзях 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 Windows Абонемент ($m) Математика и алгоритмы

Задача о ферзях-часовых. На шахматной доске надо расставить 5 ферзей, чтобы они держали под боем все клетки доски. Задача В. Франгена, расставить на шахматной доске 10 “белых” и 9 “чёрных” ферзей так, чтобы ни один из них не находился под ударом противника

1 стартмани

31.08.2013    17321    1    scientes    5       

Дао программирования 103

Инструменты и обработки Программист Курс Россия Абонемент ($m) Математика и алгоритмы

Умные мысли в красивой обложке. Что может быть лучше?

1 стартмани

15.08.2013    27546    125    greenLiss    36       

Загадка возвращамого значения ЗначениеВСтрокуВнутр() 18

Статья Программист Нет файла Windows Абонемент ($m) Математика и алгоритмы

ЗначениеВСтрокуВнутр(Значение); Из синтаксис помощника: Получает системное строковое представление переданного значения. Что же такое "системное строковое представление"? точнее из чего оно состоит?

1 стартмани

05.08.2013    22579    22    vitalya24    10       

АЦРК: Многовариантный автоматический запрет редактирования (для конфигурации УТ 10.3) 9

Статья Системный администратор Программист Бухгалтер Пользователь Нет файла v8 УТ10 Закрытие периода Абонемент ($m) Математика и алгоритмы Администрирование данных 1С

В этой статье описывается усовершенствованная технология автоматической установки даты запрета редактирования Во-первых, можно определить несколько стратегий запрета редактирования с разными параметрами. Например, запрет в днях, запрет доступа в предыдущие месяцы кварталы и т.п., с указанием отступа от текущей даты. То есть для некоторых пользователей (рядовых менеджеров) при входе в базе будет устанавливаться запрет по вчерашний день, для других (старших менеджеров) на 5 дней назад, для третьих (администраторов базы или руководителей отдела) - запрет предыдущего месяца с отступом в 10 дней.. Во-вторых, запрет будет устанавливаться для ВСЕХ без исключения пользователей базы данных. Для самых привилегированных это будет максимальная глубина, но запрет будет установлен. Управление этой системой осуществляется через механизм дополнительных прав пользователей. При необходимости пользователь с полными правами может открыть для себя закрытый период, но только на текущий сеанс работы.

1 стартмани

22.07.2013    18962    26    acrk    9       

Демо связи веб сервисов 1С и php 26

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

Демонстрация обращения к веб сервису 1С из php. Пример простейший, уровня hello world. Дана одна страница и информационная база 1С с одним справочником и одним веб сервисом. Веб сервис выдаёт содержимое справочника по запросу странички.

1 стартмани

19.07.2013    29547    153    Трактор    20       

Разработка многоязычной системы 31

Статья Программист Нет файла v8 Абонемент ($m) Математика и алгоритмы

В статье затронуты некоторые аспекты многоязычности системы с точки зрения их технической реализации

1 стартмани

20.06.2013    18833    55    YOr!k    54       

Передача аргумента, полученного по ComConnector, на сервер 4

Статья Программист Нет файла v8 Абонемент ($m) Математика и алгоритмы

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

1 стартмани

20.03.2013    5080    7    asved.ru    3       

Расчет SHA-1 хеша средствами 1С. Битовые операции в 1С или урок двоичной математики 61

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Практика программирования Математика и алгоритмы

Расчет хеша SHA-1 без использования каких-либо внешних компонет - возможно ли это в 1Cv8? Оказывается вполне возможно!

1 стартмани

13.03.2013    27156    138    Антон Ширяев    40