|   |   | 
| 
 | 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 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |