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

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

Метки: 

Ошибка при проведении документа. Операция не разрешена в предложении "ГДЕ"

Я
   ilyuza95
 
11.12.17 - 18:54
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ОказаниеУслуги.МодульОбъекта(170)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос3.Выполнить();
по причине:
{(14, 8)}: Операция не разрешена в предложении "ГДЕ"
<<?>>ОстаткиМатериаловОстатки.КоличествоОстаток
 
  Рекламное место пустует
   Джинн
 
1 - 11.12.17 - 18:55
Продолжайте наблюдения.
   ilyuza95
 
2 - 11.12.17 - 18:56
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Префикс = Обмен.ПолучитьПрефиксНомера();
КонецПроцедуры


Процедура ОбработкаПроведения(Отказ, Режим)
 
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;
 
// Создать менеджер временных таблиц

МенеджерВТ = Новый МенеджерВременныхТаблиц;
#Область НоменклатураДокумента

Запрос = Новый Запрос;
 
// Укажем, какой менеджер временных таблиц использует этот запрос

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

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

// Установим необходимость блокировки данных в регистрах СтоимостьМатериалов и ОстаткиМатериалов

Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;
 
// Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе

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

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

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

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

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

// Первая проводка:         Д 62(ДебиторскаяЗадолженность) – К 90 (Капитал) Розничная сумма
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.ДебиторскаяЗадолженность;
Движение.СчетКт = ПланыСчетов.Основной.Капитал;
Движение.Период = Дата;
Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты] = Клиент;
 
// Вторая проводка: Д 90 (Капитал) – К 41 (Товары) – себестоимость

Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.Капитал;
Движение.СчетКт = ПланыСчетов.Основной.Товары;
Движение.Период = Дата;
Движение.Сумма = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ВыборкаДетальныеЗаписи.Номенклатура;
 
КонецЕсли;
 
// Регистр Продажи

Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Клиент = Клиент;
Движение.Мастер = Мастер;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;
 
КонецЦикла;

Движения.Записать();
#КонецОбласти

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

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

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

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Клиенты") Тогда
        // Заполнение шапки

        Клиент = ДанныеЗаполнения.Ссылка;
        ОбъектОснование = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

КонецПроцедуры


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

Индекс = ПроверяемыеРеквизиты.Найти("ПереченьНоменклатуры.НаборСвойств");

Если Индекс <> Неопределено Тогда

ПроверяемыеРеквизиты.Удалить(Индекс);

КонецЕсли;

Индекс = 0;

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

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

Если Не ЗначениеЗаполнено(ТекСтрокаПереченьНоменклатуры.НаборСвойств) Тогда

Сообщение = Новый СообщениеПользователю();

Сообщение.Текст = "В строке " + Строка(Индекс+1) + " списка Перечень номенклатуры не заполнена колонка Набор свойств";

Сообщение.Поле = "ПереченьНоменклатуры[" + Строка(Индекс) + "].НаборСвойств";

Сообщение.УстановитьДанные(ЭтотОбъект);

Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
КонецПроцедуры
   mehfk
 
3 - 11.12.17 - 18:59
|ГДЕ
|       ОстаткиМатериаловОстатки.КоличествоОстаток";


Вы уверены?
   ilyuza95
 
4 - 11.12.17 - 19:00
Ошибка возникла после добавления команды ввода документа ОказаниеУслуги на основании элемента справочника Клиенты. Сейчас этот документ аписывается. но не проводится. В чем может быть роблема?
   Джинн
 
5 - 11.12.17 - 19:08
(4) Вообще не связанные вещи.
   Borteg
 
6 - 11.12.17 - 19:09
(4) смотри 3
   ilyuza95
 
7 - 11.12.17 - 19:11
ОстаткиМатериаловОстатки.КоличествоОстаток < 0"

Нашла ошибку. спасибо:)
   mikecool
 
8 - 11.12.17 - 19:16
напомнило что то "никак не привыкну к мысли, что люди, рожденные в этом веке, уже программируют" ))


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