загрузка из Excel
Показывать по
10
20
40
сообщений
- 1
- 2
06.09.2011
11:38
#11
И что там очень много строк, что не хочется это делать ручками?
Проблему вижу в том, что раз:
> файл скидывает другая фирма
то, возможно, (особенно, если в файле фамилии с инициалами) не соответствие с вашими ФИО физлиц. Если же с этим проблем нет, то особенных проблем при загрузке этой обработкой проверенного вами файла не должно возникнуть. Попробуйте весь этот механизм в копии. Сначала создайте и запишите непроведённым новый документ "Регистрация разовых удержаний сотрудников организаций" и уже его используйте, как ссылку. Подбираете табличную часть "Удержания" и дальше экспериментируйте - по форуму всё не объяснишь. Я сама иногда ею пользуюсь - нравится, что труд в некоторых случаях облегчает.
Проблему вижу в том, что раз:
> файл скидывает другая фирма
то, возможно, (особенно, если в файле фамилии с инициалами) не соответствие с вашими ФИО физлиц. Если же с этим проблем нет, то особенных проблем при загрузке этой обработкой проверенного вами файла не должно возникнуть. Попробуйте весь этот механизм в копии. Сначала создайте и запишите непроведённым новый документ "Регистрация разовых удержаний сотрудников организаций" и уже его используйте, как ссылку. Подбираете табличную часть "Удержания" и дальше экспериментируйте - по форуму всё не объяснишь. Я сама иногда ею пользуюсь - нравится, что труд в некоторых случаях облегчает.
06.09.2011
11:40
#12
Если имеется ввиду документ "Регистрация разовых удержаний сотрудников организаций", то для него можно сделать внешнюю обработку заполнения табличных частей.
Алгоритм работы обработки будет такой:
1. Вызов "Формы", в которой пользователь будет выбирать файл загрузки и указывать доп.сведения для заполнения (напр. вид удержания).
2. Получение значения выбранного файла из "Формы" и чтение данных из этого файла Excel в таблицу значений (с поиском элемента справочника "Сотрудники" по данным из Excel).
3. Заполнение табличной части по данным из таблицы значений.
Алгоритм работы обработки будет такой:
1. Вызов "Формы", в которой пользователь будет выбирать файл загрузки и указывать доп.сведения для заполнения (напр. вид удержания).
2. Получение значения выбранного файла из "Формы" и чтение данных из этого файла Excel в таблицу значений (с поиском элемента справочника "Сотрудники" по данным из Excel).
3. Заполнение табличной части по данным из таблицы значений.
06.09.2011
11:43
#13
основная проблема в том что я никогда не грузился еще с excel до этого было с xml
06.09.2011
12:24
#14
"Вот пример процедуры чтения данных (в нем же считанные данные "конвертируются" запросом в данные 1С):
Процедура КоманднаяПанель2ПрочитатьДанные(Кнопка)"
Если ПустаяСтрока(ФайлДанных) Тогда
Сообщить("Не выбран файл данных!", СтатусСообщения.Внимание);
Возврат;
КонецЕсли;
// предварительная очистка данных
Если ТаблицаДанных.Количество() > 0 Тогда
Ответ = Вопрос("Перед заполнение таблица данных будет очищена! Продолжить?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
ТаблицаДанных.Очистить();
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
// инициализация драйвера соединения
Состояние("Чтение данных из файла...");
Попытка
Conn = Новый COMОбъект("ADODB.Connection");
RS = Новый COMОбъект("ADODB.Recordset");
Исключение
Сообщить("Ошибка получения данных: " + ОписаниеОшибки(), СтатусСообщения.Важное);
Возврат;
КонецПопытки;
ВПервойСтрокеДанные = Ложь;
Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ФайлДанных + ";Extended Properties=""""Excel 12.0;"
+ ?(ВПервойСтрокеДанные,"HDR=NO;","HDR=YES;") + "IMEX=1;""""";
// получение доступа к данным
Попытка
Conn.Open();
Исключение
Сообщить("Ошибка получения данных: " + ОписаниеОшибки(), СтатусСообщения.Важное);
Возврат;
КонецПопытки;
ТекстЗапроса = "SELECT * FROM [Лист1$]";
// чтение данных из файла выгрузки
RS.Open(ТекстЗапроса, Conn);
Сч = 0;
МассивОшибокНастроек = Новый Массив;
// получение настройки начальной строки
СтрНастройки = ТаблицаНастроек.Найти("НачальнаяСтрока", "Настройка");
НачСтр = СтрНастройки.Значение;
// получение настройки конечной строки
СтрНастройки = ТаблицаНастроек.Найти("КонечнаяСтрока", "Настройка");
КонСтр = СтрНастройки.Значение;
ПромТЗ = ТаблицаДанных.СкопироватьКолонки();
// переопределяем структуру таблицы сбора данных
ПромТЗ.Колонки.Удалить("Контрагент");
ПромТЗ.Колонки.Удалить("Валюта");
ПромТЗ.Колонки.Удалить("ДокументСчет");
ПромТЗ.Колонки.Добавить("Валюта", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(10));
Пока RS.EOF() = Ложь Цикл
Сч = Сч + 1;
// ограничение по строкам
Если Сч < НачСтр ИЛИ (КонСтр > 0 И Сч > КонСтр) Тогда
RS.MoveNext();
Продолжить;
КонецЕсли;
НовСтр = ПромТЗ.Добавить();
// заполнение данных
Для каждого КлючИЗначение Из СтруктураПолей Цикл
СтрНастройки = ТаблицаНастроек.Найти(КлючИЗначение.Значение, "Настройка");
Если СтрНастройки = Неопределено И МассивОшибокНастроек.Найти(КлючИЗначение.Ключ) = Неопределено Тогда
МассивОшибокНастроек.Добавить(КлючИЗначение.Ключ);
Сообщить("Ошибка структуры настроек - поле «" + КлючИЗначение.Ключ + "»", СтатусСообщения.ОченьВажное);
Продолжить;
КонецЕсли;
НомерКолонкиДанных = СтрНастройки.Значение - 1;
НовСтр[КлючИЗначение.Ключ] = RS.Fields.Item(НомерКолонкиДанных).Value;
КонецЦикла;
RS.MoveNext();
КонецЦикла;
// инициализация данных
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнешнийИсточник.Клиент КАК Клиент,
| ВнешнийИсточник.Количество,
| ВнешнийИсточник.Цена,
| ВнешнийИсточник.Валюта КАК СтрВалюта,
| ВнешнийИсточник.Сумма
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ИсточникДанных КАК ВнешнийИсточник
|
|ИНДЕКСИРОВАТЬ ПО
| Клиент,
| СтрВалюта
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.Клиент,
| ВТ.Количество,
| ВТ.Цена,
| ВТ.Сумма,
| ЕСТЬNULL(Валюты.Ссылка, Константы.ВалютаРегламентированногоУчета) КАК Валюта,
| ЕСТЬNULL(Контрагенты.Ссылка, ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка)) КАК Контрагент,
| ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) КАК ДокументСчет
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Валюты
| ПО ВТ.СтрВалюта = Валюты.Наименование
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО (ВТ.Клиент = (ВЫРАЗИТЬ(Контрагенты.НаименованиеАнглийское КАК СТРОКА(300)))),
| Константы КАК Константы
|ГДЕ
| ВТ.Клиент <> """""
;
Запрос.УстановитьПараметр("ИсточникДанных", ПромТЗ);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("Ошибка инициализации данных!", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;
ТаблицаДанных = Результат.Выгрузить();
ОтметитьВсеСтроки(Истина);
КонецПроцедуры
06.09.2011
12:28
#15
"...в дополнение - инициализация структуры полей (соответствие колонок в таблице данных с реквизитами формы настроек - вместо реквизитов можно указать конкретные статичные номера колонок):
СтруктураПолей = Новый Структура;"
СтруктураПолей.Вставить("Клиент", "НомерКолонкиКлиент");
СтруктураПолей.Вставить("Количество", "НомерКолонкиКоличество");
СтруктураПолей.Вставить("Цена", "НомерКолонкиЦена");
СтруктураПолей.Вставить("Валюта", "НомерКолонкиВалюта");
СтруктураПолей.Вставить("Сумма", "НомерКолонкиСумма");
- 1
- 2
Читают тему
(гостей: 1)