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

Процедура ПОдобратьПартии

Автор Chuchi, 18 апр 2011, 11:30

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

Klyacksa

(вздыхая)
ВыборкаИзРезультатаЗапроса (QueryResultSelection)
Следующий (Next)
Синтаксис:
Следующий()
Возвращаемое значение:
Тип: Булево. Истина - следующая запись выбрана; Ложь - достигнут конец выборки.
Описание:
Получает следующую запись из результата запроса. Для обхода результата запроса нужно после получения выборки вызвать данный метод для позиционирования на первый элемент и далее вызывать до тех пор, пока не будет возвращено значение Ложь.
Пример:
Пока Выборка.Следующий() Цикл
    ...
КонецЦикла;


Ну это же не цикл...
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Klyacksa

Кстати, добавьте в запросе обработку пустого значения:
|    естьnull(ОстаткиМатериаловОстатки.КоличествоОстаток,0) КАК ОбщееКоличество,

И так же во всех числовых полях. Тогда не нужно будет их обрабатывать потом отдельно.

Вот это неверно:
ЭлементыФормы.Товары.Значение.Количество
потому как ЭлементыФормы.Товары.Значение - это таблица, у нее нет поля Количество. Если хотите обращаться к определенной строке таблицы, то нужно брать конкретную строку.


А еще, уберите поле Организация из полей запроса, и сделайте группировку по Номенклатуре, а все количества сложите.

Тогда получится таблица вида:

Товар      КоличествоПоОрг1    КоличествоПоОрг2
Товар1    3                               5
Товар2    2                               10

И добавьте-таки отбор в таблицу остатков!!! (делайте, пожалуйста, все рекомендации с первого раза, нет времени по 10 раз повторять одно и то же)

Вот, с запросом закончим, будем дальше...
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Chuchi

Klyacksa, вы уж простите но я полагала что отбор организации здесь идет..точнее я понимаю что идет отбор количества
   ВЫБОР
               | КОГДА ОстаткиМатериаловОстатки.Организация = &Организация1
               | ТОГДА ОстаткиМатериаловОстатки.КоличествоОстаток
               | ИНАЧЕ 0
               | КОНЕЦ КАК ОстаткиПервые,
               | ВЫБОР
               | КОГДА ОстаткиМатериаловОстатки.Организация = &Организация2
               | ТОГДА ОстаткиМатериаловОстатки.КоличествоОстаток
               | ИНАЧЕ 0
               | КОНЕЦ КАК ОстаткиВторые


Но тогда не понимаю зачем еще отбирать по Организации ведь у меня 2!ПОЛЯ ОРГАНИЗАЦИИ

Chuchi

 :lol:
Klyacksa
А У МЕНЯ Ж ЗАРАБОТАЛО!
Я только переписала вот так

Процедура ПродатьНажатие(Элемент)
Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
               | ОстаткиМатериаловОстатки.Номенклатура,
               | ОстаткиМатериаловОстатки.КоличествоОстаток КАК ОбщееКоличество,
               | ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК ОбщееКоличество2,
               | ВЫБОР
               | КОГДА ОстаткиМатериаловОстатки.Организация = &Организация1
               | ТОГДА ОстаткиМатериаловОстатки.КоличествоОстаток
               | ИНАЧЕ 0
               | КОНЕЦ КАК ОстаткиПервые,
               | ВЫБОР
               | КОГДА ОстаткиМатериаловОстатки.Организация = &Организация2
               | ТОГДА ОстаткиМатериаловОстатки.КоличествоОстаток
               | ИНАЧЕ 0
               | КОНЕЦ КАК ОстаткиВторые
               |ИЗ
               | РегистрНакопления.ОстаткиМатериалов.Остатки(&ТекущаяДата, ) КАК ОстаткиМатериаловОстатки
               |ГДЕ
               | ОстаткиМатериаловОстатки.Номенклатура В(&Номенклатура)
               |
               |СГРУППИРОВАТЬ ПО
               | ОстаткиМатериаловОстатки.Номенклатура,
               | ОстаткиМатериаловОстатки.КоличествоОстаток,
               | ВЫБОР
               | КОГДА ОстаткиМатериаловОстатки.Организация = &Организация1
               | ТОГДА ОстаткиМатериаловОстатки.КоличествоОстаток
               | ИНАЧЕ 0
               | КОНЕЦ,
               | ВЫБОР
               | КОГДА ОстаткиМатериаловОстатки.Организация = &Организация2
               | ТОГДА ОстаткиМатериаловОстатки.КоличествоОстаток
               | ИНАЧЕ 0
               | КОНЕЦ";
 

  Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Запрос.УстановитьПараметр("организация1", организация1);
     Запрос.УстановитьПараметр("организация2", организация2);

    Запрос.УстановитьПараметр("Номенклатура",ЭлементыФормы.Товары.Значение.ВыгрузитьКолонку("Номенклатура"));

               
             

ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
                 
Пока    ВыборкаРезультатаЗапроса.Следующий()Цикл
    Остаток1 = ?(ВыборкаРезультатаЗапроса.ОбщееКоличество = NULL , 0,
ВыборкаРезультатаЗапроса.ОстаткиПервые);
Если ЭлементыФормы.Товары.ТекущиеДанные.Количество  > Остаток1 Тогда;
Разница= (ЭлементыФормы.Товары.ТекущиеДанные.Количество - Остаток1);
ВыборкаРезультатаЗапроса.Следующий();
    Остаток2 = ?(ВыборкаРезультатаЗапроса.ОбщееКоличество = NULL , 0,
ВыборкаРезультатаЗапроса.ОстаткиВторые);
           
Если  Остаток2 >= Разница Тогда
Сообщить ("Списано с первого склада " + Остаток1 + " со второго склада " + Разница);
Иначе
Сообщить ("Не хватает товара! Остаток на складе1 " + Остаток1 + " Остаток на складе втором " + Остаток2);
КонецЕсли;
//КонецЕсли;
  Иначе
      Сообщить ("Списано с первого склада " + ЭлементыФормы.Товары.ТекущиеДанные.Количество);
КонецЕсли
//КонецЦикла;
КонецЦикла;
КонецПроцедуры



Вот только я Вашей реккомендации по Организации не выполнила  :kmtu:

Chuchi


Chuchi

Попробую самый простой вариант рассмотреть, по аналогии доделаю
Если есть товар на складе первой организации то мне надо сформировать документ реализацияТоваровУслуг, его провести и вывести печатную форму пользователю, т.е. пользователь формы документа видеть не должен

Правильно ли начинаю делать?:
Сообщить ("Списано с первого склада " + ЭлементыФормы.Товары.ТекущиеДанные.Количество);
   док = документы.РеализацияТоваровУслуг.СоздатьДокумент();
   Док.Организация = Организация1;
                       док.Записать();


Chuchi

Вроде правильно, т.к. документ создается, теперь вопрос, как перекинуть табличную часть? и как провести документ?

Chuchi

и еще по тому коду мне кажется я не правильно цикл оформила.. в номенклатуру набиваю одну строку а он в сообщении первой строкой выводит: списано со склада 1 - 1 шт. И ПОТОМ ПОЯВЛЯЕТСЯ СТРОКА Списано с первого склада 0 со второго склада - 1 шт

Chuchi

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

Chuchi

да проблема на лицо(( не могу табличную часть в документ реализации отправить( прошу помочь

Теги:

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

Рейтинг@Mail.ru

Поиск