| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Пересчет с/с в проводках с заполненным InventRefTransId
			 
			
			AX 3.0 SP5 KR2 
		
		
		
		
		
		
			
		
		
		
		
	В процессе анализа расчета себестоимости по проводкам расхода определенной товарной позиции была обнаружена след. особенность: Система не корректирует себестоимость в проводках с заполненным InventRefTransId (Ссылка на лот). Очевидно, такие проводки система считает промаркированными с какими-либо проводками прихода -- это нормально. Однако, в проводках расхода, сформированных по заказу, который создан из контракта (базовая функциональность создания заказа на отпуск), в поле InventRefTransId система заносит ссылку на номер лота исходной строки контракта. При этом такие проводки не являются промаркированными (для строк контракта проводки не создаются вообще). Таким образом, себестоимость списания в таких проводках вычисляется как мгновенная и не пересчитывается в процессе выполнения базовой функциональности пересчета себестоимости. Процедура закрытия склада также не корректирует себестоимость в таких проводках - вот это условие пропускает проводки, которые ссылаются на строки заказа Вопрос №1: Почему так сделано? Это "by design"? Мы изменили функциональность создания проводок по строкам заказа, не заполняя поле "Ссылка на лот" в проводках для строк заказа, созданных из контракта. Вопрос №2: Чревато ли это какими-либо последствиями? Какими?  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (8). | |
| 
			
			 | 
		#2 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Мне кажется, баг. 
		
		
		
		
		
		
		
	По вопросу 2: чревато тем, что система не найдет исходную строку Blanket Order и при доставке Release Order не уменьшит остаток и не сменит статус в строке Blanket Order.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: kashperuk (3). | |
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
По количеству мы, конечно же, проверили - пересчет кол-ва по контракту отталкивается от ссылки на лот в самой строке заказа. Тут все ОК. Пересчет при этом выполняется правильно - себестоимость меняется в зависимости от выбранного метода (у нас - FIFO)  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А, правильно, речь ведь идет о InventTrans, а не о SalesLine. Тогда все в порядке будет. Коллеги тут для одного клиента вообще всю маркировку во всей системе истребили - и ничего.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Есть такое в 3.0. Если запустить закрытие, то такие ссылки чистятся. 
		
		
		
		
		
		
			Для одного клиента мы с mazzy в процедуру пересчета вставляли такой же кусок кода (чистящий ссылки), как и в закрытии. 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Это из метода, который вызывается при пересчете себестоимости и закрытии склада. X++: // clear unused references if (inventClosing.AdjustmentType == inventAdjustmentType::Closing && (mapQtyIssue || mapQtyReceipt)) { while select forupdate inventTrans index hint openItemIdx where inventTrans.ValueOpen == inventTransOpen::Yes && inventTrans.ItemId == _itemId && inventTrans.InventRefTransId != '' { if (! setPhysicalMarked.in(inventTrans.inventTransId) && this.financialOpenQty(inventTrans)) { if ((inventTrans.Qty > 0 && (! mapQtyIssue || ! mapQtyIssue.exists(inventTrans.InventTransId) || abs(mapQtyIssue.lookup(inventTrans.InventTransId)) < inventAdj::settleQtyDiff())) || (inventTrans.Qty < 0 && (! mapQtyReceipt || ! mapQtyReceipt.exists(inventTrans.InventTransId) || abs(mapQtyReceipt.lookup(inventTrans.InventTransId)) < inventAdj::settleQtyDiff()))) { if (inventTrans.QtySettled) inventTrans.updateSplit(this.financialOpenQty(inventTrans)); if (!InventCostItemDim::isBlanketOrderReference(inventTrans)) { inventTrans.InventRefTransId = ''; inventTrans.doUpdate(); if (! inventTrans.isUpdatedFinancial()) { movement = inventTrans.inventMovement(true); if (movement && movement.inventRefTransId() != '') { movement.setInventRefFields(inventRefType::None,'',''); movement.updateDoBuffer(); } } } } } } } X++: if (!InventCostItemDim::isBlanketOrderReference(inventTrans)) | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Посмотрел только что всю эту функциональность в 4.0 SP2 
		
		
		
		
		
		
			
		
		
		
		
	При создании заказа из контракта они связываются уже по новому полю - BlanketRefTransId. То есть для контрактов InventRefTransId не заполняется. А соответственно при пересчете уже все нормально отрабатывает. Кстати, класс для создания заказа такого уже по другому называется - SalesAutoCreate_ReleaseOrder (был SalesAutoCreate_tmpSalesLine). Приведенный код для пересчета в 4.0 тоже немного подкорректировали. Кстати, опять же про 3.0. Не проверял, но скорее всего так: Проверка X++: if (!InventCostItemDim::isBlanketOrderReference(inventTrans))В методе делается поиск строки контракта по номеру лота. И этой строки может уже не существовать.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хм... Мы над сп3 издевались. Там это как-то работало. Теперь уже не помню. 
		
		
		
		
		
		
			Поглядел. В сп3 такого условия не было... Интересненько. Проблему с маркировкой и ссылками Микрософт обещал побороть в 4.0. В 3.0 вроде как уже не собирался тогда. Смотрите... 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Однако, в проводках расхода, сформированных по заказу, который создан из контракта (базовая функциональность создания заказа на отпуск), в поле InventRefTransId система заносит ссылку на номер лота исходной строки контракта. При этом такие проводки не являются промаркированными (для строк контракта проводки не создаются вообще). Таким образом, себестоимость списания в таких проводках вычисляется как мгновенная и не пересчитывается в процессе выполнения базовой функциональности пересчета себестоимости.
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от petr
			 
 
			Если я вас правильно понял, вы создаете заказ (release order) из контракта (blanket order), и при этом в складской проводке заказа в поле InventRefTransId у вас проставлен лот из строки контракта. Я этого у себя не наблюдаю. Мне кажется так и не может быть в принципе в стандарном функционале. 
		
	См. тогда пред. сообщение мое  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не, я пробовал и в 3.0 SP4, насколько я понимаю. Но зачем им понадобилось заполнять поле ссылкой на несуществующий лот я не понимаю. (по контракту складские проводки не создаются). Притом ссылка всегда должна быть на противоположную проводку (приход на расход и наоборот). Вообще непонятно, если такое было раньше, то зачем?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от petr
			 
 
			Не, я пробовал и в 3.0 SP4, насколько я понимаю. Но зачем им понадобилось заполнять поле ссылкой на несуществующий лот я не понимаю. (по контракту складские проводки не создаются). Притом ссылка всегда должна быть на противоположную проводку (приход на расход и наоборот). Вообще непонятно, если такое было раньше, то зачем? 
		
	(1 этап - SalesAutoCreate_tmpSalesLine.setSalesLine - копируется в строку заказа 2 этап - InventMovement.initInventTransFromBuffer - копируется из строки заказа в проводку (используется метод InventMov_Sales.inventRefTransId) А вот зачем - мне как раз тоже непонятно  
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: aidsua (1). | |
| 
			
			 | 
		#13 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от petr
			
			 
... 
		
	Но зачем им понадобилось заполнять поле ссылкой на несуществующий лот я не понимаю. ... Просто в контракте не создается складских проводок. Поэтому лот существует, а вот ссылка на складскую проводку с таким номером лота не существует. 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Случайно обратил внимание. 
		
		
		
		
		
		
			
		
		
		
		
	20000 - номер этой темы. Юбилейная!  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			kashperuk, вы маньяк. 
		
		
		
		
		
		
			На всякий случай. Если вы обидчивый, то постарайтесь воспринять это как комплимент. 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
![]() Стараюсь, стараюсь, не получается  
		 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Это не несуществующий лот. Он очень даже существующий.
		
	 
Тоже самое и с номером лота. Ссылка на него есть в строке заказа, но в "справочнике" лотов таблице inventTrans этого лота нет. Поэтому проверка ссылочной целостности должна тут выдавать ошибку "такого номера лота не существует". P.S. Правдя я никогда этого не делал. Надо будет на досуге попробовать.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			petr, вы не правы. Лот — это не складская проводка. Это источник складской проводки (строка складского журнала, заказа, закупки. производственного заказа, журнала в проектах...). 
		
		
		
		
		
		
			Так что все с точностью до наоборот. Складских проводок с одинаковым номером лота может быть множество. А вот строк журналов и заказов/закупок с одинаковым номером лота быть не может. Как может идти речь о ссылке на запись в таблице, если поле-ключ не уникально? 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, действительно не прав. Спасибо
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| Теги | 
| ax3.0, faq, себестоимость | 
| 
	
	 | 
	
		
  |