Чтобы любая информационная система могла работать, необходимо её наполнить данными. Как это сделать? Путей обычно два – или собственными руками или чужими. Чужие бывают двух видов - человеческие и программные.
Итак. С людьми понятно. Их усаживают за компьютеры, и они вколачивают в программу то, что сказали. А программы берут данные откуда-то, перемалывают, и складывают в требуемое место. В нужном виде и формате. Всё вроде просто. Напиши замечательную программу - и дело готово. Так и думалось.
Что первое? Заливка, простите, импорт номенклатурного справочника. Проконвертировали и залили, т.е. выполнили импорт. Но. Что за справочник с линейным списком из обозначения и наименования? Надо хотя бы классификатор сразу же. Добавляем. Уже лучше. Теперь позиции без каких-либо характеристик выглядят грустновато. Добавляем параметры и их значения.
Программа пухнет, ибо параметры описывающие оборудование - это одно, а скажем инструмент - другое. И опять же описание фрезерной группы - это одни параметры, а токарной - совсем другой набор параметров. То же и к инструменту относится - свёрла описывает один набор, а скажем фрезы - совсем другой. А так как любое производство - это как минимум несколько десятков, если не сотен таких групп, то и набор параметров начинает зашкаливать за несколько тысяч.
Тут опять напрашивается справочник, только уже параметров. А еще хорошо бы уметь искать по этим параметрам. А это значит, что надо определяться с их типом - текстовый, целый, плавающий. Искать-то надо, например сверло диаметром 10 мм, или от 8 до 9 мм.
Логично бы и создавать этот справочник автоматически. Прочитали входной файл - собрали все параметры какие есть. Сохранили их. И при заливке номенклатуры ссылаемся на них. Ничего сложного... Когда в первый раз.
Во второй раз уже сложнее - ибо часть параметров уже есть, а части нет. А как определить есть или нет? По уникальному обозначению. А как определить тип (плавающий или целый скажем)... Очень просто - собираем все значения и смотрим на них программой или глазками. И тип подтверждаем. В первый раз не страшно.
Определили, что параметр, скажем, плавающее число... Первый раз прошло... Все значения имеют вид «10.2», «11.6» и т.п. А вот во второй раз этот же самый параметр прилетает в виде дюймов, т.е. в виде «1"» «1/2"». Что делать? Переводить в десятичную систему? Или новый параметр создавать с тем же обозначением, но другим типом? А как же уникальность обозначения? Значит, создаем другой параметр с другим обозначением и типом. А в третий раз еще что-то такое приключается. А параметры еще могут быть и типа список, а это значит, что в момент заливки надо ещё и список значений формировать.
Вылилось это все в конце концов в то, что на экран выводился список: что найдено в базе, а что просится в неё снаружи. И производилось сопоставление. А что не удалось - будьте любезны указать соответствие ручками или доверить автоматическое создание. Все хорошо. Но вот объем этого списка может быть немаленький. А человек и ошибиться может. Надо было сопоставить, а он создал новый. И все залилось.
При этом какие-то параметры вообще могут оказаться лишними. Значит что? Надо сделать замену одного параметра на другой. Можно конечно просто внутри базы идентификаторы поменять. А если значения у одного текстовые, а в другом числа? Автоматически преобразовывать? А если не проходит? Снова диалог.
А казалось - так все просто. Оказалось, что казалось. И это я только простейший вариант описал - всего лишь справочник номенклатуры, а с файлами, документами, спецификациями, техпроцессами, не говоря уже о производственных данных свои нюансы. И ведь всего не учтешь.
А народ он же прост - это ваша программа данные заносит? Значит, и правьте эти занесенные данные до тех пор, пока они не будут в нормальном виде. Ответственность с себя переложили на ближнего своего. Вот и сделали доброе дело - облегчили народу первоначальное занесение данных. Сначала на плечах почувствовали одну ногу, потом другую. А вот уже и оседлали и погоняют.
Права старушка Шапокляк - "Хорошими делами прославиться нельзя". Или это мы думали, что дела хорошие, а на самом деле не очень.