Создание Расходного Ордера

1. Asenka 107 24.06.14 12:01 Сейчас в теме
Здравствуйте!

Создаю программно Раходный ордер на основании Перемещения товаров.
Документ создается, но табличная часть не заполняется, т.к. данный запрос не работает:


Процедура ЗаполнитьТовары(ПодтверждатьОчисткуСтрок) Экспорт

	Если Не ПроверитьИПодготовитьТабЧастьКЗаполнению("Товары", ПодтверждатьОчисткуСтрок) Тогда	
		Возврат;	
	КонецЕсли; 

	Запрос = Новый Запрос;

	Запрос.УстановитьПараметр("Склад",             Склад);
	Запрос.УстановитьПараметр("СтатусПартии",      Перечисления.СтатусыПартийТоваров.Купленный);
	Запрос.УстановитьПараметр("ДокументОснование", ДокументПередачи);
	Запрос.УстановитьПараметр("ДатаОстатков",      ОбщегоНазначения.ПолучитьДатуОстатков(ЭтотОбъект));

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

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

	ВидыОперацийРасходныйОрдер = Перечисления.ВидыОперацийРасходныйОрдер;

	ЗначениеДокументРезерва = Неопределено;
	Если ВидОперации = ВидыОперацийРасходныйОрдер.ВозвратПоПриходномуОрдеру Тогда
		Запрос.Текст = ТекстЗапросаПоПриходномуОрдеру;
	Иначе
		Запрос.Текст = ТекстЗапросаПоНакладной;
	КонецЕсли;

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

При вводе на основании обычным способом здесь есть данные, а программным способом нет.
Почему? Помогите, пожалуйста
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1500 24.06.14 12:03 Сейчас в теме
(1) Asenka, в обработку Консоль запросов засунь, получишь результат, значит запрос верно написал!
7. x_under 13 24.06.14 12:47 Сейчас в теме
(1) Asenka, что значит создаю программно? Этот код вы вытащили в обработку?
Если да, то проблема кроется в этой строчке:
Запрос.УстановитьПараметр("ДатаОстатков", ОбщегоНазначения.ПолучитьДатуОстатков(ЭтотОбъект)); 

ЭтотОбъект - в контексте документа - сам документ, а в контексте обработки - сама обработка
8. Asenka 107 24.06.14 12:54 Сейчас в теме
(7)В документе Перемещение товаров в модуле объекта в процедуре Обработка проведения добавляю

Если Не Отказ Тогда
		Если ВидОперации = Перечисления.ВидыОперацийПеремещениеТоваров.ТоварыПродукцияПоОрдерам Тогда
			Если СоздатьРасходныйОрдер = Истина Тогда
				НовДок = Документы.РасходныйОрдерНаТовары.СоздатьДокумент();
				//Заполнить - вызывает ОбработкаЗаполнения(Основание) в документе 
				Основание = Ссылка;
				НовДок.Дата = ТекущаяДата();
				НовДок.Заполнить(Основание);
				НовДок.Комментарий = "Создан автоматически при проведении документа "+СтруктураШапкиДокумента.ПредставлениеДокумента;
				НовДок.Записать(РежимЗаписиДокумента.Проведение);
				НовДок.ПолучитьФорму().Открыть();
				
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
Показать


Документ создается, шапка заполняется, а табличная часть пустая, т.к. результат вышеуказанного запроса пустой.
Дата остатков в отладчике видна, она такая же как и при обычном вводе на основании, остальные параметры тоже.
10. Asenka 107 25.06.14 09:06 Сейчас в теме
(7) x_under,
проблема похоже действительно в этой строке

Запрос.УстановитьПараметр("ДатаОстатков", ОбщегоНазначения.ПолучитьДатуОстатков(ЭтотОбъект)); 


При типовом вводе на основании ЭтотОбъект - расходный ордер с датой 01.01.0001
ДатаОстатков тоже 01.01.0001
Запрос нормально отрабатывает.

При вводе на основании таким способом из модуля объекта документа Перемещение товаров:
				НовДок = Документы.РасходныйОрдерНаТовары.СоздатьДокумент();
				//Заполнить - вызывает ОбработкаЗаполнения(Основание) в документе 
				Основание = Ссылка;
			//	НовДок.Дата = ТекущаяДата();
				НовДок.Заполнить(Основание);
				НовДок.Комментарий = "Создан автоматически при проведении документа "+СтруктураШапкиДокумента.ПредставлениеДокумента;
			//	НовДок.Записать(РежимЗаписиДокумента.Проведение);
				НовДок.ПолучитьФорму().Открыть();
Показать


ЭтотОбъект - тоже расходный ордер с датой 01.01.0001
ДатаОстатков тоже 01.01.0001

А запрос не работает!!!
При чем если попытаться после этого данный документ заполнить по кнопке из формы, то запрос также не работает.

Помогите разобраться, пожалуйста!
3. Asenka 107 24.06.14 12:13 Сейчас в теме
Запрос то не я писала, он из конфигурации.
При обычном вводе на основании я вижу результат, а при программном вводе на основании там пустой результат запроса.
Вот и не пойму что делать...
4. Xershi 1500 24.06.14 12:19 Сейчас в теме
(3) Asenka, я же тебе говорю засунь запрос в консоль. Или опыта разработки нету?
5. Asenka 107 24.06.14 12:21 Сейчас в теме
(4) Xershi, извините не поняла.
Можно поподробнее как это сделать
9. Xershi 1500 24.06.14 12:56 Сейчас в теме
(5) Asenka, посмотри у себя в конфигураторе установлена ли обработка: КонсольЗапросов. А если нет, то по ссылке и скачаешь и там же инструкция есть.
11. Asenka 107 25.06.14 09:13 Сейчас в теме
(9) Xershi, в консоли запросов видно если поставить ДатуОстатков раньше, чем перемещение, то результат пустой, а если значение параметра оставить пустым то нормально срабатывает.
Видимо при программном вводе на основании происходит что-то подобное.
Проблема в этой чертовой дате, которую я никак не могу решить ((((
12. Xershi 1500 25.06.14 10:04 Сейчас в теме
(11) Asenka, раз запрос рабочий, то пол задачи решено!
Запрос.УстановитьПараметр("ДатаОстатков", ОбщегоНазначения.ПолучитьДатуОстатков(ЭтотОбъект));

Так может стоит перепровести расходный ордер? Явно же видно, что проблема в дате!
13. Asenka 107 25.06.14 10:35 Сейчас в теме
(12) Xershi,
Нужно чтобы сразу открылся проведенный заполненный документ.
Этого как раз не получается из-за даты остатков
14. Xershi 1500 25.06.14 10:39 Сейчас в теме
(13) Asenka, так перепроведите документ ввода остатков заодно!
6. Asenka 107 24.06.14 12:24 Сейчас в теме
Запрос.УстановитьПараметр("Склад", Склад); 
Запрос.УстановитьПараметр("СтатусПартии", Перечисления.СтатусыПартийТоваров.Купленный); 
Запрос.УстановитьПараметр("ДокументОснование", ДокументПередачи); 
Запрос.УстановитьПараметр("ДатаОстатков", ОбщегоНазначения.ПолучитьДатуОстатков(ЭтотОбъект)); 

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


Запрос то простой. И параметры одни и те же в обоих случаях передаются, в отладчике видно. Только во втором случае результат запроса пустой (((
15. Asenka 107 25.06.14 11:23 Сейчас в теме
При чем здесь ввод остатков???
16. Xershi 1500 25.06.14 11:49 Сейчас в теме
(15) Asenka, раз запрос работает, то явно код заполнения паленый: отладчиком точки останова ставь и проверяй, больше ничем помочь не смогу.
17. SGordon1 25.06.14 11:53 Сейчас в теме
Перемещение уже проведено?
19. Asenka 107 25.06.14 21:52 Сейчас в теме
(17) SGordon1, должно быть проведено.
создание расходного ордера запускается в конце процедуры обработка проведения документа перемещение товаров
18. Asenka 107 25.06.14 11:54 Сейчас в теме
Код заполнения нормальный. Проблема похоже с ЭтотОбъект, как писали выше
21. StBender 26.06.14 13:11 Сейчас в теме
(18) Asenka, ну если проблема с ЭтотОбъект, то передайте документ другим параметром. А вообще не совсем понятно, почему в вашем коде
  НовДок = Документы.РасходныйОрдерНаТовары.СоздатьДокумент();
                //Заполнить - вызывает ОбработкаЗаполнения(Основание) в документе 
                Основание = Ссылка;
            //    НовДок.Дата = ТекущаяДата();
                НовДок.Заполнить(Основание);
                НовДок.Комментарий = "Создан автоматически при проведении документа "+СтруктураШапкиДокумента.ПредставлениеДокумента;
            //    НовДок.Записать(РежимЗаписиДокумента.Проведение);
                НовДок.ПолучитьФорму().Открыть();


должен срабатывать начальный запрос.
20. x_under 13 26.06.14 09:20 Сейчас в теме
Самый простой вариант - запихните туда просто неопределено. Система вам соберет остатки на текущую дату
Оставьте свое сообщение

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