Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / загрузка из txt в 1с 8 / 3 сообщений из 3, страница 1 из 1
16.08.2011, 10:45
    #37397185
Сергей1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка из txt в 1с 8
Здравствуйте! При написании обработки загрузки текстового файла формата txt в 1с 8.2 возникает следующая ошибка : Ошибка при вызове метода контекста (Записать)
док.Записать();
по причине:
Значение поля "Дата" не может быть пустой датой. В чём причина не могу понять. Нужно загрузить данные в документ ПоступлениеТоваровУслуг.

Сам код следующий:

Функция ПарсерСтроки(стр)
Разд = Символ(183);
Струк = новый Структура;
п=0;
поз = найти(стр,Разд);
пока поз>0 цикл
п = п+1;
Данные = Лев(стр,поз-1);
Струк.Вставить("п"+строка(п),Данные);
стр = Сред(стр,поз+1,стрдлина(стр));
поз = найти(стр,Разд);
КонецЦикла;
Если п=0 и ПустаяСтрока(стр) тогда Возврат Неопределено; конецЕсли;
п = п + 1;
Струк.Вставить("п"+строка(п),стр);
Возврат струк;
КонецФункции


Процедура КнопкаВыполнитьНажатие(Кнопка)
тт = новый ТекстовыйДокумент;
тт.Прочитать(ПутьКФайлам+"\prihod.txt");
для нс=1 по тт.КоличествоСтрок() цикл
попытка
стр = тт.ПолучитьСтроку(нс);
исключение
прервать;
КонецПопытки;
Если стр="[SC]" или стр="НАКЛ_ПР" тогда продолжить; конецЕсли;
Если стр = "" Тогда прервать; КонецЕсли;
дан = ПарсерСтроки(стр);
Номер = дан.п1;
нс = нс+1;
стр = тт.ПолучитьСтроку(нс);
дан = ПарсерСтроки(стр);
тд = дан.п1;

ДатаДок = сред(тд,7,4)+сред(тд,4,2)+сред(тд,1,2)+"0000";

Если дан<>Неопределено тогда

ДокИск = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(дан.п1,ТекущаяДата());
Если ДокИск = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка() тогда
Док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Иначе
док = ДокИск.ПолучитьОбъект();
КонецЕсли;

док.Товары.очистить();

ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(док, глЗначениеПеременной("глТекущийПользователь"), Константы.ВалютаРегламентированногоУчета.Получить(), "Покупка");
док.Дата = ДатаДок;

нс = нс+1;
стр = тт.ПолучитьСтроку(нс);
дан = ПарсерСтроки(стр);
стр = сред(стр,6,стрдлина(стр));
док.Комментарий = дан.п1;

нс = нс+1;
стр = тт.ПолучитьСтроку(нс);
стр = сред(стр,5,стрдлина(стр));
дан = ПарсерСтроки(стр);
док.СуммаДокумента = дан.п1;

нс = нс + 1;
стр = тт.ПолучитьСтроку(нс);
дан = ПарсерСтроки(стр);

док.СуммаВключаетНДС = ложь;
док.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;
док.УчитыватьНДС = Истина;

док.Товары.Очистить();
Пока стр<>"/[AA]" цикл
Если дан=Неопределено тогда
Сообщить("Ошибка разбора строки "+нс);
Продолжить;
КонецЕсли;
док.СкладОрдер = Справочники.Склады.НайтиПоКоду("000000001");


новстр = док.Товары.Добавить();
новстр.Склад = док.СкладОрдер;
новстр.Количество = сред(дан.п14,2,стрдлина(дан.п14));
Номен = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",дан.п1);
Если номен = Справочники.Номенклатура.ПустаяСсылка() тогда
Сообщить("Добавляю номенклатуру "+дан.п3);
НовСпр = Справочники.Номенклатура.СоздатьЭлемент();
НовСпр.Наименование = дан.п3;
НовСпр.Артикул = дан.п1;
НовСпр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
новспр.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
новспр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
новспр.Записать();
ед = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
ед.ЕдиницаПоКлассификатору = новспр.БазоваяЕдиницаИзмерения;
ед.Коэффициент = 1;
ед.Наименование = дан.п5;
ед.Владелец = НовСпр.Ссылка;
ед.Записать();
новспр.ЕдиницаДляОтчетов = ед.Ссылка;
новспр.ЕдиницаХраненияОстатков = ед.Ссылка;
новспр.Записать();
номен = новспр.Ссылка;
КонецЕсли;
новстр.Номенклатура = номен;
новстр.Цена = дан.п16;
новстр.ЕдиницаИзмерения = номен.ЕдиницаДляОтчетов;
новстр.Сумма = новстр.Количество * новстр.цена;
новстр.СтавкаНДС = номен.СтавкаНДС;
новстр.СуммаНДС = ?(новстр.СтавкаНДС=Перечисления.СтавкиНДС.НДС20,новстр.Сумма/5,0);


ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(новстр, док);
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(новстр, док);

док.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(новстр, "Товары", истина, истина);

нс = нс + 1;
стр = тт.ПолучитьСтроку(нс);
дан = ПарсерСтроки(стр);

КонецЦикла;

нс = нс + 1;
стр = тт.ПолучитьСтроку(нс);
дан = ПарсерСтроки(стр);
Контр = Справочники.Контрагенты.НайтиПоРеквизиту("КодПоЕДРПОУ",дан.п7);
нс = нс + 1;
Если контр = Справочники.Контрагенты.ПустаяСсылка() тогда
Сообщить("Создаю Контрагента "+дан.п2);
НовКонтр = Справочники.Контрагенты.СоздатьЭлемент();
НовКонтр.Наименование = дан.п2;
НовКонтр.Покупатель = истина;
НовКонтр.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
НовКонтр.КодПоЕДРПОУ = дан.п7;
НовКонтр.Записать();
Дог = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
дог.Организация = док.Организация;
Дог.ВалютаВзаиморасчетов = док.ВалютаДокумента;
Дог.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
дог.Владелец = НовКонтр.Ссылка;
дог.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
дог.СхемаНалоговогоУчета = Справочники.СхемыНалоговогоУчетаПоДоговорамКонтрагентов.ПоПервомуСобытию;
дог.СхемаНалоговогоУчетаПоТаре = Справочники.СхемыНалоговогоУчетаПоДоговорамКонтрагентов.ПоПервомуСобытию;
дог.Наименование = "Новый авто договор";
дог.Записать();
новконтр.ОсновнойДоговорКонтрагента = дог.Ссылка;
НовКонтр.Записать();
Контр = НовКонтр.Ссылка;
КонецЕсли;
Док.Контрагент = Контр;
док.ДоговорКонтрагента = Контр.ОсновнойДоговорКонтрагента;

//Заполним счета взаиморасчетов и т.д.
Док.ЗаполнитьСчетаУчетаВТабЧасти(док.Товары , "Товары" , Истина, истина);

СчетаУчета = УправлениеВзаиморасчетами.ПолучитьСчетаРасчетовСКонтрагентом(док.Организация, док.Контрагент, док.ДоговорКонтрагента);
док.СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателя;
док.СчетУчетаРасчетовПоАвансам = СчетаУчета.СчетАвансовПокупателя;
док.СчетУчетаРасчетовПоТаре = СчетаУчета.СчетУчетаТарыПокупателя;
док.СчетУчетаРасчетовПоТареПоАвансам = СчетаУчета.СчетАвансовПоТареПокупателя;

док.СчетУчетаНДС = СчетаУчета.СчетУчетаНДСПродаж;
док.СчетУчетаНДСПодтвержденный = СчетаУчета.СчетУчетаНДСПродажПодтвержденный;

док.Записать();
Сообщить(док);

Иначе прервать;
КонецЕсли;

КонецЦикла;
...
Рейтинг: 0 / 0
16.08.2011, 11:25
    #37397278
nicktcher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка из txt в 1с 8
Сергей1981,

Проверьте значение переменной ДатаДок на момент возникновения ошибки, видимо у неё неверное значение или формат. Проверьте корректно ли парсер работает
...
Рейтинг: 0 / 0
20.08.2011, 12:54
    #37404428
rub_en
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
загрузка из txt в 1с 8
Попробуй сделать
док.Дата = Дата(ДатаДок);
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / загрузка из txt в 1с 8 / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]