Что нового

Найти дубли кодов справочника ТМЦ в 1С 7.7

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Есть база 1С Бухгалтерия 7.7 dbf файловая (не SQL)
Кто-то в справочнике ТМЦ (товарно материальные ценности) ввел кучу товаров и при этом т.н. код тоже вручную ввел. Базе уже около 10 лет (очень большой список).
Например:
12345 - Профнастил
12345 - Профнастил
12345 - Профнастил
12377 - Профнастил
12355 - Профнастил

Задача: найти в справочнике все дубли по коду
Может кто посоветует внешнюю обработку *.ert для этого или еще что-то.
Сам пока вижу решение в выгрузке кодов справочника в xls или txt и уже потом скриптом AutoIt обработать.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Yuriy [?]
Базе уже около 10 лет (очень большой список).
Сам пока вижу решение в выгрузке кодов справочника в xls или txt и уже потом скриптом AutoIt обработать.


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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yuriy [?]
Сам пока вижу решение в выгрузке кодов справочника в xls или txt и уже потом скриптом AutoIt обработать.

Вариант с текстовым файлом.
Код:
#include<Array.au3>

$sData = FileRead('17292.txt')
$aData = StringSplit($sData, @LF, 2)
_ArrayDisplay($aData, StringFormat('Dim: %.d', UBound($aData)))
$t = TimerInit()
_ArrayUniqueEx($aData, 0)
_ArrayDisplay($aData, StringFormat('Dim: %d / Time: %.4f sec', UBound($aData), TimerDiff($t) / 1000))

;~ Optional. Specifies the comparison mode.
;~ Can take one of the following values:

;~ 0 = vbBinaryCompare - binary comparison
;~ 1 = vbTextCompare - textual comparison
Func _ArrayUniqueEx(ByRef $a_Array, $i_Mode = 1)
    
	Local $o_Obj, $i_UBound
	
	$o_Obj = ObjCreate("Scripting.Dictionary")
	If @error Then SetError(1, 0, 0)
	
    $o_Obj.CompareMode = $i_Mode
	
	For $i = 0 To UBound($a_Array)-1
		If Not $o_Obj.Exists($a_Array[$i]) Then $o_Obj.Add($a_Array[$i], $i)  
	Next
	
	$a_Array = $o_Obj.Keys
	$i_UBound = $o_Obj.Count
	$o_Obj = 0
	
	Return SetError(0, $i_UBound, 1)
EndFunc; ==>_ArrayUniqueEx
 
Автор
Yuri

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
alex33
Есть прямой непосредственный доступ к файлу dbf именно этого справочника.
Смотрел в программе DbfNavigator.
Там все как в таблице Exel
Думаю, что пробежаться по всем значения столбца кодов и найти их совпадение для AutoIt будет в силу. Кодом помоги (желательно самый оптимальный алгоритм)


Добавлено:
Сообщение автоматически объединено:

Garrett
Печаль в том, что код 00786 - это 786 и т.д.
Т.е. впереди нули режутся.
Код пятизначный.
Смотрел в конфигураторе в свойствах спр.ТМЦ
там стоит реквизит "текст"
и при выгрузке справочника в любой формат нули режутся
это не проблема! Все работает. Сам себе голову задурил.
за алгоритм Спасибо!
Наверное все же буду пробовать на низком уровне dbf-ку читать
 
Верх