Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
28 Май 2017, 02:10
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Null в результате запроса.  (Прочитано 858 раз)

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

Оффлайн Iwrestledabear

  • *
  • Сообщений: 1
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-01-21
  • Сайт: 
  • Профессия: Ученик 1С
Собственно, вот. Задача 2.2 1с специалист. Виновник проблемы вот этот код. В результате запроса Null при любом варианте. Вдруг кто-нибудь сможет помочь.


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

   //Блокировки
   Блокировка = Новый БлокировкаДанных;
   ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Хозрасчеты");
   ЭлементБлокировки.УстановитьЗначение("Счет",ПланыСчетов.Хозрасчеты.Покупатели);
   ЭлементБлокировки.УстановитьЗначение("Субконто1",Контрагент);
   ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
   Блокировка.Заблокировать();

   Движения.Хозрасчеты.Записать();

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

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


Оффлайн Андрей Сисюкин

  • *
  • Сообщений: 21
  • РЕПУТАЦИЯ: 9
  • КПД: 43%
  • Регистрация: 2015-12-17
    • Skype: dark_daedal
  • Сайт: 
  • Профессия: Разработчик 1С
   Открываешь выборку и сразу обращаешься к ней, без позиционирования на первую запись!  (выборка.Следующий())

    Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
      //Проверка не больше ли сумма оплаты, чем долг
      //Запрос возвращает null, поэтому я не уверен можно ли использовать Итог
   Если Сумма > (Выборка.ДолгКонтрагента.Итог - Выборка.ОплаченоКонтрагентом.Итог) Тогда

Добавлено: 22 Янв 2016, 06:31

Да, личное мнение:
С такой конструкцией ты вряд ли сдашь экзамен:
Запрос.УстановитьПараметр("ВидыСубконто", ПланыСчетов.Хозрасчеты.Покупатели.ВидыСубконто.ВыгрузитьКолонку("ВидСубконто"));

Это в даном случае ты знаешь ,что у тебя за субконто, и проверил ка они выгружаются.. А если их 100 штук? и в хаотическом порядке?

Оффлайн Iwrestledabear

  • *
  • Сообщений: 1
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-01-21
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо за совет, однако не стоит всерьез воспринимать допущенные мной недочеты, я только начинаю учиться.
Скажите самое главное, запрос составлен верно?
   Открываешь выборку и сразу обращаешься к ней, без позиционирования на первую запись!  (выборка.Следующий())

    Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
      //Проверка не больше ли сумма оплаты, чем долг
      //Запрос возвращает null, поэтому я не уверен можно ли использовать Итог
   Если Сумма > (Выборка.ДолгКонтрагента.Итог - Выборка.ОплаченоКонтрагентом.Итог) Тогда

Добавлено: 22 Янв 2016, 06:31

Да, личное мнение:
С такой конструкцией ты вряд ли сдашь экзамен:
Запрос.УстановитьПараметр("ВидыСубконто", ПланыСчетов.Хозрасчеты.Покупатели.ВидыСубконто.ВыгрузитьКолонку("ВидСубконто"));

Это в даном случае ты знаешь ,что у тебя за субконто, и проверил ка они выгружаются.. А если их 100 штук? и в хаотическом порядке?

Оффлайн Андрей Сисюкин

  • *
  • Сообщений: 21
  • РЕПУТАЦИЯ: 9
  • КПД: 43%
  • Регистрация: 2015-12-17
    • Skype: dark_daedal
  • Сайт: 
  • Профессия: Разработчик 1С
Спасибо за совет, однако не стоит всерьез воспринимать допущенные мной недочеты, я только начинаю учиться.
Скажите самое главное, запрос составлен верно?
В принципе, да. Но конкретно в данном случае устанавливать виды субконто не обязательно. Выборка идёт только с одного счета.
Данный параметр, а точнее, список параметров, пригождается, когда выбираешь данные с нескольких счетов, а на них, скажем, "контрагент" - это разный номер субконто. Тогда ставишь в массив его первым и обращаешься к контрагенту как к первому субконто.

Ну и вопрос в необходимости блокировки.
Если смотреть на подходы 1С в последнее время - они везде избегают исключительности и блокировок..


Теги:
 

Из запроса не выводятся значения полей - выводятся пустые значения

Автор Alex1111Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 24
Просмотров: 10024
Последний ответ 14 Июн 2012, 17:44
от Alex1111
"ПОДОБНО" в условие связи запроса

Автор Станиславъ ЗверевъРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 8
Просмотров: 1867
Последний ответ 11 Май 2016, 15:29
от LexaK
Ошибка при выполнении запроса - "неоднозначное поле"

Автор Marta_LiРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 14
Просмотров: 10635
Последний ответ 21 Апр 2011, 16:00
от Marta_Li
Где найти вкладку "Параметры", в конструкторе запроса при создании динамического списка?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 365
Последний ответ 09 Мар 2017, 14:48
от LexaK
"Зависание" запроса после обращения к регистру бухгалтерии

Автор ShkerinРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 3862
Последний ответ 03 Ноя 2011, 14:06
от Shkerin

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
83 Сообщений
wise wise
63 Сообщений
Dethmontt Dethmontt
59 Сообщений
MuI_I_Ika MuI_I_Ika
51 Сообщений
alex0402
49 Сообщений
ilyay ilyay
32 Сообщений
Сергей Федоров Сергей Федоров
32 Сообщений
ilnur75
22 Сообщений
Дмитрий Медведков
19 Сообщений
magnifico61
18 Сообщений

* Кто онлайн

  • Точка Гостей: 214
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal