powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Универсальная обработка по разделению ТЧ документов
2 сообщений из 2, страница 1 из 1
Универсальная обработка по разделению ТЧ документов
    #36138850
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7.7
Ситуация - есть несколько видов документов с табличными частями по нескольку десятков тысяч строк (почему так получилось - отдельный разговор но вернуть всё "взад" уже нереально т.к. источника уже давно нет).

Собственно печать из них нереальна (сложная печ. форма с множеством графич. объектов и объединением ячеек). Таким образом самый порстой вариант - необходимо их разбить на несколько, в каждом из новых док-тов по паре тыс. строк чтоб было.

Пока пишу обработку по метаданным и Загрузить/Выгрузить табличные части возникла мысль может она уже есть и не надо лисапед придумывать ?
...
Рейтинг: 0 / 0
Универсальная обработка по разделению ТЧ документов
    #36139591
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вобщем не нашел ничего для "оптовой" работы - написал для разбивки одного док-та


Код: plaintext
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.
//*******************************************
Процедура Выполнить()
	Перем СпРекв;
	
	Если ВыбДок.Выбран() =  0  Тогда
		предупреждение("Выберите документ");
		возврат;
	конецЕсли;
	
	Если ВыбДок.КоличествоСтрок() =  0  Тогда
		предупреждение("Отсутствуют данные в табличной части");
		возврат;
	конецЕсли;
	
	Если ВыбДок.КвоСтрок =  0  Тогда
		предупреждение("Отсутствуют данные о количестве строк в создаваемых документах");
		возврат;
	конецЕсли;
	
	
	СпРекв = СоздатьОбъект("СписокЗначений");
	Док = создатьОбъект("Документ."+ВыбДок.Вид());
	Док.НайтиДокумент(ВыбДок);
	ВидДок = Док.Вид();
	
	КвоРекв = Метаданные.Документ(ВидДок).РеквизитШапки();
	Для Рекв =  1  по Метаданные.Документ(ВидДок).РеквизитШапки() Цикл
		Ид = Метаданные.Документ(ВидДок).РеквизитШапки(Рекв).Идентификатор;
		СпРекв.ДобавитьЗначение(Док.ПолучитьАтрибут(Ид),Ид);	
	КонецЦикла;
	
	ТекНачНом =  1 ;
	ТекКонНом = Мин(Док.КоличествоСтрок(),КвоСтрок);
	
	ТЧ = СоздатьОбъект("ТаблицаЗначений");
	Док.ВЫгрузитьТабличнуюЧасть(ТЧ);
	ТекТЧ  = СоздатьОбъект("ТаблицаЗначений");
	
	Пока ТекНачНом < ТЧ.КоличествоСтрок() Цикл
		ТекТЧ.УдалитьСтроки();
		ТЧ.Выгрузить(ТекТЧ,ТекНачНом,ТекКонНом);
		Если не(ТекТЧ.КоличествоСтрок() =  0 ) Тогда
			Док.Новый();
			Для поз =  1  по СпРекв.РазмерСписка() Цикл
				Ид = "";
				Зн = СпРекв.ПолучитьЗначение(поз,Ид);	
				Док.УстановитьАтрибут(Ид,Зн);
			КонецЦикла;
			Док.ЗагрузитьТабличнуюЧасть(ТекТЧ);
			Попытка
				Док.Записать();
				Сообщить("Записан документ "+Док.Вид()+Строка(Док.НомерДок)+" от "+Строка(Док.ДатаДок));
			Исключение
				Сообщить(ОписаниеОшибки());
			КонецПопытки;
		иначе
			возврат;
		КонецЕсли;
		ТекНачНом = ТекНачНом + КвоСтрок;
		ТекКонНом = Мин(ТЧ.КоличествоСтрок(),ТекКонНом + КвоСтрок);
		
	КонецЦикла;
КонецПроцедуры 


//*******************************************
Функция ПолучитьКвоДок()
	Если ВыбДок.Выбран() =  1  Тогда
		Если не(КвоСтрок =  0 ) Тогда
			ВсегоДок = Цел(ВыбДок.КоличествоСтрок()/КвоСтрок);
			Если не(ВыбДок.КоличествоСтрок()%КвоСтрок =  0 ) Тогда
				ВсегоДок = ВсегоДок +  1 ;
			КонецЕсли;
			Возврат "Всего "+Строка(ВыбДок.КоличествоСтрок())+" строк. Документов "+Строка(ВсегоДок);
		Иначе
			Возврат "Всего "+Строка(ВыбДок.КоличествоСтрок())+" строк";	
		конецЕсли;
	Иначе
		Возврат "";
	КонецЕсли;
КонецФункции 

//*******************************************
Процедура ИзмДокумент()
	Если ВыбДок.Выбран() =  1  Тогда
		КвоСтрок = ВыбДок.КоличествоСтрок();
	конецЕсли;
конецпроцедуры

КвоСтрок и ВыбДок - реквизиты диалговой формы, первое - число сколько строк в каждом документе будет (кроме последнего - там как получится но не более указанного) а второе - сам документ разделения (реквизит - документ неопределёного вида)
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Универсальная обработка по разделению ТЧ документов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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