// Сравнение 2-х стурктур // Возвращает структуру с полями которые отличаются и значением из сравниваемой // Если в стСравнимое нет нужного поля,то в результат добавляется поля = Неопределенно // стОсновная, стСравнимое - сравниваемые структуры // ДоПервойРазницы - ищет только одно отличие Функция СравнитьСтруктуры(стОсновная, стСравнимое,ДоПервойРазницы = Ложь) Экспорт Результат = Новый Структура; Для каждого текПоле из стОсновная цикл ЗначениеСравнение = ?(стСравнимое.Свойство(текПоле.Ключ), стСравнимое[текПоле.Ключ], Неопределено); Если текПоле.Значение ЗначениеСравнение тогда Результат .Вставить(текПоле.Ключ,ЗначениеСравнение); Если ДоПервойРазницы тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции
// Объединить 2 таблицы значения // тзОсновная - таблица к которой будут изменяться данные // тзПрисоединяемая - таблица из которой будут браться данные // стОтборОдинаковых - стурктура со списком полей по которым определяеться одинаковость записи // ДобавлятьНеНайденное - ИСТИНА => не сущесвующие записи в тзОсновная будут браться из тзПрисоединяемая Процедура ОбъединитьТаблицыЗначений(тзОсновная,тзПрисоединяемая, стОтборОдинаковых, ДобавлятьНеНайденное = Ложь) Экспорт Для каждого текПрисоединяемаяЗапись из тзПрисоединяемая цикл ЗаполнитьЗначенияСвойств(стОтборОдинаковых,текПрисоединяемаяЗапись); НайденыеСтроки = тзОсновная.НайтиСтроки(стОтборОдинаковых); Если НайденыеСтроки.Количество() > 0 тогда Для каждого текНайденная из НайденыеСтроки цикл ЗаполнитьЗначенияСвойств(текНайденная,текПрисоединяемаяЗапись); КонецЦикла; ИначеЕсли ДобавлятьНеНайденное тогда НовСтрокаОсновном = тзОсновная.Добавить(); ЗаполнитьЗначенияСвойств(НовСтрокаОсновном,текПрисоединяемаяЗапись); КонецЕсли; КонецЦикла; КонецПроцедуры