powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Загрузка документов из TXT файла в 1С Бух 8.3!
6 сообщений из 6, страница 1 из 1
Загрузка документов из TXT файла в 1С Бух 8.3!
    #38633094
VVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VVA
Гость
Люди добрые помогите плиз, подскажите что и как можно оптимизировать для ускорения загрузки из тхт файла в 1С Бух 8.3.
Вообщем это мой первый опыт программирования на 8.3, прошу сразу не закидывать помидорами).

Вот несколько строк из файла:
#check#
405545 1 1267 20/02/2014 231,50 1 Торговый зал 0,00
#table#
111035 1 1 33,80 23,64 33,80 23,64 10 Булочка с изюмом 2шт Аргинэ
013720 1 1 2,00 0,81 2,00 0,81 18 Пакет майка Метатр 45х60
05198 1 1 96,40 60,49 96,40 60,49 18 Шницель с картоф. пюре под красным соус. Сытоедов 350гр
002962 1 1 35,90 21,01 35,90 21,01 18 Драже с арахисом М&М 70г
13731 1 1 63,40 44,31 63,40 44,31 10 Нектар Джей-7 Персик 0,97л
#end_check#
#check#
467975 4 1328 20/02/2014 230,00 1 Торговый зал 0,00
#table#
05180 1 1 124,80 78,32 124,80 78,32 18 Азу с рисом Сытоедов 350гр
09291 1 1 51,60 36,05 51,60 36,05 10 Сок Фруктовый сад Томат 0,95л
01790 1 1 54,00 39,93 54,00 39,93 18 Сигареты Винстон Сильвер
#end_check#
#check#


А вот и текст обработки (обработка работает, но если в файле много тысяч строк то работает очень долго):

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
	СЗ = Новый СписокЗначений;
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				СЗ.Добавить(Стр);
				Возврат СЗ;
			КонецЕсли;
			СЗ.Добавить(Лев(Стр,Поз-1));
			Стр = СокрЛ(Сред(Стр,Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				СЗ.Добавить(Стр);
				Возврат СЗ;
			КонецЕсли;
			СЗ.Добавить(Лев(Стр,Поз-1));
			Стр = Сред(Стр,Поз+ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;
КонецФункции

&НаКлиенте
Процедура ФайлДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	Режим = РежимДиалогаВыбораФайла.Открытие;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	Фильтр = НСтр("ru = 'Текст'; en = 'Text'")
    	+ "(*.txt)|*.txt";
	ДиалогОткрытияФайла.Фильтр = Фильтр;
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	ДиалогОткрытияФайла.Заголовок = "Выберите файл";
	Если ДиалогОткрытияФайла.Выбрать() Тогда
       	ВыбФайл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла);
		ФайлДанных = ВыбФайл.ПолноеИмя;
		Текст = Новый ТекстовыйДокумент; 
    	Текст.Прочитать(ФайлДанных);
		Текст.Записать(ФайлДанных,"UTF-8");
	Иначе
    	Предупреждение(НСтр("ru = 'Файл(ы) не выбран!'; en = 'File(s) not selected!'"));
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ЧекиККМ(Команда)
	ЧекиККМНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЧекиККМНаСервере()
	Сообщить(ТекущаяДата());
	Текст = Новый ТекстовыйДокумент; 
    Текст.Прочитать(ФайлДанных);
	
    Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл 
        Стр = Текст.ПолучитьСтроку(НомерСтроки);
		Если Стр="#check#" тогда
			сзШапка=глРазложить(Текст.ПолучитьСтроку(НомерСтроки+1),"	");
			Если сзШапка.Количество()=8 тогда
			    НККМ=Строка("ККМ№"+СзШапка.Получить(1));
				ДатаЧ=Строка(СзШапка.Получить(3));
				СкладР=Строка(СзШапка.Получить(6));
								
				Запрос = Новый Запрос;
				Запрос.Текст = 
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	ОтчетОРозничныхПродажах.Ссылка,
				|	ОтчетОРозничныхПродажах.Номер
				|ИЗ
				|	Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
				|ГДЕ
				|	ОтчетОРозничныхПродажах.Комментарий ПОДОБНО &НККМ
				|	И ОтчетОРозничныхПродажах.Дата >= &ДатаЧн
				|	И ОтчетОРозничныхПродажах.Дата <= &ДатаЧк";
				
				Запрос.УстановитьПараметр("НККМ", СокрЛП(НККМ));
				ДатаЧн=глРазложить(ДатаЧ,"/");
				ДатаЧ=""+ДатаЧн.Получить(2)+ДатаЧн.Получить(1)+ДатаЧн.Получить(0);
				Запрос.УстановитьПараметр("ДатаЧн", Дата(СокрЛП(ДатаЧ)));
				Запрос.УстановитьПараметр("ДатаЧк", КонецДня(Дата(СокрЛП(ДатаЧ))));
				РезультатЗапроса = Запрос.Выполнить();
				ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
				
				Если ВыборкаДетальныеЗаписи.Количество()=1 Тогда
					Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
						ДокНом=ВыборкаДетальныеЗаписи.Номер;
					КонецЦикла;
                    ОтчРозПрод=Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру(ДокНом,ДатаЧ);
					//Сообщить("Нашли документ-"+ОтчРозПрод);
					ОтчРозПродР=ОтчРозПрод.ПолучитьОбъект();
					
				Иначе
					//Сообщить("Создаем новый документ");
					ОтчРозПродР=Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
					ОтчРозПродР.Дата=Дата(СокрЛП(ДатаЧ));
					ОтчРозПродР.ВидОперации=Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетККМОПродажах;
					ОтчРозПродР.Склад=Справочники.Склады.НайтиПоНаименованию(СокрЛП(СкладР),1).Ссылка;
					ОтчРозПродР.СчетКасса=ПланыСчетов.Хозрасчетный.КассаОрганизации;
					ОтчРозПродР.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643");
					ОтчРозПродР.Комментарий=СокрЛП(НККМ);
					ОтчРозПродР.Организация=Фирма.Ссылка;
					ОтчРозПродР.Ответственный=ПараметрыСеанса.АвторизованныйПользователь;
					ОтчРозПродР.СуммаВключаетНДС=Истина;
				КонецЕсли;
			КонецЕсли;
			НомерСтроки=НомерСтроки+1;
			Продолжить;
		КонецЕсли;
		
		Если Стр="#table#" тогда
			Продолжить;
		КонецЕсли;
				
		Если Стр<>"#end_check#" тогда
			сзТело=глРазложить(Текст.ПолучитьСтроку(НомерСтроки),"	");
			Если сзТело.Количество()=9 тогда
				спрТов=Справочники.Номенклатура;
				Тов=спрТов.НайтиПоРеквизиту("Артикул",СокрЛП(Строка(сзТело.Получить(0))));
				
				Если Тов=Справочники.Номенклатура.ПустаяСсылка() Тогда
					ТовН=спрТов.СоздатьЭлемент();
					ТовН.Артикул=СокрЛП(Строка(сзТело.Получить(0)));
					ТовН.Родитель=спрТов.НайтиПоНаименованию("Товары",1);
					ТовН.Наименование=сзТело.Получить(8);
					ТовН.НаименованиеПолное=сзТело.Получить(8);
					Если Строка(сзТело.Получить(1))="1" тогда
						ТовН.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
					КонецЕсли;
					Если Строка(сзТело.Получить(1))="2" тогда
						ТовН.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
					КонецЕсли;
					ТовН.СтавкаНДС=СокрЛП(сзТело.Получить(7))+"%";
					Если Строка(сзТело.Получить(7))="10" Тогда
						ТовН.СтавкаНДС=Перечисления.СтавкиНДС.НДС10;
					КонецЕсли;
					Если Строка(сзТело.Получить(7))="18" Тогда
						ТовН.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
					КонецЕсли;
					ТовН.Записать();
					Тов=ТовН.Ссылка;
				КонецЕсли;
				
				ТовВдок=ОтчРозПродР.Товары.Найти(Тов);
				
				Если ПустаяСтрока(ТовВдок) тогда
					нТов=ОтчРозПродР.Товары.Добавить();
					нТов.Номенклатура=Тов;
					нТов.Количество=Число(Строка(сзТело.Получить(2)));
					нТов.Цена=Число(Строка(сзТело.Получить(3)));
					нТов.Сумма=нТов.Количество*нТов.Цена;
					Если Строка(сзТело.Получить(7))="10" Тогда
						нТов.СтавкаНДС=Перечисления.СтавкиНДС.НДС10;
						нТов.СуммаНДС=нТов.Сумма*0.10;
					КонецЕсли;
					Если Строка(сзТело.Получить(7))="18" Тогда
						нТов.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
						нТов.СуммаНДС=нТов.Сумма*0.18;
					КонецЕсли;
					
					нТов.СчетУчета=ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахАТТ;
					нТов.СчетДоходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
					нТов.СчетРасходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
					нТов.СчетУчетаНДСПоРеализации=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03");
				Иначе
					нТов=ТовВдок;
					нТов.Количество=нТов.Количество+Число(Строка(сзТело.Получить(2)));
					нТов.Сумма=нТов.Количество*нТов.Цена;
					Если Строка(сзТело.Получить(7))="10" Тогда
						нТов.СуммаНДС=нТов.Сумма*0.10;
					КонецЕсли;
					Если Строка(сзТело.Получить(7))="18" Тогда
						нТов.СуммаНДС=нТов.Сумма*0.18;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		Если Стр="#end_check#" тогда
			Если ОтчРозПрод<>Документы.ОтчетОРозничныхПродажах.ПустаяСсылка() тогда
				ОтчРозПродР.Записать(РежимЗаписиДокумента.Проведение);
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	Сообщить(ТекущаяДата());
КонецПроцедуры
...
Рейтинг: 0 / 0
Загрузка документов из TXT файла в 1С Бух 8.3!
    #38633145
Сисой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Время 1Сников стоит денег. Не умеешь сам - делись. Максимум, чем могут помочь - накидать паттерн. Сотни строк кода бесплатно никто оптимизировать не станет.
...
Рейтинг: 0 / 0
Загрузка документов из TXT файла в 1С Бух 8.3!
    #38633152
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VVA,
0) А нельзя сделать одну проверку на существование ранее загруженного чека(ов)?

1) Все НайтиПо... вынести из цикла, заменив переменными.


2) Если ВыборкаДетальныеЗаписи.Количество()=1 Тогда
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
заменить на
Если ВыборкаДетальныеЗаписи.Следующий() Тогда


3) ОтчРозПрод=Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру(ДокНом,ДатаЧ);
//Сообщить("Нашли документ-"+ОтчРозПрод);
ОтчРозПродР=ОтчРозПрод.ПолучитьОбъект();
заменить на
ОтчРозПродР=ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();

Не забыть всю загрузку оформить ввиде одной транзакции.
...
Рейтинг: 0 / 0
Загрузка документов из TXT файла в 1С Бух 8.3!
    #38633170
VVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VVA
Гость
AHDP,

Спасибо большое!!! Буду подправлять!
Мне вот еще посоветовали сначала файл в ТаблицуЗначений засунуть, говорят так быстрее буит, так ли это?
...
Рейтинг: 0 / 0
Загрузка документов из TXT файла в 1С Бух 8.3!
    #38633398
Титов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отностительно быстрее в зависимоти от того как будете обрабатывать
...
Рейтинг: 0 / 0
Загрузка документов из TXT файла в 1С Бух 8.3!
    #38633580
Хитроглазый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VVAAHDP,

Спасибо большое!!! Буду подправлять!
Мне вот еще посоветовали сначала файл в ТаблицуЗначений засунуть, говорят так быстрее буит, так ли это?

с этого и надо начинать
+пакетный запрос - туда же все твои "НайтиПо..." должны переехать
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Загрузка документов из TXT файла в 1С Бух 8.3!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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