Задать вопрос
karuzzo
@karuzzo

Не могу разобраться, что я делаю не так?

экран
631ef143bce43430023668.png

Необходимо, чтобы во вкладке таблица расхождений выводился результат сравнение, а именно те, что разные и те, что отсутствуют либо в первой, либо во второй.
код
//////////////////////////////////////////////////////////////////////
/////////////////Первая Таблица////////////////////////////////////////
//////////////////////////////////////////////////////////////////////



&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	Проводник = Новый ДиалогВыбораФайла (РежимДиалогаВыбораФайла.Открытие);
	Проводник.Заголовок = "Выберите файл";
	
	Если Объект.ФорматФайла = "XLS" Тогда
		Фильтр = "Таблица XLS (*.xls)|*.xls";
	ИначеЕсли
		Объект.ФорматФайла = "XLSX" Тогда
		Фильтр = "Таблица XLSX (*.xlsx)|*.xlsx";
	Иначе
		Возврат;
	КонецЕсли;
	
	Проводник.Фильтр = Фильтр;
	
	Оповещение = Новый ОписаниеОповещения ("ПослеВыбораФайла", ЭтотОбъект);
	Проводник.Показать(Оповещение);
	
	
КонецПроцедуры


&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Объект.ПутьКФайлу = ВыбранныеФайлы[0];
	

КонецПроцедуры // ПослеВыбораФайла()

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
	
	Объект.ДанныеФайла.Очистить();
	
	Если Объект.ФорматФайла = "XLS" Тогда
		 ПрочитатьФайл_XLS();
	 ИначеЕсли Объект.ФорматФайла = "XLSX" Тогда
		 ПрочитатьФайл_XLSX();
		 
	 КонецЕсли; 	
КонецПроцедуры

&НаСервере
Процедура ПрочитатьФайл_XLS_НаСервере(АдресДанных)

ТабДок = Новый ТабличныйДокумент;

Данные = ПолучитьИзВременногоХранилища (АдресДанных);
ПутьКФайлуНаСервере = ПолучитьИмяВременногоФайла("xls");
Данные.Записать(ПутьКФайлуНаСервере);

Попытка
ТабДок.Прочитать(ПутьКФайлуНаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
	

Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать указанный файл по причине:  " + ОписаниеОшибки() ;
Сообщение.Сообщить();
Возврат;
КонецПопытки;

КоличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоличествоСтрок Цикл
СтрокаДанных = Объект.ДанныеФайла.Добавить();
СтрокаДанных.Договор = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;	

КонецЦикла; 

КонецПроцедуры // ПрочитатьФайл_XLS_НаСервере()
 
&НаКлиенте
Процедура ПрочитатьФайл_XLS()
	
ДанныеФайла = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
АдресДанных = ПоместитьВоВременноеХранилище(ДанныеФайла);

ПрочитатьФайл_XLS_НаСервере(АдресДанных);	

КонецПроцедуры // ПрочитатьФайл_XLS()


&НаСервере
Процедура ПрочитатьФайл_XLSX_НаСервере(АдресДанных)

ТабДок = Новый ТабличныйДокумент;

Данные = ПолучитьИзВременногоХранилища (АдресДанных);
ПутьКФайлуНаСервере = ПолучитьИмяВременногоФайла("xlsx");
Данные.Записать(ПутьКФайлуНаСервере);

Попытка
ТабДок.Прочитать(ПутьКФайлуНаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
	

Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать указанный файл по причине:  " + ОписаниеОшибки() ;
Сообщение.Сообщить();
Возврат;
КонецПопытки;

КоличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоличествоСтрок Цикл
СтрокаДанных = Объект.ДанныеФайла.Добавить();
СтрокаДанных.Договор = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;	

КонецЦикла; 


КонецПроцедуры // ПрочитатьФайл_XLSX_НаСервере()
 

&НаКлиенте
Процедура ПрочитатьФайл_XLSX()

ДанныеФайла = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
АдресДанных = ПоместитьВоВременноеХранилище(ДанныеФайла);
	
ПрочитатьФайл_XLSX_НаСервере(АдресДанных);

КонецПроцедуры // ПрочитатьФайл_XLSX()

//////////////////////////////////////////////////////////
//Вторая Таблица
/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////

&НаКлиенте
Процедура ПутьКФайлу2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	Проводник = Новый ДиалогВыбораФайла (РежимДиалогаВыбораФайла.Открытие);
	Проводник.Заголовок = "Выберите файл";
	
	Если Объект.ФорматФайла2 = "XLS" Тогда
		Фильтр = "Таблица XLS (*.xls)|*.xls";
	ИначеЕсли
		Объект.ФорматФайла2 = "XLSX" Тогда
		Фильтр = "Таблица XLSX (*.xlsx)|*.xlsx";
	Иначе
		Возврат;
	КонецЕсли;
	
	Проводник.Фильтр = Фильтр;
	
	Оповещение = Новый ОписаниеОповещения ("ПослеВыбораФайла2", ЭтотОбъект);
	Проводник.Показать(Оповещение);
	
	
КонецПроцедуры


&НаКлиенте
Процедура ПослеВыбораФайла2(ВыбранныеФайлы2, ДополнительныеПараметры) Экспорт

	Если ВыбранныеФайлы2 = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Объект.ПутьКФайлу2 = ВыбранныеФайлы2[0];
	

КонецПроцедуры // ПослеВыбораФайла()

&НаКлиенте
Процедура ПрочитатьФайл2(Команда)
	
	Объект.ДанныеФайла2.Очистить();
	
	Если Объект.ФорматФайла2 = "XLS" Тогда
		 ПрочитатьФайл2_XLS();
	 ИначеЕсли Объект.ФорматФайла2 = "XLSX" Тогда
		 ПрочитатьФайл2_XLSX();
		 
	 КонецЕсли; 	
КонецПроцедуры

&НаСервере
Процедура ПрочитатьФайл2_XLS_НаСервере(АдресДанных2)

ТабДок = Новый ТабличныйДокумент;

Данные = ПолучитьИзВременногоХранилища (АдресДанных2);
ПутьКФайлу2НаСервере = ПолучитьИмяВременногоФайла("xls");
Данные.Записать(ПутьКФайлу2НаСервере);

Попытка
ТабДок.Прочитать(ПутьКФайлу2НаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
	

Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать указанный файл по причине:  " + ОписаниеОшибки() ;
Сообщение.Сообщить();
Возврат;
КонецПопытки;

КоличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоличествоСтрок Цикл
СтрокаДанных = Объект.ДанныеФайла2.Добавить();
СтрокаДанных.Договор = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;	

КонецЦикла; 

КонецПроцедуры // ПрочитатьФайл2_XLS_НаСервере()
 
&НаКлиенте
Процедура ПрочитатьФайл2_XLS()
	
ДанныеФайла2 = Новый ДвоичныеДанные(Объект.ПутьКФайлу2);
АдресДанных2 = ПоместитьВоВременноеХранилище(ДанныеФайла2);

ПрочитатьФайл2_XLS_НаСервере(АдресДанных2);	

КонецПроцедуры // ПрочитатьФайл2_XLS()


&НаСервере
Процедура ПрочитатьФайл2_XLSX_НаСервере(АдресДанных2)

ТабДок = Новый ТабличныйДокумент;

Данные = ПолучитьИзВременногоХранилища (АдресДанных2);
ПутьКФайлу2НаСервере = ПолучитьИмяВременногоФайла("xlsx");
Данные.Записать(ПутьКФайлу2НаСервере);

Попытка
ТабДок.Прочитать(ПутьКФайлу2НаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
	

Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать указанный файл по причине:  " + ОписаниеОшибки() ;
Сообщение.Сообщить();
Возврат;
КонецПопытки;

КоличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоличествоСтрок Цикл
СтрокаДанных = Объект.ДанныеФайла2.Добавить();
СтрокаДанных.Договор = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;	

КонецЦикла; 


КонецПроцедуры // ПрочитатьФайл2_XLSX_НаСервере()
 

&НаКлиенте
Процедура ПрочитатьФайл2_XLSX()

ДанныеФайла2 = Новый ДвоичныеДанные(Объект.ПутьКФайлу2);
АдресДанных2 = ПоместитьВоВременноеХранилище(ДанныеФайла2);
	
ПрочитатьФайл2_XLSX_НаСервере(АдресДанных2);

КонецПроцедуры // ПрочитатьФайл_XLSX()



///////////////////////////////////////////////////////////////////////////////////
////////////////////////////////Сравнение и вывод разницы v1///////////////////////
//////////////////////////////////////////////////////////////////////////////////



&НаСервере
Процедура ВывестиРазницуНаСервере()
	
	
	
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Таблица1.Договор КАК Договор,
	|	Таблица1.Сумма КАК Сумма
	|ПОМЕСТИТЬ вт_Таб1
	|ИЗ
	|	&Таблица1 КАК Таблица1
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Таблица2.Договор КАК Договор,
	|	Таблица2.Сумма КАК Сумма
	|ПОМЕСТИТЬ вт_Таб2
	|ИЗ
	|	&Таблица2 КАК Таблица2
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	вт_Таб1.Договор КАК Договор,
	|	вт_Таб1.Сумма КАК Сумма1,
	|	вт_Таб2.Сумма КАК Сумма2
	|ИЗ
	|	вт_Таб1 КАК вт_Таб1
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_Таб2 КАК вт_Таб2
	|		ПО вт_Таб1.Договор = вт_Таб2.Договор
	|ГДЕ
	|	вт_Таб1.Сумма <> вт_Таб2.Сумма";
	Запрос.УстановитьПараметр("Таблица1", Объект.ДанныйФайла.Выгрузить());
	Запрос.УстановитьПараметр("Таблица2", Объект.ДанныеФайла2.Выгрузить());
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		НоваяСтрока = Объект.ДанныеИтог.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
		
	КонецЦикла;	

КонецПроцедуры


&НаКлиенте
Процедура ВывестиРазницу(Команда)
	ВывестиРазницуНаСервере();
КонецПроцедуры

Что я сделал не так?
  • Вопрос задан
  • 234 просмотра
Подписаться 1 Средний 12 комментариев
Решения вопроса 1
@VitalyChaikin
Вот как в условии сказано так и надо делать:
1. Выбрать * из Таб1 Где НЕ Таб1.Договор В (ВЫБРАТЬ Договор из Таб2)
3. ОБЪЕДИНИТЬ ВСЕ
2. Выбрать * из Таб2 Где НЕ Таб2.Договор В (ВЫБРАТЬ Договор из Таб1)
4. УПОРЯДОЧИТЬ ПО ...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы