Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
7.8 kB
1
Indexable
Never
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	// Движения по регистру бухгалтерии Управленческий (старая методика проведения)

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

	// Получение данных для формирования движений
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ПрибытиеСписокНоменклатуры.Номенклатура КАК Номенклатура,
	|	СУММА(ПрибытиеСписокНоменклатуры.Количество) КАК Количество
	|ПОМЕСТИТЬ ВТ_ТабЧасть
	|ИЗ
	|	Документ.Прибытие.СписокНоменклатуры КАК ПрибытиеСписокНоменклатуры
	|ГДЕ
	|	ПрибытиеСписокНоменклатуры.Ссылка = &Ссылка
	|
	|СГРУППИРОВАТЬ ПО
	|	ПрибытиеСписокНоменклатуры.Номенклатура
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Номенклатура
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_ТабЧасть.Номенклатура КАК Номенклатура,
	|	ВТ_ТабЧасть.Количество КАК КоличествоВДокументе,
	|	ЕСТЬNULL(УправленческийОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
	|	ЕСТЬNULL(УправленческийОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
	|	ВТ_ТабЧасть.Номенклатура.Представление КАК НоменклатураПредставление
	|ИЗ
	|	ВТ_ТабЧасть КАК ВТ_ТабЧасть
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(
	|				&МоментВремени,
	|				Счет = &СчетТоварыВПути,
	|				&Субконто,
	|				Субконто1 В
	|						(ВЫБРАТЬ
	|							ВТ_ТабЧасть.Номенклатура
	|						ИЗ
	|							ВТ_ТабЧасть КАК ВТ_ТабЧасть)
	|					И Субконто2 = &ДокументОтправления) КАК УправленческийОстатки
	|		ПО ВТ_ТабЧасть.Номенклатура = УправленческийОстатки.Субконто1";
	
	
	Субконто = Новый Массив(2);
	Субконто[0] = ПланыВидовХарактеристик.ВидыСубконто.Номенклатура;
	Субконто[1] = ПланыВидовХарактеристик.ВидыСубконто.ДокументОтправления;

	Запрос.УстановитьПараметр("Субконто", Субконто);
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
	Запрос.УстановитьПараметр("СчетТоварыВПути", ПланыСчетов.Управленческий.ТоварыВПути);
	Запрос.УстановитьПараметр("ДокументОтправления", ДокументОтправления);
	
	// Обход результатов запроса, формирование движений в регистр бухгалтерии
	Результат = Запрос.Выполнить();	
	
	Если Не Результат.Пустой() Тогда
		Выборка = Результат.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			// Контроль наличия номенклатуры
			Превышение = Выборка.КоличествоВДокументе - Выборка.КоличествоОстаток;
			Если Превышение > 0 Тогда 
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = СтрШаблон("Превышение остатка по номенклатуре %1 в количестве %2", 
					Выборка.НоменклатураПредставление, Превышение);						
				Сообщение.Сообщить();
				
				Отказ = Истина;
				
			КонецЕсли;
			
			Если Отказ Тогда
				Продолжить;
			КонецЕсли;
			
			// Проводка отражения прибытия товара
			Проводка = Движения.Управленческий.Добавить();
			Проводка.Период = Дата;
			Проводка.СчетДт = ПланыСчетов.Управленческий.Товары;
			Проводка.СчетКт = ПланыСчетов.Управленческий.ТоварыВПути;
			
			Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
			Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Склады] = Склад;
			
			Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
			Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ДокументОтправления] = ДокументОтправления;
			
			Проводка.КоличествоДт = Выборка.КоличествоВДокументе;
			Проводка.КоличествоКт = Выборка.КоличествоВДокументе;
			
			Проводка.Сумма = Выборка.КоличествоВДокументе / Выборка.КоличествоОстаток * Выборка.СуммаОстаток;
			
		КонецЦикла;
		
	КонецЕсли;                 

	
КонецПроцедуры