есть внешняя обработка для каждого банка вот это для укрсиба (exel) тут обрабатываем и передаем в основную выгрузку
КодФункция Импорт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. Удаление пустых строк
ЕстьПустые = Истина;
Пока ЕстьПустые цикл
ЕстьПустые = Ложь;
Для Каждого Сч из Объект.ТчИмпорт Цикл
Если Сч.ВидДокумента = "" Тогда
Объект.ТчИмпорт.Удалить(Сч);
ЕстьПустые = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецФункции
на локальной версии все ок. на сервере ошибка Итератор не определен. вот сюда кидает( Для Каждого Строка Из тзВыписка Цикл) поправьте где ошибка.
Ошибка означает, что тзВыписка - не коллекция, не объект с элементами.
Предполагаю, ошибка где-то в попытке, и в тзВыписка функция возвращает Неопределено.
Если вы говорите, что на сервере, где работает Сервер 1с:Предприятия, установлен Excel, то, возможно, какой-то из используемых вами Excel-методов выдает ошибку.
Petre @ Сегодня, 10:25
,
я его сносил, не решает это проблему
тажа обработка тажа выписка. на локалке работает на сервере нет
платформа 1с 8.3 уже давно умеет читать таблицы ексель. Пора отказываться от COMОбъект("Excel.Application") ...
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua