Имя: Пароль:
1C
1C 7.7
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