Свертка базы ТиС 9.2

1. Black Cat 32 04.03.16 00:16 Сейчас в теме
Добрый день !
Имеется база торговли. До 2013 года вели учет без контроля отрицательных остатков. Начиная с 2014 это дело закрыли. Восстановили ГП. Но с партиями беда - до 2014 много отрицательных. Соответственно, себестоимость плывет. Решили обрезать базу. На 1 января 2015 года завести единую партию на основании остатков и закупочных цен. Потом все доки перепровести. Доки и партии до 2015 года грохнуть. Подскажите, чем этот способ череват и какие есть подводные камни ? Какую обработку посоветуете для проведения данной операции ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. falcon 04.03.16 08:06 Сейчас в теме
(1) у меня в одной из баз, есть универсальный документ. указываешь дату, указываешь регистр - он тебе заполняет таб.часть остатками по регистру на указанную дату - дальше делай с ними что хочешь... хочешь сторнируй, хочешь оставляй.
2. vcv 89 04.03.16 08:02 Сейчас в теме
А вам нужны эти партии? Если в учете бардак, зачем еще и с партиями связываться?
Включить учетную политику "по средневзвешенной" и очистить все партии в документах и их движениях. Посмотреть на состояние учета, оценить. Может быть и не стоит обрезать базу.
В заключение стандартненько, вне зависимости от обрезаем или нет - инвентаризация и приведения учета в соответствие факту.
4. Black Cat 32 04.03.16 15:48 Сейчас в теме
(2) vcv, ну как бы партии нужны нам, чтоб видеть от кого пришел товар и по какой цене. Да и наценка так считается точнее.
5. vcv 89 04.03.16 18:58 Сейчас в теме
(4) Black Cat,
партии нужны нам, чтоб видеть от кого пришел товар и по какой цене

Это слабо сочетается с
Но с партиями беда - до 2014 много отрицательных

Достоверность вашего "от кого и по какой цене" получается низковатой.
Ну не хотите отказываться от партий, сделайте документ (можно закрытие месяца допилить, можно отдельный сделать), который позволит вам закрыть пересорт. Можно в ручном режиме, если сделать документ типа "пересортица". Можно в автоматическом. "Рыбу" могу подбросить. У меня есть в своём проекте и ручной пересорт и автоматический. Но допиливать ручками однозначно придётся.
6. Black Cat 32 04.03.16 19:30 Сейчас в теме
Так вот я и хочу перейти на нормальный партионный учет, чтобы правильно считалась себестоимость.
А причем тут пересортица, если на данный момент мешаются отрицательные партии.
7. CheBurator 2696 05.03.16 02:08 Сейчас в теме
(6) сверни базу на нужное число
Сведи все на одну общую партию, а именно на пустую партию, то есть по средней получатся остатки
Дальше веди аак тебе нужно
Хоть по среднй
Хоть по партиям
8. vcv 89 05.03.16 05:15 Сейчас в теме
(6) Black Cat,
А причем тут пересортица, если на данный момент мешаются отрицательные партии.

Рядом с каждой красной партией есть чёрная. Свернутый остаток по номенклатуре, например 3 шт, по первой партии 5 шт, по второй 2 шт, по третьей -4 шт. Тоже своего рода пересорт. Учетный.
9. Black Cat 32 09.03.16 00:04 Сейчас в теме
(8) vcv, ну это да, согласен. Ну тут уже лучше начать партионный учет по новой чем жить так, как сейчас. Вот и хочу на основании остатков на 01.01.15 00:00:01 на основании остатков номенклатуры, создать единую партию, цену для партии взять из закупочной цены на это же время, как посоветовал (7) CheBurator.
Подскажите, какую обработку лучше использовать из готовых (можно даже с минимальными доработками) для сворачивания таким образом базы.
10. CheBurator 2696 09.03.16 01:43 Сейчас в теме
(9) универсальный двигатель регистров
Или как вариант стандартный ввод остатков
11. vcv 89 09.03.16 05:04 Сейчас в теме
(9) Black Cat,

Ну какая обработка, если вам нужно сформировать движения по регистру? Это документ нужен.

Вот гляньте для примера. У меня используется в модуле проведения закрытия месяца.
Процедура ЗачетПересортаПоРегистру(Идентификатор,ВремПартии,РеквизитКоличества="Количество",РеквизитКоличестваВПачке="КоличествоВПачке")
	Перем РегПартии;

	Состояние("Зачет пересорта по регистру "+Идентификатор+"...");

	ТаблицаИтоговРегистра = СоздатьОбъект("ТаблицаЗначений");
	ВремПартии.ВыгрузитьИтоги(ТаблицаИтоговРегистра,1,1);
	
	РегПартии = Регистр.ПолучитьАтрибут(Идентификатор);
	
	ТаблицаПартий = СоздатьОбъект("ИндексированнаяТаблица");
	ТаблицаПартий.Загрузить(ТаблицаИтоговРегистра);
	Если Идентификатор = "ПартииОтданные" Тогда
		ТаблицаПартий.Группировать("СтатусПартии:Фирма,Договор,Номенклатура,СтатусПартии;Партия:Партия,ДокументПередачи","Количество,КоличествоВПачке,СуммаУпр,СуммаРуб,СуммаБезНДС,ПродСтоимость");
	ИначеЕсли Идентификатор = "РеализованныйТовар" Тогда
		ТаблицаПартий.Группировать("СтатусПартии:Фирма,Договор,Склад,Номенклатура,ДокПродажи;Партия:Партия","Количество,КоличествоВПачке,ПродСтоимость,ПродСтоимостьБезНДС,СуммаСкидки");
	ИначеЕсли Идентификатор = "ПринятыйТовар" Тогда
		ТаблицаПартий.Группировать("СтатусПартии:Фирма,Договор,Склад,Номенклатура,ДокДвижения,НомерСтрокиДокумента;Партия:Партия","Количество,КоличествоВПачке,КоличествоСписано,КоличествоВПачкеСписано");
	Иначе
		глВнутренняяОшибка("Не поддерживаемый регистр "+Идентификатор,"ЗачетПересортаПоРегистру");
		Возврат;
	КонецЕсли;
	ТаблицаПартий.ВыбратьСтроки();
	Счетчик = 0;
	МаксСчетчик = ТаблицаПартий.КоличествоСтрок();
	Пока ТаблицаПартий.ПолучитьСтроку() = 1 Цикл
		Счетчик = Счетчик + 1;
		Если Счетчик % 10 = 1 Тогда
			Состояние("Зачет пересорта по регистру "+Идентификатор+" ["+Цел(Счетчик/МаксСчетчик*100)+"%]...");
		КонецЕсли;
		Если ТаблицаПартий.Номенклатура.АвтоНаименование = 0 Тогда
			Продолжить;
		КонецЕсли;
		//
		ТаблицаОстатковПартий = ТаблицаПартий.тзПотомки;
		//
		ТребуетсяЗачетПересорта = 0;
		КоличествоЧерным = 0;
		ТаблицаОстатковПартий.ВыбратьСтроки();
		Пока ТаблицаОстатковПартий.ПолучитьСтроку() = 1 Цикл
			КоличествоОстатка = ТаблицаОстатковПартий.ПолучитьЗначение(ТаблицаОстатковПартий.НомерСтроки,РеквизитКоличества);
			Если КоличествоОстатка < 0 Тогда
				ТребуетсяЗачетПересорта = 1;
			Иначе
				КоличествоЧерным = КоличествоЧерным + КоличествоОстатка;
			КонецЕсли;
		КонецЦикла;
		//
		Если ТребуетсяЗачетПересорта = 1 Тогда
			СтрокаТаблицыКрасная = 1;
			КоличествоСтрокТаблицыОстатковПартий = ТаблицаОстатковПартий.КоличествоСтрок();
			Пока СтрокаТаблицыКрасная <= КоличествоСтрокТаблицыОстатковПартий Цикл
				Количество = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,РеквизитКоличества);
				КоличествоВПачке = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,РеквизитКоличестваВПачке);
				Если Идентификатор = "ПартииОтданные" Тогда
					СуммаУпр = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"СуммаУпр");
					СуммаРуб = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"СуммаРуб");
					СуммаБезНДС = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"СуммаБезНДС");
					ПродСтоимость = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"ПродСтоимость");
					ПродСтоимостьБезНДС = 0;
					СуммаСкидки = 0;
					ДокументПередачи = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"ДокументПередачи");
				ИначеЕсли Идентификатор = "РеализованныйТовар" Тогда
					СуммаУпр = 0;
					СуммаРуб = 0;
					СуммаБезНДС = 0;
					ПродСтоимость = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"ПродСтоимость");
					ПродСтоимостьБезНДС = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"ПродСтоимостьБезНДС");
					СуммаСкидки = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"СуммаСкидки");
				ИначеЕсли Идентификатор = "ПринятыйТовар" Тогда
					СуммаУпр = 0;
					СуммаРуб = 0;
					СуммаБезНДС = 0;
					ПродСтоимостьБезНДС = 0;
					СуммаСкидки = 0;
				КонецЕсли;
				Партия = ТаблицаОстатковПартий.ПолучитьЗначение(СтрокаТаблицыКрасная,"Партия");
				//
				Если Количество < 0 Тогда
					ТаблицаОстатковПартий.ВыбратьСтроки();
					Пока ТаблицаОстатковПартий.ПолучитьСтроку() = 1 Цикл
						КоличествоОстатка = ТаблицаОстатковПартий.ПолучитьЗначение(ТаблицаОстатковПартий.НомерСтроки,РеквизитКоличества);
						КоличествоОстаткаВПачке = ТаблицаОстатковПартий.ПолучитьЗначение(ТаблицаОстатковПартий.НомерСтроки,РеквизитКоличестваВПачке);
						Если КоличествоОстатка > 0 Тогда
							Коэффициент = ?(-Количество<=КоличествоОстатка,1,КоличествоОстатка/(-Количество));
							Если Коэффициент = 1 Тогда
								СписатьКоличество = Количество;
								СписатьКоличествоВПачке = КоличествоВПачке;
								СписатьСуммаУпр = СуммаУпр;
								СписатьСуммаРуб = СуммаРуб;
								СписатьСуммаБезНДС = СуммаБезНДС;
								СписатьПродСтоимость = ПродСтоимость;
								СписатьПродСтоимостьБезНДС = ПродСтоимостьБезНДС;
								СписатьСуммаСкидки = СуммаСкидки;
							Иначе
								СписатьКоличество = Окр(Количество * Коэффициент,6);
								СписатьКоличествоВПачке = Окр(КоличествоВПачке * Коэффициент,6);
								СписатьСуммаУпр = Окр(СуммаУпр * Коэффициент,2);
								СписатьСуммаРуб = Окр(СуммаРуб * Коэффициент,2);
								СписатьСуммаБезНДС = Окр(СуммаБезНДС * Коэффициент,2);
								СписатьПродСтоимость = Окр(ПродСтоимость * Коэффициент,2);
								СписатьПродСтоимостьБезНДС = Окр(ПродСтоимостьБезНДС * Коэффициент,2);
								СписатьСуммаСкидки = Окр(СуммаСкидки * Коэффициент,2);
							КонецЕсли;
							ТаблицаОстатковПартий.УстановитьЗначение(ТаблицаОстатковПартий.НомерСтроки, РеквизитКоличества, КоличествоОстатка + СписатьКоличество);
							ТаблицаОстатковПартий.УстановитьЗначение(ТаблицаОстатковПартий.НомерСтроки, РеквизитКоличестваВПачке, КоличествоОстаткаВПачке + СписатьКоличествоВПачке);
							ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,РеквизитКоличества,Количество-СписатьКоличество);
							ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,РеквизитКоличестваВПачке,КоличествоВПачке-СписатьКоличествоВПачке);
							Если Идентификатор = "ПартииОтданные" Тогда
								ТаблицаОстатковПартий.СуммаУпр = ТаблицаОстатковПартий.СуммаУпр + СписатьСуммаУпр;
								ТаблицаОстатковПартий.СуммаРуб = ТаблицаОстатковПартий.СуммаРуб + СписатьСуммаРуб;
								ТаблицаОстатковПартий.СуммаБезНДС = ТаблицаОстатковПартий.СуммаБезНДС + СписатьСуммаБезНДС;
								ТаблицаОстатковПартий.ПродСтоимость = ТаблицаОстатковПартий.ПродСтоимость + СписатьПродСтоимость;
								ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,"СуммаУпр",СуммаУпр-СписатьСуммаУпр);
								ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,"СуммаРуб",СуммаРуб-СписатьСуммаРуб);
								ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,"СуммаБезНДС",СуммаБезНДС-СписатьСуммаБезНДС);
								ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,"ПродСтоимость",ПродСтоимость-СписатьПродСтоимость);
							ИначеЕсли Идентификатор = "РеализованныйТовар" Тогда
								ТаблицаОстатковПартий.ПродСтоимость = ТаблицаОстатковПартий.ПродСтоимость + СписатьПродСтоимость;
								ТаблицаОстатковПартий.ПродСтоимостьБезНДС = ТаблицаОстатковПартий.ПродСтоимостьБезНДС + СписатьПродСтоимостьБезНДС;
								ТаблицаОстатковПартий.СуммаСкидки = ТаблицаОстатковПартий.СуммаСкидки + СписатьСуммаСкидки;
								ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,"ПродСтоимость",ПродСтоимость-СписатьПродСтоимость);
								ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,"ПродСтоимостьБезНДС",ПродСтоимостьБезНДС-СписатьПродСтоимостьБезНДС);
								ТаблицаОстатковПартий.УстановитьЗначение(СтрокаТаблицыКрасная,"СуммаСкидки",СуммаСкидки-СписатьСуммаСкидки);
							КонецЕсли;
							Количество = Количество - СписатьКоличество;
							КоличествоВПачке = КоличествоВПачке - СписатьКоличествоВПачке;
							СуммаУпр = СуммаУпр - СписатьСуммаУпр;
							СуммаРуб = СуммаРуб - СписатьСуммаРуб;
							СуммаБезНДС = СуммаБезНДС - СписатьСуммаБезНДС;
							ПродСтоимость = ПродСтоимость - СписатьПродСтоимость;
							ПродСтоимостьБезНДС = ПродСтоимостьБезНДС - СписатьПродСтоимостьБезНДС;
							СуммаСкидки = СуммаСкидки - СписатьСуммаСкидки;
							РегПартии.Фирма = ТаблицаОстатковПартий.Фирма;
							РегПартии.Договор = ТаблицаОстатковПартий.Договор;
							РегПартии.Номенклатура = ТаблицаОстатковПартий.Номенклатура;
							Если Идентификатор = "ПартииОтданные" Тогда
								РегПартии.СтатусПартии = ТаблицаОстатковПартий.СтатусПартии;
								РегПартии.ДокументПередачи = ДокументПередачи;
								РегПартии.КодОперации = глКО.Прочее;
							ИначеЕсли Идентификатор = "РеализованныйТовар" Тогда
								РегПартии.Склад = ТаблицаПартий.Склад;
								РегПартии.ДокПродажи = ТаблицаПартий.ДокПродажи;
							ИначеЕсли Идентификатор = "ПринятыйТовар" Тогда
								РегПартии.Склад = ТаблицаПартий.Склад;
								РегПартии.ДокДвижения = ТаблицаПартий.ДокДвижения;
								РегПартии.НомерСтрокиДокумента = ТаблицаПартий.НомерСтрокиДокумента;
							КонецЕсли;
							РегПартии.Сторно = 0;
							РегПартии.Корректировка = ЭтоДокументКорректировки;
							РегПартии.КорректируемыйДокумент = КорректируемыйДокумент;
							//
							РегПартии.Партия = Партия;
							РегПартии.УстановитьАтрибут(РеквизитКоличества,СписатьКоличество);
							РегПартии.УстановитьАтрибут(РеквизитКоличестваВПачке,СписатьКоличествоВПачке);
							Если Идентификатор = "ПартииОтданные" Тогда
								РегПартии.СуммаУпр = СписатьСуммаУпр;
								РегПартии.СуммаРуб = СписатьСуммаРуб;
								РегПартии.СуммаБезНДС = СписатьСуммаБезНДС;
								РегПартии.ПродСтоимость = СписатьПродСтоимость;
							ИначеЕсли Идентификатор = "РеализованныйТовар" Тогда
								РегПартии.ПродСтоимость = СписатьПродСтоимость;
								РегПартии.ПродСтоимостьБезНДС = СписатьПродСтоимостьБезНДС;
								РегПартии.СуммаСкидки = СписатьСуммаСкидки;
							КонецЕсли;
							Если (СписатьКоличество<>0)ИЛИ(СписатьКоличествоВПачке<>0)ИЛИ(СписатьСуммаУпр<>0)ИЛИ(СписатьСуммаРуб<>0)ИЛИ(СписатьСуммаБезНДС<>0)ИЛИ(СписатьПродСтоимость<>0)ИЛИ(СписатьПродСтоимостьБезНДС<>0)ИЛИ(СписатьСуммаСкидки<>0) Тогда
								РегПартии.ДвижениеРасходВыполнить();
							КонецЕсли;
							//
							РегПартии.Партия = ТаблицаОстатковПартий.Партия;
							РегПартии.УстановитьАтрибут(РеквизитКоличества,-СписатьКоличество);
							РегПартии.УстановитьАтрибут(РеквизитКоличестваВПачке,-СписатьКоличествоВПачке);
							Если Идентификатор = "ПартииОтданные" Тогда
								РегПартии.СуммаУпр = -СписатьСуммаУпр;
								РегПартии.СуммаРуб = -СписатьСуммаРуб;
								РегПартии.СуммаБезНДС = -СписатьСуммаБезНДС;
								РегПартии.ПродСтоимость = -СписатьПродСтоимость;
								РегПартии.ДокументПередачи = ТаблицаОстатковПартий.ДокументПередачи;
							ИначеЕсли Идентификатор = "РеализованныйТовар" Тогда
								РегПартии.ПродСтоимость = -СписатьПродСтоимость;
								РегПартии.ПродСтоимостьБезНДС = -СписатьПродСтоимостьБезНДС;
								РегПартии.СуммаСкидки = -СписатьСуммаСкидки;
								РегПартии.ДокПродажи = ТаблицаПартий.ДокПродажи;
							КонецЕсли;
							Если (СписатьКоличество<>0)ИЛИ(СписатьКоличествоВПачке<>0)ИЛИ(СписатьСуммаУпр<>0)ИЛИ(СписатьСуммаРуб<>0)ИЛИ(СписатьСуммаБезНДС<>0)ИЛИ(СписатьПродСтоимость<>0)ИЛИ(СписатьПродСтоимостьБезНДС<>0)ИЛИ(СписатьСуммаСкидки<>0) Тогда
								РегПартии.ДвижениеРасходВыполнить();
							КонецЕсли;
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;
				СтрокаТаблицыКрасная = СтрокаТаблицыКрасная + 1;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры // ЗачетПересортаПоРегистру
Показать
12. falcon 09.03.16 09:16 Сейчас в теме
(9) потом с 01.01.15 будешь все документы перепроводить?
13. Black Cat 32 09.03.16 09:58 Сейчас в теме
(12) falcon, ну да, их не так много. На сегодня объем dbf таблиц базы составляет около 850 мб.
(11) vcv, Спасибо, гляну.
14. falcon 09.03.16 10:11 Сейчас в теме
(13) тут дело не во много/не много....
делай через документ, как в (3).
Black Cat; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот