Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Вопрос по работе с ТаблицейЗначенией (http://forums.kuban.ru/f1040/vopros_po_rabote_s_tablicejznacheniej-2594770.html)

MiniMuk23 12.05.2012 10:02

Вопрос по работе с ТаблицейЗначенией
 
Извеняюсь за нубовопрос, но сталкнулся с задачей и не могу найти красивого решения, хотя интуитивно думаю что оно должно быть... Может кто подскажет...
Задача такая. Есть большая таблица (ТЗ1), необходимо ее отработать по частям (то есть допустим по 1000 строк.) И результат собрать в новой таблице ТЗ2. Знаю что странная идея, но можно ли в данном случаи обойтись без циклов перебора построчного?

Я знаю что можно обходя циклом ТЗ1 формировать по 1000 строк вспомогательную таблицу, отработать получив результат и его обойдя циклом добавить в ТЗ2.

Должны же быть методы которые позволят это более правильно сделать. Например выбрать из ТЗ строки с X по Y?

который не честный 12.05.2012 10:09

Заполнить(<?>,,,);
Синтаксис:
Заполнить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>)
Назначение:
Заполнить соответствующие ячейки таблицы значений переданным значением.
Параметры:
<Знач> - значение одиночное или список значений или таблица значений.
<НачСтрока> - необязательный параметр. Номер начальной строки, с которой надо начинать заполнение. Значение по умолчанию 1.
<КонСтрока> - необязательный параметр. Номер последней строки, по которую надо заполнять. Если не указана, то до последней.
<Колонки> - необязательный параметр. Номера или идентификаторы колонок, которые надо заполнять. Если параметр не задан, то заполняются все

Чучундер 12.05.2012 10:27

Перепутав в (1) первый и последний параметр - 1Ску вышибает в аут сразу.. мгновенно...

MiniMuk23 12.05.2012 10:28

Это в 8 такой метод? Если да то как им пользоваться? У ТаблицыЗначений такого метода не увидел в синтаксис помошнике... Буду признателен за пример...

Uho 12.05.2012 10:43

Где ты написал, что это 8?

Скопировать()

Только не нужна тебе ТЗ вообще

MiniMuk23 12.05.2012 11:05

я просто раздел выбрал v8... Но согласен отметить надо было отметить...

Не могу понять как мне с помощью Скопировать в результате в Новой таблице получить строки например с 1000 по 2000? Я так понимаю отбором ограничить только можно но там же только на равенство вроде? Напишите пример плз. Буду очень признателен

Uho 12.05.2012 11:38

ты не ответил на главный вопрос - зачем?
99%, что ТЗ вообще не нужна

MiniMuk23 12.05.2012 11:45

Есть мысль что из-за этого будет выигрыш во времени. (Хотя в теории этого не должно быть). Просто обработка Таблицы в 400 000 идет несколько часов, а в 40 000 5-7 минут. Хотим проверить будет ли быстрее если частями отработать большую таблицу. В обработке очень наверченый запрос суть которого не передать... Начальство не успокоится пока не проверим эту теорию, а несколько построчных циклов для формирования минитаблиц - это левое время которое хочу отсечь.

angro 12.05.2012 11:48

судя по тому что сильно меняется время, идёт поиск по таблице. может просто проиндексировать нужное поле?

angro 12.05.2012 11:48

+8 код покажи

Uho 12.05.2012 11:50

"Большая таблица" то как то получается. Смотреть надо в сторону ее формирования...


[quote=MiniMuk23;25001451]Просто обработка Таблицы в 400 000 идет несколько часов, а в 40 000 5-7 минут.[/quote]
имхается мне, что в коде грубейшая ошибка (типа цикла в цикле)

MiniMuk23 12.05.2012 11:57

Код показать проблемотично, но идею с Поиском в таблице проверю обязательно. Спс за совет.

Но мы удалились от темы :) Я так понимаю нет возможности разбить таблицу на части по количеству строк?

Пацталоцци 13.05.2012 11:51

розроботчег, блин!
вместо удаления гланд через Ж, лучше покажи свой код.
Где-то кривизна там у тебя, причём похоже очень грубая.
Возможно, у тебя в ТЗ есть клолнка с типом ссылка на справочник или на документ (например, "Док"), и в цикле по строкам ты используешь эту ссылку для разыменования:
а = СтрокаТЗ.Док.КакойТоРеквизитДокумента;

USSR 13.05.2012 12:02

Что в ТЗ в 40 000 строк можно обрабатывать 5 минут? Я уж молчу про несколько часов пусть и 400 000 строк. Видимо проблема все-таки в проблемОтичном коде. Искать надо в уонсерватории

Чучундер 13.05.2012 23:13

(13) йо, браз! а что может при загрузке их иксемеля часами грузить...? как написано - так и работает... иногда проще подождать 5-7 минут три раза в меясц, чем портатить полдня и более на переписывание.. и не факт что переписанное будет лучше

USSR 14.05.2012 04:37

(14)Не подменяй понятия. При работе с XML - именно XML и есть узкое место, а не ТЗ

Одинэсник 14.05.2012 06:56

формировать сразу правильную тз не предлагали исчо?

MiniMuk23 14.05.2012 07:50

Узкое место нашел, скорость улучшил. За подсказки всем спасибо, но ради любопытства успокоиться не могу. Неужели в 1с8 нет нормальных команд:
1)Выбрать из ТЗ часть строк не по отбору определенного значения, а тупо по количеству строк
2) Как к одной таблице дописать строки из другой таблицы такой же структуры.
Неужели только пакетными запросами курочить?

101 14.05.2012 07:53

(17) за работу с ТЗ в восьмерке ...
ЗЫ бить будут

MiniMuk23 14.05.2012 08:44

форум есть форум :) Тыкнуть в то, что не оптимально все готовы (хотя и сами знаем, что не совсем оптимально), а по делу ни одного комментария.

101 14.05.2012 08:55

(19) Задача такая. Есть большая таблица (ТЗ1) (цоперайт)
ЗЫ ничо нигде никак ? чо тут подсказывать та

VZ 14.05.2012 09:03

19-MiniMuk23 > Любишь выходы через жопу? Твое суверенное право. Мы люди гуманные...
Код у него... секретный очень. :D

Sadovnikov 14.05.2012 09:17

21-VZ > Мне тоже иногда бывает стыдно код показывать...

EvG32 14.05.2012 10:14

а шо, запросы отменили ?

EvG32 14.05.2012 10:16

почему это "ломать", нормальный запрос - нормальный результат, без ломки

Чучундер 22.05.2012 18:49

(22) а мну - нет. работает и работает. манагера устраивает. зачем тратить полдня-день-два, чтобы поднять удобство-производительность юзера на 0.2%...? конечно, если делать СОВСЕМ УЖЕ НЕЧЕГО...

Viking 22.05.2012 22:07

интересно, что автору мешает ПЕРЕД обработкой ТЗ проверить сколько строк и сделать цикл по индексу с разбиением по интервалам???? мне минут 5...


Текущее время: 22:51. Часовой пояс GMT +3.