Загрузка данных из Экселя в 1с
Пишу обработку, которая создает и заполняет документ "Инвентаризация ОС" согласно файла эксель, по команде "прочитать файл" заполняется табличная часть формы(успешно), а при команде "записать данные" создает документ "Инвентаризация ОС" и в его табличную часть записывает номенклатуру,(вот тут и косяк), документ создается но вместо номенклатур пустые строки(я думаю дело в том что получаю я и передаю строку , а 1с не понимает что надо вставить номенклатуру из справочника) Но пойму что не так
Код:
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Проводник.Заголовок = "Выбирете подготовленный Файл" ;
Если Объект.ФорматФайла = "XLS" Тогда
Фильтр = "Текстовый документ (*.xls)|*.xls";
Иначе
Возврат;
КонецЕсли;
Проводник.Фильтр = Фильтр;
Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
Проводник.Показать(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры)Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
Объект.ПутьКФайлу = ВыбранныеФайлы[0]
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайл(Команда)
Объект.ДанныеФайла.Очистить();
Если Объект.ФорматФайла = "XLS" Тогда
ПрочитатьФайл_XLS()
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьФайл_XLS_НаСервере()
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(Объект.ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл по причине:" + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
КолличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоЛличествоСтрок Цикл
СтрокаДанных = Объект.ДанныеФайла.Добавить();
СтрокаДанных.Наименование = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайл_XLS()
ПрочитатьФайл_XLS_НаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДанныеНаСервере()
НовыйДок = Документы.ИнвентаризацияОС.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Организация = Справочники.Организации.НайтиПоНаименованию("ВОДОКАНАЛ-МЫТИЩИ АО");
Для Каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
НайденнаяНоменклатура = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрокаДанных.Наименование);
//Если НайденнаяНоменклатура <> Справочники.ОсновныеСредства.ПустаяСсылка() Тогда
// Продолжить;
//КонецЕсли;
Если ЗначениеЗаполнено(НайденнаяНоменклатура) Тогда
НоваяСтрока = НовыйДок.ОС.Добавить();
НоваяСтрока.ОсновноеСредство = СтрокаДанных.Наименование;
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;
Иначе
Сообщить ("ПустоеЗначение");
КонецЕсли;
КонецЦикла;
НовыйДок.Записать();
Сообщить("Запись, создана" + НовыйДок.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДанные(Команда)
ЗаписатьДанныеНаСервере();
КонецПроцедуры
Код:
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Проводник.Заголовок = "Выбирете подготовленный Файл" ;
Если Объект.ФорматФайла = "XLS" Тогда
Фильтр = "Текстовый документ (*.xls)|*.xls";
Иначе
Возврат;
КонецЕсли;
Проводник.Фильтр = Фильтр;
Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
Проводник.Показать(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры)Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
Объект.ПутьКФайлу = ВыбранныеФайлы[0]
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайл(Команда)
Объект.ДанныеФайла.Очистить();
Если Объект.ФорматФайла = "XLS" Тогда
ПрочитатьФайл_XLS()
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьФайл_XLS_НаСервере()
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(Объект.ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл по причине:" + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
КолличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоЛличествоСтрок Цикл
СтрокаДанных = Объект.ДанныеФайла.Добавить();
СтрокаДанных.Наименование = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайл_XLS()
ПрочитатьФайл_XLS_НаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДанныеНаСервере()
НовыйДок = Документы.ИнвентаризацияОС.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Организация = Справочники.Организации.НайтиПоНаименованию("ВОДОКАНАЛ-МЫТИЩИ АО");
Для Каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
НайденнаяНоменклатура = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрокаДанных.Наименование);
//Если НайденнаяНоменклатура <> Справочники.ОсновныеСредства.ПустаяСсылка() Тогда
// Продолжить;
//КонецЕсли;
Если ЗначениеЗаполнено(НайденнаяНоменклатура) Тогда
НоваяСтрока = НовыйДок.ОС.Добавить();
НоваяСтрока.ОсновноеСредство = СтрокаДанных.Наименование;
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;
Иначе
Сообщить ("ПустоеЗначение");
КонецЕсли;
КонецЦикла;
НовыйДок.Записать();
Сообщить("Запись, создана" + НовыйДок.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДанные(Команда)
ЗаписатьДанныеНаСервере();
КонецПроцедуры
Прикрепленные файлы:
По теме из базы знаний
- Быстрая загрузка данных из Excel в 1С 8.1 (8.2) с помощью SQL запроса
- Загрузка номенклатуры из Эксель (новый взгляд)
- Загрузка (импорт) из Эксель в 1С: Розница 2 (2.1, 2.2, 2.3) поступлений ТМЦ
- Универсальная загрузка данных из Экселя по основным параметрам для УТ 11.5
- Загрузка данных из экселя в Распоряжение на перечисление на карты МИР
Найденные решения
вот тут ошибка:
Нужно
НоваяСтрока = НовыйДок.ОС.Добавить();
НоваяСтрока.ОсновноеСредство = СтрокаДанных.Наименование;
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;
Нужно
НоваяСтрока.ОсновноеСредство = НайденнаяНоменклатура ;
(5)
Судя по вот этой строке сумма у вас текстовое поле
Потом Вы пытаетесь текст засунуть в числовое поле
Попробуйте привести значение к числу
Судя по вот этой строке сумма у вас текстовое поле
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;
Потом Вы пытаетесь текст засунуть в числовое поле
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;
Попробуйте привести значение к числу
НоваяСтрока.СтоимостьПоДаннымУчета = Число(СтрокаДанных.Сумма);
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) Я дико извиняюсь, но к чему все эти сложности с парсингом табличного документа? Можно же просто прочитать файл в таблицу значений, а потом эту таблицу подсунуть в запрос и сформировать там уже готовую выборку данных для документа, результат которой сразу можно туда и подгрузить
вот тут ошибка:
Нужно
НоваяСтрока = НовыйДок.ОС.Добавить();
НоваяСтрока.ОсновноеСредство = СтрокаДанных.Наименование;
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;
Нужно
НоваяСтрока.ОсновноеСредство = НайденнаяНоменклатура ;
(5)
Судя по вот этой строке сумма у вас текстовое поле
Потом Вы пытаетесь текст засунуть в числовое поле
Попробуйте привести значение к числу
Судя по вот этой строке сумма у вас текстовое поле
СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;
Потом Вы пытаетесь текст засунуть в числовое поле
НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаДанных.Сумма;
Попробуйте привести значение к числу
НоваяСтрока.СтоимостьПоДаннымУчета = Число(СтрокаДанных.Сумма);
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)