Загрузка данных из Экселя в 1с

1. demonsed97 19.09.21 10:23 Сейчас в теме
Пишу обработку, которая создает и заполняет документ "Инвентаризация ОС" согласно файла эксель, по команде "прочитать файл" заполняется табличная часть формы(успешно), а при команде "записать данные" создает документ "Инвентаризация ОС" и в его табличную часть записывает номенклатуру,(вот тут и косяк), документ создается но вместо номенклатур пустые строки(я думаю дело в том что получаю я и передаю строку , а 1с не понимает что надо вставить номенклатуру из справочника) Но пойму что не так
Код:

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

Проводник.Фильтр = Фильтр;

Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
Проводник.Показать(Оповещение);


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

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

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

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



КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьФайл_XLS()
ПрочитатьФайл_XLS_НаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаписатьДанныеНаСервере()

НовыйДок = Документы.ИнвентаризацияОС.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Организация = Справочники.Организации.НайтиПоНаименованию("ВОДОКАНАЛ-МЫТИЩИ АО");

Для Каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
НайденнаяНоменклатура = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрокаДанных.Наименование);


//Если НайденнаяНоменклатура <> Справочники.ОсновныеСредства.ПустаяСсылка() Тогда
// Продолжить;
//КонецЕсли;
Если ЗначениеЗаполнено(НайденнаяНоменклатура) Тогда

НоваяСтрока = НовыйДок.ОС.Добавить();
НоваяСтрока.ОсновноеСредство = СтрокаДанных.Наименование;
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;
Иначе
Сообщить ("ПустоеЗначение");
КонецЕсли;


КонецЦикла;
НовыйДок.Записать();
Сообщить("Запись, создана" + НовыйДок.Ссылка);
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьДанные(Команда)
ЗаписатьДанныеНаСервере();
КонецПроцедуры
Прикрепленные файлы:
Загрузить.epf
По теме из базы знаний
Найденные решения
3. Kim1C 178 19.09.21 10:40 Сейчас в теме
вот тут ошибка:

НоваяСтрока = НовыйДок.ОС.Добавить();
НоваяСтрока.ОсновноеСредство = СтрокаДанных.Наименование;
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;


Нужно
НоваяСтрока.ОсновноеСредство = НайденнаяНоменклатура ;
6. Kim1C 178 19.09.21 12:26 Сейчас в теме
(5)
Судя по вот этой строке сумма у вас текстовое поле
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;


Потом Вы пытаетесь текст засунуть в числовое поле
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;


Попробуйте привести значение к числу
НоваяСтрока.СтоимостьПоДаннымУчета = Число(СтрокаДанных.Сумма);
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Torin 741 19.09.21 10:39 Сейчас в теме
(1)
НайденнаяНоменклатура = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрокаДанных.Наименование);
- что в отладчике? Найдена Номенклатура?
8. ptolomei 20.09.21 09:39 Сейчас в теме
(1) Я дико извиняюсь, но к чему все эти сложности с парсингом табличного документа? Можно же просто прочитать файл в таблицу значений, а потом эту таблицу подсунуть в запрос и сформировать там уже готовую выборку данных для документа, результат которой сразу можно туда и подгрузить
3. Kim1C 178 19.09.21 10:40 Сейчас в теме
вот тут ошибка:

НоваяСтрока = НовыйДок.ОС.Добавить();
НоваяСтрока.ОсновноеСредство = СтрокаДанных.Наименование;
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;


Нужно
НоваяСтрока.ОсновноеСредство = НайденнаяНоменклатура ;
4. Kim1C 178 19.09.21 10:41 Сейчас в теме
(3) Конечно если будет ос с таким названием в базе )
5. demonsed97 19.09.21 11:41 Сейчас в теме
(3)помогла все номенклатуру проставил)))), но сумму нет, подскажите че может быть не так???
6. Kim1C 178 19.09.21 12:26 Сейчас в теме
(5)
Судя по вот этой строке сумма у вас текстовое поле
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;


Потом Вы пытаетесь текст засунуть в числовое поле
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;


Попробуйте привести значение к числу
НоваяСтрока.СтоимостьПоДаннымУчета = Число(СтрокаДанных.Сумма);
7. demonsed97 19.09.21 12:44 Сейчас в теме
(6)
Число(СтрокаДанных.Сумма);

Все разобрался при записи очищает это строку, ща поправим, Спасибо))))
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день