gifts2017

Корректировка регистров "Партии товаров" и "Продажи себестоимость"

Опубликовал Yermek Zhubatyrov (ermek6) в раздел Обработки - Универсальные обработки

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

Стандартными средствами сделать не представляется по двум причинам:

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

из списка формируется запрос к документам

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

Ну и для каждой строи выполняется код

Процедура ОбработкаДокумента(Ссылка);
	
	МДДок = Ссылка.Метаданные();
	Попытка
		Выполнить("Обработать"+МДДок.Имя+"(Ссылка)");
	Исключение
		СообщитьД(МДДок.Синоним+"
		|"""+Ссылка+"""
		|"+ОписаниеОшибки(),СтатусСообщения.Важное);
	КонецПопытки;
	
КонецПроцедуры

т.е. для каждого вида документов должна быть своя процедура. Например для приходных накладных

Процедура ОбработатьПоступлениеТоваровУслуг(Ссылка)
// Код процедуры
КонецПроцедуры

Информация по партиям сидит в таблице значений.

Более подробно можно посмотреть в коде обработки.

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

P.S.

У меня на компе 16 гигов памяти, 10 из которых я пустил на RAM диск (вот этот вот). На этом диске обработка 5 лет шла 50 минут.

Тот же самый период на обычном жестком шла 20 часов.

Выводы делайте сами

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

Наименование Файл Версия Размер Кол. Скачив.
Корректировка себестоимости реализации
.epf 9,61Kb
05.05.16
1
.epf 0.0.1 9,61Kb 1 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Иван (John83) 06.05.16 12:44
А вывод таков - ставьте ССД и не парьтесь с RAMом :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа