Помогите упростить процедуру

1. Celine.Angel 27.11.13 07:39 Сейчас в теме
Утро доброе всем! Помогите пожалуйста упростить процедуру, пытаюсь избавиться от ВТ, но получается ахинея какая-то(((


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


МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровТовары.Номенклатура,
| СУММА(РеализацияТоваровТовары.Количество) КАК КоличествоВДокументе,
| СУММА(РеализацияТоваровТовары.Сумма) КАК СуммаВДокументе,
| РеализацияТоваровТовары.НаборСвойств
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
|ГДЕ
| РеализацияТоваровТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровТовары.Номенклатура,
| РеализацияТоваровТовары.НаборСвойств";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

Движения.СтоимостьТовара.Записать();
Движения.ТоварыНаСкладах.Записать();

Результат = Запрос2.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Если Выборка.Количество = 0 Тогда
Стоимость = 0;
Иначе
СтоимостьТовара = Выборка.Стоимость / Выборка.Количество;

КонецЕсли;
// регистр ТоварыНаСкладах Расход
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.НаборСвойств = Выборка.НаборСвойств;
Движение.Склад = Склад;
Движение.Количество = Выборка.КоличествоВДокументе;
// регистр СтоимостьТовара Расход
Движение = Движения.СтоимостьТовара.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.КоличествоВДокументе;
Движение.Стоимость = СтоимостьТовара*Выборка.КоличествоВДокументе;
// регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Контрагент = Контрагент;
Движение.Склад = Склад;
Движение.Количество = Выборка.КоличествоВДокументе;
Движение.Сумма = Выборка.СуммаВДокументе;
Движение.Стоимость = СтоимостьТовара*Выборка.КоличествоВДокументе;
// регистр Управленческий
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.ОсновнойПлан.ДебиторскаяЗадолженность;
Движение.СчетКт = ПланыСчетов.ОсновнойПлан.Капитал;
Движение.Период = Дата;
Движение.Сумма = Выборка.СуммаВДокументе;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;

Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.ОсновнойПлан.Капитал;
Движение.СчетКт = ПланыСчетов.ОсновнойПлан.Товары;
Движение.Период = Дата;
Движение.Сумма = СтоимостьТовара * Выборка.КоличествоВДокументе;
Движение.КоличествоКт = Выборка.КоличествоВДокументе;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
КонецЦикла;
Движения.Записать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст ="ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток < 0";



Запрос3.УстановитьПараметр("Склад", Склад);
Результат = Запрос3.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает "+Строка(-Выборка.КоличествоОстаток)+" единиц товара """+Выборка.Номенклатура+"""";
Сообщение.Сообщить();
Отказ = Истина;

КонецЦикла;
КонецЕсли;

КонецПроцедуры
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. Uncore 1276 27.11.13 09:12 Сейчас в теме
(0) Сам запрос объединенный, если просто объединять, то как-то так будет выглядеть:
Запрос = Новый Запрос; 
	Запрос.Текст = 
	"ВЫБРАТЬ 
	|	РеализацияТоваровТовары.Номенклатура, 
	|	СУММА(РеализацияТоваровТовары.Количество) КАК КоличествоВДокументе, 
	|	СУММА(РеализацияТоваровТовары.Сумма) КАК СуммаВДокументе, 
	|	РеализацияТоваровТовары.НаборСвойств 
	|ПОМЕСТИТЬ НоменклатураДокумента 
	|ИЗ 
	|	Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары 
	|ГДЕ 
	|	РеализацияТоваровТовары.Ссылка = &Ссылка 
	| 
	|СГРУППИРОВАТЬ ПО 
	|	РеализацияТоваровТовары.Номенклатура, 
	|	РеализацияТоваровТовары.НаборСвойств
	|;
	|ВЫБРАТЬ 
	|	НоменклатураДокумента.Номенклатура, 
	|	НоменклатураДокумента.КоличествоВДокументе, 
	|	НоменклатураДокумента.СуммаВдокументе, 
	|	ЕСТЬNULL(СтоимостьТовараОстатки.СтоимостьОстаток, 0) КАК Стоимость, 
	|	ЕСТЬNULL(СтоимостьТовараОстатки.КоличествоОстаток, 0) КАК Количество, 
	|	ТоварыНаСкладахОстатки.НаборСвойств 
	|ИЗ 
	|	НоменклатураДокумента КАК НоменклатураДокумента 
	|	 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТовара.Остатки( 
	|	 , 
	|	 Номенклатура В 
	|	 (ВЫБРАТЬ 
	|	 НоменклатураДокумента.Номенклатура 
	|	 ИЗ 
	|	 НоменклатураДокумента)) КАК СтоимостьТовараОстатки 
	|	 ПО НоменклатураДокумента.Номенклатура = СтоимостьТовараОстатки.Номенклатура 
	|	 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( 
	|	 , 
	|	 Номенклатура В 
	|	 (ВЫБРАТЬ 
	|	 НоменклатураДокумента.Номенклатура 
	|	 ИЗ 
	|	 НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки 
	|	 ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура"; 	
	Результат = Запрос.Выполнить();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. DoctorRoza 27.11.13 08:19 Сейчас в теме
(1) Celine.Angel,
Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает "+Строка(-Выборка.КоличествоОстаток)+" единиц товара """+Выборка.Номенклатура+"""";
Сообщение.Сообщить();
Отказ = Истина;


Допустим, если есть алгоритм, который отменяет проведение документа, то, по-уму, в начале нужно выполнить его, а уже потом огород городить! :)
2. kansler 27.11.13 08:16 Сейчас в теме
1. Для очистки движений документа в типовых конфигурациях есть процедура:
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, РежимПроведения);

2. все запросы можно объединить в один пакетный запрос. При этом менеджер ВТ будет не нужен.
4. Celine.Angel 27.11.13 08:37 Сейчас в теме
(2) kansler, а можете помочь?? я вот тут именно и встала((
5. Uncore 1276 27.11.13 09:12 Сейчас в теме
(0) Сам запрос объединенный, если просто объединять, то как-то так будет выглядеть:
Запрос = Новый Запрос; 
	Запрос.Текст = 
	"ВЫБРАТЬ 
	|	РеализацияТоваровТовары.Номенклатура, 
	|	СУММА(РеализацияТоваровТовары.Количество) КАК КоличествоВДокументе, 
	|	СУММА(РеализацияТоваровТовары.Сумма) КАК СуммаВДокументе, 
	|	РеализацияТоваровТовары.НаборСвойств 
	|ПОМЕСТИТЬ НоменклатураДокумента 
	|ИЗ 
	|	Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары 
	|ГДЕ 
	|	РеализацияТоваровТовары.Ссылка = &Ссылка 
	| 
	|СГРУППИРОВАТЬ ПО 
	|	РеализацияТоваровТовары.Номенклатура, 
	|	РеализацияТоваровТовары.НаборСвойств
	|;
	|ВЫБРАТЬ 
	|	НоменклатураДокумента.Номенклатура, 
	|	НоменклатураДокумента.КоличествоВДокументе, 
	|	НоменклатураДокумента.СуммаВдокументе, 
	|	ЕСТЬNULL(СтоимостьТовараОстатки.СтоимостьОстаток, 0) КАК Стоимость, 
	|	ЕСТЬNULL(СтоимостьТовараОстатки.КоличествоОстаток, 0) КАК Количество, 
	|	ТоварыНаСкладахОстатки.НаборСвойств 
	|ИЗ 
	|	НоменклатураДокумента КАК НоменклатураДокумента 
	|	 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТовара.Остатки( 
	|	 , 
	|	 Номенклатура В 
	|	 (ВЫБРАТЬ 
	|	 НоменклатураДокумента.Номенклатура 
	|	 ИЗ 
	|	 НоменклатураДокумента)) КАК СтоимостьТовараОстатки 
	|	 ПО НоменклатураДокумента.Номенклатура = СтоимостьТовараОстатки.Номенклатура 
	|	 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( 
	|	 , 
	|	 Номенклатура В 
	|	 (ВЫБРАТЬ 
	|	 НоменклатураДокумента.Номенклатура 
	|	 ИЗ 
	|	 НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки 
	|	 ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура"; 	
	Результат = Запрос.Выполнить();
Показать
Оставьте свое сообщение

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