Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:58

Сопоставать и соединить данные из двух файлов Excel.

Автор maxxi, 28 июл 2023, 07:53

0 Пользователей и 1 гость просматривают эту тему.

Максим75

LexaK, так вроде бы файл с остатками уже есть.
короче говоря, вариантов вагон - пусть автор выбирает.

Afinogen

 B) что  мешает сначала загрузить как тут советуют в одну таблицу то что тебуется соединять а во вторую то с чем требуется соединять, затем скормить эти 2 таблицы  менеджеру временных таблиц (сделать две виртуальные таблдицы) и потом сделать левое соединение между этими виртуальными таблицами?

maxxi

Вот код:


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

//Объект.ДанныеФайла.Очистить();

Если Объект.ФорматФайла="XLS" Тогда

НормативДеньПрочитатьФайл_XLS();

КонецЕсли;

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

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


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

НормативДеньДанные= ПолучитьИзВременногоХранилища(НормативДеньАдресДанных);

НормативДеньПутьКФайлуНаСервере=ПолучитьИмяВременногоФайла("xlsx");

НормативДеньДанные.Записать(НормативДеньПутьКФайлуНаСервере);

Попытка

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

Исключение

Сообщение= Новый СообщениеПользователю;

Сообщение.Текст="Файл не найден" + ОписаниеОшибки();

Сообщение.Сообщить();

Возврат;


КонецПопытки;

КоличествоСтрок= НормативДеньТабДок.ВысотаТаблицы;

Для НомерСтроки=1 По КоличествоСтрок Цикл

НормативДеньСтрокаДанных=Объект.ДанныеФайла.Добавить();

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

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

КонецЦикла;


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

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

НормативДеньДанныеФайла= Новый ДвоичныеДанные(Объект.Норматив);

НормативДеньАдресДанных=ПоместитьВоВременноеХранилище(НормативДеньДанныеФайла,УникальныйИдентификатор);

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

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



Пока результать такой:


Максим75

maxxi, так это один из файлов.
а второй где?
ну оба же файла надо читать, более того в одной процедуре все сделать.

LexaK

maxxi, какие колонки у вас в таблице   ?

по номенклатуре 2?
НоменклатураОстаток
НоменклатураНормативДень ??

уберите вторую, сделайте одну
Номенклатура

только ее заполняйте

и после Цикла добавьте такую команду

Объект.ДанныеФайла.Свернуть("Номенклатура","Остатки,НормативДень"); //проверьте имена полей
колонки "Остатки,НормативДень" должны быть Тип: Число

если помогло нажмите: Спасибо!

maxxi

LexaK, в 1-файле только 5 товаров, а во 2-файле больше 20. нужно чтобы товары которые нет в 1-файле не попали в таблицу, просто надо отобрать только эти 5 товаров с их ними нормативами.


LexaK

maxxi, тогда немного по другому
создайте и заполните две таблицы
тзОстатки   (колонки Номенклатура, Остатки, Норматив) и
тзНорматив  (колонки Номенклатура, Норматив)

и затем добавьте этот цикл (Внимание: правильно подставьте свои наименования реквизитов)
Для каждого лкСтр Из тзОстатки вв Цикл
лкНорм = тзНорматив.Найти(лкСтр.Номенклатура, "Номенклатура");
Если лкНорм  <>  Неопределено Тогда
//нашли норматив, заполняем
лкСтр.Норматив = лкНорм.Норматив;
КонецЕсли;
КонецЦикла;
на выходе получится тзОстатки с товарами из 1-го файла и с нормативами из 2-го

(все тоже самое можно сделать и запросом)
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск