|
Заполнить регистр накопления из таблицы значений | ☑ | ||
---|---|---|---|---|
0
Alekzander
05.07.13
✎
09:39
|
Понимаю, что тема уже была, смотрел и анализировал, но всё же...
Стоит задача - выбрать данные регистра с отбором по дате, занести в ТЗ, свернуть её и снова загрузить в тот же регистр. Вычитал, что можно использовать следующую конструкцию: НаборЗаписей = РегистрыНакопления.ТоварыОрганизацийКПередаче.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); Для Каждого Стр Из ТЗ Цикл Отбор = Новый Структура(); Отбор.Вставить("Номенклатура",Стр.Номенклатура); Отбор.Вставить("Владелец",Стр.Владелец); Отбор.Вставить("Склад",Стр.Склад); Отбор.Вставить("ВидЗапасовПродавца",Стр.ВидЗапасовПродавца); Строки = ТЗ.НайтиСтроки(Отбор); Для Каждого Строка Из Строки Цикл Строка.Номенклатура = Стр.Номенклатура; Строка.ВидЗапасовПродавца = Стр.ВидЗапасовПродавца; Строка.Владелец = Стр.Владелец; Строка.Склад = Стр.Склад; Если Стр.Количество <= 0 Тогда //приход Строка.ВидДвижения = ВидДвиженияНакопления.Приход; Строка.Количество = -Стр.Количество; Иначе //расход Строка.ВидДвижения = ВидДвиженияНакопления.Расход; Строка.Количество = Стр.Количество; КонецЕсли; КонецЦикла; КонецЦикла; НаборЗаписей.Загрузить(Тз); НаборЗаписей.Записать(); Сейчас она во многом мне не нравится, хотя я точно не знаю, верная она или нет, в любом случае, выполняется она чертовски долго (почти 12 часов), существует ли другой вариант или можно как-то ускорить этот процесс, например, избавившись от вложенного цикла? |
|||
1
Alekzander
05.07.13
✎
09:40
|
Ах да, забыл самое главное. УТ 11.1 у меня)
|
|||
2
skunk
05.07.13
✎
09:42
|
"12 часов" это насколько записей?
|
|||
3
Alekzander
05.07.13
✎
09:44
|
(2) ну за день бывает около 100-200, суммарно за полмесяца (работаю на копии базы от 14 июня) приблизительно 1500-1700, не думаю, что это много.
|
|||
4
skunk
05.07.13
✎
09:48
|
|
|||
5
Alekzander
05.07.13
✎
09:50
|
(4) забыл эту часть кода приложить. Она есть, копия ТЗ, на которой выполняется свёртка.
|
|||
6
skunk
05.07.13
✎
09:51
|
(5)для чего тогда в цикле "Строки = ТЗ.НайтиСтроки(Отбор);"?
|
|||
7
ДенисЧ
05.07.13
✎
09:51
|
полторы тыщи записей - 12 часов????????
У тебя сервер на первом пне, что ли?? |
|||
8
Alekzander
05.07.13
✎
09:51
|
(4) там у меня ещё суммирование идёт по ресурсам Количество и Возвращено:
ТЗ2.Свернуть("Владелец, Номенклатура, Склад, ВидЗапасовПродавца", "Количество, Возвращено"); |
|||
9
Maxus43
05.07.13
✎
09:53
|
только расчету себестоимости на УПП позволено крутится больше 3-4 часов, всё остальное - очень кривой код ИМХО)
|
|||
10
skunk
05.07.13
✎
09:53
|
давай весь код сюда ... точнее обработку выложи куда-нибудь
|
|||
11
Alekzander
05.07.13
✎
09:59
|
(10) ок, щас
|
|||
12
Alekzander
05.07.13
✎
09:59
|
||||
13
skunk
05.07.13
✎
10:01
|
(12)пиля ... я забыл тут скачка файла из нета забанена
|
|||
14
skunk
05.07.13
✎
10:02
|
вырежи весь код ... и отправь письмом на [email protected]
|
|||
15
ptiz
05.07.13
✎
10:07
|
код - жееееесть...
в логику вникать на стал, но 1) соединение в запросе чудовищное 2) если делаешь поиск в больших таблицах - используй индексирование |
|||
16
Alekzander
05.07.13
✎
10:09
|
(14) готово
|
|||
17
skunk
05.07.13
✎
10:38
|
наверное надо как-то так сделать
|
|||
18
skunk
05.07.13
✎
10:40
|
ну это если на твой код орентироваться
|
|||
19
skunk
05.07.13
✎
10:40
|
и как мне кажеться, это
нзрнТовары.Отбор.Регистратор.Установить(Выборка.Регистратор); надо изменить на это нзрнТовары.Отбор.Регистратор.Установить(Документы.ПередачаТоваровМеждуОрганизациями.НайтиПоНомеру("000Т-000001")); |
|||
20
Alekzander
05.07.13
✎
11:06
|
(19) щас со старшим программистом сидим, он примерно такой же вариант подсказывает, как в (17). По крайней мере, я понял, что и без циклов можно обойтись, хотя вряд ли - в любом случае виды движений в каждой строке изменять придётся, но этот цикл навряд ли будет 12 часов выполняться)
|
|||
21
Alekzander
05.07.13
✎
11:09
|
(17) а, проглядел условие в запросе. Тогда цикл даром не нужен.
|
|||
22
skunk
05.07.13
✎
11:09
|
(20)они в самом запросе и меняються
|
|||
23
Alekzander
05.07.13
✎
12:55
|
Теперь проблема такая: вроде и установил отбор по регистратору - а всё равно идёт ругачка на его отсутствие, в чём может быть загвоздка?
|
|||
24
skunk
05.07.13
✎
13:03
|
(23)скорее всего в из-за (19) ... у тебя регистратор в отборе не соотвествует регистратору который устанавливается из таблицы значений
|
|||
25
skunk
05.07.13
✎
13:04
|
и кстати глянь может ли твой регистратор делать движения по данному регистру
|
|||
26
Alekzander
05.07.13
✎
13:17
|
(25) я даже просто тупо создаю документ "передача товаров", он стопудово делает движения по этому регистру, а в результате хоть бы хны.
Документ = Документы.ПередачаТоваровМеждуОрганизациями.СоздатьДокумент(); Документ.Дата = ТекущаяДата(); Документ.Записать(); нзрнТовары.Отбор.Регистратор.Установить(Документ); нзрнТовары.Загрузить(тзРезультат); нзрнТовары.Записать(); Может порядок неправильный или что ещё? |
|||
27
skunk
05.07.13
✎
13:20
|
(26)а в запрос ты его отдаешь?
|
|||
28
Alekzander
05.07.13
✎
13:21
|
(27) да в запросе есть Регистратор, пробовал, как раньше получалось нзрнТовары.Отбор.Регистратор.Установить(Выборка.Регистратор) - не пашет...
|
|||
29
skunk
05.07.13
✎
13:21
|
так что даст?
нзрнТовары = РегистрыНакопления.ТоварыОрганизацийКПередаче.СоздатьНаборЗаписей(); нзрнТовары.Загрузить(тзРезультат); нзрнТовары.Записать(); |
|||
30
Alekzander
05.07.13
✎
13:23
|
{Форма.Форма.Форма(59)}: Ошибка при вызове метода контекста (Записать)
нзрнТовары.Записать(); по причине: Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Товары организаций к передаче) Что и следовало ожидать... |
|||
31
skunk
05.07.13
✎
13:30
|
Документ = Документы.ПередачаТоваровМеждуОрганизациями.СоздатьДокумент();
Документ.Дата = ТекущаяДата(); Документ.Записать(); нзрнТовары.Отбор.Регистратор.Установить(Документ.Ссылка); |
|||
32
Alekzander
05.07.13
✎
13:34
|
(31) блиииииннн.... во я дурак... Ссылка же, ну конечно!))) Пятница, мозги совсем не пашут))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |