Оптимизация расчета себестоимости выпуска продукции (УПП 1.3, Партионный учет)

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

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

УПП Оптимизация Расчет себестоимости Партионный учет tempdb асинхронная запись

В результате выполненных доработок удалось уменьшить время проведения Регламентной операции "Рассчитать себестоимость (БУ, НУ)" в два и более раза, а в отдельных операциях (Распределение продукции и затрат по переделам) удалось достичь 7-ми кратного уменьшения времени проведения!

До начала оптимизации дело обстояло так:

В отдельных месяцах проведение Регламентной операции "Рассчитать себестоимость (БУ, НУ)" удавалось осуществить только в выходные дни - проведение длилось более суток. При этом происходил лавинообразный рост служебной базы tempdb до астрономических 360 Гб.

Конфигурация:

  • Управление производственным предприятием, редакция 1.3 (1.3.79.2)
  • 1С:Предприятие 8.3 (8.3.8.1784)
  • Microsoft SQL Server 2012
  • Используется партионный учет
  • Расчет себестоимости ведется по переделам
  • Размер базы (.mdf) 38 Гб

Решение:

1. В борьбе с разрастанием служебной базы tempdb кардинально решить вопрос удалось следующим образом:

В процедурах:

  • ПроцедурыРасчетаСебестоимостиВыпуска.СформироватьТекстЗапросаЗаполнениеКорректировкиВстречногоВыпускаПродукции();
  • ПроцедурыРасчетаСебестоимостиВыпуска.СформироватьТекстЗапросаПоВыпускуПродукцииИЗатратамНаВыпуск();
  • ПроцедурыРасчетаСебестоимостиВыпуска.СформироватьТекстЗапросаПоЗатратамНаВыпуск();
  • ПроцедурыРасчетаСебестоимостиВыпуска.СформироватьТекстЗапросаБазаРаспределенияЗатратНаПродукцию();
  • РасчетСебестоимостиВыпускаРаспределениеПоПеределам.СформироватьТекстЗапросаВыпускБезПрямыхРасходов();
  • РасчетСебестоимостиВыпускаРаспределениеПоПеределам.СформироватьТекстЗапросаВыпускНаРаспределяемыеРасходы();
  • РасчетСебестоимостиВыпускаРаспределениеПоПеределам.СформироватьТекстЗапросаМатериальныеПроизводственныеРасходы();
  • РасчетСебестоимостиВыпускаРаспределениеПоПеределам.СформироватьТекстЗапросаНематериальныеПроизводственныеРасходы();
  • РасчетСебестоимостиВыпускаРаспределениеПоПеределам.СформироватьТекстЗапросаНематериальныеПроизводственныеРасходыНУ();

1.1. В текстах запросов конструкции языка связанные с обращением к реквизиту через точку заменяем на явное соединение с соответствующей таблицей. Особенно это актуально для справочника Номенклатура (реквизит ВестиУчетПоСериямВНЗП).

Пример: РасчетСебестоимостиВыпускаРаспределениеПоПеределам.СформироватьТекстЗапросаМатериальныеПроизводственныеРасходы()

//+    - добавленные строки

ВЫБРАТЬ РАЗЛИЧНЫЕ
	...
	//ВЫБОР КОГДА ЗатратыНаВыпуск.Продукция.ВестиУчетПоСериямВНЗП ТОГДА
	ВЫБОР КОГДА ЕСТЬNULL(ЗатратыНаВыпускПродукция.ВестиУчетПоСериямВНЗП, ЛОЖЬ) ТОГДА //+
	...
	//ВЫБОР КОГДА ЗатратыНаВыпуск.Затрата.ВестиУчетПоСериямВНЗП ТОГДА
	ВЫБОР КОГДА ЕСТЬNULL(ЗатратыНаВыпускЗатрата.ВестиУчетПоСериямВНЗП, ЛОЖЬ) ТОГДА //+
	...
ИЗ
	РегистрНакопления.ЗатратыНаВыпускПродукции%СуффиксУчета% КАК ЗатратыНаВыпуск
	...

	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ЗатратыНаВыпускПродукция //+
	ПО ЗатратыНаВыпускПродукция.Ссылка = ЗатратыНаВыпуск.Продукция //+

	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ЗатратыНаВыпускЗатрата //+
	ПО ЗатратыНаВыпускЗатрата.Ссылка = ЗатратыНаВыпуск.Затрата //+

1.2. В текстах запросов условия следующего вида (имеет смысл для вложенных запросов с объемистой выборкой):

ГДЕ
	ВыпускПродукции.Продукция В (
		ВЫБРАТЬ РАЗЛИЧНЫЕ
			БазаРаспределенияЗатрат.Продукция
		ИЗ
			РегистрСведений.БазаРаспределенияЗатрат%СуффиксУчета% КАК БазаРаспределенияЗатрат
		ГДЕ
			БазаРаспределенияЗатрат.Период МЕЖДУ &НачДата И &КонДата
			И БазаРаспределенияЗатрат.РаспределениеКосвенныхЗатрат = &РаспределениеКосвенныхЗатрат
			И БазаРаспределенияЗатрат.РасчетСебестоимостиВыпуска
		)

заменяем на внутреннее соединение следующего вида:

	ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
		ВЫБРАТЬ РАЗЛИЧНЫЕ
			БазаРаспределенияЗатрат.Продукция
		ИЗ
			РегистрСведений.БазаРаспределенияЗатрат%СуффиксУчета% КАК БазаРаспределенияЗатрат
		ГДЕ
			БазаРаспределенияЗатрат.Период МЕЖДУ &НачДата И &КонДата
			И БазаРаспределенияЗатрат.РаспределениеКосвенныхЗатрат = &РаспределениеКосвенныхЗатрат
			И БазаРаспределенияЗатрат.РасчетСебестоимостиВыпуска
	) КАК БазаРаспределенияЗатрат
	ПО БазаРаспределенияЗатрат.Продукция = ВыпускПродукции.Продукция

В результате этих двух доработок (1.1 и 1.2) максимальный рост tempdb в итоге составил 1.8 Гб, так же существенно увеличилась скорость выполнения запросов.

2. Поиск из результата запроса заменяем на поиск строк из таблицы значений методом НайтиСтроки (в местах где происходит поиск в цикле с многотысячным количеством итераций)

Пример: ПроцедурыРасчетаСебестоимостиВыпуска.КорректировкаДвиженийПоВыпускуПродукции()

//+		- добавленные строки

//ВыборкаПоВыпуску = РезультатЗапросаПоВыпускуПродукции.Выбрать();
ТаблицаПоВыпуску = РезультатЗапросаПоВыпускуПродукции.Выгрузить(); //+
...

ОбходПоЗатратам = РезультатЗапросаПоЗатратамНаВыпускПродукции.Выбрать();
Пока ОбходПоЗатратам.Следующий() Цикл

	СтруктураПоискаВыпуск = ПолучитьСтруктуруПоискаСтрокВыпускаПродукции(
		СтруктураШапкиДокумента,
		ОбходПоЗатратам
		);
	...

	//ВыборкаПоВыпуску.Сбросить();
	//Пока ВыборкаПоВыпуску.НайтиСледующий(СтруктураПоискаВыпуск) Цикл // На этой строчке замер производительности показывал многочасовые ожидания
	МассивСтрокПоВыпуску = ТаблицаПоВыпуску.НайтиСтроки(СтруктураПоискаВыпуск); //+
	Для каждого ВыборкаПоВыпуску Из МассивСтрокПоВыпуску Цикл //+
		...

	КонецЦикла;
	...

КонецЦикла;

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

Пример: РасчетСебестоимостиВыпускаРаспределениеПоПеределам.СоздатьТабПеределов() - здесь удалось достичь 7-ми кратного выигрыша по времени !!!

//+    - добавленные строки

//МаксИндекс = ТабПеределов.Количество() - 1;
...

Пока ПроставленПередел Цикл
	...

	//ТабПеределов.Сортировать("НомерПередела Убыв");	// На этой строчке замер производительности показывал многочасовые ожидания (в нашей таблице до 6 млн. записей)
	//ТекСтрока = ТабПеределов.Найти(0, "НомерПередела");
	СтрокиСПустымиПеределами = ТабПеределов.НайтиСтроки(Новый Структура("НомерПередела", 0)); //+

	//Если ТекСтрока = Неопределено Тогда
	Если СтрокиСПустымиПеределами.Количество() = 0 Тогда //+
		Прервать;
	КонецЕсли;

	//Индекс = ТабПеределов.Индекс(ТекСтрока);
	...

	//ИндексСтроки = Индекс;
	//Пока ИндексСтроки <= МаксИндекс Цикл
	МаксИндекс = СтрокиСПустымиПеределами.ВГраница(); //+
	Для Сч=0 По МаксИндекс Цикл //+
		ИндексСтроки = МаксИндекс - Сч; //+

		//СтрокаТаблицы = ТабПеределов[ИндексСтроки];
		СтрокаТаблицы = СтрокиСПустымиПеределами[ИндексСтроки]; //+
		...

		СтрокаТаблицы.НомерПередела = 1;
		СтрокиСПустымиПеределами.Удалить(ИндексСтроки); //+ // Удаление текущей строки с проставленным переделом
		...

		//ИндексСтроки = ИндексСтроки + 1;

	КонецЦикла;
	...

КонецЦикла;

4. Так же был применён метод асинхронной записи регистров. По этому методу выигрыш по времени в наших условиях составил до 30%

Суть метода:

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

	Если НаборЗаписейБазаРаспределенияЗатрат.Количество() = 1000 Тогда
		НаборЗаписейБазаРаспределенияЗатрат.Записать(Ложь);
	КонецЕсли;

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

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

Графически эти два варианта выглядят так:

1. Последовательные Расчет и Запись
Основной поток Расчет 1 Запись 1 Расчет 2 Запись 2 Расчет 3 Запись 3 Расчет 4 Запись 4 Расчет 5 Запись 5
2. Асинхронные Расчет и Запись
Основной поток Расчет 1 Расчет 2 Расчет 3 Расчет 4 Расчет 5 Ожидание
Фоновое задание 1 Запись 1
Фоновое задание 2 Запись 2
Фоновое задание 3 Запись 3
Фоновое задание 4 Запись 4
Фоновое задание 5 Запись 5

Замечания и ограничения применимости данного метода:

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

Реализация метода:

Задачи.РегламентныеОперацииЗакрытияМесяца.ФормаЗадачи - на командную панель формы добавляем кнопку "Провести вне транзакции" и назначаем следующий обработчик:

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

					ДокументОбъект.мУдалятьДвижения = Ложь;
					Отказ = Ложь;
					
					глЗначениеПеременнойУстановить("НаборыДвиженийЗаписыватьАсинхронно", Истина, Истина); // Взводим флаг асинхронной записи движений

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

В местах записи очередной порции движений добавляем вызов функции: НаборЗаписейЗаписатьАсинхронно(НаборЗаписей)

Если НаборЗаписейЗатратыНаВыпуск.Количество() = 1000 Тогда
	Если НЕ ЛУ_КлиентСервер.НаборЗаписейЗаписатьАсинхронно(НаборЗаписейЗатратыНаВыпуск) Тогда //+
		НаборЗаписейЗатратыНаВыпуск.Записать(Ложь);
	КонецЕсли; //+
КонецЕсли;

НаборЗаписейЗаписатьАсинхронно - функция общего модуля ЛУ_КлиентСервер (Сервер, Клиент обычное приложение) со следующим листингом:

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

ФоновоеЗаданиеЗаписатьНаборЗаписей - функция общего модуля ЛУ_ВызовСервера (Сервер, Вызов сервера, Привилегированный) со следующим листингом:

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

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

ЛУ_КлиентСервер.ОжиданиеЗавершенияФоновыхЗаданий(СтруктураДвижений.ДвиженияЗатратыНаВыпуск); //+
	
Если СтруктураДвижений.ДвиженияЗатратыНаВыпуск.Модифицированность() Тогда
	СтруктураДвижений.ДвиженияЗатратыНаВыпуск.Записать(Ложь);
КонецЕсли;

ОжиданиеЗавершенияФоновыхЗаданий - функция общего модуля ЛУ_КлиентСервер (Сервер, Клиент обычное приложение) со следующим листингом:

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

Более подробные листинги смотри во вложении

Вложенный файл ПроцедурыРасчетаСебестоимостиВыпуска.zip содержит модули подвергшиеся оптимизации согласно описанным в статье методам и предназначены для конфигурации Управление производсвенным предприятем 1.3 (1.3.79.2). Возможна установка на более ранние или старшие релизы. Клиент - Серверный вариант. Обычные формы.

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

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

Состав файла:

1. ПроцедурыРасчетаСебестоимостиВыпуска.cf
Помечаем для объединения только следующие общие модули:
- ПроцедурыРасчетаБазыРаспределенияЗатрат
- ПроцедурыРасчетаСебестоимостиВыпуска
- РасчетСебестоимостиВыпускаРаспределениеПоПеределам
- ЛУ_КлиентСервер
- ЛУ_ВызовСервера

2. Задачи.РегламентныеОперацииЗакрытияМесяца.ФормаЗадачи.txt
- На форме задачи в командной панели необходимо добавить кнопку "Провести вне транзакции" и назначить обработчик из этого файла

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

Наименование Файл Версия Размер
ПроцедурыРасчетаСебестоимостиВыпуска.zip
.zip 175,16Kb
27.10.16
27
.zip 3 175,16Kb 27 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
1. DatiniFM 23.08.16 17:13 Сейчас в теме
Вопрос только один - А что программеры 1с в УПП тогда делают -усиленно штампуют неоптимальные алгоритмы?
2. linkov 237 23.08.16 17:43 Сейчас в теме
(1) DatiniFM,

Да нет, не штампуют, все в пределах методологии.
Только вот на наших объемах и программно - аппаратной реализации более оптимальными оказались представленные алгоритмы.
Хотя, по п.3 типовой алгоритм по любому косяковый.
3. tango 485 23.08.16 22:41 Сейчас в теме
4. Mkonst 53 24.08.16 12:29 Сейчас в теме
некоторые вещи из публикации надо будет попробовать на своей упп...
5. adhocprog 1174 24.08.16 16:06 Сейчас в теме
6. lunjio 61 25.08.16 10:10 Сейчас в теме
Хорошая статья, спасибо, единственное, что при создании фоновых задач можно управлять стеком указывая ключ задания, который в данном случае будет являться именем регистра. 1С при запуске смотрит, нет ли задач с таким же ключем и только тогда запускает, а так же что это можно было оформить в конфигурацию в качестве модулей с такими же наименованиями, а не текстовыми файликами, а в целом мне очень актуально, больше всего занимает процесс записи у нас при расчете. Спасибо за то, что поделились.
7. linkov 237 25.08.16 10:54 Сейчас в теме
(6) lunjio,

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

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

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

а так же что это можно было оформить в конфигурацию в качестве модулей с такими же наименованиями, а не текстовыми файликами,

Ок, во вложенный архив добавлен cf
13. lunjio 61 31.08.16 19:37 Сейчас в теме
(7)
Вынужден с вами не согласиться, лично для интереса проверил следующим образом - создал регламентное задание которое в качестве параметра принимает ссылку на некий справочник, далее в цикле с 10 тыс. итерациями в специально созданный регистр сведений записываю данную ссылку с измерением равным счетчику цикла, для тестов достаточно. Создаю подряд два регламентных задания, с одинаковым ключом, в оба передаю разные значения ссылок, записываю их подряд, выполнится должны почти сразу после записи, ставлю точку останова в процедуре выполнения фонового задания, в другом сеансе вижу, что одно задание выполняется, второе ещё не выполнялось и не запускалось, как только отпускаю точку останова, попадаю туда сразу второй раз, в консоли регламентных заданий вижу что теперь второе задание исполняется, первое выполнено.
А чтобы регламентные задания не висели впустую, в фоновом задании их можно просто удалять.
У себя ещё не внедрил, но деньги за это думаю просите обосновано, грамотно проделанная оптимизация, ещё раз спасибо за публикацию.
16. linkov 237 01.09.16 09:45 Сейчас в теме
(13) lunjio,

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


Верно. Для Регламентного задания уникальность ключа не требуется. По Вашему предложению тоже можно организовать выполнение Фоновых заданий в стеке. Но все же получается сложновато - в этом случае для запуска Фоновых заданий дополнительно придется создавать, записывать в базу и удалять объекты Регламентных заданий. К тому же основное назначение Регламентных заданий - выполнение Фоновых задач по расписанию. Спасибо за подсказку, возможно, где нибудь пригодится.
18. lunjio 61 02.09.16 11:58 Сейчас в теме
(16)
Да согласен, в вашем варианте более оптимально, как-то сразу не подумал, притом что если организовывать через регламентные, встает проблема с ожиданием завершения всех текущих заданий, в голове рисуется что ожидание будет не очень красивым в плане кода и логики ,в важем случае все четко, НО внесу свои две копеек всё-таки в оптимизацию кода
Текст где в процедуре фонового задания мы ожидаем завершения предыдущих в стеке, нужно перенести в начало процедуры, не совсем оптимально по отношению к памяти, создаем набор записи, переносим в него таблицу, а потом ждём.
19. linkov 237 03.09.16 10:19 Сейчас в теме
(18) lunjio,

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

Зато оптимально в плане скорости, после окончания ожидания уже всё готово, остается только записать набор записей. Спорный момент. Зависит от приоритетов в конкретной реализации.
8. anama_agro 26.08.16 16:30 Сейчас в теме
Большое спасибо Вам за идею! Хотелось бы задать пару вопросов: не совсем понимаю зачем мы предварительно выгружаем набор записей в таблицу значений ПараметрыЗадания.Добавить(НаборЗаписей.Выгрузить()) (на это же тратится дополнительное время)? Почему нельзя просто передать НаборЗаписей в фоновое задание и там выполнить метод НаборЗаписейЗадания.Записать(Замещение)? Так же не совсем понимаю почему для регистра накопления используется вызов промежуточного метода: ОбщегоНазначения.ВыполнитьДвижениеПоРегистру(НаборЗаписейЗадания) ? Разве строки НаборЗаписейЗадания.Загрузить(ТаблицаДвижений); будет недостаточно? Заранее благодарю за ответ!
9. linkov 237 26.08.16 17:24 Сейчас в теме
(8) anama_agro,

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

Пробовал, надеялся, но ругается на мутабельность значения.

Так же не совсем понимаю почему для регистра накопления используется вызов промежуточного метода: ОбщегоНазначения.ВыполнитьДвижениеПоРегистру(НаборЗаписейЗадания) ? Разве строки НаборЗаписейЗадания.Загрузить(ТаблицаДвижений); будет недостаточно?

Данный участок кода позаимствован из типового. В этом методе при копировании ТаблицыЗначений в НаборЗаписей отсекаются пустые ссылки и пустые значения в случае, если реквизит составного типа. Что благотворно сказывается на самочувствии регистра накопления.
22. abadonna83 39 19.07.17 15:53 Сейчас в теме
Ругается.

{ОбщийМодуль.ЛУ_ВызовСервера.Модуль(9)}: Поле объекта не обнаружено (мТаблицаДвижений)
УчетЗатратРегл


И не понятно как поправить
10. sarun 30 31.08.16 13:01 Сейчас в теме
{ОбщийМодуль.ПроцедурыРасчетаБазыРаспределенияЗатрат.Модуль(2200)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(103, 1)}: Синтаксическая ошибка
12. linkov 237 31.08.16 13:38 Сейчас в теме
(10) sarun,

{ОбщийМодуль.ПроцедурыРасчетаБазыРаспределенияЗатрат.Модуль(2200)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(103, 1)}: Синтаксическая ошибка

Действительно, есть ошибочка, выложил исправленный cf
(у нас не задействован управленческий учет, поэтому ошибка не проявлялась)
11. sarun 30 31.08.16 13:02 Сейчас в теме
Добавил все процедуры. Закоментировал участки где идет асинхронная запись в регистры.
14. sarun 30 01.09.16 06:12 Сейчас в теме
при обычной (не асинхронной записи) в регистры выигрыша в скорости не заметил . УПП 1.3.81.2, по переделам, партионный учет, база 50 Гб.
17. linkov 237 01.09.16 10:54 Сейчас в теме
(14) sarun,

при обычной (не асинхронной записи) в регистры выигрыша в скорости не заметил. УПП 1.3.81.2, по переделам, партионный учет, база 50 Гб.

Эффект ускорения проведения возникает не при большом размере базы, а при большом количестве выпускаемой номенклатуры в месяц и большом количестве затрат.
У нас недавно был апгрейд железа. После чего время проведения стало следующим: без доработок - 8 часов, с доработками не асинхронно - 5 часов, асинхронно - 3,5 часа.
Ну и без доработок размер tempdb по прежнему зашкаливает.

Количество записей в регистрах нашего документа (один месяц):
РегистрНакопления.ВыпускПродукцииБухгалтерскийУчет: 46 136
РегистрНакопления.ВыпускПродукцииНалоговыйУчет: 46 136
РегистрНакопления.НезавершенноеПроизводствоБухгалтерскийУчет: 324 521
РегистрНакопления.НезавершенноеПроизводствоНалоговыйУчет: 324 445
РегистрНакопления.ЗатратыНаВыпускПродукцииБухгалтерскийУчет: 2 646 298
РегистрНакопления.ЗатратыНаВыпускПродукцииНалоговыйУчет: 2 646 297
20. echo77 1104 26.11.16 07:59 Сейчас в теме
(17) Сколько записей в журнале проводок(РегистрБухгалтерии.Хозрасчетный)?
(0) Кстати, процесс можно еще немного ускорить, если добавить правильный индекс в таблицу, в которой выполняется поиск
21. linkov 237 13.12.16 12:06 Сейчас в теме
(20)
Сколько записей в журнале проводок(РегистрБухгалтерии.Хозрасчетный)?

- 62 046 записей

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

Рецепт в студию!
23. abadonna83 39 17.10.17 10:57 Сейчас в теме
15. sarun 30 01.09.16 06:15 Сейчас в теме
Оставьте свое сообщение

См. также

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

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

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

1 стартмани

03.07.2019    12706    1    m-rv    79       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

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

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

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

1 стартмани

25.03.2019    19760    8    tormozit    44       

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)

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

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    28221    237    informa1555    198       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

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

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

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

1 стартмани

13.09.2018    11808    12    RocKeR_13    16       

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

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

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

5 стартмани

09.08.2018    18563    23    informa1555    26       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

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

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

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

1 стартмани

17.07.2018    27091    16    kalyaka    16       

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

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

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

1 стартмани

01.06.2018    21921    86    m-rv    57       

Подборка программ для взаимодействия с ЕГАИС Промо

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

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

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

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

1 стартмани

10.05.2018    31916    30    dsdred    36       

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

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

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

2 стартмани

08.05.2018    20038    10    wowik    3       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.12.х и УТ 11.4.11.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

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

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

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

1 стартмани

24.04.2018    32080    77    kalyaka    34       

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

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

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

1 стартмани

08.02.2018    19733    20    mvxyz    17       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

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

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

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

1 стартмани

01.02.2018    27679    63    rpgshnik    48       

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

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

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

1 стартмани

29.12.2017    26487    25    agent00mouse    0       

INFOSTART MEETUP Krasnodar. 14 февраля 2020 г. Промо

Краснодар станет первым в 2020 году местом, где пройдет региональная встреча IT-специалистов сообщества Инфостарт. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Стоимость участия - 5000 рублей. Цена действительна до 26.12.2019.

Себестоимость реализованной продукции по периодам выпуска в УПП (для РАУЗ, бухгалтерский учёт)

Отчеты и формы Бизнес-аналитик Бухгалтер Архив с данными v8 УПП1 Россия БУ Windows Производство готовой продукции (работ, услуг) Абонемент ($m) Бухгалтерские

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

8 стартмани

29.12.2017    19645    34    Designer1C    11       

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

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

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

1 стартмани

06.12.2017    20448    52    kwazi    6       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

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

16450 рублей

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

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

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

1 стартмани

28.11.2017    17484    2    integrator1983    0       

Счет-фактура+УПД+УКД с 01.10.2017 в редакции Постановления Правительства РФ от 19.08.2017 № 981. Для всех конфигураций на 1С 8

Отчеты и формы Бухгалтер Архив с данными v8 БП2.0 УТ10 УПП1 УНФ БП3.0 УТ11 БУ НУ Оптовая торговля Производство готовой продукции (работ, услуг) Абонемент ($m) Печатные формы документов

Внешние печатные формы с автоматической регистрацией для документа "Счет-фактура выданный" в редакции Постановления Правительства РФ №981 от 19.08.2017 года. Новые счета-фактуры № 981 применяются с 01.10.2017 года. Так же для УТ 10 очень старых релизов применяется сч.фактура в файле.

2 стартмани

18.09.2017    70309    1341    Kontakt    90       

Базовый курс по разработке мобильных 1C-приложений для Android-устройств. Третий поток. Онлайн-интенсив с 11 февраля по 05 марта 2020 г. Промо

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

7500 рублей

Внешние печатные формы Счет-фактура, УПД, УКД образца 2017 г. (ПП от 19.08.2017 № 981) для УПП 1.3, КА 1.1, БП 2.0

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

Внешние печатные формы "Счет-фактура", "Универсальный передаточный документ", "Универсальный корректировочный документ" (в редакции постановления Правительства Российской Федерации от 19.08.2017 № 981) для типовых конфигураций УПП 1.3, КА 1.1, БП 2.0.

1 стартмани

30.06.2017    44683    712    Tavalik    63       

Счет-фактура с 01.07.2017 от 25.05.2017 №625 для ВСЕХ конфигураций 1С 8.х (БП 2.0, БП 2.0 КОРП, БАУ 2.0, БАУ 2.0 КОРП, КА 1.1, ПД 1.0, Розница 1.0, УНФ 1.3, УПП 1.3, УТ 11, УТ 10.3)

Отчеты и формы Бухгалтер Внешняя обработка (ert,epf) v8 v8::БУ КА1 БП2.0 УТ10 Розница УПП1 УНФ БП3.0 БАУ УТ11 Россия БУ Оптовая торговля Производство готовой продукции (работ, услуг) Абонемент ($m) Печатные формы документов

С июля 2017 года применяется новая печатная форма счет-фактуры в редакции Постановления Правительства РФ от 25.05.2017 № 625. В публикации собраны внешние печатные формы для всех популярных конфигураций 1С. Будет актуально для 90% организаций, которые не ведут учет по гос. контрактам, так как новое поле не заполняется, а вместо номера гос. контракта установлен прочерк по умолчанию.

1 стартмани

29.06.2017    37827    455    a.kapustin    43       

Сдача регламентированной отчетности из программ 1С Промо

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

от 1500 руб.

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

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

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

1 стартмани

30.05.2017    94314    14    signum2009    45       

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

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

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

26.05.2017    41585    168    DarkAn    86       

Готовые переносы данных из различных конфигураций 1C Промо

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

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

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

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

1 стартмани

28.09.2016    34142    39    ildarovich    22       

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

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

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

1 стартмани

14.08.2016    40631    35    Demanoidos    60       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

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

6500 рублей

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

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

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

2 стартмани

05.06.2016    47339    6    wowik    27       

Печатная форма Счет-Фактура от 01.10.2017, УПД 01.10.2017, Торг-12, Счет на оплату, ТТН (1-Т) БП 3.0 ОРИГИНАЛЬНЫЕ

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

Набор внешних печатных форм: Счет-Фактура, УПД, Торг-12, ТТН, Счетна оплату для 1С: БП 3.0. Формы взяты из релиза 3.0.54.20 бухгалтерии предприятия. Печатные формы (УПД и счет-фактуры) приведены в соответствие постановления 625 от 25.05.2017 И В РЕДАКЦИИ ПОСТАНОВЛЕНИЯ 981 ОТ 19.08.2017 в формах выводится "Идентификатор госконтракта" и прочие изменения.

1 стартмани

04.05.2016    39539    378    A7758735    3