Данный текст является одним из выпусков моей рассылки "Автоматизация рутины - как это?". Все выпуски вы можете прочитать в каталоге выпусков. Чтобы ничего не пропустить - рекомендую подписаться:
Выпуск 2.
Работа с исходными данными.
В свое время, когда я еще работал экономистом-аналитиком на заводе, я испытывал острую потребность в необработанных исходных данных по реализации продукции (какому клиенту почем и сколько было отгружено продукции), по доставке (каким маршрутом и по каким накладным сколько было развезено продукции) и пр. У нас эти данные были - программисты завода уже написали некоторую программу по комплексному учету с сохранением данных в базе Microsoft SQL. Но как и любая другая программа она делала только то, что предусматривалось (показать-экспортировать данные по реализации по клиентам, по маршрутам и пр.), а для того, чтобы оперировать этими данными, их нужно было сначала экспортировать в эксель и только затем можно было что-то посчитать. Это, понятно дело, было жутко неудобно и долго.
После обсуждения вопроса с руководством было принято решение экспортировать исходные данные без обработки в базу Microsoft Access. Так было сделано по нескольким причинам:
- доступ к базе MS SQL должен быть закрыт для всех без исключения (защищенность, быстродействие и пр.);
- существовал лаг между выпиской счета-фактуры и подтверждением по доставке продукции клиентам;
- все база целиком пока не нужна была.
Что получилось в итоге. Создали mdb-файл, прописали в нем соответствующие права доступа (руководство, я, второй аналитик и пользователь под которым данные «заливались» в эту базу). Данные заполнялись 10-го числа каждого месяца (ставилась неделя на подтверждение счета-фактуры). Такая задержка была необходима и устроило руководство.
Далее. Оказалось, что работать с таким массивом данных - тоже не очень разумно:
- большой объем приема данных при работе забивал всю сеть;
- большое количество записей (в месяц получалось несколько сот тысяч строк) сильно затруднял быстродействие как сервера, так и рабочей станции, на котором выполнялась обработка данных.
Для разрешения такой проблемы было реализовано «укрупнение данных» следующим образом. Сразу скажу, что в процессе работы использовался только Access - там есть все и никаких дополнительных пакетов не ставилось.
Была создана новая таблица реализации, в которой вместо одной даты реализации (отгрузки) появилось две – «дата_с» и «дата_по». При реализации каждому клиенту в течение одного месяца продукции по одной цене, складывалась общее число и указывался начальный, конечный период такой реализации, цена и количество отгруженной продукции (естественно, по каждому наименованию отдельно). Если цена менялась (устанавливалась скидка или еще что вдруг), то, соответственно, все складывалось и записывался новый период с новой ценой. На словах все было просто и логично.
На деле оказалось несколько сложнее. Иногда ошибался оператор и затем, чтобы не переделывать фактуру, делали вторую на возврат. Получалось, что при одной установленной цене в периоде их по факту было три. При реализации в собственных розничных точках часто одни продавцы сменяли друг-друга и реализация, таким образом, записывалась на розничную точку другого продавца. При изменении продукции (веса, кода продукции и пр.) ее реализация относилась «не туда».
Поэтому процедура «укрупнения данных» значительно усложнилась. Сначала одним запросом проверялся справочник продукции - не появились ли новые виды продукции с новыми характеристиками. Затем для этого справочника другим запросом проверялись и корректировались установленные цены. После этого третьим запросом проверялся справочник клиентов - не изменили ли они свое название, не переехали и т.п. И только после этого выполнялся запрос на укрупнение данных (который работал почти час).
Да, еще вручную пришлось вести одну таблицу - по периодам работы на розничных точках продавцов.
Для проверки после укрупнения запускался запрос на общую сумму (чтобы совпадали суммы и количество по реализации по обеим таблицам) и реализация по каждому клиенту. Если что-то не совпадало - разбирался в чем причина, дорабатывал запрос. Потом все работало как часики. И вместо часа на работу с данными тратилось две-три минуты.
Исходные данных потом архивировались и работали только с укрупненными данными.
Для решения такой задачи достаточно только умения соображать. И, разумеется, рекомендуется знать общие принципы работы с Access. Совсем уж в крайнем случае нужно уметь жать на кнопочку F1 и пользоваться обширной справкой. Если есть вопросы – пишите.