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

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

Разработка - Универсальные функции

Фоновые задания фоновое выполнение в фоне

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

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

Описание \ пример использования

Пусть исходно есть некий источник данных для их последующей обработки - РезультатЗапроса, или ТаблицаЗначений. Т.е. собрали запросом необходимые к проведению документы, или - поместили их в таблицу значений (в том случае если алгоритм выборки слишком сложный для того, чтобы обойтись только запросом). Для демонстрации возьму с потолка такую задачу: необходимо отобрать реализацию, и для клиента с ФИО = "Иванов Иван Иванович" все документы провести. Составим запрос:

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   РеализацияТоваровИУслуг.Ссылка,
|   РеализацияТоваровИУслуг.Клиент.ФИО КАК ФИОКлиента
|ИЗ
|   Документ.РеализацияТоваровИУслуг КАК РеализацияТоваровИУслуг
|";
РезультатЗапроса = Запрос.Выполнить();

... и реализуем код для обработки данных:

Выборка = РезультатЗапроса.Выбрать();    
Пока Выборка.Следующий() Цикл
    
    об = Выборка.Ссылка.ПолучитьОбъект();    
    Если Выборка.ФИОКлиента = "Иванов Иван Иванович" Тогда
        об.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;     
    
КонецЦикла;

Это не очень оптимальное решение, исключительно для демонстрации условие осталось внутри цикла - хотя конечно логичнее было бы сразу отобрать в запросе. Теперь запускаем этот код на выполнение в фоне. Распределим нагрузку: предположим что в нашей выборке 100`000 документов. Тогда распределяя это количество на 10 фоновых заданий получаем 10`000 документов на одно задание. Распределение выполняется функцией "ТаблицаФоновыхЗадач":

ТаблицаФоновыхЗадач = ФоновыеЗаданияСервер.ТаблицаФоновыхЗадач(РезультатЗапроса, 10, "Проведение документов");

После того, как таблица фоновых задач сформирована - необходимо подготовить код к передаче, параметром. Цикл по набору данных будет выполнен автоматически, поэтому понадобится только тело цикла. Этот кусок будет передан в метод ГК "Выполнить", его требуется преобразовать в строку.  После того, как параметры подготовлены, их остается передать в функцию "ВыполнитьВФоне". В итоге текущий пример примет такой вид:

Код = "
|    об = Выборка.Ссылка.ПолучитьОбъект();    
|    Если Выборка.ФИОКлиента = ""Иванов Иван Иванович"" Тогда
|        об.Записать(РежимЗаписиДокумента.Проведение);
|    КонецЕсли;";

ТаблицаФоновыхЗадач = ФоновыеЗаданияСервер.ТаблицаФоновыхЗадач(РезультатЗапроса, 10, "Проведение документов");
ФоновыеЗаданияСервер.ВыполнитьВФоне(ТаблицаФоновыхЗадач, Код);

Мониторить результат можно с помощью консоли инструментов разработчика (скриншот). Обратите внимание на колонку "Сообщения": при выполнении очередной итерации цикла по порции набора выполняется пустое "Сообщение пользователю". По количеству этих сообщений можно судить о количестве прошедших итераций, получаем своеобразный прогресс-бар: на скриншоте выделена строка фонового задания №5, и можно увидеть что из 10000 операции выполнено 4160.

Блок программного интерфейса

Код, расположенный ниже помещается в неглобальный общий модуль. Удобно для этого использовать "ФоновыеЗаданияСервер".

////////////////////////////////////////////////////////////////////////////////
// Выполнение произвольного кода в фоне

// Служебная функция, для вызова фоновой обработки порции набора данных. См. "ВыполнитьВФоне"
//
//Параметры:
// Код - Строка, исполняемый код внутреннего языка
// ТаблицаНабораДанных - ТаблицаЗначений, см. "ТаблицаФоновыхЗадач", значение колонки "НаборДанных" 
// ЦиклПоНаборуДанных - Булево, если истина - код выполняется внутри цикла по набору данных
// ПрерыватьПоИсключению - Булево, имеет смысл только при ЦиклПоНаборуДанных = Истина. Если Истина, и при
//                        исполнении кода возникла исключительная ситуация - прерывает обработку.
//
Процедура ВыполнитьКодПотокаПоНаборуДанных(Код, ТаблицаНабораДанных, ЦиклПоНаборуДанных, ПрерыватьПоИсключению) ЭКСПОРТ
    
    Если ЦиклПоНаборуДанных Тогда
        
        МассивЗарегистрированныхОшибок = Новый Массив;
        
        Для каждого Выборка Из ТаблицаНабораДанных Цикл    
            
            Попытка
                Выполнить(Код); 
                
            Исключение
                
                ТекстОшибки = ОписаниеОшибки();
                Если МассивЗарегистрированныхОшибок.Найти(ТекстОшибки) = Неопределено Тогда
                    ЗаписьЖурналаРегистрации("ФоновоеВыполнениеКода"
                    , УровеньЖурналаРегистрации.Ошибка
                    ,
                    , 
                    , ТекстОшибки);
                    
                    МассивЗарегистрированныхОшибок.Добавить(ТекстОшибки);
                КонецЕсли; 
                
                Если ПрерыватьПоИсключению Тогда
                    Прервать;                    
                КонецЕсли; 
                
            КонецПопытки; 
            
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "";
            Сообщение.Сообщить();                 
        КонецЦикла; 
    Иначе
        Попытка
            Выполнить(Код); 
            
        Исключение
            
            ЗаписьЖурналаРегистрации("ФоновоеВыполнениеКода"
            , УровеньЖурналаРегистрации.Ошибка
            ,
            , 
            , ОписаниеОшибки());
        КонецПопытки; 
        
    КонецЕсли; 
    
    ТаблицаНабораДанных = Неопределено;
    
КонецПроцедуры

// Формирование таблицы порций фоновых задач, распределение строк источника пропорционально количеству фоновых заданий
//
//Параметры:
// Источник - РезультатЗапроса, ТаблицаЗначений
// КоличествоПотоков - Число
// Представление - Строка, описание задачи фонового задания
//
//Возвращаемое значение: 
// ТаблицаЗначений
//  *КлючПотока - УникальныйИдентификатор, ключ  фонового задания
//    *ПредставлениеПотока - Строка
//    *НаборДанных - ТаблицаЗначений, по структуре аналогична источнику - порция данных текущего потока
//
Функция ТаблицаФоновыхЗадач(Источник, КоличествоПотоков, Представление = "") ЭКСПОРТ
    
    // Формирование таблицы распределения по количеству фоновых задач
    ТаблицаФоновыхЗадач = Новый ТаблицаЗначений;
    ТаблицаФоновыхЗадач.Колонки.Добавить("КлючПотока"); 
    ТаблицаФоновыхЗадач.Колонки.Добавить("ПредставлениеПотока"); 
    ТаблицаФоновыхЗадач.Колонки.Добавить("НаборДанных");
    
    ТаблицаПорций = Новый ТаблицаЗначений; 
    Для каждого Колонка Из Источник.Колонки Цикл 
        ТаблицаПорций.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
    КонецЦикла;
    
    Для Счетчик = 1 По КоличествоПотоков Цикл
        СтрокаТаблицы = ТаблицаФоновыхЗадач.Добавить();
        СтрокаТаблицы.КлючПотока = Новый УникальныйИдентификатор;
        СтрокаТаблицы.НаборДанных = ТаблицаПорций.Скопировать();
    КонецЦикла; 
    
    // Распределение записей выборки по порциям:
    ТекущийПоток = 0;  
    
    Если ТипЗнч(Источник) = Тип("ТаблицаЗначений") Тогда
        Для каждого Выборка Из Источник Цикл            
            СтрокаТаблицы = ТаблицаФоновыхЗадач[ТекущийПоток];
            
            НовыйНаборДанных = СтрокаТаблицы.НаборДанных.Добавить();
            ЗаполнитьЗначенияСвойств(НовыйНаборДанных, Выборка);
            
            ТекущийПоток = ТекущийПоток + 1;
            
            Если ТекущийПоток = КоличествоПотоков Тогда
                ТекущийПоток = 0; 
            КонецЕсли;                        
        КонецЦикла; 
        
    Иначе
        Выборка = Источник.Выбрать();
        Пока Выборка.Следующий() Цикл        
            СтрокаТаблицы = ТаблицаФоновыхЗадач[ТекущийПоток];
            
            НовыйНаборДанных = СтрокаТаблицы.НаборДанных.Добавить();
            ЗаполнитьЗначенияСвойств(НовыйНаборДанных, Выборка);
            
            ТекущийПоток = ТекущийПоток + 1;
            
            Если ТекущийПоток = КоличествоПотоков Тогда
                ТекущийПоток = 0; 
            КонецЕсли;        
        КонецЦикла;         
    КонецЕсли; 
    
    МассивУдаляемыхСтрок = Новый Массив(); 
    
    Счетчик = 0;
    Для каждого СтрокаТаблицы Из ТаблицаФоновыхЗадач Цикл 
        КоличествоЗаписейНабора = СтрокаТаблицы.НаборДанных.Количество();
        
        Если КоличествоЗаписейНабора = 0 Тогда
            МассивУдаляемыхСтрок.Добавить(СтрокаТаблицы);
            Продолжить;
        КонецЕсли; 
        
        СтрЗаписей = "("+ КоличествоЗаписейНабора +" записей)";
        
        Счетчик = Счетчик + 1; 
        НомерПотока = Формат(Счетчик, "ЧЦ=2; ЧВН=");
        
        Если ПустаяСтрока(Представление) Тогда
            СтрокаТаблицы.ПредставлениеПотока = "ФЗ №" + НомерПотока + ", ключ " + СтрокаТаблицы.КлючЗадачи + " " + СтрЗаписей;
        Иначе
            СтрокаТаблицы.ПредставлениеПотока = Представление + ", поток №" + НомерПотока + " " + СтрЗаписей + "."; 
        КонецЕсли; 
    КонецЦикла; 
    
    Для каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл
        ТаблицаФоновыхЗадач.Удалить(СтрокаТаблицы); 
    КонецЦикла; 
    
    Возврат ТаблицаФоновыхЗадач;
    
КонецФункции

// Выполнение произвольного кода в произвольном количестве фоновых заданий
//
//Параметры:
// ТаблицаФоновыхЗадач - ТаблицаЗначений, см. "ТаблицаФоновыхЗадач"
// Код - Строка, исполняемый код внутреннего языка
// ОжидатьЗавершения - Булево 
// ЦиклПоНаборуДанных - Булево, см. "ВыполнитьКодПотокаПоНаборуДанных"
//
//Возвращаемое значение: 
// Массив - созданные фоновые задания
//
Функция ВыполнитьВФоне(ТаблицаФоновыхЗадач, Код, ОжидатьЗавершения = Ложь, ЦиклПоНаборуДанных = Истина, ПрерыватьПоИсключению = Истина) ЭКСПОРТ
    
    ИмяМетода = "ФоновыеЗаданияСервер.ВыполнитьКодПотокаПоНаборуДанных";
    
    МассивФоновыхЗаданий = Новый Массив();
    
    Для каждого СтрокаТаблицы Из ТаблицаФоновыхЗадач Цикл
        
        МассивПараметров = Новый Массив; 
        МассивПараметров.Добавить(Код); 
        МассивПараметров.Добавить(СтрокаТаблицы.НаборДанных);
        МассивПараметров.Добавить(ЦиклПоНаборуДанных);
        МассивПараметров.Добавить(ПрерыватьПоИсключению);
        
        ФЗ = ФоновыеЗадания.Выполнить(
        ИмяМетода
        , МассивПараметров
        , СтрокаТаблицы.КлючПотока
        , СтрокаТаблицы.ПредставлениеПотока);
        
        МассивФоновыхЗаданий.Добавить(ФЗ); 
    КонецЦикла; 
    
    Если ОжидатьЗавершения Тогда
        ФоновыеЗадания.ОжидатьЗавершения(МассивФоновыхЗаданий); 
    КонецЕсли; 
    
    Возврат МассивФоновыхЗаданий;
    
КонецФункции

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. aspirator23 422 23.01.16 16:55 Сейчас в теме
Примерно также делал, только для контроля выполнения фоновых заданий использовал дополнительный регистр.
Позволяет наглядно выводить пользователю выполнение фоновых задач.
От ОжидатьЗавершения() отказался - не позволяет отражать процесс выполнения заданий.
С фоновыми заданиями кода получается много по сравнению с обычным последовательным выполнением, но оно того стоило.
Задачи которые выполнялись 40 минут, выполняются за 2-3 минуты. Для интерактивных операций то что нужно.
Да и для многих регламентных можно использовать.
2. tormozit 5823 30.01.16 02:12 Сейчас в теме
пользуюсь консолью инструментов разработчика, но почему-то в файловой базе она пасанула
Не пробовал сообщить описание проблемы разработчику?
3. unichkin 1260 30.01.16 16:01 Сейчас в теме
(2) tormozit, сообщу. Просто не придал этому большого значения. Благодаря твоей работе разработка стала на порядок проще, опишу конечно.
4. dimpson 18 03.04.17 18:33 Сейчас в теме
Возникла идея: можно написать универсальное фоновое задание, которое будет выполнять код из какого-нибудь справочника аля "Справочник фоновых заданий", т.е. в этом справочнике можно прописать выполняемый код, параметры и даже расписание.
Одно универсальное фоновое задание будет пытаться выполниться каждые, допустим, 10 секунд и если одно из заданий из справочника попадет под расписание, то исполнится код через Выполнить()...
unichkin; +1 Ответить
5. unichkin 1260 03.04.17 23:42 Сейчас в теме
(4) Тогда уж лучше регламент, если меняем конфу. Сейчас на платформе 8.3.9.217 с этим определенные проблемы... Так что лучше регламент)
6. AlX0id 04.04.17 15:39 Сейчас в теме
(4)
И этот справочник = "Дополнительные внешние обработки" из БСП ) И тут нужно не писать, а читать ИТС )
Пишешь код во внешней обработке, отлаживаешь ее, запихиваешь в дополнительные внешние и запускаешь по расписанию.
unichkin; +1 Ответить
7. kiruha 384 17.04.17 19:25 Сейчас в теме
При всем уважении - потенциальная дыра в безопасности.
8. unichkin 1260 18.04.17 00:03 Сейчас в теме
(7) Это да. Зато удобно. Правда "дыра" прямо скажем неочевидная... Я думаю если злоумышленник получает доступ к базе на таком уровне - то вся база одна сплошная дыра.
9. unoDosTres 23.06.17 11:26 Сейчас в теме
практика известная.

я бы еще добавил в эту процедуру ВыполнитьКодПотокаПоНаборуДанных один или несколько не значимых параметров.

практическое применение этому, ну например: передаем в фоновое задание в качестве параметра

АдресВХранилище = ПоместитьВоВременноеХранилище(Неопределено);


а в параметре код пишем в этот же параметр нужные данные чтобы потом отловить после выполенения фонового задания через "ПолучитьИзВременногоХранилища".
11. unichkin 1260 23.06.17 21:33 Сейчас в теме
(9) Не понял
(10) У автора не было такой нужды. О том что такое многопоточность и с чем ее есть и так найдется 100500 статей. Я публикую только свой подход к решению задачи.
12. unoDosTres 25.06.17 14:37 Сейчас в теме
(11), ну тема называется "Выполнение произвольного кода в фоновых заданиях" если на бы например я хотел получить результат выполнения фонового задания на клиенте я бы этого не смог сделать, ну как мне видится, то что предложил в (9) я это решает
13. unichkin 1260 25.06.17 18:58 Сейчас в теме
(12) У метода "ВыполнитьВФоне" второй параметр - ОжидатьЗавершения.
10. Frogger1971 23.06.17 12:28 Сейчас в теме
Оставьте свое сообщение

См. также

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

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

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

27.01.2016    73210    0    Serginio    108    

Ещё немного функционального стиля в 1С или Как нам отфильтровать таблицу значений

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

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

16.05.2020    2267    0    GlebHappy    34    

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

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

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

25.12.2019    6257    0    brooho    17    

Функция - Формат государственного номера автомобиля

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

Возникла необходимость в приведении к единому формату хранящихся, и вводимых вновь, автомобильных Регистрационных знаков - Гос.номер.

23.12.2019    2858    0    brooho    4    

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

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

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

26.02.2016    40391    0    unichkin    38    

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

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

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

04.12.2019    4773    0    Mellow    7    

Обработка расширением на клиенте

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

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

31.10.2019    6603    0    EvgenURNN    9    

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

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

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

28.10.2019    9963    0    Olesia_Matusevich    10    

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

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

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

19.02.2018    44783    0    ildarovich    45    

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

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

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

28.10.2019    6626    0    SeiOkami    66    

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

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

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

24.10.2019    9974    0    kraspila    28    

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

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

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

24.10.2019    6724    0    DmitryKotov    6    

Универсальная функция для программного выполнения СКД Промо

Инструментарий разработчика Универсальные функции v8::СКД 1cv8.cf Бесплатно (free)

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

20.05.2015    29811    0    dj_serega    18    

Функция СтрШаблон с именованными маркерами

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

Функция позволяет задавать именованные маркеры формата [Имя], в отличии от типовых нумерованных формата %n

1 стартмани

21.10.2019    3807    0    kirinalex    27    

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

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

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

10.10.2019    8931    0    Yashazz    45    

Фоновое задание с произвольной выборкой и произвольной обработкой

Универсальные обработки v8::УФ 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

03.10.2019    3964    2    warden    5    

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

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

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

04.08.2014    18829    0    Трактор    5    

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

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

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

17.08.2019    27993    0    ids79    16    

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

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

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

13.05.2019    5941    0    Serge R    5    

Сканируем без сканера или MXL to JPG Промо

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

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    33489    0    shakmaev    47    

Иерархия справочника Сверху Вниз. Получаем произвольное количество родителей "верхнего" уровня

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

Иерархия справочника Сверху Вниз. Функция для получения произвольного количества родителей "верхнего" уровня. На примере справочника "Номенклатура".

28.03.2019    5780    0    obsfromekb    11    

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

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

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

22.03.2019    16507    0    ids79    16    

Добавление отчетов в типовые конфигурации 1С

Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем) v8::УФ v8::СКД 1cv8.cf Бесплатно (free)

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

07.03.2019    47955    0    ids79    45    

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

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

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

14.01.2019    22884    0    Evg-Lylyk    17    

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

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

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

14.01.2019    5340    0    The Ded    5    

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

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

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

05.12.2018    12495    0    _ASZ_    33    

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

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

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

14.11.2018    74128    0    GeterX    112    

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

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

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

07.11.2018    28812    0    fromlion    22    

Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД

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

Описан способ добавления расшифровки отчета на СКД как встроенного в систему, так и добавленного внешнего отчета.

27.09.2018    10093    0    bmk74    7    

Функция НайтиФайлы() в каталоге netshare на Linux - обход ошибки работы

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

Решение проблемы применения функции НайтиФайлы() в каталоге с netshare на Linux-сервере - не работает поиск файлов по указанной маске (шаблону)

19.09.2018    5972    0    drmaxart    1    

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

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

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

09.06.2018    10928    0    Serge R    12    

Генерация временного ряда запросом

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

Способ генерации последовательности дат средствами языка запроса 1С.

07.05.2018    8449    0    dim_zal    6    

Проверка заполнения полей одной строкой

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

Функция для проверки заполнения полей.

02.03.2018    7473    0    aleximus    2    

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

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

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

22.12.2017    24396    0    rpgshnik    22    

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

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

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

08.12.2017    17847    0    frkbvfnjh    21    

Функция сохранения картинок из книги Excel в каталог с определением координат на листе

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

Разбор файла *.xlsx как Web-архива, выгрузка изображений без потери качества, с определением положения изображений.

12.11.2017    10328    0    user634820_zergemoth    1    

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

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

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

08.11.2017    22113    0    azubar    10    

Правила округления

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

Округление числовых значений по трём правилам математики

30.10.2017    11226    0    dakork    4    

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

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

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

12.10.2017    17511    0    for_sale    58    

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

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

Иногда бывает необходимость получить "Первый понедельник месяца" или "Вторую пятницу месяца". Есть несколько способов решения вопроса. Опишу один из них.

12.09.2017    10942    0    987ww765    12    

Разность дат

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

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

11.08.2017    12692    0    jun-ko    24    

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

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

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

07.07.2017    9041    0    dimasts    6