Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Янв 2018, 06:30
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Проблема при запуске чтения txt файла в фоне.  (Прочитано 2595 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Greiv

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-07-09
  • Сайт: 
  • Профессия: Ученик 1С
Возникает ошибка при попытке прочитать файл в фоне.

Код формы которая передаёт данные в общий модуль:
&НаКлиенте
Процедура Загрузка(Команда)
УникальныйИД  = Новый УникальныйИдентификатор;

ИмяФайла = "";
ВыборФайла(ИмяФайла, НСтр("ru='Выберите файл для загрузки данных'"),РежимДиалогаВыбораФайла.Открытие,"txt");

Если ИмяФайла = "" Тогда
Возврат;
КонецЕсли;
СтруктураЗагрузки = Новый Структура;

СтруктураЗагрузки.Вставить("Хранилище", ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла), Новый УникальныйИдентификатор));
РасчетныйСчет = ПредопределенноеЗначение("Справочник.БанковскиеСчетаОрганизаций.ПустаяСсылка");
ВвестиЗначение(РасчетныйСчет,"Расчетный счет организации",Тип("СправочникСсылка.БанковскиеСчетаОрганизаций"));
СтруктураЗагрузки.Вставить("РасчетныйСчет",  РасчетныйСчет);
СтруктураЗагрузки.Вставить("УникальныйИД", УникальныйИД);

ОбменДаннымиСФКР.ПоставитьЗагрузкуФайла(СтруктураЗагрузки);

КонецПроцедуры

Процедура которая получает структуру в общем модуле, а также постановка задания в фон:
Процедура ПоставитьЗагрузкуФайла(СтруктураЗагрузки) Экспорт 
Параметы = Новый Структура;
Параметы.Вставить("Файл", СтруктураЗагрузки.Хранилище);
Параметы.Вставить("РасчетныйСчет", СтруктураЗагрузки.РасчетныйСчет);
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(СтруктураЗагрузки.УникальныйИД, "ОбменДаннымиСФКР.ЗагрузитьФайл",
Параметы, "Загрузка файла банков ФКР");
КонецПроцедуры

Процедуры которые должны выполняться в фоне:
Процедура ЗагрузитьФайл(Параметры, Адрес)	Экспорт 

Текст = Новый ЧтениеТекста(Параметры.Файл); //Вот тут походу ошибка образуется

СтрокаТекста = Текст.ПрочитатьСтроку();
Пока НЕ СтрокаТекста = Неопределено Цикл

Если Найти(СтрокаТекста,"#")>0 Тогда
СтрокаТекста = Текст.ПрочитатьСтроку();
Продолжить;
КонецЕсли;

РазложитьСтрокуНаСервере(СтрокаТекста, Параметры.РасчетныйСчет);
СтрокаТекста = Текст.ПрочитатьСтроку();

КонецЦикла;


КонецПроцедуры

Процедура РазложитьСтрокуНаСервере(СтрокаТекста,РасчетныйСчет)


НоваяЗапись = РегистрыСведений.НачисленияДляОплатПоКассамККМ.СоздатьМенеджерЗаписи();
    НоваяЗапись.РасчетныйСчет = РасчетныйСчет;
СчетчикЦикла = 0;
Пока Истина Цикл



СчетчикЦикла = СчетчикЦикла+1;

РазделительЗначений = Найти(СтрокаТекста,";");

ТекЗначение = Лев(СтрокаТекста,  РазделительЗначений-1);

Если РазделительЗначений = 0 Тогда
ТекЗначение = СтрокаТекста;
КонецЕсли;


ТекстЗамены =  Лев(СтрокаТекста, РазделительЗначений);

Если СчетчикЦикла = 1 Тогда

НоваяЗапись.ФИО = ТекЗначение;

ИначеЕсли СчетчикЦикла = 2 Тогда

НаселенныйПункт = Справочники.НаселенныеПункты.НайтиПоНаименованию(ТекЗначение);

Если НаселенныйПункт.Пустая() Тогда
НовыйПункт = Справочники.НаселенныеПункты.СоздатьЭлемент();
НовыйПункт.Наименование = ТекЗначение;
НовыйПункт.Записать();
НаселенныйПункт = НовыйПункт.Ссылка;
КонецЕсли;

НоваяЗапись.НаселенныйПункт = Справочники.НаселенныеПункты.НайтиПоНаименованию(ТекЗначение);

ИначеЕсли СчетчикЦикла = 3 Тогда

Улица = Справочники.Улицы.НайтиПоНаименованию(ТекЗначение);

Если Улица.Пустая() Тогда
НоваяУлица = Справочники.Улицы.СоздатьЭлемент();
НоваяУлица.Наименование = ТекЗначение;
НоваяУлица.Записать();
Улица = НоваяУлица.Ссылка;
КонецЕсли;

НоваяЗапись.Улица = Улица;

ИначеЕсли СчетчикЦикла = 4 Тогда

НоваяЗапись.НомерДома = ТекЗначение;

ИначеЕсли СчетчикЦикла = 5 Тогда

НоваяЗапись.НомерКвартиры = ТекЗначение;

ИначеЕсли СчетчикЦикла = 6 Тогда

ЛицевойСчет = Справочники.ЛицевыеСчета.НайтиПоКоду(ТекЗначение);

НомерЛицевогСчета = СтрЗаменить(СокрЛП(ТекЗначение),Символы.НПП,"");
        ЛицевойСчет       = Справочники.ЛицевыеСчета.НайтиПоКоду(НомерЛицевогСчета);
        Если ЛицевойСчет.Пустая() Тогда
           
            ОбъектЛС = Справочники.ЛицевыеСчета.СоздатьЭлемент();
            ОбъектЛС.Код          = НомерЛицевогСчета;
            ОбъектЛС.Наименование = "Л/С № "+НомерЛицевогСчета;
            ОбъектЛС.Записать();
            ЛицевойСчет = ОбъектЛС.Ссылка;

        КонецЕсли;



НоваяЗапись.ЛицевойСчет = ЛицевойСчет;

ИначеЕсли СчетчикЦикла = 7 Тогда
НоваяЗапись.ВсегоКОплате = Число(ТекЗначение);
ИначеЕсли СчетчикЦикла = 8 Тогда

РасчетныйПериодСтрокой = СокрЛП(ТекЗначение);

МесяцЧислом  = Число(Лев(РасчетныйПериодСтрокой,2));     
Месяц        = Перечисления.Месяца[МесяцЧислом-1];
Год          = Прав(РасчетныйПериодСтрокой,4);
ГодЧислом    = Число(Год);
ПериодШтрихКод =Лев(РасчетныйПериодСтрокой,2)+Прав(РасчетныйПериодСтрокой,2);
КонецПериода = КонецМесяца(Дата(ГодЧислом,МесяцЧислом,01));

НаименованиеПериода = Строка(Месяц) + " "+Год+" г.";

РасчетныйПериод = Справочники.Периоды.НайтиПоНаименованию(НаименованиеПериода);

Если РасчетныйПериод.Пустая() Тогда

ОбъектПериод = Справочники.Периоды.СоздатьЭлемент();
ОбъектПериод.Год           = Год;
ОбъектПериод.Месяц         = Месяц;
ОбъектПериод.КонецПериода  = КонецПериода;
ОбъектПериод.Наименование  = НаименованиеПериода;
ОбъектПериод.ПериодСтрокой = РасчетныйПериодСтрокой;
ОбъектПериод.ПериодШтрихКод = ПериодШтрихКод;
ОбъектПериод.Записать();
РасчетныйПериод = ОбъектПериод.Ссылка;

КонецЕсли;
НоваяЗапись.РасчетныйПериод = РасчетныйПериод;
Иначе
Прервать;
КонецЕсли;

СтрокаТекста =  Сред(СтрокаТекста, РазделительЗначений+1);

КонецЦикла;

НоваяЗапись.Записать(Истина);


КонецПроцедуры

Сразу как начинается фоновое задание вылазиет ошибка:
{ОбщийМодуль.ОбменДаннымиСФКР.Модуль(169)}: Ошибка при вызове конструктора (ЧтениеТекста)
Не знаю в чём причина, может я где то ошибку не заметил?


Оффлайн blackmoon89

  • Разработчик 1С
  • ***
  • Сообщений: 105
  • РЕПУТАЦИЯ: 8
  • КПД: 8%
  • Регистрация: 2015-02-28
    • Skype: klimsrv
  • Компания: ООО Стимпроект
  • Профессия: Разработчик 1С
Наверное потому, что процедура выполняется на сервере, а вы задаете локальный путь к файлу. Т.е. Вы задаете (допустим) d:\test\МойФайл.txt

А на сервере диска D может нет вообще. Нужно указывать пути относительно локальных директорий сервера, ну соответственно файлик туда положить.

Оффлайн Greiv

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-07-09
  • Сайт: 
  • Профессия: Ученик 1С
Наверное потому, что процедура выполняется на сервере, а вы задаете локальный путь к файлу. Т.е. Вы задаете (допустим) d:\test\МойФайл.txt

А на сервере диска D может нет вообще. Нужно указывать пути относительно локальных директорий сервера, ну соответственно файлик туда положить.

Если посмотрите внимательно то там файл обрабатывается процедурой ВыборФайла, и затем помещается в хранилище целиком и только потом передаётся в структуре на сервер.

Оффлайн blackmoon89

  • Разработчик 1С
  • ***
  • Сообщений: 105
  • РЕПУТАЦИЯ: 8
  • КПД: 8%
  • Регистрация: 2015-02-28
    • Skype: klimsrv
  • Компания: ООО Стимпроект
  • Профессия: Разработчик 1С
Наверное потому, что процедура выполняется на сервере, а вы задаете локальный путь к файлу. Т.е. Вы задаете (допустим) d:\test\МойФайл.txt

А на сервере диска D может нет вообще. Нужно указывать пути относительно локальных директорий сервера, ну соответственно файлик туда положить.

Если посмотрите внимательно то там файл обрабатывается процедурой ВыборФайла, и затем помещается в хранилище целиком и только потом передаётся в структуре на сервер.
Если посмотрите внимательно на справку о ЧтениеТекста, то увидите, что там нужен путь к файлу на диске, а теперь взгляните, что присылаете вы.

ЧтениеТекста (TextReader)
По имени файла
Синтаксис:

Новый ЧтениеТекста(<ИмяФайла>, <Кодировка>, <РазделительСтрок>, <КонвертируемыйРазделительСтрок>, <МонопольныйРежим>)
Параметры:

<ИмяФайла> (обязательный)

Тип: Строка.
Имя текстового файла для чтения.
<Кодировка> (необязательный)

Тип: КодировкаТекста; Строка.
Определяет кодировку текста читаемого текстового файла (согласован с текстовым документом). Если параметр не задан, формат текста будет определен автоматически по сигнатуре BOM в начале файла; если сигнатура BOM в файле отсутствует, файл будет открыт в кодировке ANSI.

Кодировка может быть задана как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки.
Добавлено: 17 Мар 2015, 13:35

Файл сохраните на диск из хранилища, а потом вызывайте чтение с параметром пути к этому файлу.

Оффлайн Greiv

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-07-09
  • Сайт: 
  • Профессия: Ученик 1С
Наверное потому, что процедура выполняется на сервере, а вы задаете локальный путь к файлу. Т.е. Вы задаете (допустим) d:\test\МойФайл.txt

А на сервере диска D может нет вообще. Нужно указывать пути относительно локальных директорий сервера, ну соответственно файлик туда положить.

Если посмотрите внимательно то там файл обрабатывается процедурой ВыборФайла, и затем помещается в хранилище целиком и только потом передаётся в структуре на сервер.
Если посмотрите внимательно на справку о ЧтениеТекста, то увидите, что там нужен путь к файлу на диске, а теперь взгляните, что присылаете вы.

ЧтениеТекста (TextReader)
По имени файла
Синтаксис:

Новый ЧтениеТекста(<ИмяФайла>, <Кодировка>, <РазделительСтрок>, <КонвертируемыйРазделительСтрок>, <МонопольныйРежим>)
Параметры:

<ИмяФайла> (обязательный)

Тип: Строка.
Имя текстового файла для чтения.
<Кодировка> (необязательный)

Тип: КодировкаТекста; Строка.
Определяет кодировку текста читаемого текстового файла (согласован с текстовым документом). Если параметр не задан, формат текста будет определен автоматически по сигнатуре BOM в начале файла; если сигнатура BOM в файле отсутствует, файл будет открыт в кодировке ANSI.

Кодировка может быть задана как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки.
Добавлено: 17 Мар 2015, 13:35

Файл сохраните на диск из хранилища, а потом вызывайте чтение с параметром пути к этому файлу.

Понял попробую может и правда в этом причина.


Теги:
 

Проблема с выгрузкой НН в "Звит" Не найдено соответствие для схемы "J1201008"

Автор AldemaHРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 1240
Последний ответ 06 Июл 2016, 09:19
от AldemaH
проблема с "ЗагрузкаДанныхИзТабличногоДокумента"

Автор bratmaratРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 4862
Последний ответ 08 Янв 2014, 14:30
от LordWizard
Проблема с развертыванием окон и сохранением окон

Автор SokresРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 2618
Последний ответ 09 Дек 2015, 14:09
от pavl_vs
Проблема с отчетом "Перемещение товаров"

Автор sailРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3435
Последний ответ 14 Дек 2010, 20:27
от progmikon
1C 8.2 УПП проблема с отчетом "Задолженость по контрагентам"

Автор LeonidLeonidРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 3694
Последний ответ 26 Сен 2011, 20:42
от Dethmontt

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
106 Сообщений
AIFrame
100 Сообщений
alex0402
30 Сообщений
kiksi
19 Сообщений
pavl_vs
19 Сообщений
alexandr_ll
17 Сообщений
andron81_81
16 Сообщений
Norfolk
15 Сообщений
LexaK
13 Сообщений
BuhRust
12 Сообщений

* Кто онлайн

  • Точка Гостей: 271
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal