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