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

Не создаётся документ по обработке

Автор MariaByzowa, 03 мая 2023, 12:18

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

MariaByzowa

Добрый день!
Пишу обработку, которая создаёт документ «Реализация товаров» и помещает в него все остатки товаров по выбранному складу.Подскажите, в чём ошибка? Документ не создаётся.


&НаСервере
Процедура СоздатьДокументНаСервере()
Док = Документы.РеалиацияТоваровИУслуг.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Склад = Склад;
Док.Покупатель =Справочники.Контрагенты.Покупатели;
ВидЦены = ВидЦены;

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

LexaK

MariaByzowa, судя по коду, это у вас вообще работать не должно! из-за ошибок.
пробовали запускать?
если помогло нажмите: Спасибо!

MariaByzowa

LexaK, форма документа появляется, но сам документ не создаётся.Укажите пожалуйста на ошибки.

Afinogen

 B) что значит форма документа появляется? где и в какой момент вашей обработки?

Afinogen

вот для этой части кода

   Если Не СразуПроводитьДокумент = Истина Тогда
      Док.Записать(РежимЗаписиДокумента.Запись);
   Иначе
      Док.Записать(РежимЗаписиДокумента.Проведение);
   КонецЕсли
КонецПроцедуры

тип значения переменной Док = ДокументОбъект

еслим вы потом пытаетесб открыть форму созданного документа вы ее нив жизнь не откроете, для ее открытия вам нужна созданная в момент проведения документа ссылка

то есть вот это Док.Ссылка


LexaK

по заданию надо документ заполнить остатками по складу
а данные берете из Регистра Цены!

запрос возвращает пустой результат! (поэтому и ошибок нет)
вы просто создаете новый документ с текущей датой  :xfbnsdfb:
если помогло нажмите: Спасибо!

MariaByzowa

Afinogen, при нажатии на "Создать документ"ничего не происходит.Где именно ошибки в моём коде?

Afinogen

так а что должно происходить то?
в списке реализаций документ создается?

Afinogen

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


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

      |ИЗ
      |  РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
      |      ПО ТоварыНаСкладахОстатки.Номенклатура=ЦеныНоменклатурыСрезПоследних.Номенклатура;



MariaByzowa


Теги:

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

Рейтинг@Mail.ru

Поиск