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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

47

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

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

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

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

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


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

См. также

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

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

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

10.10.2019    2695    Yashazz    43       

Полезные процедуры и функции для программиста 115

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

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

07.10.2019    6259    HostHost    22       

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

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

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

1 стартмани

03.10.2019    1424    warden    3       

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

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

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

17.08.2019    8494    ids79    14       

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

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

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

13.05.2019    2455    Serge R    5       

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

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

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

28.03.2019    2044    obsfromekb    11       

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

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

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

22.03.2019    8806    ids79    14       

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

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

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

07.03.2019    23453    ids79    32       

Расширение конструктора мобильного рабочего места для варианта "клиент 1С+RDP" (для любых wi-fi терминалов). Экосистема решений Simple WMS 20

Статья Программист Бизнес-аналитик Руководитель проекта Нет файла v8::УФ УУ Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Бесплатно (free) Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Универсальные функции Мобильная разработка

Развитие проекта «Конструктор мобильного клиента на Android» https://infostart.ru/public/976636/ для устройств не на Андроиде (работающих в режиме RDP). В отличие от варианта Android работа на терминалах происходит в режиме 1С:Предприятие через RDP а конфигурации мобильных клиентов полностью совместимы для обоих версий. Т.е. конфигурация единая, создается один раз и ее может читать как Android -устройство, так и 1С-клиент на RDP без необходимости какой либо переделки.

05.02.2019    5974    informa1555    0       

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

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

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

14.01.2019    7593    Evg-Lylyk    17       

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

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

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

14.01.2019    2312    The Ded    3       

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

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

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

14.11.2018    32152    GeterX    93       

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

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

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

07.11.2018    13111    fromlion    14       

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

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

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

27.09.2018    6571    bmk74    2       

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

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

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

19.09.2018    3282    drmaxart    1       

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

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

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

09.06.2018    7426    Serge R    12       

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

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

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

07.05.2018    5903    dim_zal    6       

Минимализмы 3 352

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

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

19.02.2018    35738    ildarovich    44       

Тест рефакторинга записи/проведения документа: проверка изменений 0

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

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

1 стартмани

22.01.2018    6897    unichkin    2       

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

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

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

22.12.2017    18920    rpgshnik    21       

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

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

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

08.12.2017    12458    frkbvfnjh    19       

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

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

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

12.11.2017    7162    user634820_zergemoth    1       

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

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

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

08.11.2017    15478    azubar    9       

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

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

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

30.10.2017    7731    dakork    4       

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

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

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

12.10.2017    14494    for_sale    58       

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

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

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

12.09.2017    8153    987ww765    10       

Разность дат 21

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

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

11.08.2017    9779    jun-ko    24       

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

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

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

07.07.2017    7195    dimasts    5       

"Распределение в запросе" или "избавляемся от перебора" 184

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

Хороший перебор - это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.

16.12.2016    27907    alexandersh    45       

Пример работы с шаблоном Word через ole (клиент - сервер, тонкий клиент) - установка значений и заполнение таблицы 17

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

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

09.11.2016    10041    gortrex    8       

Парсер JSON (Штатные средства 1С 8.3.6) 59

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

Хочу поделиться функцией чтения json, реализованной с помощью штатных средств платформы.

29.09.2016    46588    dour-dead    21       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

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

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

27.09.2016    16934    serg_infostart    15       

Вычитание рабочих дней от текущей даты 7

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

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

08.09.2016    9629    semenich_b    7       

Используем механизмы обмена данными БСП для произвольного обмена 148

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции Внешние источники данных БСП (Библиотека стандартных подсистем)

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

23.08.2016    27760    Патриот    22       

Склонение числа прописью 26

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

Склоняет число прописью до 999999 Пример: до склонения "Не позднее 3 (Три) дней", после - "Не позднее 3 (Трех) дней"

18.08.2016    15906    maxvcb    27       

Отборы в отчётах. Нюансы работы компоновщика настроек. 132

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

Открытие отчёта с предустановленным отбором, показанным пользователю. Изменение любых настроек в процессе работы отчёта. Взаимосвязи настроек.

15.08.2016    59373    Yashazz    23       

Автоматическое добавление новых реквизитов на форму (УФ) 38

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

Идея такая: Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец. слово (можно не матерное). На форму объекта новый реквизит далее попадает автоматом в спец. группу "Дополнительно".

03.08.2016    16270    Патриот    23       

HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие 123

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

Статья о том, как можно быстро создать HTTP-сервис в 1С:Предприятие и как выполнять его отладку.

25.07.2016    39577    serg_infostart    19       

Цикл ввода данных, пример решения 42

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

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

12.07.2016    11219    botokash    7       

Поиск несериализуемых значений при помещении в хранилище 12

Статья Программист Нет файла v8 Windows Бесплатно (free) Инструментарий разработчика Практика программирования Универсальные функции

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

02.03.2016    20148    balanton    2       

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

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

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

26.02.2016    35457    unichkin    36       

Преобразование числа в строку в запросе 1С 8.x 21

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

В запросах 1С предприятие 8.x есть ограничение: нельзя преобразовывать число в строку.

23.02.2016    33096    lastcontra    19       

Изменения параметра или отбора типа Дата в форме отчета 6

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

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

08.02.2016    9838    dj_serega    3       

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

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

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

27.01.2016    62857    Serginio    104       

Быстрое визуальное сравнение двух таблиц значений 18

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

Предлагаю простой способ сравнить две таблицы значений.

13.11.2015    11921    Mi4man    14