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

результат запроса

Автор joystas, 13 июл 2015, 14:26

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

joystas

здравствуйте, подскажите пожалуйста. Не давно начал программировать в 1с 8.3, до этого никогда этим не занимался, разве что в делфях при учебе....
У меня такой вопрос: Запрос формирует список организаций, по которым были налоговые начисления соответственно с суммами по определенному периоду, так вот мне надо от туда только 3 организации и вывести по ним сумму. понимаю, что нужно выложить в массив и пройтись по нему с циклом, но организации 3 шт. да и немного не догоню как это сделать. Вот исходник:

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


до этого без сортировки по покупателю она выводила общюу сумму, а сейчас выводит только первую строку. догоняю что тут вопрос в выборка.следующий() , но не догоняю как туда загнать эти 3 организации....

mixqn

какие 3 нужно выбрать? любые 3? 3 первых результата запроса?
напишите прямо в запросе ВЫБРАТЬ ПЕРВЫЕ 3
это так сказать первая часть ответа.
и вторая: чтобы выводились все результаты запроса, надо использовать цикл, а не условие. примерно так будет в вашем случае:
Пока Выборка.Следующий() Цикл
      возврат выборка.СуммаБезНДС;
КонецЦикла;

joystas

Цитата: mixqn от 13 июл 2015, 14:31
какие 3 нужно выбрать? любые 3? 3 первых результата запроса?
напишите прямо в запросе ВЫБРАТЬ ПЕРВЫЕ 3
это так сказать первая часть ответа.
и вторая: чтобы выводились все результаты запроса, надо использовать цикл, а не условие. примерно так будет в вашем случае:
Пока Выборка.Следующий() Цикл
      возврат выборка.СуммаБезНДС;
КонецЦикла;





Организации идут не по по порядку, известно только название, инн и тд.
ну так при таком цикле выводится общая сумма всех организаций? разве не так?
наверно их надо искать по названию?

mixqn

Цитата: joystas от 13 июл 2015, 14:34ну так при таком цикле выводится общая сумма всех организаций? разве не так?
в цикле выводиться будет ровно то, что вы получили в запросе, я в детали запроса не вникал пока. суть в том, что разница между вашим способом - с инструкцией Если - и предложенным мной - с циклом только в том, что вы получили первую запись и все, а я в запросе получу все записи последовательно.
надеюсь, понятно написал....

joystas

Цитата: mixqn от 13 июл 2015, 14:39
Цитата: joystas от 13 июл 2015, 14:34ну так при таком цикле выводится общая сумма всех организаций? разве не так?
в цикле выводиться будет ровно то, что вы получили в запросе, я в детали запроса не вникал пока. суть в том, что разница между вашим способом - с инструкцией Если - и предложенным мной - с циклом только в том, что вы получили первую запись и все, а я в запросе получу все записи последовательно.
надеюсь, понятно написал....

С этим то понятно, значит тут получается 2 варианта: 1) из результата запроса взять только нужные строки и сложить их и
2) При создании запроса сделать ограничение именно по  этим 3 нужным организациям??

mixqn

я первым делом и обратил внимание на то, что непонятно, какие конкретно 3 организации нужны.
если не произвольные, а какие-то конкретные, то их есть смысл передать как параметры запроса - под ГДЕ указать эти организации (ну например через ИЛИ)

про сложить строки не понял вас. вам что нужно сложить сумму по 3-м организациям? если да, то это так же можно сделать в запросе. убрать поля группировки, оставить только сумму, агрегатная функция СУММА

joystas

Цитата: mixqn от 13 июл 2015, 14:47
я первым делом и обратил внимание на то, что непонятно, какие конкретно 3 организации нужны.
если не произвольные, а какие-то конкретные, то их есть смысл передать как параметры запроса - под ГДЕ указать эти организации (ну например через ИЛИ)

про сложить строки не понял вас. вам что нужно сложить сумму по 3-м организациям? если да, то это так же можно сделать в запросе. убрать поля группировки, оставить только сумму, агрегатная функция СУММА

Да нужно выбрать конкретные организации и вывести по ним общую сумму.



попробовал сделать вот так, выдает ошибку переменная не определена, вот текст полного запроса

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

mixqn

Во-первых, у вас ошибка в запросе. Части условия под ГДЕ должны соединяться либо И либо ИЛИ, у вас они просто перечислены.
Во-вторых, непонятно что это за конструкция: "НДСЗаписиКнигиПродаж.Покупатель()". Конкретные организации - это конкретные элементы справочника, их и надо указывать. Либо выведите параметры в форму, чтобы интерактивно можно было указать эти параметры, либо на худой конец используйте поиск по коду (см. метод НайтиПоКоду).
ну и в-третьих: есть смысл указывать полный текст сообщения об ошибке, а не просто
Цитата: joystas от 13 июл 2015, 15:06выдает ошибку переменная не определена


BotMan

рекомендуя для начала натаскаться на каком-нибудь простеньком запросе, результат которого вам хорошо известен!
например:

выбрать наименование организации где наименование организации = "Рога и копыта";

и потом уже апгрейдить!

joystas

Цитата: mixqn от 13 июл 2015, 15:12
Во-первых, у вас ошибка в запросе. Части условия под ГДЕ должны соединяться либо И либо ИЛИ, у вас они просто перечислены.
Во-вторых, непонятно что это за конструкция: "НДСЗаписиКнигиПродаж.Покупатель()". Конкретные организации - это конкретные элементы справочника, их и надо указывать. Либо выведите параметры в форму, чтобы интерактивно можно было указать эти параметры, либо на худой конец используйте поиск по коду (см. метод НайтиПоКоду).
ну и в-третьих: есть смысл указывать полный текст сообщения об ошибке, а не просто
Цитата: joystas от 13 июл 2015, 15:06выдает ошибку переменная не определена

Разные варианты пробовал ошибка выходит переменная не определена и найти по коду, и НДСЗаписиКнигиПродаж.Покупатель() и отчет.покупатель и тд. не пойму я этот синтаксис.

Теги:

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

Рейтинг@Mail.ru

Поиск