Загрузить данные из одной ТЧ в другую ТЧ по артикулу

1. user1302499 23.11.20 12:21 Сейчас в теме
Есть ТЗ, из которой я выгружаю колонку с артикулами, ищу по ней номенклатуру, из запроса получаю ТЗ с теми же артикулами и номенклатурой, как мне можно из полученной ТЗ закинуть номенклатуру в ТЗ из которой я выгружал артикулы, сопоставив артикулы?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. M_A_D 184 23.11.20 12:36 Сейчас в теме
(1)
Если честно, как-то не понятно...
Зачем вам разбивать информацию на 2 ТЗ а потом собирать обратно....
Может стоит подкрутить запрос в первой ТЗ что бы добавить номенклатуру?)))
Sangvinor; +1 Ответить
4. user1302499 23.11.20 12:43 Сейчас в теме
(3) Первая ТЗ из экселя идет. Там везде строка, нужно искать ссылку на номенклатуру по артикулу. Собрать все, а после заполнить ТЧ документа
5. M_A_D 184 23.11.20 12:50 Сейчас в теме
(4)
Теперь, я понял, что вы делаете.
Но не понял зачем вам из ТабличнойЧасти документа вытаскивать номенклатуру обратно на форму обработки...

Просто у вас, на сколько я понимаю, поле "Номенклатура" на форме обработки - СТРОКА, а вы хотите туда после заполнения документа передать ссылку на номенклатуру?
6. user1302499 23.11.20 12:57 Сейчас в теме
(5) Ну да, можно и так сказать. Грубо говоря, мне из Экселя нужно заполнить ТЧ документа. Но из экселя то все строкой загружается в ТЧ. Вот я и вытащил артикулы, по которым нашел их номенклатуры но уже с типом Ссылка. И хочу поместить в ТЗ, только чтобы в ней уже была номенклатура не строкой, а ссылка, чтобы нормально потом из этой ТЗ заполнить ТЧ документа
8. M_A_D 184 23.11.20 13:05 Сейчас в теме
(6)
На сколько я себе это представляю, у вас происходит загрузка из эксель на форму обработки в ТЗ, вы ведь можете в момент загрузки из EXCEL сразу грузить Номенклатуру а не наименование....

Выгрузка на форму идет в цикле, посмотрите что я сейчас напишу и тогда быть может вам придет в голову дельная мысль:

КодНоменклатуры=Лист.Cells(СчСтрок,2).Value;
			 Ном=Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);


Замените код на артикул и значение строки и столбика, и вы получите сразу преобразование в, так нужную вам, ссылку)))
9. user1302499 23.11.20 13:07 Сейчас в теме
(8) Увы, но я не так загружаю, я просто выгружаю все в ТЗ
10. M_A_D 184 23.11.20 13:17 Сейчас в теме
(9)
Код выгрузки в студию)))
11. user1302499 23.11.20 17:04 Сейчас в теме
(10) На форме:

Процедура КнопкаВыполнитьНажатие(Кнопка)
	// Вставить содержимое обработчика.
КонецПроцедуры

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

КонецПроцедуры
Показать


Модуль Объекта:


Процедура ВыгрузитьЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
	
	Если ВыбранныеФайлы <> Неопределено Тогда
		ПутьКФайлу = ВыбранныеФайлы[0];
	Иначе
		Возврат;
	КонецЕсли;
	
	Файл = Новый Файл(ПутьКФайлу);
	ДвоичДан = Новый ДвоичныеДанные(ПутьКФайлу);
	ТаблицаДанных = EXCEL_ВТаблицуЗначений(ДвоичДан, Файл.Расширение);
	
	
	СформироватьДокументы(ТаблицаДанных);
	
КонецПроцедуры

Функция EXCEL_ВТаблицуЗначений(ДвоичДан, Расширение)
	
	ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
	ДвоичДан.Записать(ФайлEXCELНаСервере);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере);
	УдалитьФайлы(ФайлEXCELНаСервере);
	ОбластьТаблицы = ТабличныйДокумент.Область(24, 2, 85, ТабличныйДокумент.ШиринаТаблицы);
	
	ПостроительЗапроса = Новый ПостроительЗапроса;
	ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьТаблицы);  
	ПостроительЗапроса.Выполнить();
	ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
	
	Возврат ТаблицаДанных;
	
КонецФункции 

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

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


//Процедура ЗаполнитьТабличнуюЧастьДокумента()
//	//Для каждого Строка из ТаблицаДанных Цикл  //Перебираем каждую строку из экселя
//	//	    НоваяСтрока = ДокОбъект.Товары.Добавить();
//	//		
//	//	    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка[Поставщик.Номенклатура]);
//	//		НоваяСтрока.
//	//КонецЦикла;
//КонецПроцедуры;	


	

Показать
12. M_A_D 184 23.11.20 17:10 Сейчас в теме
(11)под ваши потребности не совсем подходит такой вариинт который вы выбрали.

Но можно извратиться немного))
Делайте в ТЗ на форме еще одно поле с типом Справоники.Номенклатура, делайте его скрытым.
И после создания документа, передавайте в него значение номенклатуры, и делайте видимым, а столбик со строкой номенклатуры, скрывайте, и будет вам то что нужно)))
13. user1302499 23.11.20 17:16 Сейчас в теме
(12) Но у меня нет таблицы значений на форме, но, я Вас понял)
Можно колонку с номенклатурой где строка - удалить, а эту как новую, добавить. Так?
14. M_A_D 184 23.11.20 17:20 Сейчас в теме
(13)
да, в момент когда вы выгружаете и у вас в ТЗ строчные значения,оставляете строки, а в процедуре создания документа дописываете заполнение новой колонки в таблице значений со строками (откуда вы брали артикулы), можно даже не удалять ту колонку в которой была строка, а просто добавить еще одну и все)
15. user1302499 23.11.20 21:22 Сейчас в теме
(14) Спасибо, буду пробовать
2. Sangvinor 23.11.20 12:36 Сейчас в теме
Запросом "Объединить ВСЕ" или Циклом перенести построчно
7. user1302499 23.11.20 12:59 Сейчас в теме
Но вот чтобы в ТЗ обратно загрузить номенклатуру с типом ссылка, нужно их сопоставлять по артикулу, я вот так сделал:

Для Каждого Строка ИЗ ТЗНоменклатура Цикл
		Стр = ТаблицаДанных.НайтиСтроки(новый структура("Код",Строка.Артикул));
	    Стр[0][Поставщик.Номенклатура] = Строка.Ссылка;
	КонецЦикла; 


Но он блин все равно строкой закидывает, потому что у поля в ТЗ тип строка.
Оставьте свое сообщение

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