Сравнение двух таблиц значений

1. Krotov_Valery 03.06.22 09:24 Сейчас в теме
Добрый день коллеги. Помогите начинающему разработчику.
Задача: Поправить обработку заполняющую табличную часть документа. Обработка загружает из Excel файла сотрудников и суммы премий, нужно добавить выгрузку подразделений.
Проблема Обработать типовыми методами объекта справочник - "Найти по..." не получится т.к наименования подразделений в Excel и 1С совпадают лишь условно, но добавлен управленческий код который достается запросом и присутствует в Excel.


Вопрос как правильно обработать эти ТЗ.

Для НомСтрока = НачальнаяСтрока по МакСтрок цикл
	    СтрТЗ = ТЗ.Добавить();
	    Для НомСтолбец = 1 по МакСтолб цикл
	        Данные = Страница.Cells(НомСтрока,НомСтолбец).Value;                
	        СтрТЗ[НомСтолбец-1] = Данные;
	    КонецЦикла;     


Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Подразделения.Ссылка КАК Подразделение,
		|	ЗначенияСвойствОбъектов.Значение КАК КодПодразделения
		|ИЗ
		|	Справочник.Подразделения КАК Подразделения
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		|		ПО Подразделения.Ссылка = ЗначенияСвойствОбъектов.Объект
		|ГДЕ
		|	ЗначенияСвойствОбъектов.Свойство.Наименование = ""Код подразделения""";
	
	РезультатЗапроса = Запрос.Выполнить();
	ТЗПодразделения = РезультатЗапроса.Выгрузить();
	//	
	Для Каждого СтрокаТЧ Из ТЗ Цикл
		Если ЗначениеЗаполнено(СокрЛП(СтрокаТЧ.Столбец_2)) Тогда	
				Сотрудник = "";
				ПодразделениеСопоставлениеСвязи = "???????";	
				Сотрудник = Справочники.ФизическиеЛица.НайтиПоНаименованию(СокрЛП(Строка(СтрокаТЧ.Столбец_2)));
				
				//Пока ТЗПодразделения.Следующий() Цикл 
				//ПодразделениеСопоставлениеСвязи = Справочники.Подразделения.НайтиПоНаименованию(Сред(СТрока(СтрокаТЧ.Столбец_3),5,20));
				
				Если  ЗначениеЗаполнено(Сотрудник) Тогда 
					   НоваяСтрока              	 =	Объект.Начисления.Добавить();
					   НоваяСтрока.ФизЛицо     		 =	Сотрудник;
					   НоваяСтрока.Подразделение     =  ПодразделениеСопоставлениеСвязи;
					   НоваяСтрока.Показатель1       =	СтрокаТЧ.Столбец_9;
					   НоваяСтрока.ВидРасчета    	 =	ВидРасчета;
					   НоваяСтрока.ДатаДействия   	 =	ДатаНачала;
					   НоваяСтрока.ДатаДействияКонец =	ДатаОкончания;
				   Иначе
					   НоваяСтрока              	 =	Объект.Начисления.Добавить();
					   НоваяСтрока.Показатель1       =	СтрокаТЧ.Столбец_9;
					   НоваяСтрока.Подразделение     =  ПодразделениеСопоставлениеСвязи;
					   НоваяСтрока.ВидРасчета    	 =	ВидРасчета;
					   НоваяСтрока.ДатаДействия   	 =	ДатаНачала;
					   НоваяСтрока.ДатаДействияКонец =	ДатаОкончания;

					   Сообщить("Не найден: строка " +	Строка + ", сотрудник:" + СокрЛП(Строка(СтрокаТЧ.Столбец_2) + ", подразделение" + Строка(СтрокаТЧ.Столбец_3) + ", сумма: " + Строка(СтрокаТЧ.Столбец_9)));
				   КонецЕсли;
				   Строка = Строка + 1;
		 КонецЕсли;	
	КонецЦикла
Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. user1203706 13 03.06.22 09:42 Сейчас в теме +0.1 $m
(1)

Хрень = ТЗПодразделения .Найти(Лев(СтрокаТЧ.Столбец_3,3),"КодПодразделения");
Если Хрень<>Неопределено Тогда
   ПодразделениеСопоставлениеСвязи = Хрень.Подразделение;
КонецЕсли;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mrChOP93 97 03.06.22 09:38 Сейчас в теме
Выгрузи полученную из эксель ТЗ в запрос и там левым соединением получи подразделения.

Запрос.Текст = 
"ВЫБРАТЬ
|тзэксель.код
|ПОМЕСТИТЬ ВТ_ТЗизЭКСЕЛЬ
|из &ТЗЭКСЕЛЬ КАК тзэксель"
Запрос.Параметры.Вставить("ТЗЭКСЕЛЬ ", ТЗ);


Пример, как засунуть тз в запрос.
3. mrChOP93 97 03.06.22 09:41 Сейчас в теме
(2)З.Ы. Сначала помещаешь данные из ТЗ во временную таблицу и только потом проводишь манипуляции с этой временной таблицей.
4. user1203706 13 03.06.22 09:42 Сейчас в теме +0.1 $m
(1)

Хрень = ТЗПодразделения .Найти(Лев(СтрокаТЧ.Столбец_3,3),"КодПодразделения");
Если Хрень<>Неопределено Тогда
   ПодразделениеСопоставлениеСвязи = Хрень.Подразделение;
КонецЕсли;
5. Krotov_Valery 03.06.22 09:59 Сейчас в теме
(4) Идеально. Конечно посмотреть самому в методы Таблицы значений я не догадался. Спасибо большое.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот