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

Автор Тема: Легкий но очень сложный запрос  (Прочитано 2501 раз)

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

Оффлайн Chuchi

  • ***
  • Сообщений: 133
  • РЕПУТАЦИЯ: 4
  • КПД: 3%
  • Регистрация: 2011-03-24
  • Сайт: 
  • Профессия: Ученик 1С
 :xfbnsdfb:
уже второй день бьюсь с простым пожалуй запросом (учебным):
Для документа "Перемещение" (товар с одного склада на другой перекинуть надо) создать запрос который будет рассчитывать стоимость "По среднему" от закупочной цены конкретного товара именно с этого склада (у меня получается считать только от общего количества на всех складах) (регистры "СтоимостьМатериала", "остатокМатериала")

я никак не могу понять как такое простое действие как выбрать по первому пункту - соответствие введенной номенклатуры и одновременно второму - отсортировать по складу нельзя высчитать суммарный итог!


Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Видимо, нужно где-то отбор добавить. Запостите код.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

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

Оффлайн Chuchi

  • ***
  • Сообщений: 133
  • РЕПУТАЦИЯ: 4
  • КПД: 3%
  • Регистрация: 2011-03-24
  • Сайт: 
  • Профессия: Ученик 1С
Процедура ОбработкаПроведения(Отказ, Режим)
   Запрос = Новый Запрос;
   //Запрос.УстановитьПараметр("СкладВДокументе", Склад);
   Запрос.Текст =  "ВЫБРАТЬ
                   |   ПеремещениеПереченьНоменклатуры.Количество,
                   |   ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток,
                   |   СтоимостьМатериаловОстаткиИОбороты.СтоимостьКонечныйОстаток,
                   |   ПеремещениеПереченьНоменклатуры.Материал
                   |ИЗ
                   |   Документ.Перемещение.ПереченьНоменклатуры КАК ПеремещениеПереченьНоменклатуры
                   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты(, , , , Материалы В (&СписокНоменклатурыДокумента)) КАК ОстаткиМатериаловОстаткиИОбороты
                   |      ПО ПеремещениеПереченьНоменклатуры.Материал = ОстаткиМатериаловОстаткиИОбороты.Материалы
                   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.ОстаткиИОбороты(, , , , Материал В (&СписокНоменклатурыДокумента)) КАК СтоимостьМатериаловОстаткиИОбороты
                   |      ПО ПеремещениеПереченьНоменклатуры.Материал = СтоимостьМатериаловОстаткиИОбороты.Материал
                   |ГДЕ
                   |   ПеремещениеПереченьНоменклатуры.Ссылка = &Ссылка
                   |
                   |СГРУППИРОВАТЬ ПО
                   |   ОстаткиМатериаловОстаткиИОбороты.Склад,
                   |   ОстаткиМатериаловОстаткиИОбороты.Материалы,
                   |   ПеремещениеПереченьНоменклатуры.Количество,
                   |   ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток,
                   |   СтоимостьМатериаловОстаткиИОбороты.СтоимостьКонечныйОстаток,
                   |   ПеремещениеПереченьНоменклатуры.Материал
                   |
                   |ДЛЯ ИЗМЕНЕНИЯ
                   |   РегистрНакопления.СтоимостьМатериалов.ОстаткиИОбороты,
                   |   РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты"
   
   ;
   Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
   Запрос.УстановитьПараметр("СписокНоменклатурыДокумента", ПереченьНоменклатуры.ВыгрузитьКолонку("Материал"));
   Запрос.УстановитьПараметр("Ссылка",Ссылка);
   ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
   Пока ВыборкаРезультатаЗапроса.Следующий() Цикл
   //Пока ВыборкаРезультатаЗапроса.Следующий() Цикл
      Движение = Движения.ОстаткиМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материалы =ВыборкаРезультатаЗапроса.Материал;
      Движение.Склад = СкладОтпущено;
      Движение.Количество = ВыборкаРезультатаЗапроса.Количество;
      СтоимостьМатериала = ВыборкаРезультатаЗапроса.СтоимостьКонечныйОстаток / ВыборкаРезультатаЗапроса.КоличествоКонечныйОстаток;
      Движение.Стоимость = СтоимостьМатериала*ВыборкаРезультатаЗапроса.Количество;
      Движение = Движения.ОстаткиМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.Материалы = ВыборкаРезультатаЗапроса.Материал;
      Движение.Склад = СкладПринято;
      Движение.Количество = ВыборкаРезультатаЗапроса.Количество;
      //Движение.Стоимость =0;
      //Сообщить ("СтоимостьМатериала "+СтоимостьМатериала+" СкладОтпущено "+СкладОтпущено+"СкладПринято"+СкладПринято+"Материал"+ ВыборкаРезультатаЗапроса.Материал+ "СтоимостьОстатка " +ВыборкаРезультатаЗапроса.СтоимостьКонечныйОстаток + " КоличествоОстаток " +ВыборкаРезультатаЗапроса.КоличествоКонечныйОстаток );
      Движение.Стоимость = СтоимостьМатериала*ВыборкаРезультатаЗапроса.Количество;
            
   //КонецЦикла;
       Движение = Движения.СтоимостьМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материал =ВыборкаРезультатаЗапроса.Материал;
      Движение.Склад = СкладОтпущено;
      СтоимостьМатериала = ВыборкаРезультатаЗапроса.СтоимостьКонечныйОстаток / ВыборкаРезультатаЗапроса.КоличествоКонечныйОстаток;
      Движение.Стоимость = СтоимостьМатериала*ВыборкаРезультатаЗапроса.Количество;
      Движение = Движения.СтоимостьМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.Материал = ВыборкаРезультатаЗапроса.Материал;
      Движение.Склад = СкладПринято;
      //Движение.Стоимость =0;
      
      
      
      
      Сообщить ("СтоимостьМатериала "+СтоимостьМатериала+" СкладОтпущено "+СкладОтпущено+
      " СкладПринято "+СкладПринято+" Материал "+ ВыборкаРезультатаЗапроса.Материал+
      "СтоимостьОстатка " +ВыборкаРезультатаЗапроса.СтоимостьКонечныйОстаток
      + " КоличествоОстаток " +ВыборкаРезультатаЗапроса.КоличествоКонечныйОстаток+
      "ВсегоНаСкладеОтпущенно"+ );
      Движение.Стоимость = СтоимостьМатериала*ВыборкаРезультатаЗапроса.Количество;

     КонецЦикла;
        Движения.ОстаткиМатериалов.Записать();
         Движения.СтоимостьМатериалов.Записать();

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

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Ну хорошо, давайте разбираться.
Все-таки нас интересует один конкретный склад, или информация по каждому складу?
Я так поняла, что один конкретный. Значит, все данные, которые мы берем, нужно отбирать по складу. И остаток, видимо, нас интересует по этому же конкретному складу.

Итого, имеем:
1. Документ Перемещение - из него берем список Номенклатуры и количество каждого товара, которое нужно переместить.
2. Регистр ОстаткиМатериалов - из него берем информацию об остатках по нужному складу
3. Регистр СтоимостьМатериалов - из него берем Стоимость по нужному складу.

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

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

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


Теги:
 

Как можно подставлять цену из регистра сведений "Цены поставщиков" в документ"ПоступлениеТоваров" на актуальную дату? Необходимо использовать запрос в решении.

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

Ответов: 14
Просмотров: 9682
Последний ответ 24 Окт 2014, 13:30
от cska-fanat-kz
Запрос Параметры для "ИЗ"

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

Ответов: 2
Просмотров: 3078
Последний ответ 15 Май 2013, 23:27
от Березин
Что быстрее: Загрузить табличную часть в запрос и там добавить колонки, или пробежаться циклом по ТЧ и добавить значения в колонки

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

Ответов: 1
Просмотров: 1051
Последний ответ 11 Июл 2016, 09:00
от vitasw
Запрос по обработке "Согласование заявок"

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

Ответов: 0
Просмотров: 750
Последний ответ 29 Сен 2016, 02:39
от DenielAkreed
8.2 Бух. Запрос с условием "комментарий содержит текст"

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

Ответов: 13
Просмотров: 16885
Последний ответ 02 Сен 2011, 01:14
от bolobol

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
106 Сообщений
AIFrame
105 Сообщений
alex0402
28 Сообщений
kiksi
17 Сообщений
alexandr_ll
17 Сообщений
andron81_81
16 Сообщений
pavl_vs
13 Сообщений
LexaK
13 Сообщений
BuhRust
13 Сообщений
Artibon
12 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal