Время на прочтение

Продукты HFLabs в промышленных объемах обрабатывают данные: адреса, ФИО, реквизиты компаний и еще вагон всего. Естественно, тестировщики ежедневно с этими данными имеют дело: обновляют тест-кейсы, изучают результаты очистки. Часто заказчики дают «живую» базу, чтобы тестировщик настроил сервис под нее.
Первое, чему мы учим новых QA — сохранять данные в первозданном виде. Все по заветам: «Не навреди». В статье я расскажу, как аккуратно работать с CSV-файлами в Excel и Open Office. Советы помогут ничего не испортить, сохранить информацию после редактирования и в целом чувствовать себя увереннее.
Материал базовый, профессионалы совершенно точно заскучают.
Что такое CSV-файлы
Формат CSV используют, чтобы хранить таблицы в текстовых файлах. Данные очень часто упаковывают именно в таблицы, поэтому CSV-файлы очень популярны.

CSV-файл состоит из строк с данными и разделителей, которые обозначают границы столбцов
CSV расшифровывается как comma-separated values — «значения, разделенные запятыми». Но пусть название вас не обманет: разделителями столбцов в CSV-файле могут служить и точки с запятой, и знаки табуляции. Это все равно будет CSV-файл.
У CSV куча плюсов перед тем же форматом Excel: текстовые файлы просты как пуговица, открываются быстро, читаются на любом устройстве и в любой среде без дополнительных инструментов.
Из-за своих преимуществ CSV — сверхпопулярный формат обмена данными, хотя ему уже лет 40. CSV используют прикладные промышленные программы, в него выгружают данные из баз.
Одна беда — текстового редактора для работы с CSV мало. Еще ничего, если таблица простая: в первом поле ID одной длины, во втором дата одного формата, а в третьем какой-нибудь адрес. Но когда поля разной длины и их больше трех, начинаются мучения.

Следить за разделителями и столбцами — глаза сломаешь
Еще хуже с анализом данных — попробуй «Блокнотом» хотя бы сложить все числа в столбце. Я уж не говорю о красивых графиках.
Поэтому CSV-файлы анализируют и редактируют в Excel и аналогах: Open Office, LibreOffice и прочих.
Ветеранам, которые все же дочитали: ребята, мы знаем об анализе непосредственно в БД c помощью SQL, знаем о Tableau и Talend Open Studio. Это статья для начинающих, а на базовом уровне и небольшом объеме данных Excel с аналогами хватает.
Как Excel портит данные
Все бы ничего, но Excel, едва открыв CSV-файл, начинает свои лукавые выкрутасы. Он без спроса меняет данные так, что те приходят в негодность. Причем делает это совершенно незаметно. Из-за этого в свое время мы схватили ворох проблем.
Большинство казусов связано с тем, что программа без спроса преобразует строки с набором цифр в числа.
Округляет. Например, в исходной ячейке два телефона хранятся через запятую без пробелов: «5235834,5235835». Что сделает Excel? Лихо превратит номера́ в одно число и округлит до двух цифр после запятой: «5235834,52». Так мы потеряем второй телефон.
Приводит к экспоненциальной форме. Excel заботливо преобразует «123456789012345» в число «1,2E+15». Исходное значение потеряем напрочь.
Проблема актуальна для длинных, символов по пятнадцать, цифровых строк. Например, КЛАДР-кодов (это такой государственный идентификатор адресного объекта: го́рода, у́лицы, до́ма).
Удаляет лидирующие плюсы. Excel считает, что плюс в начале строки с цифрами — совершенно лишний символ. Мол, и так ясно, что число положительное, коль перед ним не стоит минус. Поэтому лидирующий плюс в номере «+74955235834» будет отброшен за ненадобностью — получится «74955235834». (В реальности номер пострадает еще сильнее, но для наглядности обойдусь плюсом).
Потеря плюса критична, например, если данные пойдут в стороннюю систему, а та при импорте жестко проверяет формат.
Разбивает по три цифры. Цифровую строку длиннее трех символов Excel, добрая душа, аккуратно разберет. Например, «8 495 5235834» превратит в «84 955 235 834».
Форматирование важно как минимум для телефонных номеров: пробелы отделяют коды страны и города от остального номера и друг от друга. Excel запросто нарушает правильное членение телефона.
Удаляет лидирующие нули. Строку «00523446» Excel превратит в «523446».
А в ИНН, например, первые две цифры — это код региона. Для Республики Алтай он начинается с нуля — «04». Без нуля смысл номера исказится, а проверку формата ИНН вообще не пройдет.
Меняет даты под локальные настройки. Excel с удовольствием исправит номер дома «1/2» на «01.фев». Потому что Windows подсказал, что в таком виде вам удобнее считывать даты.
Побеждаем порчу данных правильным импортом
Если серьезно, в бедах виноват не Excel целиком, а неочевидный способ импорта данных в программу.
По умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий. Из-за него программа распознает цифровые строки как числа. Такой порядок можно победить, используя встроенный инструмент импорта.
Выбираю CSV-файл с данными, открывается диалог. В диалоге кликаю на тип файла Delimited (с разделителями). Кодировка — та, что в файле, обычно определяется автоматом. Если первая строка файла — шапка, отмечаю «My Data Has Headers».
На третьем шаге выбираю формат полей, ради него все и затевалось. Для всех столбцов выставляю тип «Text». Кстати, если кликнуть на первую колонку, зажать шифт и кликнуть на последнюю, выделятся сразу все столбцы. Удобно.
Дальше Excel спросит, куда вставлять данные из CSV — можно просто нажать «OK», и данные появятся в открытом листе.
Перед импортом придется создать в Excel новый workbook
Но! Если я планирую добавлять данные в CSV через Excel, придется сделать еще кое-что.
После импорта нужно принудительно привести все-все ячейки на листе к формату «Text». Иначе новые поля приобретут все тот же тип «General».
- Нажимаю два раза Ctrl+A, Excel выбирает все ячейки на листе;
- кликаю правой кнопкой мыши;
- выбираю в контекстном меню «Format Cells»;
- в открывшемся диалоге выбираю слева тип данных «Text».
Чтобы выделить все ячейки, нужно нажать Ctrl+A два раза. Именно два, это не шутка, попробуйте
После этого, если повезет, Excel оставит исходные данные в покое. Но это не самая твердая гарантия, поэтому мы после сохранения обязательно проверяем файл через текстовый просмотрщик.
Open Office Calc
Для работы с CSV-файлами я использую именно Calc. Он не то чтобы совсем не считает цифровые данные строками, но хотя бы не применяет к ним переформатирование в соответствии с региональными настройками Windows. Да и импорт попроще.
Конечно, понадобится пакет Open Office (OO). При установке он предложит переназначить на себя файлы MS Office. Не рекомендую: хоть OO достаточно функционален, он не до конца понимает хитрое микрософтовское форматирование документов.
А вот назначить OO программой по умолчанию для CSV-файлов — вполне разумно. Сделать это можно после установки пакета.
Итак, запускаем импорт данных из CSV. После двойного клика на файле Open Office показывает диалог.

Заметьте, в OO не нужно создавать новый воркбук и принудительно запускать импорт, все само
- Кодировка — как в файле.
- «Разделитель» — точка с запятой. Естественно, если в файле разделителем выступает именно она.
- «Разделитель текста» — пустой (все то же, что в Excel).
- В разделе «Поля» кликаю в левый-верхний квадрат таблицы, подсвечиваются все колонки. Указываю тип «Текст».
Штука, которая испортила немало крови: если по ошибке выбрать несколько разделителей полей или не тот разделитесь текста, файл может правильно открыться, но неправильно сохраниться.
Помимо Calc у нас в HFLabs популярен libreOffice, особенно под «Линуксом». И то, и другое для CSV применяют активнее, чем Excel.
Проблемы при сохранении из Calc в. xlsx
Если сохраняете данные из Calc в экселевский формат .xlsx, имейте в виду — OO порой необъяснимо и масштабно теряет данные.

Белая пустошь, раскинувшаяся посередине, в оригинальном CSV-файле богато заполнена данными
Поэтому после сохранения я еще раз открываю файл и убеждаюсь, что данные на месте.
Если что-то потерялись, лечение — пересохранить из CSV в .xlsx. Или, если установлен Windows, импортнуть из CSV в Excel и сохранить оттуда.
После пересохранения обязательно еще раз проверяю, что все данные на месте и нет лишних пустых строк.
Если интересно работать с данными, посмотрите на наши вакансии. HFLabs почти всегда нужны аналитики, тестировщики, инженеры по внедрению, разработчики. Данными обеспечим так, что мало не покажется 🙂

Не могу сказать, что я разделял радость, как семья с главной страницы сайта.
С чего всё началось
На дворе был конец августа 2018 года. Предприятие, в котором я работал, переживало не лучшие времена, инвестор с Москвы выхода из этой ситуации не находил и я принял решение покинуть компанию. К сожалению, в родном селе не огромный выбор рабочих мест, но так удачно совпало, что в отделе образования администрации района освободилось место главного специалиста по информационным технологиям. Собеседование, сбор документов и “с понедельника можно работать”. Когда я узнал причину, почему уволился другой специалист, то не принял всерьез данный факт. И зря. На меня свалился груз под названием ЕГИССО.
Что же это такое?
ЕГИССО является информационной системой, позволяющей получать гражданам и органам власти актуальную информацию о мерах социальной поддержки, оказываемых из бюджетов всех уровней.
На примере бывшего отдела – ваш ребенок пошёл в садик и вы хотите получить выплату компенсации части родительской платы за содержание ребенка в детском саду. Пришли в отдел, оплатили, сделали заявление на начисление компенсации: сумму компенсации, личные данные ребенка и родителя, получившего компенсацию, вы можете посмотреть у себя в личном кабинете на сайте. Так же различные компенсации за детское питание в школах, путёвки в пришкольные летние лагеря, учет выплат для сирот и так далее.
Вот пример компенсации моего больничного после второй прививки от Covid.
Делалось это государством с целью контролировать, куда уходит бюджет и кому. Даже есть официальный документ с планом мероприятий по созданию – http://www.consultant.ru/document/cons_doc_LAW_223328/ Сервис в целом полезный (хотя судя по отзывам в интернете личный кабинет часто бывает недоступен), но каким путем данные попадают на сайт – это реальный ад.
Горькая реальность
Настал тот момент, когда пришлось прикоснуться к этому сервису. В отделе “так исторически сложилось”, что этим занимался предыдущий специалист, поэтому ты будешь продолжать это дело. На все мои возражения, что этого нет в должностной инструкции (доступ к сайту я настрою и ПО установлю нужное, но наполнять информацией базу – не ко мне), на доступ к персональным данным не обучен и в целом вы не по адресу, был только один ответ – нужно кому-то делать.
До этого проект ЕГИССО уже начал тестироваться в нескольких областях (ссылки на новости: раз, два, три, четыре). Я об этом сервисе вообще не имел представления, пока не начал работать на данной работе (поэтому поводу опрос ниже).
В нашей (Амурской) области тоже начиналось активное внедрение и к концу года надо было показать “активность”. Мы должны были предоставить в областное отделение ПФР цифры “уникальных пользователей”, которых мы добавим в данную систему. Сам себе задачу поставь, выполни и если данную цифру не выполнишь, то глава района (и дальше по наклонной) получит по шапке за неисполнение.
Ну что ж, сажусь считать, сколько у нас школ, сколько детей в них обучается с 1 по 4 класс (питание детей), к этим цифрам прибавляю детсадовцев, сирот – вот и получил цифру. Почему должен считать я, а не бухгалтеры – другой вопрос. Окей, посылаем письмо с данными и начинаем эти данные собирать.
А со сбором первоначальных данных две проблемы.
Первая проблема – законность. Из-за того, что данные нужны прямо и сейчас, то ни о каких бумажках с целью “разрешаю использовать персональные данные” никем не подписывались и не заполнялись. На вебинарах (я был на двух), которые проводились правительством области (соц защита) совместно с представителями ПФР, кроме “угроз”, что за невыполнение плана всем будем плохо, был и ответ на данный вопрос в стиле – “ну сейчас так, потом все уладим”. Хотел задать вопрос на этих вебинарах, почему IT специалист должен делать эту работу, но не дали.
Вторая проблема – люди. Вот серьезно. В нашем селе находится военная часть, где очень много военных, которые водят своих детей в садики. Месяц они ребенка водили, потом их переводят в другую часть и ребенок не ходит, но компенсацию он же получил за тот месяц. Где взять данные СНИЛС отца или матери – да нигде уже. Либо сначала компенсацию получала мать, данные которой у нас есть, а после стал получать отец, который номер СНИЛС не дал. Данные по компенсациям я забивал с мая 2018 года, поэтому таких “ходунов” накапливалось человек по 20 на район и что с ними нужно было делать – не понятно. “Ищите, ищите и ещё раз ищите”.
Немного про взаимоотношения с ПФР. Я, как человек, пришедший со стороны, в душе не знаю, что/куда/зачем и как в этой АИС делать. Пытаюсь им звонить, чтобы уточнить информацию и по сути каждый диалог начинался с того, что “предыдущий специалист, который начинал дело уволился” и объяснения, что оно мне всё это вообще не сдалось, никого не интересовали. Но что знали, то подсказывали и на этом спасибо – по шапке получить никто не хотел, да и пошла по районам текучка кадров из-за этой темы. Это я привел только пример с образованием, а ещё есть медицина, ветераны и т.д.
Техническая часть
А теперь перейдем к тому, к чему возникло ещё больше вопросов – как со всем этим работать.
Примерный план работы заключался в следующем:
- бухгалтер из 1С отправляет на печать сводку по каждой школе/садику с перечнем детей и родителей, получившим компенсацию
- эти данные через сайт заносятся, подписываются электронной подписью и забываются.
Проще некуда кажется с первого взгляда. Начнем с настройки рабочего места.
Так как это государственная АИС, то понятное дело работать оно будет только через что? Правильно – Internet Explorer. И не абы какой, а именно 11 версии. Из-за того, что на Windows 8 (не 8.1) рабочего ноутбука 11ая версия ну никак не ставилась, пришлось на VHD диск поставить Windows 8.1 и делать настройки там (а дома я развернул в Hyper-V на базе Windows 7 виртуальную машину и заливал данные на сайт уже через неё).
Так же нам нужно будет установить:
- КриптоПро CSP 4.0.9944.
- Crypto+DE 4.1.126. Эта программа у меня не работала корректно, поэтому готовые xml файлы я подписывал другой программой.
- Плагин Крипто Про ЭЦП Browser-plugin и Плагин для авторизации через портал Госуслуги IFCPlugin-x64.
- Корневые сертификаты ЕГИССО.
Заходим в качестве поставщика информации опять же под личным аккаунтом Госуслуг, который предварительно добавили в группу ответственных (без этого дальше на сайт просто не пустит). Если IE настроили верно, все сертификаты установили куда надо, то нам откроется кабинет поставщика информации.

Минимализм во всей красе (фото 2018 года)
Давно на самом сайте ЕГИССО и ПФР были хорошие инструкции по описанию этого сайта, но они куда-то делись и я нашел единственную ссылку, где всё это добро сохранилось. Я всё прочитал, но всё равно пришлось идти к бухгалтерам – что такое КБК, как оно формируется, что за цифры от меня хотят – вопросов было больше, чем ответов.

Картинка из руководства пользователя
Итак, у нас уже есть доступ к сайту, добавлены локальные МСЗ с их КБК и прочими непонятными мне числами. И мы уже готовы добавлять пользователей. Технически да, но кто в здравом уме будет добавлять по одному ребенку через сайт, если у меня их тысячи и нужно делать это не за один месяц. Если бы мне выделили только время под это дело, то так и можно было делать.
Какое видение было у правительства насчёт. этого метода заполнения сайта. Приходит условный Вася Петров производить оплату за месяц хождения в детский садик сына Сережи. Он берет деньги, свой СНИЛС и СНИЛС ребенка, платит в кассу, при нем же вычисляют компенсацию, эту компенсацию при нем же вбивают на сайте, выгружают, подписывают ЭП, загружают уже подписанные файлы обратно, дают на руки деньги – он радостный забирает их и идёт счастливый домой. Приходит домой, заходит на сайт и видит в личном кабинете, что уже рассчитали компенсацию. Идеально. В мечтах конечно же.

И так каждого получателя.
Когда тебе надо добавить максимум 15 ветеранов каждый месяц с их пенсиями – это нормально. Но когда у тебя тысячи детей/больных и других – это просто колоссальная трата времени работников. Но слава богу были альтернативы для занесения фактов МСЗ не через сайт.
Ассистент ЕГИССО
На моей работе использовали именно её, потому что ПФР по региону всем выдавало эту программу. Из плюсов – теперь пользователи и МСЗ хранятся централизованно, но каждый раз щелкать ребенка/родителя, писать сумму и вообще делать много щелчков мышью – не мой вариант да и от сайта почти толком не отличается. Но разработчикам приложениям выражаю благодарность – упростили своим приложением жизнь многим людям и поддерживали очень долго.
Почему выходило несколько версий программы. Правильно – потому что ПФР любил поменять формат XSD для файлов, из-за чего рушил логику генерирования и приходилось выпускать новый билд программы. А тем временем мои 1000 детей и взрослых ждали, когда их добавят на сайт.
Конвертор CSV
Я стал искать решение, как бы мне дело автоматизировать. В целом, можно было разобраться в XSD схемах, набросать какое-нибудь приложение, но когда это всё делать, ведь нужно показывать цифры прироста, да и другие дела тоже есть.
Пока время терпело потихоньку работал через Ассистент, но там, где детей было немного – в районе 30. Делал формально один садик, забивал “шаблончик” в программу, менял даты и суммы, выгружал полученные файлы из программы, подписывал их и выкладывал на сайт. Динамика шла, но до заветной цифры ещё было далеко.
И тут я наткнулся на чудесный форум (выражаю всем заинтересованным лицам моё уважение – ваш энтузиазм помог многим и мне в том числе) – Партизанский форум про ЕГИССО. В одной из тем я нашел то, что и искал. Опять видимо разработчики из уже другой области сделали конвертор из csv файла в xml нужного формата (ссылка на свежий пост).

Теперь я мог создавать шаблоны для каждой школы/садика, где основной набор в целом плюс/минус один и тот же, менять только даты выдачи компенсаций, их сумму – и всё это делая в Excel. Я сделал одну небольшую школу – это было очень просто, потому что стал просить приносить бухгалтеров выгрузки из 1С не в виде напечатанных листков, а в виде файлов excel. Сформировал небольшие excel’ные списки детей/родителей по каждой школе, чтобы методом ctrl+c/ctrl+v заполнять нужный шаблон. Да, приходилось ещё работать руками, но это было намного быстрее, чем тыкать каждый раз мышкой в программе или вносить каждую запись на сайте.
Дело пошло у меня в гору, до нормы по количеству уникальных пользователей за пару недель я довёл – к Новому году я успел и дело своё доделал. А в январе 2019 года я был уже на другом месте работы и в другом регионе страны, но это уже совсем другая история.
А что в итоге?
Совсем недавно как раз прошла новость – Упрощенный документооборот: регионы получили доступ к Единой госсистеме соцобеспечения. Исходя из текста новости – всё у нас прекрасно, эффективно, “модно, стильно, молодёжно”. Хотелось бы уточнить у СМИшников, да и у государства тоже, про покрытие высокоскоростным интернетом отдаленных регионов нашей страны и наличию хотя бы одного компьютера в семьях, что эти меры социальной поддержки получают (а многие из них как раз неблагополучные), но думаю вы и сами всё понимаете.
Судя по форуму и отзывам бывших сотрудников из бюджетной сферы (данные верны на 2019 год), смею предположить, что новых инструментов для работы так и не разработали. Всё это мне напомнило какой-то плохой стартап: идею придумали, бюджет выделили, а инструменты для конечных пользователей системы так и не довели до ума – пусть сами придумают (что в целом и сделали частные конторы со своими модулями для 1С). Не так я себе представлял Big Data и автоматизацию процессов. Если таким же образом и на сайт Госуслуг попадают данные, то мне становится страшно за государственные АИС. И получается, что “спасение утопающих – дело рук самих утопающих”.
Надеюсь, что своей заметкой я дал повод многим задуматься, как и какими жертвами проводится информатизация страны.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
А вы знали о существовании данного сервиса?
Проголосовали 172 пользователя.
Воздержались 7 пользователей.
Стоит ли продолжить тему про АИС в образовании?
Довольно таки интересно
Проголосовал 121 пользователь.
Воздержались 22 пользователя.

