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

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

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

Оффлайн Ermak1985

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Оффлайн LexaK

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

Оффлайн LexaK

  • *****
  • Сообщений: 1214
  • РЕПУТАЦИЯ: 333
  • КПД: 27%
  • Регистрация: 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
Просмотров: 3103
Последний ответ 15 Июл 2015, 18:24
от MuI_I_Ika
РС "СостояниеОСОрганизаций" в запросе

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

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

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

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

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

Ответов: 3
Просмотров: 1815
Последний ответ 27 Окт 2015, 10:29
от vitasw
Оставить в запросе только те поля, у которых тип значение "Номенклатура"

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

Ответов: 4
Просмотров: 2922
Последний ответ 16 Апр 2012, 02:00
от DirecTwiX

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
83 Сообщений
wise wise
63 Сообщений
Dethmontt Dethmontt
60 Сообщений
MuI_I_Ika MuI_I_Ika
51 Сообщений
alex0402
49 Сообщений
ilyay ilyay
32 Сообщений
Сергей Федоров Сергей Федоров
32 Сообщений
ilnur75
23 Сообщений
Дмитрий Медведков
19 Сообщений
magnifico61
18 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal