8.х Трабла в запросе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Diamand, 26 дек 2010.

  1. TopicStarter Overlay
    Diamand
    Offline

    Diamand

    Регистрация:
    9 окт 2008
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте.

    Столкнулся с такой проблемой , есть форма Расход в ней написал вот такой код

    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
    Запрос = Новый Запрос;	
    Запрос.Текст = "ВЫБРАТЬ
    |	КошелькиОстатки.кошелёк.Участник,
    |	КошелькиОстатки.суммаОстаток
    |ИЗ
    |	РегистрНакопления.Кошельки.Остатки КАК КошелькиОстатки"; 
    Запрос.УстановитьПараметр("Кошелек",Кошелек);
    Запрос.УстановитьПараметр("ДатаКонтроля",Ссылка.МоментВремени());
    
    РезультатЗапроса = Запрос.Выполнить();
    ЕстьОщибка = Ложь;
    Если РезультатЗапроса.Пустой() тогда 
    ЕстьОщибка = Истина;
    Иначе
    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
    Пока
    Выборка.Следующий()Цикл
    Если Выборка.суммаОстаток < Сумма Тогда
    ЕстьОщибка = Истина;
    КонецЕсли;
    
    КонецЦикла;
    
    КонецЕсли;
    
    Если  ЕстьОщибка Тогда
    Сообщить("Недостаточно денег в кошельке!");
    Отказ = Истина;
    конецЕсли;
    
    код в принципе работает как и задумано но когда в Форме Доход много записей и естественно с разными датами то расход сделать не получается (допустим нужно сделать расход на 5000 и при записи выдает что недостаточно денег...... ,но по 1000 или по 500 он записывает и так можно записать расход 5000)

    помогите плиз то что-то не пойму в что не так ,БД прикрепил

    Вложения:

    • Test.rar
      Размер файла:
      153,5 КБ
      Просмотров:
      25
  2. HexaD
    Offline

    HexaD Опытный в 1С

    Регистрация:
    19 июн 2010
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    А почему вы под запросом определили 2 параметра, а в самом запросе не стали их использовать?
  3. TopicStarter Overlay
    Diamand
    Offline

    Diamand

    Регистрация:
    9 окт 2008
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    При использовании параметров вылетала ошибка при расходе и я их попросту убрал и было всё гуд до определённого момента , может поможете исправить данный нюанс :angry: (возможно я их как то некорректно использовал в запросе )
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Эмммм.... По моему - ужас...
    Сумма - это что и откуда берется?
  5. TopicStarter Overlay
    Diamand
    Offline

    Diamand

    Регистрация:
    9 окт 2008
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    берётся - сравнивается сумма остатка с суммой которая водится в поле и на основании этого происходит запись или нет
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Как то так перепишите:
    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
    
    Движения.Кошельки.Очистить();
    Движения.Кошельки.Записать();
    
    Запрос = Новый Запрос;	
    Запрос.Текст = "ВЫБРАТЬ
    |	Расход.Кошелек,
    |	Расход.Кошелек.Участник КАК Участник,
    |	Расход.Сумма
    |ПОМЕСТИТЬ Кошельки
    |ИЗ
    |	Документ.Расход КАК Расход
    |ГДЕ
    |	Расход.Ссылка = &Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	Кошельки.Кошелек,
    |	Кошельки.Участник,
    |	ЕСТЬNULL(КошелькиОстатки.суммаОстаток, 0) КАК СуммаОстаток,
    |	Кошельки.Сумма КАК СуммаДокумента
    |ИЗ
    |	Кошельки КАК Кошельки
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Кошельки.Остатки(
    |				&Момент,
    |				кошелёк В
    |					(ВЫБРАТЬ РАЗЛИЧНЫЕ
    |						Кошельки.Кошелек
    |					ИЗ
    |						Кошельки КАК Кошельки)) КАК КошелькиОстатки
    |		ПО Кошельки.Кошелек = КошелькиОстатки.кошелёк"; 
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Момент", МоментВремени());
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
    НехватаетДенег = Выборка.СуммаДокумента - Выборка.СуммаОстаток;
    Если НехватаетДенег > 0 Тогда
    Сообщить("Не хватает денег в сумме " + Строка(НехватаетДенег));
    Отказ = Истина;
    КонецЕсли;
    КонецЦикла;
    
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    и т.д.
    
    
  7. TopicStarter Overlay
    Diamand
    Offline

    Diamand

    Регистрация:
    9 окт 2008
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    спасибо большое :angry:

Поделиться этой страницей