Небольшой гайд, в котором я опишу, как написать скрипт для проверки данных на соответствие доменным значениям.

Для тех кто не знает: домены - это правила, описывающие допустимые значения для различных типов полей и обеспечивающие целостность данных. Атрибутивные домены используются для ограничения диапазона значений, допустимых для определенного атрибута таблицы или класса пространственных объектов.

Однако бывают случаи когда недопустимые значения все таки проскальзывают в поля. Именно для того чтобы найти эти несоответствия нужен скрипт описанный ниже.

Скрипт писался на Python 2.7.13 который идет в комплекте к ArcGIS.

Первое что делаем подгружаем модуль arcpy и присваиваем переменным необходимые для работы значения:

import arcpy
fc = 'D:\Arcgis\New Personal Geodatabase.mdb\TEST' #слой/таблица которую буде проверять
domain_2 = arcpy.da.ListDomains("D:\Arcgis\New Personal Geodatabase.mdb") #список доменов которые есть в базе
field_1 = 'ID_COD' #поле из которого будет браться значения для идентификации строки
fields = arcpy.ListFields(fc) #список столбцов которые есть в слое/таблице
a=set() #тут будем хранить доменные значения

Далее с циклом проходим по списку полей (fields) и выясняем у каких столбцов установлены домены и если они есть у столбца то печатаем название столбца так же объявляем переменную cursor с помощью которой будем считывать данные из столбцов:

for field in fields:
     cursor = arcpy.SearchCursor(fc,fields)
     if field.domain:
         print field.name

Далее если если у столбца есть домен то проверяем соответствует ли он домену который есть в базе и если есть то добавляем значения домена во множество:

for domain in domain_2:
    if field.domain == domain.name:
        for val in domain.codedValues.keys():
           a.add(val)

Далее считываем значения из столбцов в которых установлены домены и проверяем есть ли эти значения которые мы ранее добавили во множество. Если они не совпадают то выводится идентификационной номер строки в которой найдено несоответствие:

for row in cursor:
    if row.getValue(field.name) not in a:
        print (row.getValue(field_1))

По итогу работы получается вот такой список или 'координаты':

название столбца
номер строки

STATUS
1111111
2222222
COMPANY_MANAGER
COMPANY

Далее планирую добавить запись в файл (txt или xls).