Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр ОстаткиМатериалов Расход
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать=Истина;
Движения.Продажи.Записывать=Истина;
Движения.Управленческий.Записывать=Истина;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц=МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,
| СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВдокументе,
| СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВдокументе
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
|ГДЕ
| ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры,
| ОказаниеУслугиПереченьНоменклатуры.НаборСвойств";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц=МенеджерВТ;
Запрос2.Текст="ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.ВидНоменклатуры,
| НоменклатураДокумента.НаборСвойств,
| НоменклатураДокумента.КоличествоВдокументе,
| НоменклатураДокумента.СуммаВдокументе,
| ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
| ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки
| ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки
| ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал";
Движения.СтоимостьМатериалов.БлокироватьДляИзменения=Истина;
Движения.ОстаткиМатериалов.БлокироватьДляИзменения=Истина;
Движения.СтоимостьМатериалов.Записать();
Движения.ОстаткиМатериалов.Записать();
Результат = Запрос2.Выполнить();
//ТЗ = Результат.выгрузить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.Количество=0 тогда
СтоимостьМатериала = 0;
иначе
СтоимостьМатериала=ВыборкаДетальныеЗаписи.Стоимость/ВыборкаДетальныеЗаписи.Количество;
КонецЕсли;
Если ВыборкаДетальныеЗаписи.Номенклатура.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал тогда
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
//
Движение.НаборСвойств=ВыборкаДетальныеЗаписи.НаборСвойств;
//
Движение.Склад = Склад;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВдокументе;
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения=ВидДвиженияНакопления.Расход;
Движение.Период=Дата;
Движение.Материал=ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Стоимость=ВыборкаДетальныеЗаписи.КоличествоВдокументе*СтоимостьМатериала;
//здесь ошибку дает ---->
//Регистр управленческий
//первая проводка д62 дебетоваязадолж к90 капитал розничная сумма
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт=ПланыСчетов.Основной.ДебиторскаяЗадолженность;
Движение.СчетКт=ПланыСчетов.Основной.Капитал;
Движение.Период=Дата;
Движение.Сумма=ВыборкаДетальныеЗаписи.СуммаВДокументе;
движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты]=Клиент;
//вторая проводка д90 капитал к41 товары себестоимость
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт=ПланыСчетов.Основной.Капитал;
Движение.СчетКт=ПланыСчетов.Основной.Товары;
Движение.Период=Дата;
Движение.Сумма=СтоимостьМатериала*ВыборкаДетальныеЗаписи.КоличествоВДокументе;
движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы]=ВыборкаДетальныеЗаписи.Номенклатура;
КонецЕсли;
Движение = Движения.Продажи.Добавить();
Движение.Период=Дата;
Движение.номенклатура=ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Клиент=Клиент;
Движение.Мастер=Мастер;
Движение.Количество=ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Выручка=ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость=СтоимостьМатериала*ВыборкаДетальныеЗаписи.КоличествоВдокументе;
КонецЦикла;
Движения.Записать();
Если Режим=РежимПроведенияДокумента.Оперативный тогда
//проверить отрицательные остатки.
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц=МенеджерВТ;
Запрос3.Текст="ВЫБРАТЬ
| ОстаткиМатериаловОстатки.Материал,
| ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)
| И Склад = &Склад) КАК ОстаткиМатериаловОстатки
|ГДЕ
| ОстаткиМатериаловОстатки.КоличествоОстаток < 0";
Запрос3.УстановитьПараметр("Склад",Склад);
Результат =Запрос3.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст="Не хватает "+Строка(-ВыборкаДетальныеЗаписи.КоличествоОстаток)
+" единиц материала"+ВыборкаДетальныеЗаписи.материал+"";
Сообщение.Сообщить();
Отказ=Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
при том что в документе приходная накладная все срабатывает на ура.