|   |   | 
| 
 | Не записывается набор регистра накоплений | ☑ | ||
|---|---|---|---|---|
| 0
    
        pessok 09.12.12✎ 12:13 | 
        Коллеги, доброго воскресенья! :)
  Тут затык случился. Есть файловая база (1cd весит 6 с гаком ГБ). Пытаюсь запись набор регистра накопления в 2000 строк. Долго думает, потом отжирает огромное количество рамы и падает с "Недостаточно памяти". chkdbfl делал, ТИИ делал, выгрузку-загрузку пробовал. 8.2.17.143, УТ 10.3.18.5. Шоделоц? | |||
| 1
    
        DrShad 09.12.12✎ 12:23 | 
        проверяй что пытаешься записать, имхо в данных набора лажа     | |||
| 2
    
        pessok 09.12.12✎ 12:27 | 
        (1) нормально там в данных. я ж идиот, забыл сказать, что это ТоварыНаСкладах. 
  upd: щас пока не вываливается, но пишет уже минут 5... | |||
| 3
    
        pessok 09.12.12✎ 12:29 | 
        попробую щас на постгри сделать...     | |||
| 4
    
        DrShad 09.12.12✎ 12:29 | 
        [нормально там в данных] откуда инфа?     | |||
| 5
    
        pessok 09.12.12✎ 12:31 | 
        (4) потому что заполнение я писал сам :) да и отладчиком просмотрел. как еще можно проверить, что в наборе?     | |||
| 6
    
        pessok 09.12.12✎ 12:32 | 
        +(5) ощущение, что если окно эсины сернуто, то ничего не происходит, как только разворачиваю, сразу начинается отжор рамы 0_0     | |||
| 7
    
        DrShad 09.12.12✎ 12:32 | 
        (5) вот поэтому и говорю, чтоб проверил свое заполнение     | |||
| 8
    
        DrShad 09.12.12✎ 12:33 | 
        при записи набора еще много чего происходит и индексы строятся и остатки пересчитываются     | |||
| 9
    
        pessok 09.12.12✎ 12:34 | 
        ну есди ты о коде, то это я первым делом просмотрел раз 100500.     | |||
| 10
    
        pessok 09.12.12✎ 12:35 | 
        +(9) щас проверил.. набор на 100 строк тоже не пишется...     | |||
| 11
    
        DrShad 09.12.12✎ 12:36 | 
        говорю же что лажу ему подсовываешь     | |||
| 12
    
        pessok 09.12.12✎ 12:36 | 
        (10) конфа не типовая, пойду проверять что там с регистром могли наворотить. а то кобыла не моя     | |||
| 13
    
        pessok 09.12.12✎ 12:37 | 
        (11) как, блин, проверить, что я ему подсовываю то, что надо :) а то я не проснулся еще     | |||
| 14
    
        DrShad 09.12.12✎ 12:38 | 
        ты же бил ся пяткой в грудь, что 100500 раз все проверил :))))
  не хорошо старших обманывать! | |||
| 15
    
        ShoGUN 09.12.12✎ 12:39 | 
        (13) Если набор небольшой - можно прямо в отладчике посмотреть.     | |||
| 16
    
        pessok 09.12.12✎ 12:40 | 
        (14) я проверял, но ты меня так уверяешь, что я верблюд, что я почти сам поверил :)
  (15) смотрел, вроде все ок. грешу на то, что что-то наворотили с индексами самого объекта метаданных | |||
| 17
    
        DrShad 09.12.12✎ 12:40 | 
        звездун! ни хрена ты не проверял     | |||
| 18
    
        pessok 09.12.12✎ 12:41 | 
        +(16) просто недавно было обновление на 10 релизов     | |||
| 19
    
        pessok 09.12.12✎ 12:43 | 
        ну что не так можно записать в товары на складах?     | |||
| 20
    
        ShoGUN 09.12.12✎ 12:46 | 
        (19) Может код покажешь уже? Или сотни постов ждать?     | |||
| 21
    
        pessok 09.12.12✎ 12:50 | 
        (20) дык никто не просил код :)
  Если Не ЗначениеЗаполнено(Склад) Тогда Предупреждение("Выберите склад поставщика!"); возврат; КонецЕсли; ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла"; ДиалогВыбораФайла.Фильтр = "Лист Excel (*.xls)|*.xls|"; Если ДиалогВыбораФайла.Выбрать() Тогда ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла); Excel = Новый COMОбъект("Excel.Application"); Док = Excel.Workbooks.Open(ДиалогВыбораФайла.ПолноеИмяФайла); Если Не ПустаяСтрока(Док.Sheets(1).Cells(8,1).Value) Тогда Оприходование = Документы.ОприходованиеТоваров.НайтиПоНомеру("АБВГД678910", '00010101000001'); Если Оприходование = Неопределено ИЛИ Не ЗначениеЗаполнено(Оприходование) Тогда Оприходование = Документы.ОприходованиеТоваров.СоздатьДокумент(); Оприходование.Дата = '00010101000001'; Оприходование.Номер = "АБВГД678911"; Оприходование.Записать(); Оприходование = Оприходование.Ссылка; КонецЕсли; НаборЗаписейТовары = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписейТовары.Отбор.Регистратор.Установить(Оприходование); НаборЗаписейТовары.Прочитать(); Счетчик = 8; Лист = Док.Sheets(1); ТаблицаИзЭксель = Новый ТаблицаЗначений; ТаблицаИзЭксель.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(0, 0, ДопустимыйЗнак.Любой))); ТаблицаИзЭксель.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); ТаблицаИзЭксель.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры")); ТаблицаИзЭксель.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка", ,Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); ТаблицаИзЭксель.Колонки.Добавить("Остаток", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(0, 0, ДопустимыйЗнак.Любой))); Текст = Новый ТекстовыйДокумент; ТаблицаНабора = НаборЗаписейТовары.Выгрузить(); НеНайдено = 0; НомерСтроки = 1; Состояние("Обработка EXCEL - документа."); Пока Не ПустаяСтрока(Лист.Cells(Счетчик,1).Value) Цикл Состояние("Обработка EXCEL - документа. Строка "+Строка(Счетчик-7)); Артикул = Лист.Cells(Счетчик, 1).Value; Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("АртикулПоставщика", Артикул); Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(); Если Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоРеквизиту("АртикулПоставщика", Артикул); Если Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка() Тогда Текст.ДобавитьСтроку(Артикул); Счетчик=Счетчик+1; НеНайдено = НеНайдено + 1; Продолжить; Иначе Номенклатура = Характеристика.Владелец; КонецЕсли; КонецЕсли; НовСтр = ТаблицаИзЭксель.Добавить(); НовСтр.НомерСтроки = НомерСтроки; НовСтр.Номенклатура = Номенклатура; НовСтр.Характеристика = Характеристика; НовСтр.Артикул = Лист.Cells(Счетчик, 1).Value; НовСтр.Остаток = Лист.Cells(Счетчик, 8).Value; Счетчик = Счетчик + 1; НомерСтроки = НомерСтроки + 1; КонецЦикла; Сообщить("В базе не найдено "+НеНайдено+" позиций из файла"); Текст.Показать("Не найденные в базе артикулы"); Док.Application.Quit(); Для Каждого ТекСтр Из ТаблицаИзЭксель Цикл Состояние("Обработка строки "+ТекСтр.НомерСтроки+" из "+ТаблицаИзЭксель.Количество()); НоменклатураНайденаВНаборе = Ложь; Для Каждого ТекСтрНабор Из НаборЗаписейТовары Цикл Если ТекСтр.Артикул = ТекСтрНабор.Номенклатура.АртикулПоставщика Тогда ТекСтрНабор.Количество = ТекСтр.Остаток; НоменклатураНайденаВНаборе = Истина; КонецЕсли КонецЦикла; Если Не НоменклатураНайденаВНаборе Тогда Запись = НаборЗаписейТовары.Добавить(); Запись.Склад = Склад; Запись.Номенклатура = ТекСтр.Номенклатура; Запись.Количество = ТекСтр.Остаток; Запись.ХарактеристикаНоменклатуры = ТекСтр.Характеристика; Запись.ВидДвижения = ВидДвиженияНакопления.Приход; Запись.Период = '20010101000001'; КонецЕсли; КонецЦикла; КонецЕсли; НаборЗаписейТовары.Записать(); КонецЕсли; знаю, что в конечном цикле копрокод, но он работал так давным давно, потому менять не стал | |||
| 22
    
        pessok 09.12.12✎ 12:54 | 
        телепатируя вопрос "Зачем?" отвечаю сразу - ХЗ. Они так вроде как остатки заносят и считают, что это правильно. Кобыла не моя     | |||
| 23
    
        DrShad 09.12.12✎ 12:54 | 
        пизнец, это что за адский отжиг?     | |||
| 24
    
        ShoGUN 09.12.12✎ 12:55 | 
        Ёптыть, а регистратор-то где?     | |||
| 25
    
        DrShad 09.12.12✎ 12:55 | 
        у тя документ с датой от рождества христова! сколько остатков будет пересчитано?     | |||
| 26
    
        pessok 09.12.12✎ 12:55 | 
        НаборЗаписейТовары = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
  НаборЗаписейТовары.Отбор.Регистратор.Установить(Оприходование); НаборЗаписейТовары.Прочитать(); | |||
| 27
    
        ShoGUN 09.12.12✎ 12:57 | 
        (26) А, увидел... А период записи - 2001 год не смущает?     | |||
| 28
    
        pessok 09.12.12✎ 12:57 | 
        (25) во, вот в этом, скорее всего основной затык     | |||
| 29
    
        pessok 09.12.12✎ 12:58 | 
        (27) 2001 - это уже изменено. писалось на дату от рождества христова, потому и написал (22)     | |||
| 30
    
        pessok 09.12.12✎ 12:58 | 
        короче механизм проще по-человечески переписать с нуля, да?     | |||
| 31
    
        DrShad 09.12.12✎ 12:58 | 
        а сц-ука говорил что проверил все     | |||
| 32
    
        DrShad 09.12.12✎ 12:59 | 
        (30) предварительно прострелив коленку, чтоб больше таких МЕГА алгоритмов не рождалось     | |||
| 33
    
        pessok 09.12.12✎ 13:00 | 
        (31) я даже не подумал насчет рождества христова, не сталкивался с таким никогда :)
  (32) писал мой бывший начальник, кстати :) видимо в расширенной сознании | |||
| 34
    
        ShoGUN 09.12.12✎ 13:01 | 
        (33) Видимо, это писалось как ОДНОКРАТНЫЙ алгоритм, для ввода остатков на пустой базе.     | |||
| 35
    
        ShoGUN 09.12.12✎ 13:02 | 
        +(34) Хотя остатки рождеством христовым вводить - тож неправильно, таблица итогов будет охренеть какая.     | |||
| 36
    
        pessok 09.12.12✎ 13:03 | 
        (35) вот как раз о таблице итогов я и не подумал грешным делом. утро воскресенья, блджад!
  спасибо, коллеги! | |||
| 37
    
        DrShad 09.12.12✎ 13:03 | 
        (35) ага по одной только записи остатков будет 2013 * 12 =     | |||
| 38
    
        DrShad 09.12.12✎ 13:04 | 
        24156     | |||
| 39
    
        DrShad 09.12.12✎ 13:05 | 
        + по ним еще индексы нужно построить     | |||
| 40
    
        DrShad 09.12.12✎ 13:06 | 
        и вообще накуя тут набор записей? пиши в ТЧ документа и проводи его     | |||
| 41
    
        pessok 09.12.12✎ 13:06 | 
        (39) колотить. ну в общем на мой вкус надо сделать так - получить таблицу остатков, положить во временную таблицу, потом положить во временную таблицу данные из экселя, соединить внутренним, и у того, что получится в результате поменять количество, а регистратор текущей датой. по идее взлетит нормально же?     | |||
| 42
    
        pessok 09.12.12✎ 13:07 | 
        (40) тоже верно, кстати     | |||
| 43
    
        pessok 09.12.12✎ 13:09 | 
        (42) не, неверно, тут остатки надо именно исправить, а не оприходовать :(     | |||
| 44
    
        ShoGUN 09.12.12✎ 13:09 | 
        (41) Смотря, что тебе надо. Одно только изменение даты на дату начала ведения учёта в программе - даст прирост быстродействия на несколько порядков, исходя из (37).     | |||
| 45
    
        DrShad 09.12.12✎ 13:09 | 
        (43) исправлять остатки нужно Инвентаризацией, а не наборами записей, блеать!     | |||
| 46
    
        pessok 09.12.12✎ 13:11 | 
        (45) ыыыы. нельзя работать в выходные :)     | |||
| 47
    
        ShoGUN 09.12.12✎ 13:16 | 
        (45) Респект и уважуха :) У меня голова трещит чё-то, хотя я не пью. Так что ты оплот трезвомыслия на сегодня)))     | |||
| 48
    
        pessok 09.12.12✎ 13:19 | 
        (47) во-во. я вчера вроде тоже только бутылку пива, но все равно мозг отказывается думать :)     | |||
| 49
    
        DrShad 09.12.12✎ 13:32 | 
        учу пользоваться мозгом на выходных - дорого!     | |||
| 50
    
        pessok 09.12.12✎ 13:56 | 
        (49) ну на самом деле для меня инвентаризация не совсем подходит, потому как надо двинуть только п товарам на складах, ну да дофейхоа, поставил цену 1, пусть так живут :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |