Многопоточная обработка данных на примере перепроведения документов

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

Администрирование - Администрирование данных 1С - Обработка документов

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

42
Дальнейшее развитие темы фоновой обработки данных - проведение документов в потоках. Настройка параметров и запуск основного процесса (менеджера потоков). Разбивка документов для проведения на не связанные друг с другом наборы и запуск дополнительных фоновых заданий для отдельных потоков. Отслеживание выполнения каждого потока в родительском сеансе.

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

 

Общее описание механизма

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

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

Далее выполняется запуск необходимого количества потоков для обработки каждого набора документов (согласно переданному параметру «КоличествоПотоков»).

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

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

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

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

 

Сразу о минусах моей разбивки

  1. Разбивка выполняется по данным регистра «Товары организаций», следовательно, она актуальна только для конфигураций из семейства ЕРП (ЕРП, КА, УТ).
  2. В моем примере документы обязательно должны быть проведены, так как выборка формируется по данным регистра «Товары организаций» и используются элементы справочника «КлючиАналитикиУчетаНоменклатуры». Если исходные документы не проведены, выборку необходимо формировать другим способом.
  3. Учитываются только возможное пересечение товарного состава. Можно учитывать еще и пересечения по партнерам и договорам для документов закупки и реализации.
  4. Для определения зависимостей я использую элементы справочника «КлючиАналитикиУчетаНоменклатуры». В моем примере не ведется учет по сериям и обособленный учет товаров. Поэтому ключи аналитики как раз и являются объектами разделения по указанным выше измерениям. Если учет по сериям или обособленный учет присутствуют, ключи аналитики получаются с более детальной разбивкой, и опираться на них не совсем правильно. Регистр накопления «Свободные остатки», имеет среди измерений только: номенклатура, характеристика и склад. Если в разные наборы попадут документы с разными ключами аналитики, но с одинаковыми наборами измерений: номенклатура, характеристика и склад, будут возможны пересечения.

 

Реализация

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

 

Процедуры модуля обработки

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

 

Точка входа основного фонового задания, это процедура «ВыполнитьПерепроведениеВПотоках»

Процедура ВыполнитьПерепроведениеВПотоках(ДатаНачала, ДатаОкончания, КоличествоПотоков, КоличествоДокументовВПорции)
	
    Запрос = новый Запрос("ВЫБРАТЬ
	|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыОрганизаций.Регистратор) КАК ВсегоДокументов
	|ИЗ
	|	РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
	|ГДЕ
	|	ТоварыОрганизаций.Период >= &ДатаНачала
	|	И ТоварыОрганизаций.Период <= &ДатаОкончания
	|	И НЕ ТоварыОрганизаций.Регистратор ССЫЛКА Документ.ПередачаТоваровМеждуОрганизациями
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК Аналитика,
	|	ТоварыОрганизаций.Регистратор КАК Документ,
	|	ТоварыОрганизаций.Период КАК Период
	|ИЗ
	|	РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
	|ГДЕ
	|	ТоварыОрганизаций.Период >= &ДатаНачала
	|	И ТоварыОрганизаций.Период <= &ДатаОкончания
	|	И НЕ ТоварыОрганизаций.Регистратор ССЫЛКА Документ.ПередачаТоваровМеждуОрганизациями
	|
	|СГРУППИРОВАТЬ ПО
	|	ТоварыОрганизаций.АналитикаУчетаНоменклатуры,
	|	ТоварыОрганизаций.Регистратор,
	|	ТоварыОрганизаций.Период
	| УПОРЯДОЧИТЬ ПО
	|  Период,
	|  Документ");
	
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));

    Результат = Запрос.ВыполнитьПакет();
    Выборка = Результат[0].Выбрать();
    Выборка.Следующий();
    ВсегоДокументов = Выборка.ВсегоДокументов;
	
    ТЗСвязи = Результат[1].Выгрузить();

    //Новая таблица для данных текущей порции	
    ТЗСвязиВПорции = новый ТаблицаЗначений;
    ТЗСвязиВПорции.Колонки.Добавить("Аналитика", новый ОписаниеТипов("СправочникСсылка.КлючиАналитикиУчетаНоменклатуры"));
    ТЗСвязиВПорции.Колонки.Добавить("Документ");	
    ТЗСвязиВПорции.Колонки.Добавить("Период", новый ОписаниеТипов("Дата"));	
    ТЗСвязиВПорции.Колонки.Добавить("ЭтоПриход", новый ОписаниеТипов("ВидДвиженияНакопления"));	

    ДокументовВТекПорции = 0;
    ТекущийДокумент = Неопределено;
    НомерПорции = 0;

    Для каждого СтрокаСвязи Из ТЗСвязи Цикл
        
        Если ТекущийДокумент <> СтрокаСвязи.Документ Тогда
           
            //Если количество документов равно размеру порции, выполняем обработку данных
            Если ДокументовВТекПорции = КоличествоДокументовВПорции Тогда
                НомерПорции = НомерПорции + 1;
                ОбработатьПорциюДокументов(ТЗСвязиВПорции, КоличествоПотоков, ДокументовВТекПорции);
                ДлительныеОперации.СообщитьПрогресс(Формат(КоличествоДокументовВПорции*НомерПорции/ВсегоДокументов*100, "ЧЦ=3; ЧДЦ="), "Выполняется проведение документов, порция: "+Строка(НомерПорции+1));
                ТЗСвязиВПорции.Очистить();
                ДокументовВТекПорции = 0;
                ТекущийДокумент = Неопределено;
            КонецЕсли;
				
            ТекущийДокумент = СтрокаСвязи.Документ;
            ДокументовВТекПорции = ДокументовВТекПорции + 1;
        КонецЕсли;	
        
        НоваяСтрока = ТЗСвязиВПорции.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСвязи);

    КонецЦикла;

    //Обработка последней порции документов
    ОбработатьПорциюДокументов(ТЗСвязиВПорции, КоличествоПотоков, ДокументовВТекПорции);
	
КонецПроцедуры

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

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

Для каждого потока выполняется вызов функции «ПолучитьДокументыДляПотока». Полученные данные помещаются в структуру. Формируется массив структур данных для выполнения в потоках. В информационных целях формируется строка распределения документов по потокам и отправляется основному сеансу. После того, как сформированы все данные вызывается процедура «ЗапуститьВыполнениеВПотоках» для запуска фоновых заданий.

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

    //Для последнего потока выбираются все оставщиеся документы	
    Если ЭтоПоследнийПоток Тогда
        СписокДокументов = ТЗСвязи.Скопировать();
        СписокДокументов.Свернуть("Документ,Период");
        Возврат СписокДокументов;
    КонецЕсли;	
	         	
    НомерЦепочкиДокументв = 0;
	
    Пока ИСТИНА Цикл
        Если СписокДокументов.Количество() > КоличествоДокументовВПотоке 
                 ИЛИ НомерЦепочкиДокументв = 1 И СписокДокументов.Количество()/КоличествоДокументовВПотоке > 0.7 
                 ИЛИ НомерЦепочкиДокументв = 2 И СписокДокументов.Количество()/КоличествоДокументовВПотоке > 0.80
                 ИЛИ НомерЦепочкиДокументв = 3 И СписокДокументов.Количество()/КоличествоДокументовВПотоке > 0.85 
                 ИЛИ НомерЦепочкиДокументв = 4 И СписокДокументов.Количество()/КоличествоДокументовВПотоке > 0.90 
                 ИЛИ НомерЦепочкиДокументв >= 5 И СписокДокументов.Количество()/КоличествоДокументовВПотоке > 0.95 Тогда
            Прервать;
        КонецЕсли;
		
        Если ТЗСвязи.Количество() > 0 Тогда
            
            //Выборка первого документа
            ПервыйДокумент = ТЗСвязи[0].Документ;
            НоваяСтрока = СписокДокументов.Добавить();
            НоваяСтрока.Документ = ТЗСвязи[0].Документ;
            НоваяСтрока.Период = ТЗСвязи[0].Период;
            ТЗСвязи.Удалить(ТЗСвязи[0]);
            
            //Поиск аналитик по документу 
            СтрокиДокумента = ТЗСвязи.НайтиСтроки(новый Структура("Документ", ПервыйДокумент));
            РекурсивныйПоискДокументов(СтрокиДокумента, СписокДокументов, ТЗСвязи);
        Иначе
            Прервать;
        КонецЕсли;	
		
        НомерЦепочкиДокументв = НомерЦепочкиДокументв + 1;
    КонецЦикла;

    Возврат СписокДокументов;
	
КонецФункции	


Процедура РекурсивныйПоискДокументов(СтрокиДокумента, СписокДокументов, ТЗСвязи)

    МассивАналитик = новый СписокЗначений;
    
    Для Каждого СтрокаДокумента Из СтрокиДокумента Цикл
        МассивАналитик.Добавить(СтрокаДокумента.Аналитика, СтрокаДокумента.ЭтоПриход);
        ТЗСвязи.Удалить(СтрокаДокумента);
    КонецЦикла;

    //Обход всех аналитик и поиск документов с этими аналитиками	
    Для Каждого Аналитика Из МассивАналитик Цикл

        ДокументыПоАналитики = ТЗСвязи.НайтиСтроки(новый Структура("Аналитика", Аналитика.Значение));
        Если ДокументыПоАналитики.Количество() = 0 Тогда
            Продолжить;
        КонецЕсли;	
		
        НайденныйСписокДокументов = новый Массив;
        
        //Обход всех документов и добавление их в набор	
        Для Каждого ДокументПоАналитике Из ДокументыПоАналитики Цикл
            Если  СписокДокументов.Найти(ДокументПоАналитике.Документ, "Документ") = Неопределено Тогда
                НайденныйСписокДокументов.Добавить(ДокументПоАналитике.Документ); 
                НоваяСтрока = СписокДокументов.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока, ДокументПоАналитике); 
            КонецЕсли;
            ТЗСвязи.Удалить(ДокументПоАналитике);
        КонецЦикла;	
	
        //Рекурсивный вызов поиска для каждого найденного документа	
        Для Каждого ДокументПоАналитике Из НайденныйСписокДокументов Цикл
            СтрокиДокумента = ТЗСвязи.НайтиСтроки(новый Структура("Документ", ДокументПоАналитике));
            Если СтрокиДокумента.Количество() > 0 Тогда 
                РекурсивныйПоискДокументов(СтрокиДокумента, СписокДокументов, ТЗСвязи);
            КонецЕсли;
        КонецЦикла;
	
    КонецЦикла;

КонецПроцедуры

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

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

Документ записывается в список набора документов, строка удаляется из порции.

Выбираются аналитики учета по номенклатуре для выбранного документа:

Строки удаляются из порции.

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

Документы записываются в список набора документов, найденные строки удаляются из порции.

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

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

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

Для последнего потока выбираются все оставшиеся документы.

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

            Если СостояниеЗадания.Статус = "Выполняется" Тогда
                ВсеЗаданияВыполнены = Ложь;
            КонецЕсли;
			
            Если ЗавершитьЗадание Тогда
                ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
            КонецЕсли;
        КонецЦикла;	
		
        Если ВсеЗаданияВыполнены Тогда
            Прервать;
        КонецЕсли;	
    КонецЦикла;	
	
КонецПроцедуры

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

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

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

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

        Если НЕ (ТекущийДокумент % 5) Тогда
            ДлительныеОперации.СообщитьПрогресс(Формат(ТекущийДокумент/ВсегоДокументов*100, "ЧЦ=3; ЧДЦ="), "Выполняется проведение документа: " + СтрокаТЗ.Документ);
        КонецЕсли;			
		
    КонецЦикла;
    
    ДлительныеОперации.СообщитьПрогресс(Формат(ТекущийДокумент/ВсегоДокументов*100, "ЧЦ=3; ЧДЦ="), "Выполняется проведение документа: " + СтрокаТЗ.Документ);
    Возврат Ложь;
	
КонецФункции  

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

Вот, собственно, и все основные механизмы. Обработка тестировалась на различных конфигурациях УТ 11.4 и ЕРП 2.4 на версии платформы 8.3.14.1630. В прикрепленных файлах внешняя обработка со всеми описанными механизмами.

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

Мне удавалось ускорить проведение в 2,5 раза при значении параметров:

  • КоличествоПотоков = 3
  • КоличествоДокументовВПорции = 50

 

Пишу на всякий случай. На файловых базах ничего работать не будет! Так как можно запустить одновременно только один дополнительный поток. Ну это наверно всем известно)).   

Ссылка на первую статью.

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

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

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

42

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

Наименование Файл Версия Размер
Перепроведение документов в потоках
.epf 14,01Kb
17.09.19
5
.epf 14,01Kb 5 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
1. VmvLer 17.09.19 17:16 Сейчас в теме
визуализация идей фоновых порций из закрытия месяца?

да, разбиение на "не связанные по движениям" порции самая важная идея.
думаю, на больших базах стабильное, хотя бы на 90%, решение найти не реально.
фоновые будут падать по блокировкам и пр.
dimkakopylow001; +1 Ответить
12. ids79 4131 19.09.19 17:31 Сейчас в теме
(1)Тут важен не размер базы, а разброс по номенклатуре и складам. Если в большинстве случаев используются разные товары или склады в разных документах, то и на большой базе будет нормальное распределение
2. nomad_irk 40 17.09.19 17:20 Сейчас в теме
Лично я пока не понимаю, зачем вообще заниматься ананперепроведением документов в свете использования РАУ различных вариаций или как оно сейчас там называется.......
Использование многопоточности - нужная штука, сам лично сделал формирование пакетов обмена таким способом, иначе очень уж медленно обмены происходили, особенно, если свершилось какое-то пакетное изменение данных, а сейчас - прям красота. :) Ессно прогрессов мне никаких отображать никому не надо.....
13. ids79 4131 19.09.19 17:34 Сейчас в теме
(2)Да, для обменов многопоточность - актуальная тема. Сейчас сам как раз занимаюсь реализацией обмена ED в многопоточном режиме. В данной статье перепроведение приведено просто как пример.
3. vik070777 173 17.09.19 17:57 Сейчас в теме
А можно прерывать выполнение отдельных потоков
4. nomad_irk 40 17.09.19 18:00 Сейчас в теме
(3)чисто теоретически можно. Для этого нужно знать GUID фонового процесса.
14. ids79 4131 19.09.19 17:37 Сейчас в теме
(3)Я ссылку привел в статье на менеджер потоков, там это реализовано. Как вариант можно передавать все идентификаторы отдельных потоков в родительский сеанс. Тогда можно будет отслеживать выполнение и закрывать.
vik070777; +1 Ответить
20. vik070777 173 19.09.19 22:29 Сейчас в теме
5. Rustig 1198 17.09.19 18:29 Сейчас в теме
(0)
Суть моей разбивки следующая. Не допускается попадание в разные наборы документов, которые создают движения по одним и тем же комбинациям измерений: номенклатура + характеристика + склад.


Есть объект метаданных Последовательность, для которой можно задать измерения Номенклатура, Харак-ка, Склад.
Платформа сама разобьет документы на непересекающиеся наборы.
15. ids79 4131 19.09.19 17:47 Сейчас в теме
(5)Да можно, но придется вносить изменения в типовую конфигурацию. Причем, если это разовая вещь, нужно будет убирать потом эти изменения. Это не удобно. Я использовал данный механизм для перепроведения документов с перезаполнением видов запасов. Для формирования корректных резервов по товарам организаций (необходимо для закрытия месяца, если часто отключается контроль остатков товаров организаций в течение работы). Вносить изменения в конфигурацию было нельзя.
6. aximo 888 18.09.19 10:20 Сейчас в теме
Дмитрий, спасибо за статью! но как бороться с блокировками?

В большинстве случаев - используются документы "реализация, поступление, возвраты, формирование опзс, требования накладные" - они связаны мду собой....

и еще вопрос - почему использовалась 14-ая платформа? возможно ли реализовать что-то подобное на более низших версиях?
10. dimkakopylow001 5 18.09.19 14:55 Сейчас в теме
(6) Добавить измерения в последовательность
16. ids79 4131 19.09.19 17:51 Сейчас в теме
(6)По регистрам товаров как раз не должно быть блокировок с такой разбивкой. По регистрам расчетов, да могут быть, я писал об этом в статье.
Можно и на более ранних версиях, просто у маня 14-ая стоит )).
7. tolyan_ekb 169 18.09.19 10:36 Сейчас в теме
Можно этот механизм использовать при загрузке и проведении документов из сторонней БД?
17. ids79 4131 19.09.19 18:29 Сейчас в теме
(7)Можно конечно. Но в этом случае, механизм получения информации для проведения нужно изменить, так как документы не проведены будут.
8. maxx 826 18.09.19 11:23 Сейчас в теме
Идея интересная.

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

Что касается пула документов , то переводя на язык 1С:Бухгалтерии, то интересно в потоках проводить документы:
- отдельно по организациям
- отдельно по контрагентам

для этого больше используются журналы документов, критерии отбора, или запросы по этим признакам, и там нет необходимости искать рекурсивно, т.к. документ в журнале встречается один раз
ids79; dimkakopylow001; Fox-trot; +3 Ответить
18. ids79 4131 19.09.19 18:35 Сейчас в теме
(8)По первой части не понял, в каком случае может быть нарушена последовательность? Сортировка по дате и ссылке.

Для бухгалтерии удобнее всего по организациям разбивать, если их много. Если не менять конфигурацию.
21. aximo 888 21.09.19 08:03 Сейчас в теме
(18) по опыту своему - интенсивные операции, даже непрерывное чтение - так же будут проблемой для возникновению блокировок, например расчет себестоимости в УПП (производство встанет) или даже расчет развернутого АВС анализа в УТ.

непонятно как можно избежать блокировок регистра "продажи", который подчинен куче разных документов, если честно
22. ids79 4131 21.09.19 11:06 Сейчас в теме
(21)Не знаю, возможно Вы используете автоматический режим блокировок.
Моя обработка для конфигураций семейства ЕРП. Никак не пойму в каких случаях может возникнуть блокировка по регистру "Выручка и себестоимость продаж"? Может быть я чего-то упустил, поясните.
23. aximo 888 21.09.19 13:03 Сейчас в теме
(22) я не написал, что вы что-то упустили.

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

Блокировка(и) могут возникнуть в случае при расчете «себестоимости» (интенсивная запись в этот регистр) в остальные регистры будет проблемно сделать запись (даже «руками» - документом) - это мой практический опыт работы с упп 1.3 (порядка 800 гб база).

При запуске АВС анализа - УТ 11 (80 гб) так же идет интенсивное чтение по регистрам... так же «блокируется» на запись база.

Даже при банальном распроведении связанных по регистрам документов всегда возникает блокировки.... (удаление движений ут 10.3)

Для меня, если честно остается загадкой как избежать блокировок при запуске нескольких интернствных потоков...
25. ids79 4131 21.09.19 13:13 Сейчас в теме
(23)Ну с автоматическим режимом все понятно. В управляемом то не должно быть. Блокировка на чтение снимается после прочтения.

Я тестировал перепроведение. Не скажу, чтоб очень много, но блокировок не возникало. Попробуйте на большой базе прогнать. Только в управляемом режиме конечно.
9. maxx 826 18.09.19 13:27 Сейчас в теме
Еще вопрос можно ли как-то оценить время выполнения после запуска в потоках?

Когда идёт обычное проведение вычисляется среднее выполнение проведения документов и делается примерная оценка, когда всё закончит проводится, т.е. ждать 30 минут или 3 часа. А здесь как?
ids79; dimkakopylow001; +2 Ответить
11. dimkakopylow001 5 18.09.19 14:58 Сейчас в теме
(9) на разном железе разный результат будет
можно запустить 3 потока, они отработают быстрее чем 10.
19. ids79 4131 19.09.19 18:37 Сейчас в теме
(9)На счет предварительной оценки времени не думал. Тема интересная. Да, в данном случае оценить будет значительно сложнее.
От железа также будет сильно зависеть.
24. aximo 888 21.09.19 13:08 Сейчас в теме
Здесь правильно написали, что сейчас эффективность зависит от железа... хорошее железо будет в разы эффективнее любой оптимизации, что и подтвердилось моим опытом, при срезе базы в 2014 и 2018 г!
26. ids79 4131 21.09.19 13:14 Сейчас в теме
(24)Да, от железа много зависит.
Особенно при многопоточной обработке.
27. acanta 67 25.09.19 14:08 Сейчас в теме
Была замужем замечена некоторая странность, когда при одновременном монопольном проведении в двух разных ИБ, проведение ускорялось в 4-10 раз в каждой базе. Но такие чудеса теоретически могут объясняться например недонастройками в биосе или кэшированием. Проводить в одной базе разные фирмы параллельно не успела попробовать.
28. PowerBoy 2913 09.10.19 13:55 Сейчас в теме
Для экспериментов с многопоточностью и распределению потоков для различных операций с данными, не только проведение, пока есть только одна внешняя обработка, других не нашел, это PowerTools.
Оставьте свое сообщение

См. также

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

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

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

17.08.2019    8580    ids79    14       

Менеджер потоков: реализация "любой" задачи в потоках 49

Статья Программист Нет файла v8 Абонемент ($m) Производительность и оптимизация (HighLoad)

Менеджер потоков – один их новых инструментов, который упрощает работу разработчиков. Насколько легко с ним, на конференции Infostart Event 2018 Education показал начальник отдела автоматизации 1С Иван Филимонов компании «Трансстроймеханизация».

01.08.2019    4250    17    DarkAn    6       

Списание (корректировка) задолженности контрагентов УНФ 1.6 4

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v8 УНФ Украина БУ Дебиторская и кредиторская задолженность Абонемент ($m) Закрытие периода Обработка документов

Обнуление задолженности контрагентов в конфигурации "Управление небольшой (нашей) фирмой" версии 1.6 с помощью документа "Корректировка регистров".

1 стартмани

24.07.2019    2371    3    DMon    1       

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

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

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

1 стартмани

03.07.2019    9287    1    m-rv    73       

Регистрация документов с измененной суммой 2

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

Обработка берет информацию из истории изменения документов. Удобна для администраторов, когда документы с измененной суммой по какой-то причине не регистрируются в плане обменов. Можно регистрировать не все документы, а только те, которые были изменены.

1 стартмани

20.04.2019    3630    1    ryan    0       

Безопасная работа с транзакциями во встроенном языке 186

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

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

1 стартмани

25.03.2019    13532    7    tormozit    35       

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 514

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

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

1 стартмани

31.01.2019    25569    245    bonv    108       

Валовая прибыль для УПП 1.3, КА 1.1 в режиме РАУЗ (работа типового отчета без доработок конфигурации) 6

Инструменты и обработки Бухгалтер Пользователь Внешняя обработка (ert,epf) v8 КА1 УПП1 УУ Абонемент ($m) Обработка документов

Простое и мгновенное решение для использования типового отчета "Валовая прибыль" в конфигурациях "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1" (а также отраслевых решений на их базе) при включенном режиме РАУЗ (расширенная аналитика учета затрат). Не требует настройки или изменения конфигурации, либо может быть, для дополнительного удобства, интегрировано в нее с минимальными доработками.

2 стартмани

21.01.2019    5737    6    stvorl    3       

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

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

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

1 стартмани

13.09.2018    8327    10    RocKeR_13    12       

Помощник корректировки остатков ЕГАИС в небольшом магазине. Розница 2.2 12

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 Розница Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Россия УУ Розничная торговля Абонемент ($m) Обработка документов

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

5 стартмани

08.09.2018    13952    78    asdfgcom    45       

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

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

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

5 стартмани

09.08.2018    14886    23    informa1555    26       

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

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

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

1 стартмани

17.07.2018    20155    13    kalyaka    15       

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

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

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

1 стартмани

01.06.2018    19161    86    m-rv    57       

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному 236

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

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    26500    24    dsdred    34       

Как выполнить отчет на СКД через COM и получить данные отчета? 86

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

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    17367    10    wowik    3       

Работа со схемой запроса 171

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

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

1 стартмани

24.04.2018    27437    72    kalyaka    34       

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

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

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

1 стартмани

08.02.2018    17513    20    mvxyz    17       

Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов 122

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

Если вам интересно проверить контрагенте в ФНС, вам поможет данная публикация. Весь алгоритм работы строится на основе данных, полученных с сервиса http://npchk.nalog.ru совершенно бесплатно.

1 стартмани

01.02.2018    24419    61    rpgshnik    46       

Корректировка остатков ЕГАИС, возврат из регистра 2, загрузка ТТН из файлов, другое для УТ10.3 15

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 v8::ОУ УТ10 Россия БУ Розничная торговля Абонемент ($m) Обработка документов

Набор обработок для автоматизации работы с ЕГАИС: Обработка корректировки остатков ЕГАИС для УТ 10.3, аналогичная имеющимся в УТ 11, Рознице 2.2. Автоматически формирует документы "Передача в торговый зал", "Акт постановки на баланс в торговом зале", "Акт списания в торговом зале". Обработка возврата из регистра 2 с подбором справок Б. Обработка формирования ТТН из файлов xml.

1 стартмани

24.01.2018    17016    5    biz-intel    3       

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула 8

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

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

1 стартмани

29.12.2017    21597    21    agent00mouse    0       

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника. ЗУП 3.1 35

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Зарплата Абонемент ($m) Обработка документов Загрузка и выгрузка в Excel

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника по данным экономического отдела. ЗУП 3.1.

3 стартмани

20.12.2017    24302    29    mvv1975    5       

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

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

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

1 стартмани

06.12.2017    17956    52    kwazi    6       

Копирование меню в Трактир Management 2

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 1cv8.cf Рестораны, кафе и фаст-фуд Россия УУ Производство готовой продукции (работ, услуг) Абонемент ($m) Обработка документов

Механизм копирования меню в Трактир Management. Данная обработка расширяет функционал типового решения Трактир Management, позволяя быстро вводить в эксплуатацию новую точку путём создания нового меню на основании имеющегося.

1 стартмани

28.11.2017    13505    1    integrator1983    0       

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

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

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

1 стартмани

30.05.2017    82493    14    signum2009    45       

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

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

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

26.05.2017    38563    168    DarkAn    86       

Упрощение работы с актами сверки в УТ/КА/УПП - вывод номеров счетов в документе и печатной форме 3

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 КА1 УТ10 УПП1 БУ УУ Дебиторская и кредиторская задолженность Абонемент ($m) Обработка документов Печатные формы документов

Обычно акт сверки с клиентами содержат информацию о документах реализации товаров (накладных) и выполненных платежах. Но платежи делаются на основании счетов, номера которых отсутствуют в актах, что затрудняет собственно сверку. Данная обработка находит соответствующие расходным накладным счета/заказы, показывает их в форме документа и выводит в печатную форму акта.

2 стартмани

12.05.2017    11783    2    denmax    2       

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

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

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

1 стартмани

28.09.2016    31735    39    ildarovich    22       

Редактор движений документа. Сохранение в XML, обмен между базами, замена регистратора. 23

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 Абонемент ($m) Обработка документов Универсальные обработки Обмен через XML

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

1 стартмани

07.09.2016    27742    146    Aphanas    4       

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

Инструменты и обработки Системный администратор Программист Компонента, плагин (dll, vbs,..) v8 Windows Абонемент ($m) Практика программирования

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

1 стартмани

14.08.2016    38231    35    Demanoidos    60       

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

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

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

2 стартмани

05.06.2016    43680    4    wowik    27       

Загрузка Счета покупателя из PDF 7

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 v8::БУ БП3.0 Windows Оптовая торговля Абонемент ($m) Обработка документов Файловые протоколы обмена, FTP

Обработка позволяет загрузить счет покупателя из pdf-файла в документ Счет на оплату покупателю (Бухгалтерия 3.0)

2 стартмани

23.05.2016    4572    10    John_d    0       

Остатки на каждый день в запросе 34

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

Запрос формирует остатки товаров на каждый день в пределах выбранного периода.

1 стартмани

26.04.2016    34195    19    arakelyan    17       

Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии 150

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

Пример выполнения JS кода из 1С в Поле HTML Документа под управляемыми формами, с удобным получением результата в 1С(С помощью вызова привязанного события ПриНажатии к элементу ПолеHTMLДокумента)

1 стартмани

22.03.2016    60439    135    igo1    49       

Управление доставкой розничным покупателям 2

Инструменты и обработки Руководитель проекта Конфигурация (md, cf) v8 УТ10 Розничная и сетевая торговля (FMCG) Россия УУ Windows Розничная торговля Абонемент ($m) Обработка документов

Дополнение для УТ 11.1, оформление доставки для розничного покупателя на основании кассового чека в связке с мягким чеком покупателя.

5 стартмани

10.03.2016    17065    6    Denis_Viktorovich    5       

Количество дней недели (понедельников/вторников/...) в заданном диапазоне одним запросом 29

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

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

1 стартмани

03.03.2016    12075    1    Alexander.Shvets    5       

Ночное восстановление последовательности документов (фоновым заданием) для БП 3.0 17

Инструменты и обработки Системный администратор Внешняя обработка (ert,epf) v8 v8::БУ БП3.0 Россия Windows Абонемент ($m) Обработка документов

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

5 стартмани

25.02.2016    24414    83    SmArtist    8       

Простые радости жизни программиста 1С: выбор типа значения 51

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

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

1 стартмани

17.02.2016    38647    45    yuraos    17       

Яндекс.Деньги "Благотворительность" 17

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

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

1 стартмани

16.02.2016    17315    9    Tatitutu    5       

Перечисление НДФЛ в бюджет РФ (13%, 30%) 11

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 v8::СПР ЗУП2.5 БУ НУ Windows Зарплата НДФЛ Абонемент ($m) Обработка документов

Внешняя обработка (табличных частей), предназначенная для корректного заполнения документа "Перечисление НДФЛ в бюджет РФ". Конфигурация: Зарплата и Управление Персоналом, редакция 2.5

1 стартмани

27.01.2016    22204    239    1kashak    16       

Начисление процентов по кредитам и займам для 1С:Бухгалтерии 3.0 15

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 БП2.0 Россия БУ Windows Займы, кредит, лизинг Абонемент ($m) Обработка документов

Универсальная обработка по начислению процентов по кредитам и займам для 1С:Бухгалтерии 3.0 без изменения конфигурации

1 стартмани

22.01.2016    48397    156    algora    27       

Пакетная замена номенклатуры с учетом характеристик 6

Инструменты и обработки Бухгалтер Руководитель проекта Внешняя обработка (ert,epf) v8 КА1 УТ10 УПП1 УУ Оптовая торговля Учет ТМЦ Абонемент ($m) Обработка документов

Обработка "Пакетная замена номенклатуры" в Заказе покупателя, Реализации и Поступлении товаров с использованием отбора по значениям характеристик

1 стартмани

22.01.2016    9587    trendy    1       

Перечисление НДФЛ в бюджет: заполнение НДФЛ по расчетной ведомости для ЗУП 2.5 7

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 ЗУП2.5 Россия БУ Зарплата НДФЛ Абонемент ($m) Обработка документов

Внешняя обработка для заполнению сумм НДФЛ для перечисления в бюджет по данным расчетной ведомости для 1С ЗУП 2.5

2 стартмани

30.12.2015    10740    71    Snork    4       

Мастер рассылки e-mail 2.2 для управляемых форм 9

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m) Практика программирования Email

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    30513    20    milkers    4       

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

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

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

1 стартмани

28.12.2015    19177    57    vasvl123    9       

Акт сверки с номерами счетов-фактур, начальными остатками по договорам и заполнением по головному контрагенту [Расширение] 21

Инструменты и обработки Бухгалтер Расширение (cfe) v8 БП3.0 Россия БУ Windows Дебиторская и кредиторская задолженность Абонемент ($m) Обработка документов

Акт сверки взаиморасчетов (БП 3.0): - Вывод начальных и конечных остатков по договорам в печатную форму; - Вывод валютной суммы для договоров в условных единицах; - Заполнение данных счетов-фактур или УПД; - Заполнение данных по головному контрагенту и всем обособленным подразделениям; - Заполнение представителя организации из ответственных лиц; - Факсимильная подпись и печать. Не требует снятия с поддержки и подходит для базовых конфигураций

1 стартмани

15.12.2015    43017    101    mrXoxot    40