|
v7: RE: Регистр ОстаткиТовара | ☑ | ||
---|---|---|---|---|
0
Janna26
02.07.12
✎
13:35
|
Всем привет. Снова проблема. И все с оптимизацией. Посоветуйте пожалуйста. Мне нужно выгрузить весь регистр товаров из 7.7 и загрузить его в аналогичный регистр на 8.2 (Ну практически аналогичный. Сама сделала) Проблема в том что даже когда формируешь отчет по регистру там 450т строк(думала через эксель грузить). есть какой нить выход? Через ком отрабатывает примерно неделю.
|
|||
1
miki
02.07.12
✎
13:36
|
а сколько раз необходимо перекачивать остатки?
|
|||
2
1Сергей
02.07.12
✎
13:37
|
450т строк - это очень мало
|
|||
3
welwel
02.07.12
✎
13:39
|
КД не предлагать?
|
|||
4
Janna26
02.07.12
✎
13:39
|
(1) Возможно 1 раз. Но это надо сделать как обычно вчера :(
|
|||
5
Janna26
02.07.12
✎
13:40
|
(3) с КД очень мало работала.
|
|||
6
Mikeware
02.07.12
✎
13:41
|
КД. Или прямой запрос к клюшечной базе.
|
|||
7
viktor_vv
02.07.12
✎
13:41
|
А вы как собрались выгружать ? Без документов, что ли ?
|
|||
8
welwel
02.07.12
✎
13:41
|
(5) тогда подключиться через OLE
|
|||
9
Mikeware
02.07.12
✎
13:42
|
кстати, а что значит "весь регистр"?
|
|||
10
Janna26
02.07.12
✎
13:42
|
(7) там обработка которая все делает через ком. Документы мне не нужны. Мне нужно на процесс перехода настроить работу 7.7 и 8.2 в режиме синхронизации.
|
|||
11
Janna26
02.07.12
✎
13:43
|
(9) я думала выгрузить весь регистр в 8.2 и при необходимости. т.к все остатки не нужны стразу дергать их от туда.
|
|||
12
Mikeware
02.07.12
✎
13:43
|
(11) еще раз: что значит "весь регистр"?
|
|||
13
Janna26
02.07.12
✎
13:43
|
(8) пробовала подключиться через ком и использовать фильтр на регистр и получить остаток. На одну позицию уходит в 140 сек.
|
|||
14
Janna26
02.07.12
✎
13:44
|
(12) мне нужны Итоги по регистру ОстаткиТоваров.
|
|||
15
zender
02.07.12
✎
13:44
|
(0) dbf, xml не пробовала?
|
|||
16
dk
02.07.12
✎
13:44
|
имхо, КД тоже умрет на 450 тыс
может сначала свернуть / выправить остатки по регистру? |
|||
17
Janna26
02.07.12
✎
13:44
|
(15 не пробовала.
|
|||
18
Mikeware
02.07.12
✎
13:45
|
(13) проблема в соотношении радиусов, похоже...
|
|||
19
welwel
02.07.12
✎
13:46
|
если (4)
то можно хоть через txt 450тыс пугать не должно - можно разбить на несколько файлов |
|||
20
miki
02.07.12
✎
13:46
|
чё-то я не понял. Что значит "доки не нужны", что такое "режим синхронизации"?
(14)ну и выгрузи один раз. Пусть долго. |
|||
21
zender
02.07.12
✎
13:48
|
(15) если нужно быстро, т.е. "вчера" - то dbf, но там ограничение на размер файла 2 Гб, по идее 450к строк должно влезть.
|
|||
22
zender
02.07.12
✎
13:48
|
(21) -> (17)
|
|||
23
viktor_vv
02.07.12
✎
13:49
|
Так если только остатки, то откуда там 450 тыс строк ?
И вот эти два утверждения как-то дург другу противоречат. "Документы мне не нужны." и "Мне нужно на процесс перехода настроить работу 7.7 и 8.2 в режиме синхронизации.". |
|||
24
1Сергей
02.07.12
✎
13:49
|
(21) не пойдёт. Это кодить надо
|
|||
25
miki
02.07.12
✎
13:49
|
(17)сколько у вас товаров, складов, фирм?
|
|||
26
zender
02.07.12
✎
13:54
|
(24) Хм... а как же "аналогичный регистр на 8.2 (Ну практически аналогичный. Сама сделала)" в (0) ?
|
|||
27
1Сергей
02.07.12
✎
13:55
|
(26) 8.2 <> 7.7
|
|||
28
zender
02.07.12
✎
13:59
|
(28) стоит подождать ТС, а то не ясен ее уровень знаний 1С
|
|||
29
welwel
02.07.12
✎
14:02
|
(28) по этому поводу см. фото
|
|||
30
Janna26
02.07.12
✎
14:11
|
Так фото с уровнем знаний не путать.
|
|||
31
Janna26
02.07.12
✎
14:11
|
Фирм около 20, складов 40. Остатки в разрезе характеристик.
|
|||
32
Janna26
02.07.12
✎
14:12
|
Номенклатуры 26к позиций.
|
|||
33
miki
02.07.12
✎
14:14
|
(31)наложи фильтры или 20 раз на фирмы, или 40 раз на склады, или 800 раз на пару фирма/склад.
|
|||
34
Janna26
02.07.12
✎
14:24
|
(33) Я делала каким обарзом
Ном77 = CreateObject("Справочник.Номенклатура"); Для каждого стр из Товары цикл Ном77.НайтиПоКоду(Стр.Код,0); Рег = CreateObject("Регистр.ОстаткиТоваров"); Рег.УстановитьЗначениеФильтра("Товар",Ном77); Рег.ВыбратьДвижения(); Пока Рег.ПолучитьДвижение()=1 Цикл //действия КонецЦикла; КонецЦикла; |
|||
35
Janna26
02.07.12
✎
14:24
|
Может как нить это можно оптимизировать?
|
|||
36
Janna26
02.07.12
✎
14:24
|
Рег = CreateObject("Регистр.ОстаткиТоваров"); тоже за циклом стоит.
|
|||
37
1Сергей
02.07.12
✎
14:27
|
(34) опять не понятно. Тебе нужны движения или, всё-таки, остатки?
|
|||
38
Janna26
02.07.12
✎
14:28
|
(37) Ой извините кажется не тот кусок :(
|
|||
39
Janna26
02.07.12
✎
14:30
|
Ном77 = V7.CreateObject("Справочник.Номенклатура");
рег = v7.CreateObject("Регистр.ОстаткиТоваров"); Для каждого стр из МассивДанных цикл Ном77.НайтиПоКоду(СоздатьКодДля77(Стр.Ссылка82.Код),0); рег.УстановитьЗначениеФильтра("Товар",Ном77); рег.ВыбратьИтоги(); Пока рег.ПолучитьИтог()=1 Цикл КонецЦикла; |
|||
40
Janna26
02.07.12
✎
14:31
|
Рег.ВыбратьИтоги() Отрабатывает 140 секунд в отладчике.
|
|||
41
Janna26
02.07.12
✎
14:31
|
Пробовала передать в фильтр список значений, но на ком соединении это не работает :(
|
|||
42
1Сергей
02.07.12
✎
14:31
|
(39) нужно все товары или выборочно?
|
|||
43
Janna26
02.07.12
✎
14:33
|
(42) Если делать так то нужно выборочно. Все нужно если не получится свести выбор к минимуму.
|
|||
44
1Сергей
02.07.12
✎
14:33
|
(39) рег.УстановитьЗначениеФильтра("Товар",Ном77.ТекущийЭлемент());
|
|||
45
Janna26
02.07.12
✎
14:34
|
(44) и будет быстрей работать?
|
|||
46
1Сергей
02.07.12
✎
14:35
|
(45) так будет работать, по крайней мере, правильно :)
попробуй |
|||
47
1Сергей
02.07.12
✎
14:39
|
(45) Кстати, хорошая у Вас собачка :)
|
|||
48
viktor_vv
02.07.12
✎
14:42
|
(39) Может таки стоит пойти по пути в (33), а то у вас скорее всего итоги по измерению Товар не индексированные и ваш код будет очен долгим. Либо в семерке на измерении Товар поставить флаг "Отбор итогов", должно полегчать.
|
|||
49
Janna26
02.07.12
✎
14:44
|
(48) а к чему это может привести? для 7.7?
|
|||
50
Janna26
02.07.12
✎
14:50
|
(50) Ребят кому не трудно напишите пример, как через ком запустить DBF запрос. Вроде консоль на инфостаре нашла попробую написать.
|
|||
51
1Сергей
02.07.12
✎
14:52
|
(50) ты (44) попробовала?
|
|||
52
Janna26
02.07.12
✎
14:55
|
(51) Да время чуть сократилось. До 80 секунд примерно.
|
|||
53
viktor_vv
02.07.12
✎
14:56
|
(49) Появится индекс для итогов по измерению Товар. Вы бы еще структуру регистра ОстаткиТоваров дали. Может Товар там первый стоит, тогда все грустнее.
|
|||
54
1Сергей
02.07.12
✎
14:57
|
(52) теперь осталось вытащить из цикла выборку запроса, используя список значений и готово
|
|||
55
Janna26
02.07.12
✎
14:59
|
Измерения
ФИРМА Товар Размер Цвет Склад Ресурсы ОстатокТовара Извините за глупый вопрос а где галочку эту поставить? |
|||
56
1Сергей
02.07.12
✎
15:04
|
(55) Правой кнопкой по Товар - Свойства - Закладка Дополнительно - Отбор итогов. Только приготовься опять ждать
|
|||
57
viktor_vv
02.07.12
✎
15:05
|
По измерению товар щелкаешь, закладка "Дополнительные".
Там правда первым полем в индексе идет поле период, не совсем уверен повлияет ли этот флаг на выбратьИтоги(). |
|||
58
viktor_vv
02.07.12
✎
15:13
|
(57)+ Посмотрел. Повлияет.
|
|||
59
Janna26
02.07.12
✎
16:54
|
Ребят если кому не трудно. Можете помочь с отчетом на 7.7?
|
|||
60
Janna26
02.07.12
✎
16:54
|
в конструкторе сделать нужно. Не когда с ним не сталкивалась :((
|
|||
61
viktor_vv
02.07.12
✎
16:56
|
Так а с итогами получилось ?
|
|||
62
GreyK
02.07.12
✎
16:59
|
(60) Чё там сталкиваться?! Наливай, да пей!
Если-уж слово слыхала то создай новый отчет, в модуле тыкай конструктор, дальше кривая вывезет :) |
|||
63
Janna26
02.07.12
✎
17:21
|
(62) я попробовала. Получилась такая каша. А нужно что бы все было в одну колонку :(
|
|||
64
Janna26
02.07.12
✎
17:21
|
//*******************************************
// Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Фирма = Регистр.ОстаткиТоваров.Фирма; |Товар = Регистр.ОстаткиТоваров.Товар; |Размер = Регистр.ОстаткиТоваров.Размер; |Цвет = Регистр.ОстаткиТоваров.Цвет; |Склад = Регистр.ОстаткиТоваров.Склад; |Код = Регистр.ОстаткиТоваров.Товар.Код; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Фирма без групп; |Группировка Товар без групп; |Группировка Размер; |Группировка Цвет; |Группировка Склад без групп; |Группировка Код; |Условие(Товар в ВыбТовар); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Фирма Таб.ВывестиСекцию("Фирма"); Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей Товар Таб.ВывестиСекцию("Товар"); Пока Запрос.Группировка(3) = 1 Цикл // Заполнение полей Размер Таб.ВывестиСекцию("Размер"); Пока Запрос.Группировка(4) = 1 Цикл // Заполнение полей Цвет Таб.ВывестиСекцию("Цвет"); Пока Запрос.Группировка(5) = 1 Цикл // Заполнение полей Склад Таб.ВывестиСекцию("Склад"); Пока Запрос.Группировка(6) = 1 Цикл // Заполнение полей Код Таб.ВывестиСекцию("Код"); КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; // Заполнение полей "Итого" Таб.ВывестиСекцию("Итого"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
65
Janna26
02.07.12
✎
17:22
|
(63) ой в одну строку
|
|||
66
Janna26
02.07.12
✎
17:23
|
Фирма Склад Код Цвет Размер Остаток
Основаная Оптовый 111 Розовый XL 5 |
|||
67
Mikeware
02.07.12
✎
17:23
|
позовите уже программиста, чтоль....
|
|||
68
Janna26
02.07.12
✎
17:24
|
(67) :) Спасибо за совет. А как же я раньше не подумала...
|
|||
69
Janna26
02.07.12
✎
17:24
|
Нет у меня программиста на 7.7 :(
|
|||
70
Mikeware
02.07.12
✎
17:24
|
И во всей москве нет?
|
|||
71
Serginio1
02.07.12
✎
17:27
|
1С++
|
|||
72
Janna26
02.07.12
✎
17:28
|
(70) ну думаю в Москве есть.
|
|||
73
Эльниньо
02.07.12
✎
17:34
|
Курим ПрисоединитьСекцию()
|
|||
74
Mikeware
02.07.12
✎
17:36
|
(71) стоит ли применять тяжелую артиллерию? :-)
Новый COMОбъект("ADODB.Connection"); А имена табличек можно и в dd посмотреть... |
|||
75
Mikeware
02.07.12
✎
17:37
|
(73) а ей не надо ничего присоединять. Ей просто в последней секции надо все требуемые поля прописать, а вывод основных секций закомменитить...
|
|||
76
GreyK
02.07.12
✎
17:44
|
(66) Ты с порядком группировок поиграйся, у тебя группировка по складу последняя. Ну и (75) почитай.
|
|||
77
Serginio1
02.07.12
✎
17:48
|
(74) Ну для меня проще использовать qryMaker или qryConsole для получения текста запроса в "объектном виде а затем "
RS.Отладка(1); ТЗ = RS.ВыполнитьИнструкцию(Текст); Привычка из восьмерки все делать в конструкторе или через метаданные генерить. Вручную делать запрос уже лениво |
|||
78
Mikeware
02.07.12
✎
17:50
|
(76) а зачем ей играться с порядком - все равно в самой глубокой группировке все данные. Только поля в макете расположить...
(77) так-то оно так, только для разовой задачи ставить и изучать 1с++? |
|||
79
Janna26
02.07.12
✎
17:51
|
Спасибо всем огромное. Установила консоль. Сейчас буду с ней играться.
|
|||
80
del123
02.07.12
✎
17:52
|
я чет не понял, а зачем вообще на печатную форму выводить? Выгрузила в таблицу без итогов, да записывай в регистр свой в восьмерке..
|
|||
81
Serginio1
02.07.12
✎
17:55
|
(78) Сдается мне, что это будет не совсем разовая залача. В Любом случае прямой запрос самое простое и оптимальное решение
|
|||
82
Mikeware
02.07.12
✎
17:55
|
(81) см (6) :-))
|
|||
83
Serginio1
02.07.12
✎
18:06
|
(82) Времени нет все читать. Ну а я лично воспользовался бы 1С++ ктоторая в итоге и генерит прямой запрос. Пусть сама выбирает что ей проще и нужнее.
|
|||
84
Serginio1
02.07.12
✎
18:13
|
Кстати если использовать и всего то.
ИБ=СоздатьОбъект("ODBCDataBase"); ИБ.ПрисоединитьИБ(ПутьКБд); Запрос=СоздатьОбъект("ODBCRecordset"); Запрос.УстБД(ИБ); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
85
Mikeware
02.07.12
✎
18:15
|
(84) она из снеговика тянет...
|
|||
86
Janna26
02.07.12
✎
18:45
|
//*******************************************
// Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем таб; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); рег = СоздатьОбъект("Регистр.ОстаткиТоваров"); Таб.ВывестиСекцию("Секция_3"); рег.ВыбратьИтоги(); Пока рег.ПолучитьИтог()=1 Цикл СуммаЙ = Рег.ОстатокТовара; СуммаЦ = рег.Товар; СуммаУ = рег.Товар.Код; СуммаК = рег.Размер; СуммаЕ = рег.Цвет; СуммаН = рег.Склад; СуммаГ = рег.Фирма; Таб.ВывестиСекцию("Секция_2"); КонецЦикла; Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
87
Janna26
02.07.12
✎
18:46
|
Интресно почему выгружаются все движения? А не только итоги.
|
|||
88
Serginio1
02.07.12
✎
19:03
|
84 тьфу
ИБ=СоздатьОбъект("ODBCDataBase"); ИБ.ПрисоединитьИБ(ПутьКБд); Запрос=СоздатьОбъект("ODBCRecordset"); Запрос.УстБД(ИБ); ТекстЗапроса = " |SELECT top 20 Номенклатура.ID ИД |,Номенклатура.Descr Наименование |FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK) "; // тз.ВыбратьСтроку(); Сообщить(рс.Открыть(ТекстЗапроса)); Сообщить(Запрос.ВыборкаОткрыта()); Если Запрос.ВыборкаОткрыта() =1 Тогда Запрос.ВНачало(); Сообщить(Запрос.Конец()); Сообщить(Запрос.КолвоПолей()); Для сч=1 по Запрос.КолвоПолей() Цикл Сообщить(Запрос.ПолучитьПараметрыПоля(сч)); КонецЦикла; Сообщить(Запрос.Конец()); Сч=0; Пока Запрос.Конец()=0 Цикл Сч=Сч+1; Сообщить(сч); Сообщить("ИД="+Запрос.ПолучитьЗначение(1)+" Наим="+Запрос.ПолучитьЗначение("Наименование")); Запрос.След(); КонецЦикла; КонецЕсли; Запрос.Закрыть(); |
|||
89
Janna26
02.07.12
✎
19:22
|
(88)
ПутьКБд = "C:\База 7.7\"; ИБ.ПрисоединитьИБ(ПутьКБд); так? |
|||
90
Janna26
02.07.12
✎
19:23
|
V7.RMTrade,"/D"""+ИмяИБ+""""+" /N"+СокрЛП(Пользователь7)+" /P"+СокрЛП(Пароль7),"NO_SPLASH_SHOW" или так?
|
|||
91
Serginio1
02.07.12
✎
19:36
|
89 да. Должна быть установлена 1CPP.dll и подключена
загрузитьвнешнююкомпоненту("1cpp.dll"); http://www.1cpp.ru/index.php/Main http://www.1cpp.ru/docum/html/ODBC.html#getfielddefs или через СоздатьОбъект("ADODB.Connection"); работа с таблицами SQL |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |