|
Запись в регистр сведений. Где ошибка? | ☑ | ||
---|---|---|---|---|
0
Bananas
07.09.12
✎
11:13
|
&НаСервере
Procedure ЗагрузитьТранспортныеОграничения(ТаблицаТоваров) Var Separator; ЗАпросСкладов = Новый Запрос; ЗАпросСкладов.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Склады.Ссылка, | Склады.ВариантСроковПоставки |ИЗ | Справочник.Склады КАК Склады"; ТаблицаСкладов = ЗАпросСкладов.Выполнить().Выгрузить(); СтруктураТаблиц = ПолучитьИзВременногоХранилища(ТаблицаТоваров).ТаблицаЗначений; Номенклатура = Справочники.Номенклатура; Запись= РегистрыСведений.ТранспортныеОграничения; НаборЗаписей = Запись.СоздатьНаборЗаписей(); //НаборЗаписей .Отбор.Склад.Установить(Склад.Ссылка, Истина); НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); НаборЗаписей.Записать(Истина); //возврат; Сч = 0; Для Сч = 0 По СтруктураТаблиц.Количество()-1 Цикл Строчка = СтруктураТаблиц.Получить(Сч).Значение; эТовар = Номенклатура.НайтиПоРеквизиту("Артикул",Строчка.АртикулНоменкл); Если Не ЗначениеЗаполнено(эТовар) Тогда Продолжить; КонецЕсли; // Продолжить; Для Каждого ЗаписьСклада из ТаблицаСкладов Цикл СтрокаЗаписи = НаборЗаписей.Добавить(); СтрокаЗаписи.Склад = ЗаписьСклада.Ссылка;//СКлад; СтрокаЗаписи.Номенклатура = эТовар.Ссылка; СтрокаЗаписи.СпособПополненияЗапаса = Справочники.СпособыПополненияЗапаса.НайтиПоНаименованию("Покупка у поставщика"); ПостфиксКолонки = ЗаписьСклада.ВариантСроковПоставки; СтрочноеПредставлениеСрока = Строчка["CрокТранспортировки"+ПостфиксКолонки]; ЧисловойСрок = ?(СтрочноеПредставлениеСрока = "C1", 7, ?(СтрочноеПредставлениеСрока = "C2", 5, ?(СтрочноеПредставлениеСрока = "C2A", 10, ?(СтрочноеПредставлениеСрока = "C3(+)", 100, ?(СтрочноеПредставлениеСрока = "C3(2)", 14, ?(СтрочноеПредставлениеСрока = "C3(4)", 28, ?(СтрочноеПредставлениеСрока = "C3(5)", 35, ?(СтрочноеПредставлениеСрока = "C3(6)", 42, ?(СтрочноеПредставлениеСрока = "C3(7)", 49,0))))))))); СтрокаЗаписи.СрокТранспортировки = ЧисловойСрок; СтрокаЗаписи.Календарь = Справочники.Календари.НайтиПоНаименованию("Стандартный календарь пятидневка"); СтрокаЗаписи.СкладскойСтатус = СТрочка["СкладскойСтатус"+ПостфиксКолонки]; СтрокаЗаписи.МинимальнаяПартияПродажи = Число(СТрочка["МинПартия"+ПостфиксКолонки]); СтрокаЗаписи.Заблокировано = ?(СТрочка.Заблокировано = "Нет",Ложь,Истина); СтрокаЗаписи.СнимаетсяСПродаж = ?(СТрочка.СнимаетсяСПродаж = "Нет",Ложь,Истина); СтрокаЗаписи.Активность = Истина; КонецЦикла; EndDo; НаборЗаписей.Записать(Истина); EndProcedure Попытался записывать по складам(код закомментирован) начинает выдавать ошибку неуникальности(Запись с таким ключом уже есть). Перепробовал все варианты НаборЗаписей.Записать(Истина) с ложью и истиной. Потом вроде скопом стало получаться. Но сейчас когда количество записей перешло определенный предел 36000*на количество складов то стало выдавать нехватку памяти. Подскажите плиз где ошибка в коде, исправив которую, можно было записывать порциями по складам а не сразу скопом. Скопом писало нормально без всяких нарушений уникальности. |
|||
1
Команданте
07.09.12
✎
11:14
|
писец код
|
|||
2
zladenuw
07.09.12
✎
11:15
|
а где отборы по измерениям. до прочтение. по этому и ошибка
|
|||
3
Bananas
07.09.12
✎
11:16
|
(2) Там закомментированно. Изначально был отбор. Первый склад грузит нормально. А при втором складе начинает выдавать ошибку.
|
|||
4
Bananas
07.09.12
✎
11:17
|
(2) То что отбор не в цикле, это я вначале вообще поочереди склады грузил. Потом уже начал скопом все склады перебирать.
|
|||
5
Bananas
07.09.12
✎
11:18
|
(1) Согласен. Вот прошу помощи.
|
|||
6
zladenuw
07.09.12
✎
11:21
|
так. какие у тебя измерение и ресурсы в РС
|
|||
7
zladenuw
07.09.12
✎
11:22
|
и ошибку покаж
|
|||
8
Bananas
07.09.12
✎
11:23
|
(6) Склад, Номенклатура, СпособПополненияЗапаса . Характеристика не используется. Остальное ресурсы. Проблемы возникли, когда добавил два новых ресурса. Это УТ11.
|
|||
9
Bananas
07.09.12
✎
11:25
|
(7) В данном случае ошибка "Недостаточно памяти". До добавления ресурсов было все нормально. А в случае если начинаю писать порциями, то дает что "Запись с такими ключами уже существует".
|
|||
10
zladenuw
07.09.12
✎
11:27
|
на делать так как в СП
КурсыВалют = РегистрыСведений.КурсыВалют; НаборКурсов = КурсыВалют.СоздатьНаборЗаписей(); Доллар = Справочники.Валюты.НайтиПоНаименованию("USD"); НаборКурсов.Отбор.Валюта.Установить(Доллар); НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата())); НаборКурсов.Прочитать(); Если НаборКурсов.Количество() = 0 Тогда НовыйКурс = НаборКурсов.Добавить(); НовыйКурс.Валюта = Доллар; НовыйКурс.Период = ТекущаяДата(); ИначеЕсли НаборКурсов.Количество() = 1 Тогда НовыйКурс = НаборКурсов[0]; Иначе Текст = "ru = ""Курс валюты задается один раз в день."";" + " en = ""Rate is set once a day."""; Предупреждение(НСтр(Текст), 60); Возврат; КонецЕсли; НовыйКурс.Курс = 31.44; НовыйКурс.Кратность = 1; НаборКурсов.Записать(); |
|||
11
zladenuw
07.09.12
✎
11:28
|
а хотя...
СтрокаЗаписи.СпособПополненияЗапаса = Справочники.СпособыПополненияЗапаса.НайтиПоНаименованию("Покупка у поставщика"); СпособПополненияЗапаса какие свойства стоят для него РС |
|||
12
Bananas
07.09.12
✎
11:32
|
Запись= РегистрыСведений.ТранспортныеОграничения;
НаборЗаписей = Запись.СоздатьНаборЗаписей(); //возврат; Сч = 0; Для Сч = 0 По СтруктураТаблиц.Количество()-1 Цикл Строчка = СтруктураТаблиц.Получить(Сч).Значение; эТовар = Номенклатура.НайтиПоРеквизиту("Артикул",Строчка.АртикулНоменкл); НаборЗаписей .Отбор.Номенклатура.Установить(эТовар.Ссылка, Истина); НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); НаборЗаписей.Записать(Истина); Если Не ЗначениеЗаполнено(эТовар) Тогда Продолжить; КонецЕсли; // Продолжить; Для Каждого ЗаписьСклада из ТаблицаСкладов Цикл СтрокаЗаписи = НаборЗаписей.Добавить(); СтрокаЗаписи.Склад = ЗаписьСклада.Ссылка;//СКлад; СтрокаЗаписи.Номенклатура = эТовар.Ссылка; СтрокаЗаписи.СпособПополненияЗапаса = Справочники.СпособыПополненияЗапаса.НайтиПоНаименованию("Покупка у поставщика"); //Если ПостфиксКолонки = "1" Тогда ПостфиксКолонки = ЗаписьСклада.ВариантСроковПоставки; СтрочноеПредставлениеСрока = Строчка["CрокТранспортировки"+ПостфиксКолонки]; ЧисловойСрок = ?(СтрочноеПредставлениеСрока = "C1", 7, ?(СтрочноеПредставлениеСрока = "C2", 5, ?(СтрочноеПредставлениеСрока = "C2A", 10, ?(СтрочноеПредставлениеСрока = "C3(+)", 100, ?(СтрочноеПредставлениеСрока = "C3(2)", 14, ?(СтрочноеПредставлениеСрока = "C3(4)", 28, ?(СтрочноеПредставлениеСрока = "C3(5)", 35, ?(СтрочноеПредставлениеСрока = "C3(6)", 42, ?(СтрочноеПредставлениеСрока = "C3(7)", 49,0))))))))); СтрокаЗаписи.СрокТранспортировки = ЧисловойСрок; СтрокаЗаписи.Календарь = Справочники.Календари.НайтиПоНаименованию("Стандартный календарь пятидневка"); СтрокаЗаписи.СкладскойСтатус = СТрочка["СкладскойСтатус"+ПостфиксКолонки]; СтрокаЗаписи.МинимальнаяПартияПродажи = Число(СТрочка["МинПартия"+ПостфиксКолонки]); СтрокаЗаписи.Заблокировано = ?(СТрочка.Заблокировано = "Нет",Ложь,Истина); СтрокаЗаписи.СнимаетсяСПродаж = ?(СТрочка.СнимаетсяСПродаж = "Нет",Ложь,Истина); СтрокаЗаписи.Активность = Истина; КонецЦикла; НаборЗаписей.Записать(Истина); EndDo; //НаборЗаписей.Записать(Истина); Сделал так вроде заработало. Что странно. Раньше не работало. (11) Не индексировать там стоит. |
|||
13
zladenuw
07.09.12
✎
11:34
|
у тебя 3 измерения. тебя по 2-3 нужно делать отбор. ты делал по складу. и получалось так что у тебя на 1 склад шло 3 записи. и по этому 1с писала, что хер тебе. такая запись есть.
|
|||
14
Bananas
07.09.12
✎
11:36
|
(13) Дык если все скопом писал одним набором, всеж шло нормально. Пока памяти хватало.
|
|||
15
zladenuw
07.09.12
✎
11:37
|
если первый раз отбор был по складу, и ты поставил НаборЗаписей.Записать(Истина) то у тебя пред запись с таким ключом перезаписывалась.
|
|||
16
Bananas
07.09.12
✎
11:38
|
В принципе если вникнуть в (13) до меня что-то начинает доходить.
|
|||
17
Bananas
07.09.12
✎
11:38
|
(15) Ну в данном случае получается что я ставлю отбор по номенклатуре а склады скопом пишу. Поэтому пишется все нормально.
|
|||
18
zladenuw
07.09.12
✎
11:42
|
у тебя могу перезаписаться записи где есть данная номенклатура и другой склад. так что лучше 2 отбора и вперед
|
|||
19
Bananas
07.09.12
✎
11:43
|
(18) Сейчас в базе УТ11 36000 номенклатур и 13 складов. 468000 записей в регистре. Интересно под линуксом на Постгресе выдержит когда количество товаров будет 200000? Не сильно будет тормозить? А это только один регистр. Есть еще цены, допреквизиты, свойства и много чего еще.
Ну так по любому быстрее должно быть. Это первая подгрузка из эксель. Потом соптимизирую по записи. |
|||
20
zladenuw
07.09.12
✎
11:47
|
(19) а чего ему не выдержать. единственное плохое качество постгреса что он блокируют все таблицу, а не строку таблицы как МС. а так все путем. у нас даже днем бекапы делаются базы и все ок. не кто не жалуется
|
|||
21
Bananas
07.09.12
✎
11:50
|
(20) Да клиент повадился на sql.ru. Ему там много что наговорили. :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |