|
Заполнение регистра сведений из таблицы значений | ☑ | ||
---|---|---|---|---|
0
Wefast
22.09.15
✎
10:10
|
Есть таблица значений с штрихкодами и кодами номенклатуры.
Мне нужно все это записать в регистры сведений ШтрихкодыНоменклатуры. В нем одно измерение и это Штрихкод Таб = ЗначениеИзФайла(ИмяФайла); Для Каждого Строка из Таб Цикл Ном = Справочники.Номенклатура.НайтиПоКоду(Строка.Номенклатура); Если Ном <> Неопределено И Ном <> Справочники.Номенклатура.ПустаяСсылка() Тогда Набор = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Штрихкод.Установить(СокрЛП(Строка.Штрихкод)); Набор.Прочитать(); Запись = Набор.Добавить(); Запись.Номенклатура = Ном; Запись.Штрихкод = СокрЛП(Строка.Штрихкод); Набор.Записать(ИСТИНА); КонецЕсли; КонецЦикла; Ну и в итоге в какой то момент появляется ошибка о существование такой записи и ничего не записывается. Разве он не заменит при этом новой записью все то что попало в набор после отбора? В общем теперь у меня огромный реристр. Как мне туда добавить все что не добавилось? без перезаписывания. Или может можно как то всю ТЗ сразу загрузить? Или может нужно использовать МенеджерЗаписи() раз уж я по одной строке за раз записываю? А вдруг тогда по отбору будет больше 1 записи |
|||
1
vicof
22.09.15
✎
10:18
|
Сначала сверни таблицу, потом добавляй записи
|
|||
2
AlexToo
22.09.15
✎
10:20
|
(0) я бы вынес из цикла Набор.Записать(истина) т.е. записал бы весь набор, а не по одной строке, да и тз лучше сверни, и можно проверку добавить на наличие штрихкода.
|
|||
3
lxndr
22.09.15
✎
10:21
|
Набор.Прочитать();
Набор.Очистить(); //Добавь Запись = Набор.Добавить(); |
|||
4
Wefast
22.09.15
✎
10:36
|
(2) а Очистить() добавлять?
Для чего сворачивать? |
|||
5
vicof
22.09.15
✎
10:38
|
(4) Как ты думаешь, почему появляется ошибка?
|
|||
6
Wefast
22.09.15
✎
10:41
|
(5) Ну видимо в ТЗ есть дубль.
Но при отборе она должна туда попадать и подменяться текущей строкой. И если вынести Записать() за цикл точно будет работать? Что то как то странно |
|||
7
vicof
22.09.15
✎
10:42
|
(6) Теперь перечитываем (1)
Точно. |
|||
8
Wefast
22.09.15
✎
10:43
|
(7) Строки в ТЗ уникальны а вот штрихкоды повторяются. В старом регистры было больше одного измерения и такое было возможно. Тут - нет.
|
|||
9
Wefast
22.09.15
✎
10:44
|
(7) И почему отбор не работает при этом как нужно?
|
|||
10
Timon1405
22.09.15
✎
10:46
|
я просто оставлю это здесь
РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>) Загрузить (Load) Синтаксис: Загрузить(<ТаблицаЗначений>) Параметры: <ТаблицаЗначений> (обязательный) Тип: ТаблицаЗначений. Таблица значений, по которой производится заполнение набора записей. Описание: Загружает набор записей значениями из переданной таблицы значений. При этом все прежние записи набора удаляются. Заполняются значения доступных для записи свойств записей регистра сведений, имена которых совпали c именами колонок таблицы значений. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). |
|||
11
vicof
22.09.15
✎
10:47
|
(8) Ну и? Алгоритм как преобразовать один регистр в другой за тебя никто придумывать не будет.
|
|||
12
Зеленый пень
22.09.15
✎
10:49
|
"В нем одно измерение и это Штрихкод" - это плохо, товары с несколькими ШК - обычное дело.
(0) Убери Набор.Прочитать(); |
|||
13
Wefast
22.09.15
✎
10:51
|
(11) Я спросил что не так с отбором. Он же должен брать из заполняемого регистра все записи с этим штрихкодом. И стирать их при добавление новой записи.
|
|||
14
Wefast
22.09.15
✎
10:51
|
(10) У меня в ТЗ не ссылка на номенклатуру а ее код, так что не получится
|
|||
15
vicof
22.09.15
✎
10:53
|
(13) Эмм. У тебя не может быть более одной записи с одним и тем же штрихкодом.
|
|||
16
Wefast
22.09.15
✎
10:56
|
(15) На первой итерации цикла записалась в регистр строка.
На n-ой итерации попадается строка с таким же штрихкодом. Она отбирается по отбору. Она подменяется строкой из итерации Так должен работать этот отбор |
|||
17
Timon1405
22.09.15
✎
10:57
|
(14) таб в запрос - добавить справочник номенклатура - заполнить колонку, соединив по коду(без языческих найтипокоду) - выгрузить, выкинув код и нуллы, -загрузить в регистр.
|
|||
18
Defender aka LINN
22.09.15
✎
11:29
|
(16) "Так должен работать этот отбор"
В (0) "Набор.Прочитать();". Не должен. |
|||
19
IlyaSR
22.09.15
✎
12:20
|
Сделать запись через ПОПЫТКА, вывести ошибку и проанализировать, явно таких ошибок будет несколько
и Записать(ИСТИНА) избыточные данные... Записать() => Значение по умолчанию: Истина |
|||
20
IlyaSR
22.09.15
✎
12:30
|
И для чего найденный штрихкод перезаписывать? или штрихкод как-то цикличен и может присваиваться разным номенклатурам?
|
|||
21
Wefast
22.09.15
✎
15:39
|
(18) Вот взял какой то пример из обучающего материала
НаборЗаписей = РегистрыСведений.НумерацияДоговоров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(НачалоГода(Дата)); НаборЗаписей.Отбор.Организация.Установить(Организация); // Отбор может устанавливаться только на равенство // Для регистров "Подчиненных регистратору", отбор возможен только по регистратору НаборЗаписей.Прочитать(); // считывает записи в память согласно отбору (проще говоря получаем таблицу значений) Если НаборЗаписей.Количество() = 0 Тогда НовыйНомер = НаборЗаписей.Добавить(); НовыйНомер.Организация = Организация; НовыйНомер.Период = НачалоГода(Дата); НовыйНомер.Номер = 2; ном=1; ИначеЕсли НаборЗаписей.Количество() = 1 Тогда НовыйНомер = НаборЗаписей[0]; ном = НовыйНомер.Номер; НовыйНомер.Номер = ном+1; КонецЕсли; НаборЗаписей.Записать(); // удаляет все старые записи согласно отбору и добавляет строки из НаборЗаписей Идет отбор, потом идет Прочитать(), потом идет добавление новых записей. Потом записать. И написано, что удаляться все записи что попали после отбороа и запишутся только что добавленные (20) В регистре Штрихкод единственное измерение, т.е. дублироваться не может. А выгружаю я с уже дублирующимися элементами. В общем не найдя ничего конкретного пытаюсь при выгрузке из старой базы удалить все дубли. |
|||
22
Зеленый пень
22.09.15
✎
16:28
|
(21) Тебе уже 2 раза написали - убери .Прочитать()
"И написано, что удаляться все записи что попали после отбороа и запишутся только что добавленные" - и те, что были записаны ранее тоже останутся, т.к. ты их "прочитал". |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |