3. Добавлена последовательность «ПоследовательностьДвиженияТоваров», входящие документы: «РТиУ»
Движение влияющие на последовательность «РегистрНакопления.ОстаткиТоваров»
4. Движение расход реализовывало с помощью обработки «ВосстановлениеПоследовательности»:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоследовательностьДвиженияТоваров.Регистратор,
| ПоследовательностьДвиженияТоваров.Период
|ИЗ
| Последовательность.ПоследовательностьДвиженияТоваров КАК ПоследовательностьДвиженияТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Последовательность.ПоследовательностьДвиженияТоваров.Границы КАК ПоследовательностьДвиженияТоваровГраницы
| ПО (ИСТИНА)
|ГДЕ
| (ПоследовательностьДвиженияТоваров.МоментВремени >= ПоследовательностьДвиженияТоваровГраницы.МоментВремени
| ИЛИ ПоследовательностьДвиженияТоваровГраницы.МоментВремени ЕСТЬ NULL )";
Результат = Запрос.Выполнить();
ВыборкаДокументыРеализации = Результат.Выбрать();
Пока ВыборкаДокументыРеализации.Следующий() Цикл
МоментВремени = ВыборкаДокументыРеализации.Регистратор.МоментВремени();
Если Последовательности.ПоследовательностьДвиженияТоваров.ПолучитьГраницу() = МоментВремени Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Себестоимость списания расчитана!";
Сообщение.Сообщить();
Прервать;
КонецЕсли;
Если ФормированиеДвижений(ВыборкаДокументыРеализации.Регистратор) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Док.: "+ВыборкаДокументыРеализации.Регистратор+" - успешно проведён";
Сообщение.Сообщить();
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Последовательности.ПоследовательностьДвиженияТоваров.УстановитьГраницу(МоментВремени);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ФормированиеДвижений(Документ)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Количество
|ПОМЕСТИТЬ ТоварыДокумента
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
|ГДЕ
| ОстаткиТоваров.Регистратор = &Регистратор
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Количество,
| ЕСТЬNULL(СтоимостьТоваровОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(СтоимостьТоваровОстатки.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| ТоварыДокумента КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТоваров.Остатки КАК СтоимостьТоваровОстатки
| ПО ТоварыДокумента.Номенклатура = СтоимостьТоваровОстатки.Номенклатура";
Запрос.УстановитьПараметр("Регистратор", Документ);
Результат = Запрос.Выполнить();
ВыборкаТоварыДок = Результат.Выбрать();
Отказ = Ложь;
НаборЗаписей = Документ.ПолучитьОбъект().Движения.СтоимостьТоваров;
Пока ВыборкаТоварыДок.Следующий() Цикл
Недостаток = ВыборкаТоварыДок.Количество -ВыборкаТоварыДок.КоличествоОстаток;
Если Недостаток > 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не достаточно товара:" +ВыборкаТоварыДок.Номенклатура+" в кол-ве:"+Недостаток;
Сообщение.Сообщить();
Отказ = Истина;
Прервать;
КонецЕсли;
Если Не Отказ Тогда
Запись = НаборЗаписей.ДобавитьРасход();
Запись.Номенклатура = ВыборкаТоварыДок.Номенклатура;
Запись.Период = Документ.Дата;
Если ВыборкаТоварыДок.КоличествоОстаток = 0 Тогда
Запись.Сумма = ВыборкаТоварыДок.СуммаОстато;
Иначе
Запись.Сумма = ВыборкаТоварыДок.СуммаОстаток * ВыборкаТоварыДок.Количество/ ВыборкаТоварыДок.КоличествоОстаток
КонецЕсли;
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
Возврат Не Отказ
КонецФункции // ()
Вход
Важно!
Для новых покупателей Базового курса - с чего начать
...........................................................
Все контакты Саппорта Spec8.ru
...........................................................
Как задавать вопросы по материалам курса и ДЗ
...........................................................
Что такое Мастер-группа
...........................................................
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
Продвинутый курс. Домашнее задание№13
Добрый день!
1. Создаю РН «СтоимостьТовара» для ведения стоимостного учёта. Структура регистра аналогична РН «ОстаткиТоварова» добавлен ресурс «Сумма»
2. Движение приход по РН «СтоимостьТовара» осуществляет документ «ПТиУ»
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
3. Добавлена последовательность «ПоследовательностьДвиженияТоваров», входящие документы: «РТиУ»
Движение влияющие на последовательность «РегистрНакопления.ОстаткиТоваров»
4. Движение расход реализовывало с помощью обработки «ВосстановлениеПоследовательности»:
Процедура Сформировать(Команда)
ОчиститьСообщения();
СформироватьНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СформироватьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоследовательностьДвиженияТоваров.Регистратор,
| ПоследовательностьДвиженияТоваров.Период
|ИЗ
| Последовательность.ПоследовательностьДвиженияТоваров КАК ПоследовательностьДвиженияТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Последовательность.ПоследовательностьДвиженияТоваров.Границы КАК ПоследовательностьДвиженияТоваровГраницы
| ПО (ИСТИНА)
|ГДЕ
| (ПоследовательностьДвиженияТоваров.МоментВремени >= ПоследовательностьДвиженияТоваровГраницы.МоментВремени
| ИЛИ ПоследовательностьДвиженияТоваровГраницы.МоментВремени ЕСТЬ NULL )";
Результат = Запрос.Выполнить();
ВыборкаДокументыРеализации = Результат.Выбрать();
Пока ВыборкаДокументыРеализации.Следующий() Цикл
МоментВремени = ВыборкаДокументыРеализации.Регистратор.МоментВремени();
Если Последовательности.ПоследовательностьДвиженияТоваров.ПолучитьГраницу() = МоментВремени Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Себестоимость списания расчитана!";
Сообщение.Сообщить();
Прервать;
КонецЕсли;
Если ФормированиеДвижений(ВыборкаДокументыРеализации.Регистратор) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Док.: "+ВыборкаДокументыРеализации.Регистратор+" - успешно проведён";
Сообщение.Сообщить();
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Последовательности.ПоследовательностьДвиженияТоваров.УстановитьГраницу(МоментВремени);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ФормированиеДвижений(Документ)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Количество
|ПОМЕСТИТЬ ТоварыДокумента
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
|ГДЕ
| ОстаткиТоваров.Регистратор = &Регистратор
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Количество,
| ЕСТЬNULL(СтоимостьТоваровОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(СтоимостьТоваровОстатки.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| ТоварыДокумента КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТоваров.Остатки КАК СтоимостьТоваровОстатки
| ПО ТоварыДокумента.Номенклатура = СтоимостьТоваровОстатки.Номенклатура";
Запрос.УстановитьПараметр("Регистратор", Документ);
Результат = Запрос.Выполнить();
ВыборкаТоварыДок = Результат.Выбрать();
Отказ = Ложь;
НаборЗаписей = Документ.ПолучитьОбъект().Движения.СтоимостьТоваров;
Пока ВыборкаТоварыДок.Следующий() Цикл
Недостаток = ВыборкаТоварыДок.Количество -ВыборкаТоварыДок.КоличествоОстаток;
Если Недостаток > 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не достаточно товара:" +ВыборкаТоварыДок.Номенклатура+" в кол-ве:"+Недостаток;
Сообщение.Сообщить();
Отказ = Истина;
Прервать;
КонецЕсли;
Если Не Отказ Тогда
Запись = НаборЗаписей.ДобавитьРасход();
Запись.Номенклатура = ВыборкаТоварыДок.Номенклатура;
Запись.Период = Документ.Дата;
Если ВыборкаТоварыДок.КоличествоОстаток = 0 Тогда
Запись.Сумма = ВыборкаТоварыДок.СуммаОстато;
Иначе
Запись.Сумма = ВыборкаТоварыДок.СуммаОстаток * ВыборкаТоварыДок.Количество/ ВыборкаТоварыДок.КоличествоОстаток
КонецЕсли;
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
Возврат Не Отказ
КонецФункции // ()