Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Помогите разобраться (http://forums.kuban.ru/f1040/pomogite_razobrat-sya-3778689.html)

VezgauV1c 27.02.2013 11:49

Помогите разобраться
 
Нет движений по регистрам. Уже голова кипит, где я тупанул

Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Если Режим = РежимПроведенияДокумента.Оперативный тогда

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


// мы должны узнать есть ли такой материал на складе
| ПО ОказаниеУслуг1переченьноменклатуры.номенклатура = ОстаткиматериаловОстаткиНаСкладе.материал
|ГДЕ
//условия отбора из документа только строки табличной части документа
| ОказаниеУслуг1переченьноменклатуры.номенклатура.Ссылка = &Ссылка
|

|ДЛЯ ИЗМЕНЕНИЯ
| РегистрНакопления.СтоимостьМатериала.Остатки,
| РегистрНакопления.Остаткиматериалов.Остатки";
Запрос.УстановитьПараметр("СкладВДокументе",Склад);
иначе

Запрос.Текст =
"ВЫБРАТЬ
| ОказаниеУслуг1переченьноменклатуры.номенклатура,
| ОказаниеУслуг1переченьноменклатуры.количество,
| ОказаниеУслуг1переченьноменклатуры.номенклатура.видноменклатуры КАК ВидНоменклатуры,
| ОказаниеУслуг1переченьноменклатуры.сумма,
| ОстаткиматериаловОстатки.количествоОстаток,
| СтоимостьМатериалаОстатки.стоимостьОстаток

|ИЗ
| Документ.ОказаниеУслуг1.переченьноменклатуры КАК ОказаниеУслуг1переченьноменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остаткиматериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК ОстаткиматериаловОстатки
| ПО ОказаниеУслуг1переченьноменклатуры.номенклатура = ОстаткиматериаловОстатки.материал
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериала.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК СтоимостьМатериалаОстатки
| ПО ОказаниеУслуг1переченьноменклатуры.номенклатура = СтоимостьМатериалаОстатки.материал

//условия отбора из документа только строки табличной части документа
|ГДЕ
| ОказаниеУслуг1переченьноменклатуры.номенклатура.Ссылка = &Ссылка
|
|ДЛЯ ИЗМЕНЕНИЯ
| РегистрНакопления.Остаткиматериалов.Остатки,
| РегистрНакопления.СтоимостьМатериала.Остатки";
конецЕсли;


Запрос.УстановитьПараметр("МоментВремени",МоментВремени());


Запрос.УстановитьПараметр("СписокНоменклатурыДокумента",ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));

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

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

/////дальше не работает!!!!!!!!

Пока ВыборкаРезультатаЗапроса.Следующий() Цикл


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

Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.материал тогда

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

//регистр СтоимостьМатериала Расход
Движение = движения.СтоимостьМатериала.Добавить();
движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.материал = ВыборкаРезультатаЗапроса.Номенклатура;
//РасчитаемстоимостьМатериала
СтоимостьМатериала = ?(выборкаРезультатаЗапроса.КоличествоОстаток = Null, 0,
ВыборкаРезультатаЗапроса.СтоимостьОстаток/ВыборкаРезультатазапроса.КоличествоОстаток);
Движение.стоимость = Стоимостьматериала * выборкаРезультатаЗапроса.Количество;
Движения.СтоимостьМатериала.Записать();
Сообщить ("Движения по регистру Стоимость Материала записаны");
КонецЕсли;



//Регистр Продажи
Движение = Движения.продажи.Добавить();
Движение.Период = Дата;
Движение.номенклатура = ВыборкаРезультатаЗапроса.Номенклатура;
движение.Мастер = мастер;
Движение.Клиент = Клиент;
Движение.Количество = ВыборкаРезультатаЗапроса.Количество;
Движение.Выручка = ВыборкаРезультатаЗапроса.Сумма;
Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.материал тогда
Движение.стоимость = СтоимостьМатериала * ВыборкаРезультатаЗапроса.Количество;
Иначе
Движение.стоимость = 0;
КонецЕсли;
Движения.Продажи.Записать();
Сообщить("Движения по регистру продажи записаны");
конеццикла;

////Теперь добавим записть движения регистров
//Движения.Остаткиматериалов.Записать();
//Движения.СтоимостьМатериала.Записать();
//Движения.Продажи.Записать();
конецпроцедуры

bma1 27.02.2013 12:33

Здесь не работает:
ОказаниеУслуг1переченьноменклатуры.номенклатура.Сс ылка = &Ссылка
Сравнивается ссылка из номенклатуры а нужна ссылка на документ

Viking 27.02.2013 18:12

загрузи в конструктор и посмотри ОТКУДА у тебя берется "ОказаниеУслуг1переченьноменклатуры.номенклатура.Ссылка"
что то мне кажется из номенклатуры, по идее если табличная часть называется "ПереченьНоменклатуры" в документе "ОказаниеУслуг1" то должно быть "ОказаниеУслуг1переченьноменклатуры.Ссылка"


Текущее время: 06:02. Часовой пояс GMT +3.