Странные движения документа по регистру накопления

1. bort501 19.07.18 00:09 Сейчас в теме
Товарищи, помогите советом, я уже всю голову сломал...

Есть регистр накопления (остатки). У него 2 регистратора, назовем их ДокПриход и ДокРасход. Соответственно направления движений ясны.

Проблема в следующем: каждая новая запись из документа ДокПриход проходит как-бы без учета предыдущих остатков. То есть, например, был остаток по регистру 5. Провели ДокПриход на 3 единицы. Остаток станет не 8, а 3.

А ДокРасход работает нормально. Но из-за этой ерунды с приходом в ДокРасходе не работает запрет проведения в минус.
Тот же пример: было 5 единиц, провели ДокПриход на 3 единицы, потом пытаемся сделать ДокРасход на 6 единиц (должно хватать), а выдается ошибка, т.к. регистр считает, что в остатке 3.

И еще одна странность - регистр не сортируется по периоду. Это касается того же документа ДокПриход. Т.е. если сделать запрос к вирт.таблице остатки и обороты с детализацией по регистратору, то сначала могут идти документы, например, за 18 июля, а потом за 30 июня.

ТиИ делал, пересчет итогов делал, доки перепроводил. Куда еще можно покопать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. bort501 19.07.18 00:18 Сейчас в теме
Да, кстати. ДокПриход делает движения еще по одному регистру, там такая же беда.
3. Leon75 19.07.18 00:37 Сейчас в теме
(2)Если есть отчет ДвиженияДокумента сделайте скриншот движений и сюда выложите, если нету, то внедрите отчет и сделайте.
6. bort501 19.07.18 06:45 Сейчас в теме
(3) Если есть отчет ДвиженияДокумента сделайте скриншот движений и сюда выложите, если нету, то внедрите отчет и сделайте.


Отчета нет. Сейчас уже не успею его сделать, в отпуск улетаю через несколько часов. Если ничего не решим, то сделаю, когда вернусь.

Есть скрин консоли запросов по этому регистру. Попробую прикрепить.



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


Тут не понял... Регистр и так один, в него запись ведут несколько доков. Но даже если док только один, а другой движений не дает, все равно остатков нет.


(5) Механизм типовой или самописный? Если последнее, покажите код, который формирует движения в регистр для прихода и для расхода


Механизм самописный. ДокРасход писал я, а ДокПриход уже был, автора я не знаю. Но ошибку найти не могу.

ДокПриход:
Движения.Бегунки.Записывать = Истина;
	Движения.Бегунки.Очистить();
	Движения.УпаковочныеЛисты.Записывать = Истина;
	Движения.УпаковочныеЛисты.Очистить();

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


ДокРасход:
ТЗ = Состав.Выгрузить();
		ТЗ.Свернуть("Номенклатура, Заказ, ВесЕденицы", "КоличествоШт");
		Для Каждого Строка из ТЗ Цикл
			ПроверитьНаличиеБегунка(Строка.Номенклатура, Строка.КоличествоШт, Строка.Заказ, Отказ);
			Если Отказ Тогда
				Прервать;
			КонецЕсли;
				
			СформироватьДвиженияУпаковочныеЛисты(Строка.Номенклатура,Строка.Заказ, Строка.КоличествоШт, Строка.ВесЕденицы*Строка.КоличествоШт);
		КонецЦикла;

Процедура СформироватьДвиженияУпаковочныеЛисты(Номенклатура, _Заказ, Количество, Вес)
	
	запрос=новый запрос;
	запрос.Текст="ВЫБРАТЬ
	             |	УпаковочныеЛистыОстатки.Бегунок,
	             |	УпаковочныеЛистыОстатки.КоличествоОстаток,
	             |	УпаковочныеЛистыОстатки.ВесОстаток
	             |ИЗ
	             |	РегистрНакопления.УпаковочныеЛисты.Остатки(
	             |			&Период,
	             |			Номенклатура = &Номенклатура
	             |				И Заказ = &Заказ) КАК УпаковочныеЛистыОстатки";
	запрос.УстановитьПараметр("Период", МоментВремени());
	запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	запрос.УстановитьПараметр("Заказ", _Заказ);
	
	Рез = запрос.Выполнить().Выбрать();
	ОсталосьВес = Вес;
	ОсталосьКоличество=Количество;
	Пока Рез.Следующий() И ОсталосьВес>0 И ОсталосьКоличество>0 Цикл
		Движение=Движения.УпаковочныеЛисты.Добавить();
		Движение.Период = Дата;
		Движение.Бегунок = Рез.Бегунок;
		Если Рез.ВесОстаток>ОсталосьВес Тогда
			Движение.Вес = ОсталосьВес;
			ОсталосьВес=0;
		Иначе
			Движение.Вес = Рез.ВесОстаток;
			ОсталосьВес = ОсталосьВес - Рез.ВесОстаток;
		КонецЕсли;
		
		Движение.ВидДвижения=ВидДвиженияНакопления.Расход;
		Движение.Заказ = _Заказ;
		Если Рез.КоличествоОстаток>ОсталосьКоличество Тогда
			Движение.Количество = ОсталосьКоличество;
			ОсталосьКоличество=0;
		Иначе
			Движение.Количество = Рез.КоличествоОстаток;
			ОсталосьКоличество = ОсталосьКоличество - Рез.КоличествоОстаток;
		КонецЕсли;
		
		Движение.Номенклатура=Номенклатура;
	КонецЦикла;
	
	
КонецПроцедуры
Показать
Прикрепленные файлы:
16. spacecraft 19.07.18 11:44 Сейчас в теме
(6) (13) Может отчет все же поправить? Там же не учет по партиям... зачем в отчете выборка регистратора? Он и пересчитывает остатки относительно регистраторов.
19. bort501 19.07.18 11:59 Сейчас в теме
(16) Это не отчет, это я консолью пытался выяснить, что творится с остатками... Могу переделать на периоды - секунды, например. Будет то же самое. Это я пробовал.

Меня больше всего интересует, почему точно такая же копия документа работает нормально.
20. spacecraft 19.07.18 12:06 Сейчас в теме
(19)
Меня больше всего интересует, почему точно такая же копия документа работает нормально.

а что значит нормально?
Судя по скрину в (6), как раз документы расход косячный. Приход один документ, расход несколько документов. Там не видно точно.
22. bort501 19.07.18 12:17 Сейчас в теме
(20) Документ расход косячит из-за неправильных остатков.
24. spacecraft 19.07.18 12:20 Сейчас в теме
(22) могу предположить, что документы Расход вводятся не по порядку.
Как вариант: сначала более поздний документ, затем более ранний. Тогда более ранний проведется правильно, но движения первого (более позднего) будут уже не верны.
Попробуйте перепровести документы расход. Получится?
21. Bene_Valete 188 19.07.18 12:15 Сейчас в теме
(19) Возможно потому что скопированный ДокПриход1 не является измерением данного регистра накопления, поэтому формирует нормальные движения. Очень смущает "регистратор" в качестве измерения, можете попробовать его удалить (на копии) для эксперимента?
23. bort501 19.07.18 12:18 Сейчас в теме
(21) Не влияет. Там есть еще один регистр, Бегунки который. Там нет измерения-регистратора, а остатки все равно кривые.
25. ben19791010 19.07.18 12:48 Сейчас в теме
(6)
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
а почему в приходе вид расход?
26. ben19791010 19.07.18 12:51 Сейчас в теме
(6) может реально сделать в доке флаг приход или расход и всё и один регистр с 1 документом будет?
4. ben19791010 19.07.18 04:47 Сейчас в теме
(1)
ДокПриход и ДокРасход
ну ясно всё ... нужно было один регистр использовать раз уж остаток явный хотите в разрезе регистратора
11. spacecraft 19.07.18 09:01 Сейчас в теме
(1) (10) проверить подписки на события.
5. Bene_Valete 188 19.07.18 04:57 Сейчас в теме
Механизм типовой или самописный? Если последнее, покажите код, который формирует движения в регистр для прихода и для расхода
7. bort501 19.07.18 06:50 Сейчас в теме
Ответил всем в сообщении 6. Не разобрался пока, как тут ветки формируются
8. Bene_Valete 188 19.07.18 06:53 Сейчас в теме
(7) Если человек подписан на Вашу тему с уведомлениями, ему отображаются все новые сообщения в ней, в противном случае уведомление придет, только если вы нажмете "Ответить" именно под его сообщением
12. Bene_Valete 188 19.07.18 09:15 Сейчас в теме
(7) Действительно могут быть подписки на события, быстро проверить можно следующим образом
Соответственно при копировании они очищаются
Прикрепленные файлы:
13. bort501 19.07.18 11:18 Сейчас в теме
(12)(11)

Подписок нет. Единственная ссылка на документ - в регистре накопления, где он использован как измерение.
14. Bene_Valete 188 19.07.18 11:22 Сейчас в теме
(13) Остаток должен браться именно в разрезе регистратора?
17. bort501 19.07.18 11:47 Сейчас в теме
(14) Остаток должен браться в разрезе измерений на момент времени. Но и таким способом остатки берутся неверно.
18. bort501 19.07.18 11:49 Сейчас в теме
(14) Остаток должен браться в разрезе измерений на момент времени. Но и таким способом остатки берутся неверно.
(15) Эту строчку я добавил для эксперимента. Она не влияет. Да и в копии документа она тоже есть, а копия работает.

Похоже какой-то глюк с документом... ПРидется делать копию, переносить туда существующие доки, а глючный документ убирать
15. Bene_Valete 188 19.07.18 11:30 Сейчас в теме
(13) В движения прихода есть следующая строчка
Движение.Регистратор=Ссылка;

А в расходе ее нет, для чего регистратор добавлен в качестве измерения, он ведь итак хранится в записях регистра, попробуйте закомментировать эту строчку
9. bort501 19.07.18 07:10 Сейчас в теме
Попробовал сейчас заменить код конструктором движений, теперь вроде все типовое, но разницы я не вижу существенной и проблема с остатками осталась...
10. bort501 19.07.18 07:15 Сейчас в теме
Ну и последнее. Скопировал в конфигураторе ДокПриход. Теперь у меня есть еще ДокПриход1. Код в нем не менял вообще.

Сделал пару документов, остатки считает и периоды распределяет правильно. То есть проблема именно в том старом ДокПриходе. Но какая? Как исправить?
Оставьте свое сообщение

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