Остатки в накладной

1. mista 16.10.17 12:37 Сейчас в теме
есть код по списанию остатка по регистпу в накладной:

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

	
	Движения.ТоварыОрганизацийБУ.Записывать = Истина;
	Движения.Продажи.Записывать=Истина;
	
	Движения.ТоварыОрганизацийБУ.Записать();
	Движения.Продажи.Записать();
			
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
	                      |	СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
	                      |	СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма
	                      |ПОМЕСТИТЬ ВТ
	                      |ИЗ
	                      |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
	                      |ГДЕ
	                      |	РеализацияТоваровУслугТовары.Ссылка = &Ссылка
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	РеализацияТоваровУслугТовары.Номенклатура
	                      |
	                      |ИНДЕКСИРОВАТЬ ПО
	                      |	Номенклатура
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ.Номенклатура КАК Номенклатура,
	                      |	ВТ.Количество КАК КоличествоВДокументе,
	                      |	ВТ.Сумма КАК СуммаВДокументе,
	                      |	ТоварыОрганизацийБУОстатки.Партия,
	                      |	ЕСТЬNULL(ТоварыОрганизацийБУОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
	                      |	ЕСТЬNULL(ТоварыОрганизацийБУОстатки.СуммаОстаток, 0) КАК СуммаОстаток
	                      |ИЗ
	                      |	ВТ КАК ВТ
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизацийБУ.Остатки(
	                      |				&МоментВремени,
	                      |				Номенклатура В
	                      |					(ВЫБРАТЬ
	                      |						ВТ.Номенклатура
	                      |					ИЗ
	                      |						ВТ КАК ВТ)) КАК ТоварыОрганизацийБУОстатки
	                      |		ПО ВТ.Номенклатура = ТоварыОрганизацийБУОстатки.Номенклатура
	                      |
	                      |УПОРЯДОЧИТЬ ПО
	                      |	ТоварыОрганизацийБУОстатки.Партия.МоментВремени ВОЗР
	                      |ИТОГИ
	                      |	МАКСИМУМ(КоличествоВДокументе),
	                      |	МАКСИМУМ(СуммаВДокументе),
	                      |	СУММА(КоличествоОстаток),
	                      |	СУММА(СуммаОстаток)
	                      |ПО
	                      |	Номенклатура");
	Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
	Запрос.УстановитьПараметр("Ссылка",Ссылка);
	
	Если МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВОЗР", "УБЫВ"); // если лифо - сортируем по УБЫВанию  
	КонецЕсли;  
	
	ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока ВыборкаНоменклатура.Следующий() Цикл
		
		Если НЕ ВыборкаНоменклатура.Номенклатура.Услуга и ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоВДокументе Тогда			
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "Не хватает " + Строка(ВыборкаНоменклатура.КоличествоВДокументе - ВыборкаНоменклатура.КоличествоОстаток) + " единиц номенклатуры " + ВыборкаНоменклатура.Номенклатура + ". Проведение невозможно.";
			Сообщение.Сообщить();
			Отказ = Истина;			
		КонецЕсли; 		
				
		Если Отказ Тогда 
			Продолжить;
		КонецЕсли;
		
			ОсталосьСписать  = ВыборкаНоменклатура.КоличествоВДокументе;
						
			ВыборкаДетЗаписи = ВыборкаНоменклатура.Выбрать(); 			
			Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать <> 0 Цикл
				
				Если НЕ ВыборкаДетЗаписи.Номенклатура.Услуга Тогда
					
					КСписанию = Мин(ОсталосьСписать, ВыборкаДетЗаписи.КоличествоОстаток);
					
					Если Средняя Тогда
						СуммаСписания = ?(ВыборкаНоменклатура.КоличествоОстаток = КСписанию, 
											ВыборкаНоменклатура.СуммаОстаток, 
											ВыборкаНоменклатура.СуммаОстаток/ВыборкаНоменклатура.КоличествоОстаток * КСписанию);
					Иначе
						СуммаСписания = ?(ВыборкаДетЗаписи.КоличествоОстаток = КСписанию, 
											ВыборкаДетЗаписи.СуммаОстаток, 
											ВыборкаДетЗаписи.СуммаОстаток/ВыборкаДетЗаписи.КоличествоОстаток * КСписанию);
					КонецЕсли;
					
					НовоеДвижение = Движения.ТоварыОрганизацийБУ.ДобавитьРасход();
					НовоеДвижение.Организация = Организация;
					НовоеДвижение.Период = Дата;
					НовоеДвижение.Регистратор = Ссылка;
					НовоеДвижение.Количество = КСписанию;
					НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
					Если НЕ Средняя Тогда
						НовоеДвижение.Партия = ВыборкаДетЗаписи.Партия;
					КонецЕсли;
					НовоеДвижение.Сумма = СуммаСписания;
				КонецЕсли;				
				
				НовоеДвижение = Движения.Продажи.Добавить();
				НовоеДвижение.Активность = Истина;
				НовоеДвижение.Период = Дата;
				НовоеДвижение.Регистратор = Ссылка;    
				НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
				НовоеДвижение.Сумма = ВыборкаДетЗаписи.СуммаВДокументе;
				
				Если НовоеДвижение.Номенклатура.Услуга Тогда
					НовоеДвижение.Себестоимость = 0;
					НовоеДвижение.Количество = ВыборкаНоменклатура.КоличествоВДокументе; 
				Иначе
					НовоеДвижение.Количество = КСписанию;
					НовоеДвижение.Себестоимость = СуммаСписания;
					НовоеДвижение.Наценка = НовоеДвижение.Сумма - НовоеДвижение.Себестоимость;
					НовоеДвижение.НаценкаПроцент = ((НовоеДвижение.Сумма / НовоеДвижение.Себестоимость) *100 ) - 100;
					ОсталосьСписать = ОсталосьСписать - КСписанию;
				КонецЕсли;
								
			КонецЦикла;
Показать




как прописать параметр ПечОстатокТовара, чтобы в печатной форме накладной выходил текущий остаток?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. пользователь 16.10.17 12:41
Сообщение было скрыто модератором.
...
3. Dnki 4 16.10.17 21:10 Сейчас в теме
Вопрос напоминает детскую задачку: "Поезд из А в Б идет 2 часа. Сколько лет машинисту?".
Сначала привел модуль проведения документа. Потом вопрос: "А как изменить печать?"
Для начала найдите существующую процедуру печати. Над ней нужно думать, что добавить.
4. mista 17.10.17 07:43 Сейчас в теме
пишу в процедуру печати
Пока ВыборкаСтрокТовары.Следующий() Цикл

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


ругается
ошибка
5. Dnki 4 18.10.17 16:48 Сейчас в теме
(4) "Несоответствие типов (Параметр номер ""1"")"
У метода Остатки() первый параметр это "МоментВремени". И остальные "не в дугу".

ТабОстатков = РегистрыНакопления.ТоварыОрганизацийБУ(, ВыборкаСтрокТовары.Склад, ВыборкаСтрокТовары.Товар, и т.д.)

Замечания:
- правильно это делать одним запросом, до начала цикла. Извлечь все товары документа.
- За "Фильтр.Вставить("Номенклатура",ОбластьСтрокаТаблицы.Параметры.Товар)" руки оторвал бы.
6. mista 19.10.17 12:19 Сейчас в теме
код

{Документ.РеализацияТоваровУслуг.МодульМенеджера(2493)}: Ошибка при вызове метода контекста (Остатки)
ТабОстатков = Остатки.Остатки(, ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество");
по причине:
Несоответствие типов (параметр номер '2')
при замене
ТабОстатков = Остатки.Остатки(, ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество");
на
ТабОстатков = Остатки.Остатки(, ВыборкаСтрокТовары.Склад, ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество");
ругань на реквизит склад
7. DenisCh 19.10.17 12:30 Сейчас в теме
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии> (AccountingRegisterManager.<Имя регистра бухгалтерии>)
Остатки (Balance)
Синтаксис:

Остатки(<МоментВремени>, <ВидыСубконто>, <Отбор>, <Измерения>, <Ресурсы>)

Ошибку сам найдёшь?
8. mista 19.10.17 12:58 Сейчас в теме
(7)
Остатки(, , , , )

нет, ставлю
ТабОстатков = Остатки.Остатки("Дата", ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество");
ругань про дату
9. DenisCh 19.10.17 13:03 Сейчас в теме
Остатки(<МоментВремени>, <ВидыСубконто>, <Отбор>,
Остатки("Дата", ВыборкаСтрокТовары.Товар, "Номенклатура",

Сравни.И найди разницу.
10. mista 19.10.17 13:13 Сейчас в теме
я не пойму про <ВидыСубконто>
Прикрепленные файлы:
Оставьте свое сообщение

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