Windows: удаление папок по маске
К сожалению нормального решения не из командной строки не нашел. Так что открываем CMD, переходим туда, где лежат папки для удаления и выполняем команду вида:
for /d %a in ("*маска*") do rd /s /q "%a"
К сожалению нормального решения не из командной строки не нашел. Так что открываем CMD, переходим туда, где лежат папки для удаления и выполняем команду вида:
for /d %a in ("*маска*") do rd /s /q "%a"
Аргумент запуска —headless хоть и работает, но многие сайты к сожалению работают в таком «скрытом» режиме не вполне корректно. Интернет говорит, что скорее всего дело в том, что браузер запускается с не понятным размером окна. Однако принудительное выставление размера, в моём случае не помогло. Решением оказалось запуск браузера «за пределами экрана». А именно что-то вроде:
chromeOptions.addArguments("--window-position=4000,0");
Задача: в неком html файле содержится несколько таблиц. Необходимо их распарсить и обработать силами 1С
Решение: воспользуемся построителем DOM. Результатом работы функции будет массив таблиц html документа.
&НаСервере
Функция УбратьНеОбрабатываемыеСимволы(стр)
стр=стрзаменить(стр," ","_");
стр=стрзаменить(стр,"№","N");
стр=стрзаменить(стр,"-","_");
стр=стрзаменить(стр,".","_");
стр=стрзаменить(стр,",","_");
стр=стрзаменить(стр,"/","_");
возврат стр;
конецфункции
&НаСервере
Функция ПреобразоватьФайлHtmlВМассивТаблиц(АдресХранилищаФайла)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилищаФайла);
ИмяВременногоФайлаСпр = ПолучитьИмяВременногоФайла("html");
ДвоичныеДанные.Записать(ИмяВременногоФайлаСпр);
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл(ИмяВременногоФайлаСпр, "UTF-8");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
ЭлементыТаблицы = ДокументHTML.ПолучитьЭлементыПоИмени("table");
МассивТаблиц=Новый Массив();
для каждого таблица из ЭлементыТаблицы цикл
ТЗ=Новый ТаблицаЗначений();
строкиТаблицы=таблица.ПолучитьЭлементыПоИмени("tr");
ПрочитаноСтрок=0;
для каждого строкаТаблицы из строкиТаблицы цикл
колонки=строкаТаблицы.ПолучитьЭлементыПоИмени("td");
ПрочитаноКолонок=0;
для каждого колонка из колонки цикл
если ПрочитаноСтрок=0 тогда
ТЗ.Колонки.Добавить(УбратьНеОбрабатываемыеСимволы(колонка.ТекстовоеСодержимое));
иначе
если ПрочитаноКолонок=0 тогда
нс=ТЗ.Добавить()
конецесли;
нс[ПрочитаноКолонок]=колонка.ТекстовоеСодержимое;
конецесли;
ПрочитаноКолонок=ПрочитаноКолонок+1;
конеццикла;
ПрочитаноСтрок=ПрочитаноСтрок+1;
конеццикла;
МассивТаблиц.Добавить(ТЗ);
конеццикла;
ЧтениеHTML.Закрыть();
конецфункции
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = НСтр("ru = 'Текст'; en = 'Text'")+ "(*.xls)|*.xlsx";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файлы";
Если ДиалогОткрытияФайла.Выбрать() Тогда
МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
ФайлСМС="";
Для Каждого ИмяФайла Из МассивФайлов Цикл
ФайлСМС=ИмяФайла;
конеццикла;
если ФайлСМС<>"" тогда
АдресХранилищаФайла = "";
Состояние("Перемещаю файл на сервер");
ПоместитьФайл(АдресХранилищаФайла, ФайлСМС, , Ложь, ЭтаФорма.УникальныйИдентификатор);
Состояние("Обрабатывается файл "+ФайлСМС);
таблицы=ПреобразоватьФайлHtmlВМассивТаблиц(АдресХранилищаФайла);
иначе
сообщить("Файл не выбран");
конецесли;
конецесли;
КонецПроцедуры
Задача: в зависимости от внешних условий, выводить тот или иной вариант отчёта СКД.
Решение:
Добавим в отчёт два макета СКД:

Далее, в зависимости от нажатой кнопки, формируем разные данные:
&НаСервере
Процедура РукамиНаСервере(ТаблДок,мак)
ОбъектОтчетНаСервере = РеквизитФормыВЗначение("Отчет");
СхемаСКД = ОбъектОтчетНаСервере.ПолучитьМакет(мак);
// с парамертрами по умолчанию
//КомпоновщикНастроекДанныхОтчета = Новый КомпоновщикНастроекКомпоновкиДанных;
//КомпоновщикНастроекДанныхОтчета.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД));
//КомпоновщикНастроекДанныхОтчета.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию);
//КомпоновщикНастроекДанныхОтчета.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
//КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
//Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаСКД, КомпоновщикНастроекДанныхОтчета.ПолучитьНастройки());
// задаем сами
НастройкиСхемыОСКД = СхемаСКД.НастройкиПоУмолчанию;
ПараметрыДанныхОСКД = НастройкиСхемыОСКД.ПараметрыДанных.Элементы;
ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Период");
ЭлементНачалоПериода.Использование = Истина;
ДатаНачала = ФильтрПериод.ДатаНачала;
ДатаОкончания = ФильтрПериод.ДатаОкончания;
ЭлементНачалоПериода.Значение.ДатаНачала = НачалоМесяца(ДатаНачала);
ЭлементНачалоПериода.Значение.ДатаОкончания = КонецМесяца(ДатаОкончания);
ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("СетеваяОрганизация");
ЭлементНачалоПериода.Использование = Истина;
ЭлементНачалоПериода.Значение=отчет.Сетевая;
ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Фильтр");
ЭлементНачалоПериода.Использование = Истина;
ЭлементНачалоПериода.Значение=отчет.Фильтр;
КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаСКД, НастройкиСхемыОСКД);
Фильтр=отчет.Фильтр;
ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиОСКД.Инициализировать(Макет);
ТаблДок.Очистить();
ПроцессорВыводаОСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВыводаОСКД.УстановитьДокумент(ТаблДок);
ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД);
ПроцессорВыводаОСКД.ЗакончитьВывод();
КонецПроцедуры
&НаКлиенте
Процедура ОтчетПоЕМК(Команда)
РукамиНаСервере(Результат,"ОсновнаяСхемаКомпоновкиДанных");
Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
КонецПроцедуры
&НаКлиенте
Процедура ОтчетПоЛС(Команда)
РукамиНаСервере(Результат,"ОсновнаяСхемаКомпоновкиДанных1");
Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
КонецПроцедуры
К сожалению так и не смог докопаться до истины, почему при отображении графика на панели, время сбивается в непонятные значения +3 часа. Хотя и в настройках панели и в настройках отображения везде установлено руками UTC+3. Пришлось решать проблему кардинально, изменив время в запросе:
SELECT CONVERT_TZ(m_data.dt,'+00:00','-03:00') as dt ,CAST(m_data.value as int) as 'Mikrotik' FROM m_data.m_data
WHERE m_data.place=10 and m_data.source=12 and m_data.value_type=1 order by dt limit 500
