Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 07:51

Запросы

Автор Элина, 19 ноя 2017, 00:36

0 Пользователей и 1 гость просматривают эту тему.

Элина

Люди добрые, помогите начинающему разработчику:(
Следующая процедура выдает ошибку:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.Продажи.МодульОбъекта(125)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(6, 11)}: Временная таблица уже существует "НоменклатураДокумента"
ПОМЕСТИТЬ <<?>>НоменклатураДокумента
Делала по примеру. Что не так?

Процедура ОбработкаПроведения(Отказ, Режим)
   //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

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

ВыборкаДетальныеЗаписи = Результат.Выбрать();
  Пока ВыборкаДетальныеЗаписи.Следующий()Цикл
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "Не хватает"+Строка(-ВыборкаДетальныеЗаписи.Количество)+ "единиц товара""""+ВыборкаДетальныеЗаписи.Товар+""";
    Сообщение.Сообщить();
    Отказ = Истина;
КонецЦикла;
КонецЕсли;
Движения.СтоимостьТоваров.БлокироватьДляИзменения = Истина;
Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
Движения.СтоимостьТоваров.Записать();
Движения.ОстаткиТоваров.Записать();
Результат = Запрос.Выполнить();
   
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Клиент = Клиент;
Движение.Продавец = Продавец;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Количество =  ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе;
КонецПроцедуры;

LexaK

:D :D :D

у вас одна команда лишняя, уберите ее и все заработает.

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

//вот эту команду удалите!!!
//Результат = Запрос.Выполнить();
   
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Клиент = Клиент;
Движение.Продавец = Продавец;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Количество =  ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе;
КонецПроцедуры;
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск