Как правильно удалять данные из больших массивов

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

Разработка - Практика программирования

удаление из массивов

Как правильно удалять данные из больших несортированных массивов

Предположим, у нас есть некий массив, из которого нужно удалить часть элементов по условию

Массив = СгенерироватьМассив(мэлементов); 
                              
Функция СгенерироватьМассив(КоличествоЭлементов)        
    ГенераторСлучайныхЧисел = новый ГенераторСлучайныхЧисел;      
    Массив = Новый Массив;          
    Для Индекс = 1 По КоличествоЭлементов Цикл                          
        Массив.Добавить(ГенераторСлучайныхЧисел.СлучайноеЧисло(0,200) - 100);                 
    КонецЦикла;   
    Возврат Массив;
КонецФункции

Большая часть людей делает это так:


Для обратныйИндекс = - Массив.ВГраница() По 0 Цикл
   Индекс = - обратныйИндекс;
   Если Не Условие1(Массив[Индекс]) Тогда
      Массив.Удалить(Индекс);        
   КонецЕсли;
КонецЦикла;

Основной недостаток такого метода в том, что скорость его выполнения не линейна, поясню почему: на каждую операцию удаления запускается цикл, который можно описать вот так:


Для Индекс = УдаляемыйИндекс По Массив.ВГраница() - 1 Цикл
   Массив[Индекс] = Массив[Индекс + 1];            
КонецЦикла;

Из этого следует что мы выполняем цикл в цикле.

 

Верным же способом удаления данных из массива можно назвать вот такой метод:


МаксимальныйИндекс = -1;
Для Каждого ЭлМассва Из Массив Цикл
   Если Условие1(ЭлМассва) Тогда
      МаксимальныйИндекс = МаксимальныйИндекс + 1;
      Массив[МаксимальныйИндекс] = ЭлМассва;                                                
   КонецЕсли;       
КонецЦикла;
Пока Массив.ВГраница() > МаксимальныйИндекс Цикл
   Массив.Удалить(Массив.ВГраница());               
КонецЦикла;

 

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

Важное замечание: данное рассуждение актуально только для несортированных массивов, или сортированных массивов, удаляемые значения которых будут находится в начале массива.

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

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

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

Наименование Файл Версия Размер
Как правильно удалять данные из больших массивов:

.epf 7,50Kb
0
.epf 7,50Kb Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 2292 15.02.21 11:40 Сейчас в теме
А не проще тогда просто найти элемент массива "МойМассив.Найти( Х )", после чего просто поместить в найденный элемент последний элемент массива, а потом этот последний элемент грохнуть? Типа:
    Попытка 
        МойМассив[ МойМассив.Найти( Х ) ] = МойМассив[ МойМассив.ВГраница() ];
        МойМассив.Удалить( МойМассив.ВГраница() )
    Исключение КонецПопытки;
DNN13; gzharkoj; VitaliyCeban; +3 Ответить
4. Def.Gh 18 24.02.21 14:09 Сейчас в теме
(1)
Попытка
МойМассив[ МойМассив.Найти( Х ) ] = МойМассив[ МойМассив.ВГраница() ];
МойМассив.Удалить( МойМассив.ВГраница() )
Исключение КонецПопытки;


Если я правильно понял о чем вы то тогда поменяется порядок элементов в массиве.
10. starik-2005 2292 24.02.21 16:19 Сейчас в теме
(4) а почему нас это должно волновать?
12. Def.Gh 18 24.02.21 18:20 Сейчас в теме
(10)
а почему нас это должно волновать?


задачи разные бывают. бывают такие где это принципиально.
и опять же - попробуйте написать полный код удаления элементов по условию из массива с использованием вашего алгоритма и сделайте замер.
2. tormozit 6289 15.02.21 14:30 Сейчас в теме
Че мелочиться, давайте проверим и другие упорядоченные коллекции. Переставлять там уже дешево не выйдет. Но зависимость длительности от количества элементов было бы интересно сопоставить.
5. Def.Gh 18 24.02.21 14:11 Сейчас в теме
(2)

2. tormozit 6222 15.02.21 14:30
Че мелочиться, давайте проверим и другие упорядоченные коллекции. Переставлять там уже дешево не выйдет. Но зависимость длительности от количества элементов было бы интересно сопоставить


если вам нечем заняться - вперед и с песней.
в статье речь идет о неупорядоченном массиве.
3. t278 44 16.02.21 02:32 Сейчас в теме
Если Условие1(ЭлМассва) Тогда
      МаксимальныйИндекс = МаксимальныйИндекс + 1;
      Массив[МаксимальныйИндекс] = ЭлМассва;                                                
   КонецЕсли;

Здесь затирается элемент?
6. Def.Gh 18 24.02.21 14:13 Сейчас в теме
(3) по сути да. в конце идет обрезание массива до нужной длинны.
7. tormozit 6289 24.02.21 14:49 Сейчас в теме
Проверил смелое предположение автора и получил другой результат - оба метода удаления работают с сопоставимой скоростью. Видимо у автора были неодинаковые условия замеров. Ниже код для консоли кода ИР

КоличествоЭлементов = 10000;
ГенераторСлучайныхЧисел = новый ГенераторСлучайныхЧисел;      
Массив = Новый Массив;          
Для Индекс = 1 По КоличествоЭлементов Цикл                          
    Массив.Добавить(ГенераторСлучайныхЧисел.СлучайноеЧисло(0,200) - 100);                 
КонецЦикла;   

ирОбщий.НачатьЗамерЛкс(, "Замер1");
Для обратныйИндекс = - Массив.ВГраница() По 0 Цикл
   Индекс = - обратныйИндекс;
   Если Истина Тогда
      Массив.Удалить(Индекс);        
   КонецЕсли;
КонецЦикла;
ирОбщий.КончитьЗамерЛкс();

/////////////////////////////////
ГенераторСлучайныхЧисел = новый ГенераторСлучайныхЧисел;      
Массив = Новый Массив;          
Для Индекс = 1 По КоличествоЭлементов Цикл                          
    Массив.Добавить(ГенераторСлучайныхЧисел.СлучайноеЧисло(0,200) - 100);                 
КонецЦикла;   

ирОбщий.НачатьЗамерЛкс(, "Замер2");
МаксимальныйИндекс = -1;
Для Каждого ЭлМассва Из Массив Цикл
   Если Истина Тогда
      МаксимальныйИндекс = МаксимальныйИндекс + 1;
      Массив[МаксимальныйИндекс] = ЭлМассва;                                                
   КонецЕсли;       
КонецЦикла;
Пока Массив.ВГраница() > МаксимальныйИндекс Цикл
   Массив.Удалить(Массив.ВГраница());               
КонецЦикла;
ирОбщий.КончитьЗамерЛкс();
Показать

Он выдает
Окончание замера "Замер1" - Длительность = 0.048с
Окончание замера "Замер2" - Длительность = 0.044с
8. Def.Gh 18 24.02.21 14:53 Сейчас в теме
(7) согласен с вашими выводами для малого количества данных. а теперь попробуйте увеличить количество данных в 1000 раз.
массив из 10000 элементов сложно назвать большим ;)
9. tormozit 6289 24.02.21 14:59 Сейчас в теме
(8) Сделал для 1000 000.
Окончание замера "Замер1" - Длительность = 4.756с
Окончание замера "Замер2" - Длительность = 4.614с
11. Def.Gh 18 24.02.21 18:19 Сейчас в теме
в вашем примере есть существенная ошибка - у вас условие - истина.
поставьте условие больше на ЭлМассва > 0
13. tormozit 6289 24.02.21 19:34 Сейчас в теме
(11) Да. Теперь получил похожую разницу. Признаю, что то интересное в этом есть. Но твой способ может и немного проиграть классическому, если большинство удаляемых элементов будут во второй половине массива. А вот если большинство будет в первой половине, то твой способ сильно выигрывает:
Коэф = 0.5; // [0;1]

КоличествоЭлементов = 100000;
ЗначениеЗаполнения = 0;
Массив = Новый Массив;          
Для Индекс = 1 По КоличествоЭлементов Цикл                          
	Массив.Добавить(ЗначениеЗаполнения);
КонецЦикла;   

ирОбщий.НачатьЗамерЛкс(, "Замер1");
Для обратныйИндекс = - Массив.ВГраница() По 0 Цикл
	Индекс = - обратныйИндекс;
	Если Индекс < КоличествоЭлементов*Коэф Тогда
		Массив.Удалить(Индекс);        
	КонецЕсли;
КонецЦикла;
ирОбщий.КончитьЗамерЛкс();

/////////////////////////////////
Массив = Новый Массив;          
Для Индекс = 1 По КоличествоЭлементов Цикл                          
	Массив.Добавить(ЗначениеЗаполнения);
КонецЦикла;   

ирОбщий.НачатьЗамерЛкс(, "Замер2");
МаксимальныйИндекс = -1;
Индекс = 0;
Для Каждого ЭлМассва Из Массив Цикл
	Если Индекс < КоличествоЭлементов*Коэф Тогда
		МаксимальныйИндекс = МаксимальныйИндекс + 1;
		Массив[МаксимальныйИндекс] = ЭлМассва;                                                
	КонецЕсли;       
	Индекс = Индекс + 1;
КонецЦикла;
Пока Массив.ВГраница() > МаксимальныйИндекс Цикл
	Массив.Удалить(Массив.ВГраница());               
КонецЦикла;
ирОбщий.КончитьЗамерЛкс();
Показать

выдает
Окончание замера "Замер1" - Длительность = 1.572с
Окончание замера "Замер2" - Длительность = 0.617с

А если увеличить размер массива в 10 раз, то разница тоже увеличивается в 10 раз:
Окончание замера "Замер1" - Длительность = 116с
Окончание замера "Замер2" - Длительность = 6с
14. Def.Gh 18 24.02.21 22:00 Сейчас в теме
(13) об чем собственно и речь. и опять же у тебя не совсем честное условие - тут будет лучше именно удалять по значению, когда мы не знаем где какое значение.
метод имеет право на жизнь, но именно когда надо сохранить порядок и данных много.
почему не рассматривал вариант создания нового массива - отвечу сразу - ОЗУ не резиновое =)
Оставьте свое сообщение

См. также

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5 Промо

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

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

5 стартмани

21.12.2020    4019    19    huxuxuya    11    

Загрузка файлов на сервер с использованием HTTP-сервиса 1С (multipart/form-data).

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

Вариант загрузки файлов в составных данных методом POST (multipart/form-data) на примере демонстрационной базы.

1 стартмани

12.08.2020    6026    16    ltfriend    5    

Конвертация PDF в 1С

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

COM-компонента для работы с PDF (32/64 bit)

4 стартмани

31.03.2020    10752    36    SerVer1C    58    

Распаковка хранилища значений средствами MS SQL Server

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

Способ извлечения данных из 1С-ного "ХранилищеЗначений" в MS SQL Server с помощью самописной скалярной функции (без использования платформы 1С).

1 стартмани

23.09.2019    8183    2    SerVer1C    11    

[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо

Универсальные функции Инструментарий разработчика Учет ТМЦ Учет ТМЦ v8 1cv8.cf Россия БУ Абонемент ($m)

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

1 стартмани

17.08.2015    50000    168    ekaruk    32    

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

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

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

3 стартмани

04.09.2019    30076    27    Stepa86    46    

Расширяем возможности MS SQL Server с помощью хранимых процедур CLR

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

Не хватает какого-то функционала на скуле для обработки данных? Тогда он (новый функционал) идет к вам.

1 стартмани

02.09.2019    9766    0    SerVer1C    9    

Перфолента, первое знакомство. Новый язык программирования

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

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

22.07.2019    22301    0    Perfolenta    165    

Вам нравятся запросы в 1С? Промо

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

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    23691    6    m-rv    90    

Настраиваемое мобильное приложение для сканирования штрихкодов

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

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

1 стартмани

14.01.2019    10825    5    inord777    10    

Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом

Печатные формы документов Универсальные функции Email v8 КА1 БП2.0 УТ10 УПП1 Абонемент ($m)

Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями "Управление торговлей 10.3", "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1", "Бухгалтерия предприятия 2.0".

1 стартмани

21.09.2018    27191    21    stvorl    0    

Работа с публикациями "Инфостарт"

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

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    24384    13    RocKeR_13    16    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") Промо

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

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    32923    88    m-rv    58    

HTTP Сервисы: Путь к своему сервису. Часть 3

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

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    44619    63    dsdred    17    

Создаем объекты для модуля Bootstarp на Русском Фоксе

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

Создавайте свой модуль с объектами для модуля Bootstrap, пакуйте их fxp-файлы и создавайте сайты из этих кубиков. Разберем, как это делать. Все гениальное должно быть простым, как теория относительности.

1 стартмани

19.08.2018    7288    0    andreosh    3    

РусскийФокс и BootStrap

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

РусскийФокс вносит новый технологический подход в сайтостроение. Теперь вы можете ограничиться знанием Русского Фокса и не иметь знаний по HTML, CSS, JavaScript, PHP, чтоб создавать сайты.

1 стартмани

16.08.2018    7653    1    andreosh    18    

Заполняем по шаблону (по умолчанию) Промо

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

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

1 стартмани

08.02.2018    30934    20    mvxyz    17    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

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

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

5 стартмани

09.08.2018    31410    28    informa1555    26    

РусскийФокс. Изменение DBF-файла и назначение командных клавиш

Практика программирования Файловые протоколы обмена, FTP Россия Абонемент ($m)

- Шарапов, ты Русского Фокса знаешь ? - Конечно, Глеб. Я же программирую на Русском Фоксе. РусскийФокс (1C-подобный язык программирования) создает DBF-файлы и выгружает данные из DBF в XML.

1 стартмани

01.08.2018    7226    0    andreosh    2    

РусскийФокс. Создание DBF-файла, выгрузка в XML.

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

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает DBF-файлы и выгружает данные из DBF в XML. Голосуйте за доклад о РусскийФокс на Инфостарт.

1 стартмани

28.07.2018    7061    2    andreosh    0    

Нечеткий поиск одним запросом Промо

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

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

1 стартмани

28.12.2015    30556    72    vasvl123    9    

РусскийФокс и ClickerMann заносят данные в 1С

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

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

1 стартмани

21.07.2018    12516    1    andreosh    20    

Работа с данными выбора

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

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

1 стартмани

17.07.2018    56632    21    kalyaka    16    

РусскийФокс и OpenOffice, а также исследование объектов

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

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

1 стартмани

12.07.2018    7523    1    andreosh    2    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут Промо

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

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

1 стартмани

14.08.2016    50986    36    Demanoidos    60    

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

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

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

1 стартмани

03.07.2018    11873    1    andreosh    50    

Полезные примеры составления схемы компоновки данных #2

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

Еще один набор примеров как решить частные задачи в СКД

1 стартмани

22.05.2018    35192    11    SITR-utyos    13    

Длинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR

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

Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM. Размер/точность длинного числа зависит только от вашей оперативной памяти. Проект основан на исходниках библиотеки MPIR, Edition 3.0.0. Полностью написан на С/С++ (COM.DLL).

1 стартмани

12.04.2018    7654    1    bedvit    4    

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

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

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    55697    35    ildarovich    41    

Веб-разработка на 1С (1Script)

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

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

1 стартмани

28.12.2017    31043    22    Evil Beaver    82    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

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

1 стартмани

06.12.2017    29438    56    kwazi    6    

Паузы при исполнении кода (Sleep для 1С)

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

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

1 стартмани

28.11.2017    56173    15    swimdog    46    

Хранение файлов в томах на диске (для УПП 1.3) Промо

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

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    61926    11    wowik    32    

Telegram-боты

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

Описание теории, разбор архитектуры и пример реализации telegram-ботов. Сразу скажу, со структурированием изложения мало что могу поделать. :) редакция от 18.07.2018 Правки последней редакции выделены жирным.

1 стартмани

01.09.2017    37157    140    PLAstic    59    

Программа для изменения осей движения мыши - IMouse

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

Программа предназначена для изменения движения курсора мыши.

1 стартмани

10.08.2017    14164    3    GubinDenis    17    

Автозадачи

Управление бизнес-процессами (BPM) Универсальные функции v8::СКД Россия Абонемент ($m)

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

1 стартмани

01.08.2017    31652    189    1c-intelligence    39    

Расширения конфигураций 1С: учимся перехватывать методы

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

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

1 стартмани

30.05.2017    147875    13    signum2009    48    

СКД. Использование встроенного макета, разделителя страниц

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

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

1 стартмани

31.03.2017    16786    18    Vin_Tik    0    

Регулярные выражения – это просто. Построитель и отладчик регулярных выражений

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

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

1 стартмани

13.03.2017    34639    119    romasna    49    

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

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

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

1 стартмани

03.10.2016    39148    96    json    25    

Полезные процедуры по работе с СКД и табличными документами (часть 1)

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

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

1 стартмани

03.09.2016    61868    100    json    24    

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

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

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

1 стартмани

05.08.2016    40208    27    klinval    40    

Программа "Назад в прошлое"

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

На панельке винды появляется человечек, которым можно управлять: бегать туда-сюда, прыгать, стрелять.

1 стартмани

24.06.2016    12285    3    fierylions    1