1С Чтение CSV
Подвох однако В интернетике полно примеров чтения CSV из 1С, но в большинстве из них при попытке использования ругается на «метод объекта не обнаружен ПолучитьСтроку». Секретик прост до безобразия: все эти статьи копипасты из одного какого-то источника, где команда ПолучитьСтроку написана в смеси английскиму-русскими буквами.
Вот нормальный рабочий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//создаем таблицу, в которую будут записаны данные из файла Таблица = новый ТаблицаЗначений; // чтение сообщить("--читаем файл "+тПуть); ЗагружаемыйФайл = Новый ТекстовыйДокумент; ЗагружаемыйФайл.Прочитать(тПуть); // ИмяФайла - путь к файлу на диске сообщить("--ок"); //Формируем шапку таблицы. Шапка по умолчанию первая строчка сообщить("--получаем шапку"); Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1); сообщить("--ок"); //раскладываем стрoку в массив Разделителем колонок в данном случае является точка с запятой МассивКол = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Шапка, ";"); //генерируем столбцы сообщить("--генерируем столбцы таблицы"); Для Каждого ИмяСтолбца Из МассивКол Цикл ИмяБезПробелов = СтрЗаменить(ИмяСтолбца," ",""); // убираем из имени пробелы Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяСтолбца); КонецЦикла; сообщить("--ок"); сообщить("--загружаем файл в таблицу"); Для НомерСтроки=2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл // получить стрoку с указанным номером и преобразуем её в массив Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки); МассивКол = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка,";"); НоваяСтрочка= Таблица.Добавить(); Для НомерСтолбца= 1 по МассивКол.Количество() Цикл //заполняем строчку значениями ТекущееЗначение = МассивКол[НомерСтолбца-1]; ИмяКолонки = Таблица.Колонки[НомерСтолбца-1].Имя; НоваяСтрочка[ИмяКолонки] = ТекущееЗначение; КонецЦикла; КонецЦикла; сообщить("--ок"); |
P.S. Тем кто изначально разместил такой не рабочий код, посылаю лучи ненависти. Тоже тупил наверное минут 15.
Даунгрейт платформы 1С
Бывает так, что обновил платформу, а что-то пошло не так. И нужно вернуть «всё как было». Засада в этот раз подкралась когда удалил обновлённую платформу: перестал стартовать Агент сервера в службах. При внимательном изучении — оказалось что служба пыталась стартовать новый агент, который уже удален. Гугл подсказал, что проблема решается перерегистрацией службы:
1 |
ragent.exe -instsrvc |
Чтиво за последнее время
Александр Седых. Боги не врут 1-2. Сюжет на маге разделившем волею богов разум в теле девочки. Читабельно. Оценка 3.
Александр Немченко. Контакт. Сюжет: после восстания машин, люди концентрируются на улучшении себя за счет изменения генетического кода. Появляются писоники. И вот один из самых выдающихся писоников вызвал на контакт цивилизацию ящеров с другого конца галактики. Оценка: 4
Сергей Тармашев. Древний 1-7. Сюжет: на земле произошла ядерная война. Оставшиеся в живых изолировались в нескольких бункерах. Один из них — Тринадцатый — обычный военный с необычной дальнейшей судьбой. Оценка: 5
Как завершить скрипты по таймауту
Задача: ряд скриптов иногда «зависают». Есть два варианта — переделать скрипт, чтобы не «зависал». Не всегда возможно. Второй вариант: отслеживать время работы скрипта, и по какому то предельному значению времени выполнения — убивать. Например так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/usr/local/bin/php <?php $timeout=100; // время после которого скрипт считаем зависшим $res=`ps -ax | grep sos | awk '{print $1,$4}'`; $resa=explode("\n",$res); foreach ($resa as $value) { if ($value!=""){ $va=explode(" ",$value); $pid=$va[0]; $timea=explode(":",$va[1]); if (isset($timea[1])==true){ $time=$timea[0]; echo "PID: $pid, TIME: $time\n"; if ($time>$timeout){ `kill $pid`; }; }; }; }; ?> |