Завантаження будь-якої таблиці с даними в 1С
Це доволі цікаве рішення, воно підійде у випадку якщо потрібно в 1С завантажити, наприклад товари, але немає єдиного формату даних які ми отримуємо. Хтось надсилає нам рахунки на сплату у форматі Excell, хтось у форматі Word, у якому на одному з листів є таблиця з товарами, або взагалі у форматі pdf . Писати обробку кожного формату файлу – не рішення, бо на це піде багато часу і все одно ми не зможемо обробити всі формати.
Для цього є краще рішення, просте і зручне. Для завантаження товарів ми використаємо буфер обміну який працює в будь якій програмі і інструменти для роботи з таблицями які нам пропонує 1С 8, також будь якої версії. Головна вимога в нашому випадку – дані повинні бути у вигляді таблиці.
Одразу зауважу, стосовно формату pdf є деякі обмеження. А саме: існують pdf файли, які конвертовані з картинки, з них не можна скопіювати дані, а ось з “правильних” pdf, які наприклад створені із Excel або Word можна дані скопіювати в буфер.
Етапи нашої розробки будуть такі:
- Створюємо форму з таблицею та налаштуваннями для обробки цієї таблиці.
- Пишемо код обробки отриманих даних.
1. Створюємо форму з таблицею та налаштуваннями для обробки цієї таблиці.
Можна створити загальну форму, форму документу, або обробку, це залежить від потреби. Мені це потрібно було зробити в одному документі тому я зробив форму саме в цьому документі. На створену форму вставляємо табличне поле, декілька простих полів типу число для вказування номерів колонок з яких будемо забирати дані і кнопка завантаження:
2. Пишемо код обробки отриманих даних.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Процедура ЗагрузитьТовары(Кнопка) //Так як форму я додав до документу то одразу отримаємо документ і в нього занесемо отримані дані ДокуменОбъект = ЭтаФорма.ВладелецФормы.ДокументОбъект; //Вибираємо всі заповнені рядки Для а = НомерСтрокиНачала по ЭлементыФормы.ПолеТабличногоДокумента.ВысотаТаблицы Цикл //згідно налаштувань отримуємо дані з потрібних колонон та рядків НаименованиеТовара = ЭлементыФормы.ПолеТабличногоДокумента.Область(а,НоменКолонкиТовар,а,НоменКолонкиТовар).Текст; Цена = ЭлементыФормы.ПолеТабличногоДокумента.Область(а,НоменКолонкиЦена,а,НоменКолонкиЦена).Текст; Количество = ЭлементыФормы.ПолеТабличногоДокумента.Область(а,НоменКолонкиКоличество,а,НоменКолонкиКоличество).Текст; // завантажуємо в документ, попередньо шукаємо товар по найменуванню НайденныйТовар = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеТовара,Истина); Если НайденныйТовар.Пустая() Тогда Сообщить("Не найден товар: "+НаименованиеТовара,СтатусСообщения.Важное); Если НЕ ДобавитьСтрокиПоНеНайденнымТоварам Тогда Продолжить; КонецЕсли; КонецЕсли; НоваяСтрока = ДокуменОбъект.ис_ТоварыУслуги.Добавить(); НоваяСтрока.Номенклатура = НайденныйТовар; НоваяСтрока.Количество = Количество; НоваяСтрока.Цена = Цена; НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена ; //виводимо повідомлення про завантаження товару Сообщить("Загружен товар: "+НаименованиеТовара ); КонецЦикла; //Закриваємо форму Закрыть(); КонецПроцедуры |
Як бачимо рішення достатньо просте і може буди використане для інших задач.