необходимо зарегистрироваться для просмотра ссылки
Функция ИмпортXLXS(ПараметрыФормата)
ИмяФайла = ПараметрыФормата.ИмяФайла;
Попытка
Excel = Новый COMОбъект("Excel.Application");
WB = Excel.Workbooks.Open(ИмяФайла);
WS = WB.Worksheets(1);
arr = WS.UsedRange.Value;
WB.Close(0);
Исключение
Возврат Неопределено;
КонецПопытки;
МассивКолонок = arr.Выгрузить();
ВсегоСтрок = (МассивКолонок.Получить(0).Количество()) - 1;
тзВыписка = Новый ТаблицаЗначений;
тзВыписка.Колонки.Добавить("НомерПП");
тзВыписка.Колонки.Добавить("Приход");
тзВыписка.Колонки.Добавить("Расход");
тзВыписка.Колонки.Добавить("ОКПО",Новый ОписаниеТипов("Число"));
тзВыписка.Колонки.Добавить("Контрагент");
тзВыписка.Колонки.Добавить("МФО");
тзВыписка.Колонки.Добавить("РСчет");
тзВыписка.Колонки.Добавить("Содержание");
тзВыписка.Колонки.Добавить("ДатаПП");
Для СтрокаТП = 0 По ВсегоСтрок Цикл
НовСтрока = тзВыписка.Добавить();
НовСтрока.Контрагент = СокрЛП(МассивКолонок.Получить(10).Получить(СтрокаТП));
НовСтрока.ОКПО = СокрЛП(МассивКолонок.Получить(9).Получить(СтрокаТП));
НовСтрока.МФО = СокрЛП(МассивКолонок.Получить(1).Получить(СтрокаТП));
НовСтрока.РСчет = СокрЛП(МассивКолонок.Получить(8).Получить(СтрокаТП));
НовСтрока.НомерПП = СокрЛП(МассивКолонок.Получить(11).Получить(СтрокаТП));
НовСтрока.ДатаПП = СокрЛП(МассивКолонок.Получить(12).Получить(СтрокаТП));
НовСтрока.Содержание = СокрЛП(МассивКолонок.Получить(15).Получить(СтрокаТП));
НовСтрока.Приход = СокрЛП(МассивКолонок.Получить(14).Получить(СтрокаТП));
НовСтрока.Расход = СокрЛП(МассивКолонок.Получить(13).Получить(СтрокаТП));
КонецЦикла;
Возврат тзВыписка;
КонецФункции
А это уже на форме
необходимо зарегистрироваться для просмотра ссылки
&НаСервере
Функция ИмпортВыпискиСервер(АдресХранилища, АдресХранилищаФайла)
Если НЕ ТекущийФайлФорматаОбменаСуществует Тогда
Сообщить("Файл формата " + Объект.ФорматОбмена + " не найден");
Возврат Неопределено;
КонецЕсли;
ВнешняяОбработкаОбъект = ПодключитьВнешнююОбработку(АдресХранилища);
// 1.1 Сохраняем значения для выбранного формата
// Вызываем функцию СохранитьЗначения для формата
ПараметрыВызова = Новый Структура;
ПараметрыВызова.Вставить("Режим", "Импорт");
ПараметрыВызова.Вставить("Организация", Объект.Организация);
ПараметрыВызова.Вставить("ТекущееИмяФайла", Объект.ИмяФайлаИмпорт);
ПараметрыВызова.Вставить("КодВБанке", Объект.КодВБанке); // если есть
ПараметрыВызова.Вставить("ТекущийТипФайла", Объект.ТипФайлаИмпорт);
ПараметрыВызова.Вставить("КодировкаФайла", Объект.КодировкаФайлаИмпорт);
// ВнешняяОбработкаОбъект.СохранитьНастройки(ПараметрыВызова);
// 2. Формируем параметры для вызова функции импорта формы обработки формата
// запрос к обработке формата на импорт
ПараметрыФормата = Новый Структура;
ПараметрыФормата.Вставить("ДатаДок", Объект.ДатаВыписки);
ПараметрыФормата.Вставить("Организация", Объект.Организация);
ПараметрыФормата.Вставить("РСчет", СокрЛП(Объект.БанковскийСчет.НомерСчета));
ХранилищаФайла = ПолучитьИзВременногоХранилища(АдресХранилищаФайла);
//ИмяФайла = ПолучитьИмяВременногоФайла(Объект.ТипФайлаИмпорт);
ИмяФайла = КаталогВременныхФайлов() + "KBExch." + Объект.ТипФайлаИмпорт;
ХранилищаФайла.Записать(ИмяФайла);
ПараметрыФормата.Вставить("ИмяФайла", ИмяФайла);
ПараметрыФормата.Вставить("ТипФайла", Объект.ТипФайлаИмпорт);
ПараметрыФормата.Вставить("НашМФО", СокрЛП(Объект.БанковскийСчет.Банк.Код));
ПараметрыФормата.Вставить("КодировкаФайла", Объект.КодировкаФайлаИмпорт);
ПараметрыФормата.Вставить("АдресХранилищаФайла", АдресХранилищаФайла);
// 3. Вызываем функцию обработки, получаем таблицу платежей
тзВыписка = ВнешняяОбработкаОбъект.ИмпортВыписки(ПараметрыФормата);
//Попытка
// тзВыписка = ВнешняяОбработкаОбъект.ИмпортВыписки(ПараметрыФормата);
//Исключение
// Сообщить("Ошибка импорта: ");
// Возврат Неопределено;
//КонецПопытки;
//
// Если произошла ошибка
//Если тзВыписка = Неопределено ИЛИ ТипЗнч(тзВыписка) <> Тип("ТаблицаЗначений") Тогда
// Если ТипЗнч(тзВыписка) = Тип("Строка") И ЗначениеЗаполнено(тзВыписка) Тогда
// Сообщить(тзВыписка);
// Иначе
// Сообщить("Не загружено");
// КонецЕсли;
// Возврат Неопределено;
//КонецЕсли;
//
// 4. Обрабатываем таблицу платежей
// (перекодировка, только входящие, ищем юрфизлиц, контрагентов, сделки, заказы, договора)
тзПлатежи = Объект.тчИмпорт.Выгрузить();
тзПлатежи.Очистить();
ПерекодировкаИмпорта = ВнешняяОбработкаОбъект.ПерекодировкаИмпорта();
Для Каждого Строка Из тзВыписка Цикл
// проверяем на только входящие платежи
Если Объект.НастройкаИмпортТолькоВходящихПлатежей Тогда
Если Число(Строка.Расход) > 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
НоваяСтрока = тзПлатежи.Добавить();
// перекодировка
Если ПерекодировкаИмпорта Тогда
Строка.Контрагент = ЗаменитьСимволы(Строка.Контрагент);
Строка.Содержание = ЗаменитьСимволы(Строка.Содержание);
КонецЕсли;
НоваяСтрока.Приход = Строка.Приход;
НоваяСтрока.Расход = Строка.Расход;
НоваяСтрока.НомерПП = Строка.НомерПП;
НоваяСтрока.ДатаПП = Строка.ДатаПП;
//Если Объект.ДатаВыписки < Строка.ДатаПП Тогда
//
// Продолжить;
//
//Иначе
//
//Сообщить("не ок")
//
//КонецЕсли;
// 4.1. Определение контрагента
// Ищем по коду ЕДРПОУ (в дальнейшем ОКПО):
ВыборкаПоОКПО = НайтиПоОКПО(Строка.ОКПО, Строка.Контрагент);
НайденКонтрагент = Ложь;
Если ВыборкаПоОКПО.Следующий() Тогда //есть хоть один
Контрагент = ВыборкаПоОКПО.Ссылка;
НайденКонтрагент = Истина;
Иначе
// в зависимости от флага
// "АвтоСозданиеКонтрагента" создаем новые элементы справочника Контрагенты
Если Объект.НастройкаАвтоСозданиеКонтрагента Тогда
ПР = ?(Строка.Приход = 0, "Р", "П");
Реквизиты = Новый Структура;
Реквизиты.Вставить("Наименование", Строка.Контрагент);
Реквизиты.Вставить("ПР", ПР); //Приход ("П") или расход ("Р")
Реквизиты.Вставить("ОКПО", Строка.ОКПО);
Реквизиты.Вставить("РСчет", Строка.РСчет);
Реквизиты.Вставить("МФО", Строка.МФО);
//Создаём нового контрагента в справочнике
Контрагент = СоздатьСпрКонтрагент(Реквизиты);
Иначе
// ПустаяСсылка
Контрагент = Справочники.Контрагенты.ПустаяСсылка();
КонецЕсли;
КонецЕсли;
НоваяСтрока.Контрагент = Контрагент;
// 4.2. Определение сделки, заказа, договора.
ПриходРасход = "";
Если НоваяСтрока.Приход > 0 Тогда
ПриходРасход = "Приход";
Если Объект.Конфигурация = "УТ" Тогда
ВидДокумента = "ПоступлениеБезналичныхДенежныхСредств";
ИначеЕсли Объект.Конфигурация = "БУ" Тогда
ВидДокумента = "ПоступлениеНаРасчетныйСчет";
КонецЕсли;
ИначеЕсли НоваяСтрока.Расход > 0 Тогда
ПриходРасход = "Расход";
Если Объект.Конфигурация = "УТ" Тогда
ВидДокумента = "СписаниеБезналичныхДенежныхСредств";
ИначеЕсли Объект.Конфигурация = "БУ" Тогда
ВидДокумента = "СписаниеСРасчетногоСчета";
КонецЕсли;
КонецЕсли;
НоваяСтрока.ВидДокумента = ВидДокумента;
//НоваяСтрока.ВидОперации = ОпределитьВидОперации(ВидДокумента);
НоваяСтрока.ВидОперации = ПолучитьНастройкуЗаполнения("ВидОперации", ВидДокумента);
НоваяСтрока.СтатьяДДС = ПолучитьНастройкуЗаполнения("СтатьяДДС", ВидДокумента);
НоваяСтрока.Подразделение = ПолучитьНастройкуЗаполнения("Подразделение", ВидДокумента);
НоваяСтрока.СтатьяДоходовИлиРасходов = ПолучитьНастройкуЗаполнения("СтатьяДоходовИлиРасходов", ВидДокумента);
Если Объект.Конфигурация = "БУ" Тогда
НоваяСтрока.СтавкаНДС = ПолучитьНастройкуЗаполнения("СтавкаНДС", ВидДокумента);
КонецЕсли;
Если Объект.Конфигурация = "УТ" Тогда
НоваяСтрока.ТипДокумента = ПолучитьНастройкуЗаполнения("ТипДокумента", ВидДокумента);
КонецЕсли;
СписокВидовДоговоров = клОпределитьВидДоговораСКонтрагентом(ПолучитьНастройкуЗаполнения("ВидОперации", ВидДокумента));
Договор = НайтиДоговорКонтрагента(Контрагент,Объект.Организация,СписокВидовДоговоров);
НоваяСтрока.Договор = Договор;
НоваяСтрока.Содержание = СокрЛП(Строка.Содержание);
// по счету ищем банковский счет для контрагента. Если нет - создать.
НоваяСтрока.СчетКонтрагента = НайтиСчетКонтрагента(Строка.РСчет, Контрагент);
Если НЕ ЗначениеЗаполнено(НоваяСтрока.СчетКонтрагента) Тогда
НоваяСтрока.СчетКонтрагента = ДобавитьСчетКонтрагента(Контрагент, Строка.РСчет, Строка.МФО);
КонецЕсли;
// определяем статус
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Контрагент) Тогда
НоваяСтрока.Статус = СтатусыСтрокИмпорта.НеобходимоЗаполнитьРеквизиты;
Иначе
НоваяСтрока.Статус = СтатусыСтрокИмпорта.ГотовКЗаписи;
КонецЕсли;
КонецЦикла;
// Ищем среди неоплаченных ППИсх с совпадением суммы и номера ПП (то есть те, которые вернулись из банка и их необходимо обновить).
// Для таких проставим статус СуществующийПлатежНеобходимоОплатить
МассивУдаляемыхСтрок = Новый Массив;
Для Каждого СтрокаИмпорт Из Объект.тчИмпорт Цикл
Если СтрокаИмпорт.Оплачен Или СтрокаИмпорт.ВидДокумента <> "СписаниеБезналичныхДенежныхСредств" Тогда
Продолжить;
КонецЕсли;
Для Каждого Строка Из тзПлатежи Цикл
Если Строка.Контрагент = СтрокаИмпорт.Контрагент Тогда
Если (Строка.Расход > 0) И (СтрокаИмпорт.Расход > 0) И (Строка.Расход = СтрокаИмпорт.Расход ) Тогда
// номер ПП есть в файле и совпадает с текущим
Если ЗначениеЗаполнено(Строка.НомерПП) И Строка.НомерПП <> СтрокаИмпорт.НомерПП Тогда
Продолжить;
КонецЕсли;
Если МассивУдаляемыхСтрок.Найти(Строка) = Неопределено Тогда
МассивУдаляемыхСтрок.Добавить(Строка);
КонецЕсли;
СтрокаИмпорт.Статус = СтатусыСтрокИмпорта.СуществующийПлатежНеобходимоОплатить;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого ЭлементМассива Из МассивУдаляемыхСтрок Цикл
тзПлатежи.Удалить(ЭлементМассива);
КонецЦикла;
// 4.5 Удаляем с тзПлатежи, те которые уже есть в тчИмпорт
// (совпадение по Контрагенту и приходу-расходу)
МассивУдаляемыхСтрок = Новый Массив;
Для Каждого Строка Из тзПлатежи Цикл
ПервоеСовпадениеПриход = Истина;
ПервоеСовпадениеРасход = Истина;
Для Каждого СтрокаИмпорт Из Объект.тчИмпорт Цикл
СтрокаСравнения = "Контрагент";
Если (Строка[СтрокаСравнения] = СтрокаИмпорт[СтрокаСравнения]) Тогда
// приход-расход
Если (Строка.Приход > 0) И (СтрокаИмпорт.Приход > 0) И (Строка.Приход = СтрокаИмпорт.Приход) Тогда
// номер ПП есть в файле и совпадает с текущим
Если ЗначениеЗаполнено(Строка.НомерПП) И Строка.НомерПП <> СтрокаИмпорт.НомерПП Тогда
Продолжить;
КонецЕсли;
// совпало
Если ПервоеСовпадениеПриход Тогда
// эту строку из тзПлатежи удаляем
МассивУдаляемыхСтрок.Добавить(Строка);
ПервоеСовпадениеПриход = Ложь;
КонецЕсли;
КонецЕсли;
Если (Строка.Расход > 0) И (СтрокаИмпорт.Расход > 0) И (Строка.Расход = СтрокаИмпорт.Расход ) Тогда
// номер ПП есть в файле и совпадает с текущим
Если ЗначениеЗаполнено(Строка.НомерПП) И Строка.НомерПП <> СтрокаИмпорт.НомерПП Тогда
Продолжить;
КонецЕсли;
// совпало
Если ПервоеСовпадениеРасход Тогда
// эту строку из тзПлатежи удаляем
МассивУдаляемыхСтрок.Добавить(Строка);
ПервоеСовпадениеРасход = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого ЭлементМассива Из МассивУдаляемыхСтрок Цикл
тзПлатежи.Удалить(ЭлементМассива);
КонецЦикла;
// 5. Объединяем с тчИмпорт, в которой сейчас существующие платежи. Устанавливаем статусы
Для Каждого Строка Из тзПлатежи Цикл
НоваяСтрока = Объект.тчИмпорт.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
НоваяСтрока.Оплачен = Истина;
НоваяСтрока.Флаг = Истина;
КонецЦикла;
// 6. Сортируем тчИмпорт
СортировкаТчИмпорт();
//7. Удаление пустых строк
ЕстьПустые = Истина;
Пока ЕстьПустые цикл
ЕстьПустые = Ложь;
Для Каждого Сч из Объект.ТчИмпорт Цикл
Если Сч.ВидДокумента = "" Тогда
Объект.ТчИмпорт.Удалить(Сч);
ЕстьПустые = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецФункции
на локальной версии все ок. на сервере ошибка Итератор не определен. вот сюда кидает( Для Каждого Строка Из тзВыписка Цикл) поправьте где ошибка.