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

Автор Тема: Объединения в запросе  (Прочитано 1337 раз)

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

Оффлайн Ermak1985

  • **
  • Сообщений: 61
  • РЕПУТАЦИЯ: -6
  • Регистрация: 2016-02-01
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день! После объединения регистров в запросе при выводе значение удваивается, можете подсказать почему?

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

ЗапросП.УстановитьПараметр("ТипУслуги",ТипУслуги);

ЗапросП.Текст=ТекстЗапросаП;
РезультатП = ЗапросП.Выполнить().Выгрузить();

ПерваяДата=ДатаЗаявки;
ПоследняяДата=РезультатП[0].Период;
РазницаДат=(НачалоДня(ПоследняяДата)-НачалоДня(ПерваяДата))/(60*60*24);

Для Счетчик = 0 По РазницаДат Цикл
ДатаТ=НачалоДня(ДатаЗаявки+86400*Счетчик);

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

ЗапросВремени.УстановитьПараметр("ТипУслуги",ТипУслуги);
ЗапросВремени.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
ЗапросВремени.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));

ЗапросВремени.Текст=ТекстЗапросВремени;
РезультатВремени = ЗапросВремени.Выполнить().Выбрать();

Пока РезультатВремени.Следующий() Цикл
ВремяЗ=РезультатВремени.ВремяЗаявки;
Мастер=РезультатВремени.Мастер;

Фильтр = Новый Структура();
Фильтр.Вставить("ВремяЗаявки",ВремяЗ);
Фильтр.Вставить("ТипУслуги",ТипУслуги);
КоличествоРЗ=РегистрыСведений.ПланировщикРемонтныхЗаявок.ПолучитьПоследнее(КонецДня(ДатаТ),Фильтр).Количество;

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

Запрос.УстановитьПараметр("ТипУсулги",ТипУслуги);
Запрос.УстановитьПараметр("Статус",Перечисления.СтатусЕдиноеОкно.Открыта);
Запрос.УстановитьПараметр("ВремяЗаявки",ВремяЗ);
Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));

Запрос.Текст=ТекстЗапрос;
Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл             
КоличествоЗаявок=Результат.Количество;
КонецЦикла;

Если КоличествоЗаявок=Неопределено или КоличествоЗаявок < КоличествоРЗ или КоличествоРЗ=Неопределено Тогда
Ответ=Вопрос("Ближайшая свободная дата: "+Формат(ДатаТ,"ДФ=dd.MM.yyyy")+" время: "+ВремяЗ+Символы.ПС+"Вы хотите добавить заявку?",РежимДиалогаВопрос.ДаНет,0);
Если Ответ = КодВозвратаДиалога.Да Тогда
ДатаЗаявки=ДатаТ;
ВремяЗаявки=ВремяЗ;
Возврат
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;


Оффлайн LexaK

  • *****
  • Сообщений: 1246
  • РЕПУТАЦИЯ: 344
  • КПД: 28%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
один из самый отвратительных кодов, которые я видел

Запрос1
Цикл1
    Запрос2 //запрос в цикле!!!
    Цикл2
        Запрос3 //запрос УЖЕ В ДВОЙНОМ цикле!!!
        Цикл3
        КонецЦикла3
    КонецЦикла2
КонецЦикла1

Постройте задачу так, что бы собрать нужные данные в одном запросе!

Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн Ermak1985

  • **
  • Сообщений: 61
  • РЕПУТАЦИЯ: -6
  • Регистрация: 2016-02-01
  • Сайт: 
  • Профессия: Ученик 1С
один из самый отвратительных кодов, которые я видел

Запрос1
Цикл1
    Запрос2 //запрос в цикле!!!
    Цикл2
        Запрос3 //запрос УЖЕ В ДВОЙНОМ цикле!!!
        Цикл3
        КонецЦикла3
    КонецЦикла2
КонецЦикла1

Постройте задачу так, что бы собрать нужные данные в одном запросе!
Я думаю один запрос не получится так ка используется в первом Выгрузка а во втором Выборка, или есть другой вариант?

Оффлайн дфтын

  • Могу решить ЛЮБУЮ задачу в 1С и не только.. С вопросами в личку:)
  • *****
  • Сообщений: 2720
  • РЕПУТАЦИЯ: 325
  • КПД: 12%
  • 1С наше все
  • Регистрация: 2014-04-29
    • Skype: Soprov1C
  • Компания: Корпорация зонтиков
  • Профессия: Разработчик 1С
ЛЮБЫЕ выборки можно сделать ОДНИМ запросом. ну Запрос может быть навороченный, но все же
Помог? Нажми - Спасибо :)
skype: Soprov1C

Оффлайн LexaK

  • *****
  • Сообщений: 1246
  • РЕПУТАЦИЯ: 344
  • КПД: 28%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
в данной задаче всего три регистра сведений! 

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

опишите при каких исходных данных, какой результат вам нужно получить.
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн Ermak1985

  • **
  • Сообщений: 61
  • РЕПУТАЦИЯ: -6
  • Регистрация: 2016-02-01
  • Сайт: 
  • Профессия: Ученик 1С
в данной задаче всего три регистра сведений! 

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

опишите при каких исходных данных, какой результат вам нужно получить.
Вот код

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

ЗапросП.УстановитьПараметр("ТипУслуги",ТипУслуги);

ЗапросП.Текст=ТекстЗапросаП;
РезультатП = ЗапросП.Выполнить().Выгрузить();

ПерваяДата=ДатаЗаявки;
ПоследняяДата=РезультатП[0].Период;
РазницаДат=(НачалоДня(ПоследняяДата)-НачалоДня(ПерваяДата))/(60*60*24);

Для Счетчик = 0 По РазницаДат Цикл
ДатаТ=НачалоДня(ДатаЗаявки+86400*Счетчик);

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

ЗапросВремени.УстановитьПараметр("ТипУслуги",ТипУслуги);
ЗапросВремени.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
ЗапросВремени.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));

ЗапросВремени.Текст=ТекстЗапросВремени;
РезультатВремени = ЗапросВремени.Выполнить().Выбрать();

Пока РезультатВремени.Следующий() Цикл
ВремяЗ=РезультатВремени.ВремяЗаявки;
Мастер=РезультатВремени.Мастер;

Фильтр = Новый Структура();
Фильтр.Вставить("ВремяЗаявки",ВремяЗ);
Фильтр.Вставить("ТипУслуги",ТипУслуги);
КоличествоРЗ=РегистрыСведений.ПланировщикРемонтныхЗаявок.ПолучитьПоследнее(КонецДня(ДатаТ),Фильтр).Количество;

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

Запрос.УстановитьПараметр("ТипУсулги",ТипУслуги);
Запрос.УстановитьПараметр("Статус",Перечисления.СтатусЕдиноеОкно.Открыта);
Запрос.УстановитьПараметр("ВремяЗаявки",ВремяЗ);
Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));

Запрос.Текст=ТекстЗапрос;
Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл             
КоличествоЗаявок=Результат.Количество;
КонецЦикла;

Если КоличествоЗаявок=Неопределено или КоличествоЗаявок < КоличествоРЗ или КоличествоРЗ=Неопределено Тогда
Ответ=Вопрос("Ближайшая свободная дата: "+Формат(ДатаТ,"ДФ=dd.MM.yyyy")+" время: "+ВремяЗ+Символы.ПС+"Вы хотите добавить заявку?",РежимДиалогаВопрос.ДаНет,0);
Если Ответ = КодВозвратаДиалога.Да Тогда
ДатаЗаявки=ДатаТ;
ВремяЗаявки=ВремяЗ;
Возврат
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Получаю ближайшую свободную дату и время из регистра ПланировщикРемонтныхЗаявок. В регистре ИсторияЗаявкиЕдиноеОкноГРО и ИсторияЗаявкиЕдиноеОкно записывается история созданных заявок. Не понятно почему выводит два раза одинаковую дату, должен один раз показать ближайшую дату и все. Это началось после того как я объеденил два регистра ИсторияЗаявкиЕдиноеОкноГРО и ИсторияЗаявкиЕдиноеОкно, до этого у меня было две функции и все работало нормально, я могу конечно все вернуть назада но мне очень интересно почему так стало

Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Фиерически!
За такое я б сразу отрубал руки по самую зад***цу.
Двухуровневая вложенность запроса в цикле!!!

Оффлайн Ermak1985

  • **
  • Сообщений: 61
  • РЕПУТАЦИЯ: -6
  • Регистрация: 2016-02-01
  • Сайт: 
  • Профессия: Ученик 1С
Фиерически!
За такое я б сразу отрубал руки по самую зад***цу.
Двухуровневая вложенность запроса в цикле!!!
вы подскажите как правильно надо, чем критиковать

Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Выкладывайте базу/конфу - покажу. Начну показывать на левых примерах - начнете задавать мильйоны вопросов.

Оффлайн Ermak1985

  • **
  • Сообщений: 61
  • РЕПУТАЦИЯ: -6
  • Регистрация: 2016-02-01
  • Сайт: 
  • Профессия: Ученик 1С
Выкладывайте базу/конфу - покажу. Начну показывать на левых примерах - начнете задавать мильйоны вопросов.
я бы с радостью но база очень большая и ест информация не для открытого доступа, пытался сделать отдельно но не получилось очень много привязок. Можете по пробовать подсказать на примере я думаю что пойму.
Спасибо


Теги:
 

Получить номер недели в месяце в запросе [номер недели]

Автор MuI_I_IkaРаздел Алгоритмы

Ответов: 0
Просмотров: 3385
Последний ответ 15 Июл 2015, 18:24
от MuI_I_Ika
РС "СостояниеОСОрганизаций" в запросе

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

Ответов: 1
Просмотров: 973
Последний ответ 07 Янв 2015, 05:33
от ILLUMI
Как исправить при обновлении ИБ: Ошибка в запросе набора данных по причине: {(58, 2)}: Несовместимые типы "ВЫБОР" <<?>>ВЫБОР

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

Ответов: 1
Просмотров: 1724
Последний ответ 01 Янв 2017, 20:27
от Геннадий ОбьГЭС
"Поле не найдено" в запросе, но оно есть.

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

Ответов: 3
Просмотров: 2062
Последний ответ 27 Окт 2015, 10:29
от vitasw
Временная таблица во вложенном запросе+Группировка VS Таблица значений + Свернуть

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

Ответов: 6
Просмотров: 179
Последний ответ 14 Июл 2017, 23:10
от Tsaiger

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

oleg-x
93 Сообщений
alex0402
93 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
64 Сообщений
Golickoff Golickoff
49 Сообщений
ilyay ilyay
44 Сообщений
AIFrame
40 Сообщений
wise wise
31 Сообщений
Амал
30 Сообщений
ab30ru
24 Сообщений
lansy
22 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal