Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Помогите понять принцип создания запросов в 1с 7.7 конф 7.7.00          
ZUBR Подменю пользователя
сообщение 08.09.19, 22:14
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 57
Из: Київ
Спасибо сказали: 2 раз
Рейтинг: 2

И снова здравствуйте! Уважаемые гуру, помогите, пожалуйста, разобраться в создании запросов. Хочу понять основные принципы и закрепить на практике. Вопросов будет несколько, но все по запросам. И все практические. Уважаемые Модераторы, прошу разрешить обсудить эти вопросы в одной теме. Думаю, так будет лучше. Они все будут касаться процедуры формирования запросов. Но если администрация сайта посчитает, что, все же, нужно по каждому вопросу создавать отдельную тему, я беспрекословно подчинюсь. Итак.
У меня есть РасходныеНакладные по ремонтам техники. В табличной части этих накладных есть есть Товары с реквизитом ВидТовара = Товар, а есть различные виды выполняемых работ, которые в справочнике числятся как товар с реквизитом ВидТовара = Услуга. Мне нужно в отчете по всем проведенным накладным просуммировать все виды работ. Без, собственно, товаров. Например, есть товар с видом Услуга, который называется "Чистка бойлера". Или "ЗаменаНагревателя". Ясно, что это работа. Поэтому этот товар имеет ВидТовара = Услуга. Остальные же товары, например, Выключатель, Прокладка и т.д. имеет ВидТовара = Товар. После многих попыток я пришел к следующему коду, который работает:


Процедура Сформировать()   
    НужныйТовар = Константа.НужныйТовар;
    ВидТовараУм = Константа.ВидТовараУм;
    
    ЗапросСуммы = СоздатьОбъект("Запрос");
ТекстЗапроса =
    "
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    
    |Товар = Документ.РасходнаяНакладная.Товар;
    |ВидТовара = Справочник.Номенклатура.ВидТовара;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие (ВидТовара = ВидТовараУм);";
    ЗапросСуммы.Выполнить(ТекстЗапроса);
    Пока ЗапросСуммы.Группировка() = 1 Цикл
        СуммаУслуг = ЗапросСуммы.Сум;
        
    КонецЦикла;
Сообщить("Сумма:"+СуммаУслуг);

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


"Константа.ВидТовараУм" у меня в пользовательской программе выбран вид Услуга.

Но в результате я получаю не сумму услуг по всем накладным, а сумму цен всех товаров вместе с услугами по всем расходным накладным. Получается, что условие написано неправильно, и при каждом прохождении цикла условие видит ВидТовара = Услуга.
Подскажите, пожалуйста, что я делаю неправильно и где ошибка? Спасибо!

andrew76 Подменю пользователя
сообщение 09.09.19, 5:42
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 243
Из: Узбекистан
Спасибо сказали: 6 раз
Рейтинг: 6

ZUBR @ Сегодня, 1:14 * ,

А ВидТовара
Цитата(ZUBR @ 09.09.19, 1:14) *
|Товар = Документ.РасходнаяНакладная.Товар; |ВидТовара = Справочник.Номенклатура.ВидТовара;


Наверное условие должно выглядеть как-то так :

|Товар = Документ.РасходнаяНакладная.Товар.ВидТовара;  //вместо  |ВидТовара = Справочник.Номенклатура.ВидТовара;
|Условие (ВидТовара = ВидТовараУм);";


В Вашем варианте получается,что обрабатываются все накладные,без учета условия.
Получается что СправочникНоменклатура и ДокументРасходнаяНакладная в этом запросе работают не в паре !

Попробуйте вот так :

Процедура Сформировать()   
    НужныйТовар = Константа.НужныйТовар;
    ВидТовараУм = Константа.ВидТовараУм;
    
    ЗапросСуммы = СоздатьОбъект("Запрос");

ТекстЗапроса =
    "    
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Товар = Документ.РасходнаяНакладная.Товар;
    |ВидТовара = Документ.РасходнаяНакладная.Товар.ВидТовара;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие (ВидТовара = ВидТовараУм);";
    ЗапросСуммы.Выполнить(ТекстЗапроса);
    
Пока ЗапросСуммы.Группировка() = 1 Цикл
        СуммаУслуг = ЗапросСуммы.Сум;
КонецЦикла;

Сообщить("Сумма:"+СуммаУслуг);

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

Спасибо сказали: ZUBR,

ZUBR Подменю пользователя
сообщение 09.09.19, 18:03
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 57
Из: Київ
Спасибо сказали: 2 раз
Рейтинг: 2

andrew76 @ Сегодня, 6:42 * , да, так как Вы предложили, работает. Интересно, что я вчера примерно так же пробовал сделать, но, видимо, какую-то мелочь прописал неправильно. Спасибо!

ZUBR Подменю пользователя
сообщение Вчера, 23:05
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 57
Из: Київ
Спасибо сказали: 2 раз
Рейтинг: 2

Здравствуйте. Возникла необходимость посчитать стоимость услуг для отдельного инженера по выданным аппаратам. Для этого мне нужно ввести в текст запроса еще одно условие. Даже два. Не могу сформировать этот проклятущий запрос. Никак не въеду. Мне программа выдает ошибку, что агрегатное поле объекта ТекущийЭлемент не обнаружено. А, кроме того, я не могу вывести Сообщить, потому что выскакивает ошибка, что переменная Инженер не определена. Как это лучше сделать?(

Процедура Сформировать()   
    НужныйТовар = Константа.НужныйТовар;
    ВидТовараУм = Константа.ВидТовараУм;
    
    Спр = СоздатьОбъект("Справочник.Сотрудники");
    
    ЗапросСуммы = СоздатьОбъект("Запрос");
ТекстЗапроса =
    "    
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Товар = Документ.РасходнаяНакладная.Товар;
    |ВидТовара = Документ.РасходнаяНакладная.Товар.ВидТовара;
    |Инженер = Документ.РасходнаяНакладная.Инженер;
    |СтатусЗаказа = Документ.РасходнаяНакладная.СтатусЗаказа;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие (Инженер = Спр.ТекущийЭлемент);
    |Условие ((СтатусЗаказа = Перечисление.Статусы.Выдан)или(СтатусЗаказа = Перечисление.Статусы.Выезд));
    |Условие (ВидТовара = ВидТовараУм);";
    
    Спр.ВыбратьЭлементы();
      
      Пока Спр.ПолучитьЭлемент()=1 Цикл
    
    
                       ЗапросСуммы.Выполнить(ТекстЗапроса);
                           Пока ЗапросСуммы.Группировка() = 1 Цикл
                                                  СуммаУслуг = ЗапросСуммы.Сум;
        
                                                                          КонецЦикла;
                            Сообщить(Инженер+СуммаУслуг);
                                                    КонецЦикла;


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


Спасибо!

ZUBR @ Сегодня, 23:29 * , я с трудом разобрался. В общем, поставил дополнительное условие по статусам заказов, и запрос работает правильно. Но как сюда втулить инженера, не могу понять. Помогите посчитать эту сумму для инженера, который в документе и в справочнике. Спасибо.

Это работает. Что и как добавить для инженера?

Процедура Сформировать()   
    НужныйТовар = Константа.НужныйТовар;
    ВидТовараУм = Константа.ВидТовараУм;
    
    Спр = СоздатьОбъект("Справочник.Сотрудники");
    
    ЗапросСуммы = СоздатьОбъект("Запрос");
ТекстЗапроса =
    "    
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Товар = Документ.РасходнаяНакладная.Товар;
    |СтатусЗаказа = Документ.РасходнаяНакладная.СтатусЗаказа;
    |ВидТовара = Документ.РасходнаяНакладная.Товар.ВидТовара;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие ((СтатусЗаказа = Перечисление.Статусы.Выдан)или(СтатусЗаказа = Перечисление.Статусы.Выезд));
    |Условие (ВидТовара = ВидТовараУм);";
    
       ЗапросСуммы.Выполнить(ТекстЗапроса);
                         Пока ЗапросСуммы.Группировка() = 1 Цикл
                            СуммаУслуг = ЗапросСуммы.Сум;
                        КонецЦикла;

                           Сообщить(СуммаУслуг);
                  
КонецПроцедуры

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 1 ZUBR

 

RSS Текстовая версия Сейчас: 17.09.19, 13:02
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!