8.х Помогите с запросом пожалуйсто

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем 1С_новый, 26 июн 2011.

  1. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Есть запрос:


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


    По нему же я хочу другим запросом получить ещё одну дату но равную следующей дата + 1

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


    Что в итоге надо получить:


    ----------------------------------------
    | Дата начала| Дата окончания |
    -----------------------------------------
    | Дата1 | Дата2-1 |
    -----------------------------------------
    | Дата2 | Дата3-1 |
    -----------------------------------------
    | Дата3 | Дата3=Последний |
    | | день месяца |
    -----------------------------------------


    В первую колонку заносится дата из первого запроса, а во вторую колонку я вторым запросом высчитываю дату окончания и равна она буде следующей дате -1 и если эта последняя запись то тогда Дата окончания бужет равна последнему дню месяца.


    надо в правую колонку вывести данные из левой колонки только сместить
    её, сделать так чтобы в правую колонку записалась дата из следующей строки левой колонке равной -1, а если последняя запись то тогда правая колонка должна быть равна последнему дню месяца.


    Должно в итоге выглядеть так:

    --------------------------------------
    | Дата начала| Дата окончания |
    --------------------------------------
    | 01.01.2011 | 17.01.2011 |
    -------------------------------------
    | 18.01.2011 | 20.01.2011 |
    -------------------------------------
    | 21.01.2011 | 31.01.2011 |
    -------------------------------------



    Весь код процедуры вместе с этими запросами:


    Код:
    ЗначениеОтпуска=Справочники.КлассификаторИспользованияРабочегоВремени.ОсновнойОтпуск.ЦифровойКод;
    ДатаНач = НачалоМесяца(ПериодРегистрации);
    ДатаКон = КонецМесяца (ПериодРегистрации);
    ТабличнаяЧасть.Очистить();  
    
    
    
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    КадровыеДанныеИНачисленияУправленческий.ФизЛицо КАК ФизЛицо,
    |    КадровыеДанныеИНачисленияУправленческий.Ведомость КАК Ведомость,
    |    КадровыеДанныеИНачисленияУправленческий.Период КАК Период,
    |    КадровыеДанныеИНачисленияУправленческий.ЦФО КАК ЦФО,
    |    КадровыеДанныеИНачисленияУправленческий.СуммаОбщая,
    |    КадровыеДанныеИНачисленияУправленческий.ПричинаИзменения
    |ИЗ
    |    РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческий
    |ГДЕ
    |    КадровыеДанныеИНачисленияУправленческий.Период МЕЖДУ &ДатаНач И &ДатаКон
    |
    |СГРУППИРОВАТЬ ПО
    |    КадровыеДанныеИНачисленияУправленческий.ФизЛицо,
    |    КадровыеДанныеИНачисленияУправленческий.Ведомость,
    |    КадровыеДанныеИНачисленияУправленческий.Период,
    |    КадровыеДанныеИНачисленияУправленческий.ЦФО,
    |    КадровыеДанныеИНачисленияУправленческий.СуммаОбщая,
    |    КадровыеДанныеИНачисленияУправленческий.ПричинаИзменения
    |
    |УПОРЯДОЧИТЬ ПО
    |    Период";
    Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
    Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
    Выборка=Запрос.Выполнить().Выбрать();
    
    
    Пока Выборка.Следующий() Цикл
    Если НЕ Выборка.ПричинаИзменения=Перечисления.ПричиныИзмененияСостояния.Увольнение Тогда
    
    
    Запрос2 = Новый Запрос;
    Запрос2.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |     КадровыеДанныеИНачисленияУправленческий.ФизЛицо КАК ФизЛицо,
    |     КадровыеДанныеИНачисленияУправленческий.Ведомость КАК Ведомость,
    |     КадровыеДанныеИНачисленияУправленческий.Период КАК Период,
    |     КадровыеДанныеИНачисленияУправленческий.ЦФО КАК ЦФО,
    |     ВЫБОР
    |          КОГДА КОНЕЦПЕРИОДА(КадровыеДанныеИНачисленияУправленческий.Период, МЕСЯЦ) = &ДатаКонца
    |               ТОГДА ДОБАВИТЬКДАТЕ(&ДатаКонца, ДЕНЬ, 1)
    |          ИНАЧЕ ДОБАВИТЬКДАТЕ(&ДатаКонца, ДЕНЬ, -1)
    |     КОНЕЦ КАК ДатаКонца
    |ИЗ
    |     РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческий
    |
    |УПОРЯДОЧИТЬ ПО
    |     Период";
    Запрос.УстановитьПараметр("ДатаКонца", Выборка.Период);
    
    Выборка2 = Запрос2.Выполнить().Выбрать();
    Выборка2.Следующий();
    
    Сообщить(Выборка2.Период);
    
    КонецЕсли;
    КонецЦикла;
    
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
  3. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
  4. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Код:
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ 
    |	КадровыеДанныеИНачисленияУправленческий.Период КАК ПериодНачало,
    |	МИНИМУМ(КадровыеДанныеИНачисленияУправленческийКопия.Период) КАК ПериодКонец,
    |	КадровыеДанныеИНачисленияУправленческий.ФизЛицо КАК ФизЛицо
    |ПОМЕСТИТЬ ПредварительнаяВыборка
    |ИЗ
    |	РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческий
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческийКопия
    |		ПО КадровыеДанныеИНачисленияУправленческий.ФизЛицо = КадровыеДанныеИНачисленияУправленческийКопия.ФизЛицо
    |		И КадровыеДанныеИНачисленияУправленческий.Период < КадровыеДанныеИНачисленияУправленческийКопия.Период";
    //Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
    //Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
    Выборка=Запрос.Выполнить().Выбрать(); 
    

    Начинаю делать так, но почему ругается
    Ошибка при вызове метода контекста (Выполнить): {(2, 2)}: Поле не входит в группу "КадровыеДанныеИНачисленияУправленческий.Период"
    <<?>>КадровыеДанныеИНачисленияУправленческий.Период КАК ПериодНачало,

    на самую первую строчку КадровыеДанныеИНачисленияУправленческий.Период КАК ПериодНачало,
  5. o1eg
    Offline

    o1eg Опытный в 1С

    Регистрация:
    25 июн 2006
    Сообщения:
    235
    Симпатии:
    0
    Баллы:
    26
    Поле в группировку нужно добавить.
  6. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Уже добавил )) Сейчас, делаю дальше, там же ниже виртуальная таблица получается

    Код:
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ 
    |	КадровыеДанныеИНачисленияУправленческий.Период КАК ПериодНачало,
    |	МИНИМУМ(КадровыеДанныеИНачисленияУправленческийКопия.Период) КАК ПериодКонец,
    |	КадровыеДанныеИНачисленияУправленческий.ФизЛицо КАК ФизЛицо
    |ПОМЕСТИТЬ ПредварительнаяВыборка
    |ИЗ
    |	РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческий
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческийКопия
    |		ПО КадровыеДанныеИНачисленияУправленческий.ФизЛицо = КадровыеДанныеИНачисленияУправленческийКопия.ФизЛицо
    |		И КадровыеДанныеИНачисленияУправленческий.Период < КадровыеДанныеИНачисленияУправленческийКопия.Период
    |СГРУППИРОВАТЬ ПО
    |	КадровыеДанныеИНачисленияУправленческий.Период,
    |КадровыеДанныеИНачисленияУправленческий.ФизЛицо
    </span>
    
    ////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	ЦеныПоПериодам.ПериодНачало КАК ПериодНачало,";
    |КОНЕЦПЕРИОДА(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ЦеныПоПериодам.ПериодКонец, ДЕНЬ, -1), ДАТАВРЕМЯ(3999, 12, 31)), ДЕНЬ) КАК ПериодКонец
    
    </FONT></FONT></pre>
    Может поможете а то я так буду его сидеть час собирать )))
  7. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Сделал ))

    Код:
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ 
    |	КадровыеДанныеИНачисленияУправленческий.Период КАК ПериодНачало,
    |	МИНИМУМ(КадровыеДанныеИНачисленияУправленческийКопия.Период) КАК ПериодКонец,
    |	КадровыеДанныеИНачисленияУправленческий.ФизЛицо КАК ФизЛицо
    |ПОМЕСТИТЬ ПредварительнаяВыборка
    |ИЗ
    |	РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческий
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадровыеДанныеИНачисленияУправленческий КАК КадровыеДанныеИНачисленияУправленческийКопия
    |		ПО КадровыеДанныеИНачисленияУправленческий.ФизЛицо = КадровыеДанныеИНачисленияУправленческийКопия.ФизЛицо
    |		И КадровыеДанныеИНачисленияУправленческий.Период < КадровыеДанныеИНачисленияУправленческийКопия.Период
    |СГРУППИРОВАТЬ ПО
    |	КадровыеДанныеИНачисленияУправленческий.Период,
    |КадровыеДанныеИНачисленияУправленческий.ФизЛицо;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |
    |ВЫБРАТЬ
    |	ДатаПоПериодам.ПериодНачало КАК ПериодНачало,
    |КОНЕЦПЕРИОДА(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ДатаПоПериодам.ПериодКонец, ДЕНЬ, -1), ДАТАВРЕМЯ(3999, 12, 31)), ДЕНЬ) КАК ПериодКонец,
    |ДатаПоПериодам.ФизЛицо КАК ФизЛицо
    |ИЗ
    |	ПредварительнаяВыборка КАК ДатаПоПериодам
    |  
    |УПОРЯДОЧИТЬ ПО
    |	ФизЛицо,
    |	ПериодНачало
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    

    А как мне теперь отсюда получить первоначальную дату исходную и та которую я тут расчитал?
  8. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Всё увидел, сорри )) А если будет последняя запись в запросе надо получить последний день месяца в ПериодеКонца, как это в запросе сделать?
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    А какого месяца? Конечного то месяца нет, последняя дата "на конец времен". Или имеется ввиду последний день месяца от даты НачалоПериода?
  10. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1

    Так никто и не ответит?
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Вы вопрос видели?
    Последний день КАКОГО месяца?
  12. TopicStarter Overlay
    1С_новый
    Offline

    1С_новый

    Регистрация:
    21 июн 2011
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Последний день месяца в периода этих переменных

    ДатаНач = НачалоМесяца(ПериодРегистрации);
    ДатаКон = КонецМесяца (ПериодРегистрации);

    Только это я уже тоже сделал.

Поделиться этой страницей