Некоторые картинки не загружаются из РФ и РК, используйте VPN.

пятница, 17 марта 2023 г.

1СЗаготовока запрос свободная секунда (список секунд за дату)

Была мысль сделать проверку времени документа и подставлять свободные даты. В ходе размышлений, пришел к выводу что мне это не надо и забросил, а вот код выдающий список секунд за дату я решил не выбрасывать. А потом пришел к выводу что надо и переделал

Функция ПолучитьДатуДокумента()
  Если НЕ ЭтоНовый() Тогда
    ШестьдесятСекундТЗ=Новый ТаблицаЗначений;
    ШестьдесятСекундТЗ.Колонки.Добавить("Секунд",Новый ОписаниеТипов("Число"));
    Секунд=0;
    Пока Секунд<=59 цикл
      ШестьдесятСекундТЗ.Добавить().Секунд=Секунд;
      Секунд=Секунд+1;  
    КонецЦикла;
      

    Запрос = Новый Запрос;
    Запрос.Текст = 
      "ВЫБРАТЬ
      |  секунды.секунд КАК секунд
      |ПОМЕСТИТЬ ШестьдесятСекунд
      |ИЗ
      |  &ШестьдесятСекунд КАК секунды
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |  ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ), СЕКУНДА, часов.часы * минут.минуты * секунд.секунды) КАК СекундаДня
      |ПОМЕСТИТЬ ДатаПоСекундам
      |ИЗ
      |  (ВЫБРАТЬ
      |    секунды.секунд КАК часы
      |  ИЗ
      |    ШестьдесятСекунд КАК секунды
      |  ГДЕ
      |    секунды.секунд <= 23) КАК часов,
      |  (ВЫБРАТЬ
      |    секунды.секунд КАК минуты
      |  ИЗ
      |    ШестьдесятСекунд КАК секунды) КАК минут,
      |  (ВЫБРАТЬ
      |    секунды.секунд КАК секунды
      |  ИЗ
      |    ШестьдесятСекунд КАК секунды) КАК секунд
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |  ВЫБОР
      |    КОГДА КоличествоДатТекущегоДокумента.Количество = 0
      |      ТОГДА &Дата
      |    ИНАЧЕ МИНИМУМ(ДатаПоСекундам.СекундаДня)
      |  КОНЕЦ КАК НоваяДата
      |ИЗ
      |  (ВЫБРАТЬ
      |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ACG_ЗаказНаПроизводство.Дата) КАК Количество
      |  ИЗ
      |    Документ.ACG_ЗаказНаПроизводство КАК ACG_ЗаказНаПроизводство
      |  ГДЕ
      |    ACG_ЗаказНаПроизводство.Дата = &Дата
      |    И ACG_ЗаказНаПроизводство.Ссылка <> &Ссылка) КАК КоличествоДатТекущегоДокумента,
      |  ДатаПоСекундам КАК ДатаПоСекундам
      |ГДЕ
      |  НЕ ДатаПоСекундам.СекундаДня В
      |        (ВЫБРАТЬ РАЗЛИЧНЫЕ
      |          ACG_ЗаказНаПроизводство.Дата КАК Дата
      |        ИЗ
      |          Документ.ACG_ЗаказНаПроизводство КАК ACG_ЗаказНаПроизводство
      |        ГДЕ
      |          ACG_ЗаказНаПроизводство.Дата >= НАЧАЛОПЕРИОДА(&дата, ДЕНЬ)
      |          И ACG_ЗаказНаПроизводство.Дата <= КОНЕЦПЕРИОДА(&дата, ДЕНЬ))
      |
      |СГРУППИРОВАТЬ ПО
      |  КоличествоДатТекущегоДокумента.Количество";

    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("ШестьдесятСекунд",ШестьдесятСекундТЗ);
        Запрос.УстановитьПараметр("Ссылка",Ссылка);

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

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
      Если ВыборкаДетальныеЗаписи.Количество()=0 Тогда
      НоваяДата=Дата;
      Сообщить("Необходимо изменить время/дату документа, программно не получается - лапки");
    Иначе
      НоваяДата=РезультатЗапроса[0].НоваяДата;    
    КонецЕсли;
  ИНаче
    НоваяДата=ТекущаяДата();
  КонецЕсли;
  Возврат(НоваяДата);
КонецФункции

Банально и просто

Комментариев нет:

Отправить комментарий