Вход | Регистрация

1С:Предприятие ::

Метки: 

Автоматическое определение стоимости расходуемых материалов при проведении документа не ра

Я
   Dasha2398
 
16.12.17 - 13:38
Помогите, не могу разобраться!!!

Не работает:

Автоматическое определение стоимости расходуемых материалов при проведении документа  
   и
Разделение алгоритма проведения документа на оперативный и неоперативный режимы и контроль остатков в оперативном проведении документа.

В чем может быть причина????????

Код документа "ОказаниеУслуги":
Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиМатериалов.Записывать = Истина; Движения.СтоимостьМатериалов.Записывать = Истина; Движения.Продажи.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


// Данный фрагмент построен конструктором.


// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

МенеджерВТ = Новый МенеджерВременныхТаблиц;

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

Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст =

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

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

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

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

                                                                                        Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;
                                                                                        
                                                                                        Движения.СтоимостьМатериалов.Записать();

                                                                                             Движения.ОстаткиМатериалов.Записать();
                                                                                             
                                                                                                   Результат = Запрос2.Выполнить();

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

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

СтоимостьМатериала = 0; Иначе

СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость/ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

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

// регистр ОстаткиМатериалов Расход


Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;
Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

// регистр СтоимостьМатериалов Расход


Движение = Движения.СтоимостьМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе*СтоимостьМатериала;

//регистр Управленческий

//первая проводка: д 62 (Дебиторская задолженность) - к
Движение = Движения.Управленческий.Добавить(); Движение.СчетДт =

ПланыСчетов.Основной.ДебиторскаяЗадолженность;

Движение.СчетКт = ПланыСчетов.Основной.Капитал; Движение.Период = Дата;

Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты] = Клиент;



//вторая проводка: Д 90 (Капитал) - К 41 (Товары) -


Движение = Движения.Управленческий.Добавить(); Движение.СчетДт = ПланыСчетов.Основной.Капитал; Движение.СчетКт = ПланыСчетов.Основной.Товары; Движение.Период = Дата;

Движение.Сумма =

СтоимостьМатериала*ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение.КоличествоКт =

ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы]=ВыборкаДетальныеЗаписи.Номенклатура;

КонецЕсли;

// Регистр Продажи


Движение = Движения.Продажи.Добавить(); Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент; Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

Движения.Записать();

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

//проверить отрицательные остатки.

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает" + Строка(-

ВыборкаДетальныеЗаписи.КоличествоОстаток) + "единиц материала""" + ВыборкаДетальныеЗаписи.Материал + """";

Сообщение.Сообщить(); Отказ = Истина;

КонецЦикла;

КонецЕсли;

КонецПроцедуры
 
 
   Фрэнки
 
1 - 16.12.17 - 13:49
лучше бы весь код и всю простыню забросила в первый коммент в созданной теме, а в тексте топика чего не хватает, так это названия и номера версии конфигурации.


Список тем форума
Рекламное место пустует Рекламное место пустует
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует