загрузка из Excel

Новая тема
Показывать по 10 20 40 сообщений
И что там очень много строк, что не хочется это делать ручками?
Проблему вижу в том, что раз:

> файл скидывает другая фирма

то, возможно, (особенно, если в файле фамилии с инициалами) не соответствие с вашими ФИО физлиц. Если же с этим проблем нет, то особенных проблем при загрузке этой обработкой проверенного вами файла не должно возникнуть. Попробуйте весь этот механизм в копии. Сначала создайте и запишите непроведённым новый документ "Регистрация разовых удержаний сотрудников организаций" и уже его используйте, как ссылку. Подбираете табличную часть "Удержания" и дальше экспериментируйте - по форуму всё не объяснишь. Я сама иногда ею пользуюсь - нравится, что труд в некоторых случаях облегчает.
Если имеется ввиду документ "Регистрация разовых удержаний сотрудников организаций", то для него можно сделать внешнюю обработку заполнения табличных частей.
Алгоритм работы обработки будет такой:
1. Вызов "Формы", в которой пользователь будет выбирать файл загрузки и указывать доп.сведения для заполнения (напр. вид удержания).
2. Получение значения выбранного файла из "Формы" и чтение данных из этого файла Excel в таблицу значений (с поиском элемента справочника "Сотрудники" по данным из Excel).
3. Заполнение табличной части по данным из таблицы значений.
основная проблема в том что я никогда не грузился еще с excel до этого было с xml
"Вот пример процедуры чтения данных (в нем же считанные данные "конвертируются" запросом в данные 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)))),
| Константы КАК Константы
|ГДЕ
| ВТ.Клиент <> """""
;

Запрос.УстановитьПараметр("ИсточникДанных", ПромТЗ);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда
Сообщить("Ошибка инициализации данных!", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;

ТаблицаДанных = Результат.Выгрузить();

ОтметитьВсеСтроки(Истина);

КонецПроцедуры
"
"...в дополнение - инициализация структуры полей (соответствие колонок в таблице данных с реквизитами формы настроек - вместо реквизитов можно указать конкретные статичные номера колонок):

СтруктураПолей = Новый Структура;
СтруктураПолей.Вставить("Клиент",     "НомерКолонкиКлиент");
СтруктураПолей.Вставить("Количество", "НомерКолонкиКоличество");
СтруктураПолей.Вставить("Цена",       "НомерКолонкиЦена");
СтруктураПолей.Вставить("Валюта",     "НомерКолонкиВалюта");
СтруктураПолей.Вставить("Сумма",      "НомерКолонкиСумма");
"
Читают тему
(гостей: 1)

Быстрый переход