Во-первых, у Вас получился одна лишняя вложенность в цикле. Достаточно написать вот так:
for child in root:
sortchildrenby(child.iter('СвПокупка'), 'ДатаСчФ')
Функция sorted сама проитерирует последовательность, которую получит на входе.
Во-вторых, просто присваивать в объект ElementTree нельзя, нужно сначала удалить из документа все элементы СвПокупка, потом добавить их заново, в отсортированном виде. Проще всего будет, если переписать Вашу функцию сортировки вот таким макаром:
def sortchildrenby(parent, tag, attr):
'''функция сортировки элементов XML документа по атрибуту
:param parent: родительский элемент сортируемых элементов
:param tag: тэг элементов, которые нужно отсортировать
:param attr: атрибут, по значению которого будет сортировка
'''
sorted_list = sorted(parent.iter(tag), key=lambda child: child.get(attr))
# Удалеям неотсортированные элементы
for i in parent.findall(tag):
parent.remove(i)
# Добавляем элементы обратно в том порядке, который дала сортировка
for i in sorted_list:
parent.append(i)
Соответственно, вызов этой функции из кода будет выглядеть вот так:
for child in root:
sortchildrenby(child, 'СвПокупка', 'ДатаСчФ')