Жунтов Денис

1
Рейтинг

zhuntovda
Денис Жунтов



  •   Регистрация: 26.10.2016 (7 лет назад)

  •   Был(а) на сайте: вчера в 14:30

Друзья
  • Виталий Онянов
  • Дмитрий Малышев
Подписчики 6

Рейтинг 1


Комментарии

НовостиФирма «1С» открывает новую компанию с бывшим менеджментом российского офиса SAP#13 22.08.22 15:16
(11) там решения очень стандартные и простые (шаблонные), исключающие полноценное развитие инфраструктуры под свои процессы (внутренними силами компании).
DevПреобразовать Строку в Дату#28 10.08.22 12:54
(26)
Увидел, решил допилить функцию, что бы можно было без формата распознавать дату и время. В данном случае воспринимается формат yyyymmdd, yyyy#mm#dd, dd#mm#yyyy, а так же время в любом формате с разделителями (можно допилить под другие варианты если очень нужно). Зачем? Есть ситуации, когда формат не указывается и нужно более менее стандартные строки преобразовать) Например: сервер имеет формат английский даты, а клиент русский или разные сервера (+ универсальность)

Код
Функция   СтрокаВДатуВремя(ДатаСтрока, ФорматДаты = Неопределено, ПриОшибкиБезФормата = Ложь) Экспорт
   
   Если НЕ ЗначениеЗаполнено(ДатаСтрока) Тогда
      Возврат Дата(1,1,1);
   КонецЕсли;
   
   Если НЕ ЗначениеЗаполнено(ФорматДаты) тогда
   
      СимволыЦифры = "0123456789";
      ФлагПоловиныСуток = "";
      НомГода = 0;
      
      МассивЧастей = Новый Массив;
      СтрокаЧасти = "";
      Для Сч = 1 По СтрДлина(ДатаСтрока) Цикл
         
         Сим = Прав(Лев(ДатаСтрока, Сч), 1);
         
         Если СтрНайти(СимволыЦифры, Сим) <> 0 тогда
            СтрокаЧасти = "" + СтрокаЧасти + Сим;
         Иначе
            
            Если ЗначениеЗаполнено(СтрокаЧасти) тогда
               МассивЧастей.Добавить(Число(СтрокаЧасти));
               Если СтрДлина(СтрокаЧасти) И МассивЧастей.Количество() < 4 тогда
                  НомГода = МассивЧастей.Количество();   
               КонецЕсли;
               СтрокаЧасти = "";
            КонецЕсли;
            
            Если Сим = "P" ИЛИ Сим = "A" тогда
               Если СтрДлина(ДатаСтрока) >= Сч + 1 тогда
                  СлСим = Прав(Лев(ДатаСтрока, Сч + 1), 1);
                  Если СлСим = "M" тогда
                     ФлагПоловиныСуток = "" + Сим + СлСим;   
                  КонецЕсли;
               КонецЕсли;
            КонецЕсли;
            
         КонецЕсли;
         
      КонецЦикла;
      
      Если ЗначениеЗаполнено(СтрокаЧасти) тогда
         МассивЧастей.Добавить(Число(СтрокаЧасти));
         Если СтрДлина(СтрокаЧасти) И МассивЧастей.Количество() < 4 тогда
            НомГода = МассивЧастей.Количество();   
         КонецЕсли;
      КонецЕсли;
      
      Если МассивЧастей.Количество() > 6 тогда
         ВызватьИсключение "Ошибка преобразования строки """ + ДатаСтрока + """ в дату: попробуйте указать формат даты!";   
      ИначеЕсли МассивЧастей.Количество() = 1 тогда
         Попытка 
            Возврат Дата(МассивЧастей[0]);   
         Исключение
            ВызватьИсключение "Ошибка преобразования строки """ + ДатаСтрока + """ в дату: некорректно передана дата без разделителей, попробуйте указать формат даты!";   
         КонецПопытки;
      КонецЕсли;
      
      Годы    = 1;
      Месяцы    = 1;
      Дни    = 1;
      Часы    = 0;
      Минуты    = 0;
      Секунды = 0;
      
      Если НомГода = 1 тогда
         Годы   = МассивЧастей[0];
         Месяцы = МассивЧастей[1];
         Если НЕ МассивЧастей.Количество() = 2 тогда
            Дни  = МассивЧастей[2];
         КонецЕсли;
         Если НЕ МассивЧастей.Количество() = 3 тогда
            Часы  = МассивЧастей[3];
         КонецЕсли;
         Если НЕ МассивЧастей.Количество() = 4 тогда
            Минуты  = МассивЧастей[4];
         КонецЕсли;
         Если НЕ МассивЧастей.Количество() = 5 тогда
            Секунды  = МассивЧастей[5];
         КонецЕсли;   
      ИначеЕсли НомГода = 3 тогда
         Годы   = МассивЧастей[2];
         Месяцы = МассивЧастей[1];
         Дни  = МассивЧастей[0];
         Если НЕ МассивЧастей.Количество() = 3 тогда
            Часы  = МассивЧастей[3];
         КонецЕсли;
         Если НЕ МассивЧастей.Количество() = 4 тогда
            Минуты  = МассивЧастей[4];
         КонецЕсли;
         Если НЕ МассивЧастей.Количество() = 5 тогда
            Секунды  = МассивЧастей[5];
         КонецЕсли;      
      Иначе
         ВызватьИсключение "Ошибка преобразования строки """ + ДатаСтрока + """ в дату: не стандартный формат года, попробуйте указать формат даты!";   
      КонецЕсли;
      
      Если ЗначениеЗаполнено(ФлагПоловиныСуток) тогда
         Если ФлагПоловиныСуток = "AM" тогда
            Часы = ?(Часы = 12, 0, Часы);      
         Иначе
            Часы = ?(Часы = 12, Часы, Часы + 12);   
         КонецЕсли;
      КонецЕсли;
      
      Попытка
         Возврат Дата(Годы, Месяцы, Дни, Часы, Минуты, Секунды);   
      Исключение
         ВызватьИсключение "Ошибка преобразования строки """ + ДатаСтрока + """ в дату: попробуйте указать формат даты!";   
      КонецПопытки;
   
   Иначе
      
        Попытка
            Годы = СтрНайти(ФорматДаты, "yyyy");
            Годы = ?(Годы = 0 , 0, Число(Сред(ДатаСтрока, Годы, 4)));
            Если Годы = 0 Тогда
                Годы = СтрНайти(ФорматДаты, "yy");
                Годы = ?(Годы = 0 , 0, Число("20" + Сред(ДатаСтрока, Годы, 2)));
            КонецЕсли;
            Месяцы     = СтрНайти(ФорматДаты, "mm");
            Дни     = СтрНайти(ФорматДаты, "dd");
            Часы     = СтрНайти(ФорматДаты, "hh");
            Минуты     = СтрНайти(ФорматДаты, "nn");
            Секунды = СтрНайти(ФорматДаты, "ss");
            
            Возврат Дата(
                ?(Годы         = 0, 1, Годы),
                ?(Месяцы     = 0, 1, Число(Сред(ДатаСтрока, Месяцы, 2))),
                ?(Дни         = 0, 1, Число(Сред(ДатаСтрока, Дни, 2))),
                ?(Часы         = 0, 0, Число(Сред(ДатаСтрока, Часы, 2))),
                ?(Минуты     = 0, 0, Число(Сред(ДатаСтрока, Минуты, 2))),
                ?(Секунды     = 0, 0, Число(Сред(ДатаСтрока, Секунды, 2)))
            )
        Исключение
         Если ПриОшибкиБезФормата тогда
            Возврат СтрокаВДатуВремя(ДатаСтрока);   
         Иначе
            ВызватьИсключение "Ошибка преобразования строки """ + ДатаСтрока + """ в дату по формату """ + ФорматДаты + """";
         КонецЕсли;
        КонецПопытки;
    
   КонецЕсли;
   
   Возврат Неопределено;
   
КонецФункции
ПубликацииКонфигурирование новых регламентных заданий с помощью расширения#12 13.04.22 10:29
(3) Ну это еще больший костыль. Вязать расширение с внешней обработкой. Если у Вас масштабируемое решение на 10 и более баз.
ПубликацииКонфигурирование новых регламентных заданий с помощью расширения#11 13.04.22 10:27
Решил аналогично задачу. Думал статью написать, да поздно =) Таким образом можно паразитировать на любом регламентном задание, три требования: 1. наличие параметров (что бы отловить свои регламенты) 2. Желательно, что бы регламент имел постоянную основу в БСП (для простоты поддержки) 3. регламент должен быть не предопределенным (желательно, что бы не было мешанины)

Костыль, но хорош черт возьми)
НовостиMicrosoft предложила установить финальную версию Windows 11 на неделю раньше#6 08.10.21 15:19
(5) Я не спорю, что это коммерция и даже не всегда новое быстрее старого. Про уровень assemler вообще тема отдельная, его действительно стараются особо не менять. Конфа вполне достойная!
НовостиMicrosoft предложила установить финальную версию Windows 11 на неделю раньше#4 08.10.21 7:10
(3)
Цитата
i7 4770
этим дровам почти 9 лет, то что intel до сих пор использует марку i7, это не значит, что они все должны быть совместимы с W11.
Личная эффективностьВангуем проблемы клиента по одной задаче#35 16.09.21 15:50
(32) ну и поддерживать придется самим =) Путь самурая!
DevАнтипаттерны программирования в 1С#41 19.07.21 19:54
(21) Абсолютно согласен! Хотел подобное написать!
DevСоздание подписки на событие в расширении.#10 08.07.21 9:07
(6) В ERP общую процедуру для всех справочников. Хе хе...
О жизниЖелтый челн. Часть 2. Что делать во франче?#100 07.07.21 15:15
(98) В точку, как заточку в почку.