Добрый день!
Есть независимый, непериодический РС.
Записываю туда записи с отбором. Сейчас получается так, что можно записывать туда 2 записи с одинаковыми измерениями, причем записывает только последнюю строку. Если я записываю 2 строки, с разными ресурсами, то записывается ресурс последнего.
Как сделать, чтобы не давало записывать 2 строки с одинаковыми измерениями и перезаписывалась та которая есть в регистре?
Есть независимый, непериодический РС.
Записываю туда записи с отбором. Сейчас получается так, что можно записывать туда 2 записи с одинаковыми измерениями, причем записывает только последнюю строку. Если я записываю 2 строки, с разными ресурсами, то записывается ресурс последнего.
Как сделать, чтобы не давало записывать 2 строки с одинаковыми измерениями и перезаписывалась та которая есть в регистре?
По теме из базы знаний
- Быстрый поиск дублей с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)
- Исправление ошибки состояния сотрудника 1С ЗУП Зарплата и управление персоналом, редакция 3.1 (3.1.17.94) 1С:Предприятие 8.3 (8.3.18.1208)
- Версионирование объектов VS История данных
- Новое в 14-й и 15-й версиях Postgres
- Несколько альтернативных универсальных способов подбора ссылок при переносах данных
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Если я что-то неверно понял, то уточните, пожалуйста, как Вы видите одновременное выполнение двух условий:
- не дает записывать 2 строи с одинаковыми измерениями;
- перезаписывается существующая запись с теми же измерениями.
Как сделать, чтобы не давало записывать 2 строки с одинаковыми измерениями и перезаписывалась та которая есть в регистре
Судя по Вашему же описанию, именно так и работает сейчас запись в регистр. При последовательной записи в регистре оказывается именно та запись, что была последней. Т.е. первая перезаписывается.
Если я что-то неверно понял, то уточните, пожалуйста, как Вы видите одновременное выполнение двух условий:
- не дает записывать 2 строи с одинаковыми измерениями;
- перезаписывается существующая запись с теми же измерениями.
(6) Как я понимаю, у Вас идет последовательная запись с замещением условно говоря 5 наборов с одной запись. Если нужно видеть сообщение об ошибке, то:
- либо записывайте, если это возможно, сразу все несколько записей одним набором (с замещением);
- либо записывайте без замещения, т.е. параметр метода "Записать" должен быть "Ложь".
- либо записывайте, если это возможно, сразу все несколько записей одним набором (с замещением);
- либо записывайте без замещения, т.е. параметр метода "Записать" должен быть "Ложь".
(11) У меня наверное идет перезапись одной записи в регистре последовательно каждой записью из документа.
Т.е. в документе 5 записей, а в РС одна.
Как это можно сделать?
Т.е. в документе 5 записей, а в РС одна.
либо записывайте, если это возможно, сразу все несколько записей одним набором (с замещением);
Как это можно сделать?
Я записываю так:
НаборЗаписей = РегистрыСведений.Регистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Измерение1.Установить(Измерение1);
НаборЗаписей.Отбор.Измерение2.Установить(Измерение2);
НаборЗаписей.Отбор.Измерение3.Установить(Измерение3);
НаборЗаписей.Отбор.Измерение4.Установить(Измерение4);
НаборЗаписей.Прочитать();
Для Каждого СтрокаДанных Из НаборЗаписей Цикл
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Измерение1= Измерение1;
НовЗапись.Измерение2= Измерение2;
НовЗапись.Измерение3= Измерение3;
НовЗапись.Измерение4= Измерение4;
НовЗапись.Статус = Статус;
НовЗапись.Комментарий = Комментарий ;
КонецЦикла;
НаборЗаписей.Записать(Истина);
Показать
(17) Извините, я не понимаю, чего Вы добиваетесь, и как выбираете для этого средства.
1. Если Вы хотите, чтобы при записи любого набора данных в регистре контролировалось наличие уже ранее записанных данных, то нужно ставить "Ложь".
2. Если ставите "Истина", то записи в регистре не контролируются. Контролируются только записи в самом наборе.
3. Если Вам необходимо осуществлять запись в регистр по одной строчке за проход, нужно также учитывать пункты выше: каждая последующая запись - новая, каждая предыдущая - старая, записанная в регистр ранее.
P.S. В конце концов всегда можно написать проверку самому и выдать нужное сообщение об ошибке.
1. Если Вы хотите, чтобы при записи любого набора данных в регистре контролировалось наличие уже ранее записанных данных, то нужно ставить "Ложь".
2. Если ставите "Истина", то записи в регистре не контролируются. Контролируются только записи в самом наборе.
3. Если Вам необходимо осуществлять запись в регистр по одной строчке за проход, нужно также учитывать пункты выше: каждая последующая запись - новая, каждая предыдущая - старая, записанная в регистр ранее.
P.S. В конце концов всегда можно написать проверку самому и выдать нужное сообщение об ошибке.
(18)
Так я и записываю одинаковые данные по измерениям в одном наборе, меняю только ресурс.
Я посмотрела во всей конфигурации у меня только 1 раз с Ложь идет запись. Поэтому и усомнилась, что это хороший вариант..
Как то же без этого следят за актуальностью данных.
Если ставите "Истина", то записи в регистре не контролируются. Контролируются только записи в самом наборе.
Так я и записываю одинаковые данные по измерениям в одном наборе, меняю только ресурс.
Я посмотрела во всей конфигурации у меня только 1 раз с Ложь идет запись. Поэтому и усомнилась, что это хороший вариант..
Как то же без этого следят за актуальностью данных.
(36)Записывается последняя запись, ошибки при этом не возникает.. Может быть я не правильно записываю? Потому что если я в регистр самостоятельно хочу записать дубль, то не дает такого сделать.
Потому что тот код, который я ниже написала он тоже не правильный :-( Потому что если нет записей в регистре, то вообще ничего в него не пишется..
Потому что тот код, который я ниже написала он тоже не правильный :-( Потому что если нет записей в регистре, то вообще ничего в него не пишется..
(31)
Логика не в том, чтобы дубли добавлять. А в том, чтобы пользователь не мог этого сделать. Пока получается что может. А это не правильно.
Тогда лично я логики этого документа не понимаю.
Вы уже не стесняйтесь рассказать, какую задачу вы пытаетесь решить, а там мож кто чего посоветует....
Вы уже не стесняйтесь рассказать, какую задачу вы пытаетесь решить, а там мож кто чего посоветует....
Логика не в том, чтобы дубли добавлять. А в том, чтобы пользователь не мог этого сделать. Пока получается что может. А это не правильно.
Вообще код предоставленный выше в принципе должен привести к зацикливанию.
Если конечно после НаборЗаписей.Прочитать(); набор записей не пустой.
Если конечно после НаборЗаписей.Прочитать(); набор записей не пустой.
НаборЗаписей = РегистрыСведений.Регистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Измерение1.Установить(Измерение1);
НаборЗаписей.Отбор.Измерение2.Установить(Измерение2);
НаборЗаписей.Отбор.Измерение3.Установить(Измерение3);
НаборЗаписей.Отбор.Измерение4.Установить(Измерение4);
НаборЗаписей.Прочитать();
Для Каждого СтрокаДанных Из НаборЗаписей Цикл
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Измерение1= Измерение1;
НовЗапись.Измерение2= Измерение2;
НовЗапись.Измерение3= Измерение3;
НовЗапись.Измерение4= Измерение4;
НовЗапись.Статус = Статус;
НовЗапись.Комментарий = Комментарий ;
КонецЦикла;
НаборЗаписей.Записать(Истина);
Показать
(25)
Да, точно. Что же делать, вроде такая простая задача, но вот кроме как программно проверять наличие дублей перед записью в регистр ничего не могу придумать.
Вообще код предоставленный выше в принципе должен привести к зацикливанию.
Если конечно после НаборЗаписей.Прочитать(); набор записей не пустой.
Если конечно после НаборЗаписей.Прочитать(); набор записей не пустой.
Да, точно. Что же делать, вроде такая простая задача, но вот кроме как программно проверять наличие дублей перед записью в регистр ничего не могу придумать.
Переделала, чтобы не было зацикливания
Для каждого Строка Из Таблица Цикл
НаборЗаписей = РегистрыСведений.Регистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Измерение1.Установить(Измерение1);
НаборЗаписей.Отбор.Измерение2.Установить(Измерение2);
НаборЗаписей.Отбор.Измерение3.Установить(Измерение3);
НаборЗаписей.Отбор.Измерение4.Установить(Измерение4);
НаборЗаписей.Прочитать();
Для каждого ЗаписьНабора из НаборЗаписей Цикл
ЗаписьНабора.Измерение1= Измерение1;
ЗаписьНабора.Измерение4=Измерение4;
ЗаписьНабора.Измерение2= Измерение2;
ЗаписьНабора.Измерение3= Измерение3;
ЗаписьНабора.Статус = СтатусСценария;
ЗаписьНабора.Статус= Статус;
КонецЦикла;
КонецЦикла;
Показать
(32)
Что это?
если Вы хотите понять если записи ранее, то просто если после НаборЗаписей.Прочитать(); набор записей уже не пустой, то значит записи уже есть ранее.
Либо не надо читать набор записей, заполните его и попытайтесь записать. Только Замещать = ложь. И отругается он Вам что такие записи уже есть.
НаборЗаписей.Прочитать();
Что это?
если Вы хотите понять если записи ранее, то просто если после НаборЗаписей.Прочитать(); набор записей уже не пустой, то значит записи уже есть ранее.
Либо не надо читать набор записей, заполните его и попытайтесь записать. Только Замещать = ложь. И отругается он Вам что такие записи уже есть.
Да вы прикалываетесь что ли? Зачем вы обходите полученный набор записей и переприсваиваете измерениям их же значения, а потом удивляетесь, что проверка не работает и записывается последнее значение?
Делаете:
НаборЗаписей.Прочитать();
Для каждого Стр Из ТЧДокумента Цикл
запись = НаборЗаписей.Добавить();
запись.Измерение1 = Измерение1;
.....
КонецЦикла;
НаборЗаписей.Записать();
Делаете:
НаборЗаписей.Прочитать();
Для каждого Стр Из ТЧДокумента Цикл
запись = НаборЗаписей.Добавить();
запись.Измерение1 = Измерение1;
.....
КонецЦикла;
НаборЗаписей.Записать();
(43)
Нет, не прикалываюсь. Я правильно поняла, что надо 2 раза обойти ТЧ документа?Потому что у меня одно измерение содержится в строках ТЧ.
Да вы прикалываетесь что ли
Нет, не прикалываюсь. Я правильно поняла, что надо 2 раза обойти ТЧ документа?Потому что у меня одно измерение содержится в строках ТЧ.
Для каждого Строка Из ТЧ Цикл
НаборЗаписей = РегистрыСведений.Регистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Измерение1 .Установить(Измерение1 );
НаборЗаписей.Отбор.Измерение2 .Установить(Измерение2 );
НаборЗаписей.Отбор.Измерение3 .Установить(Измерение3 );
НаборЗаписей.Прочитать();
Для каждого Стр Из ТЧ Цикл
ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Измерение1 = Измерение1 ;
ЗаписьНабора.Измерение2 = Измерение2 ;
ЗаписьНабора.Измерение3 = Измерение3 ;
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
Показать
(45)Нет, два раза я имела в ввиду что сначала надо делать цикл - Для каждого Строка Из ТЧ Цикл. И потом еще в этом цикле второй раз цикл опять по табличной части дока Для каждого Стр Из ТЧ Цикл.
Если так, то мне вообще только 1 раз дает записать.. А если пользователь зашел еще раз, что то поменял в документе, то все. Уже ругается.
Если так, то мне вообще только 1 раз дает записать.. А если пользователь зашел еще раз, что то поменял в документе, то все. Уже ругается.
(46) на сколько понял, нет необходимости обходить два раза, тем более в таком виде, в котором вы собираетесь это делать, т.е. без установки значения 4-го измерения.
Если значение измерение4 содержится в ТЧ, то должно быть достаточно:
Если значение измерение4 содержится в ТЧ, то должно быть достаточно:
НаборЗаписей = РегистрыСведений.Регистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Измерение1 .Установить(Измерение1 );
НаборЗаписей.Отбор.Измерение2 .Установить(Измерение2 );
НаборЗаписей.Отбор.Измерение3 .Установить(Измерение3 );
Для каждого Стр Из ТЧ Цикл
НаборЗаписей.Отбор.Измерение4 .Установить(Измерение4 );
НаборЗаписей.Прочитать();
ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Измерение1 = Измерение1 ;
ЗаписьНабора.Измерение2 = Измерение2 ;
ЗаписьНабора.Измерение3 = Измерение3 ;
ЗаписьНабора.Измерение4 = Измерение4 ;
НаборЗаписей.Записать();
КонецЦикла;
Показать
(46) Возможно, хватит и такого варианта:
НаборЗаписей = РегистрыСведений.Регистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Измерение1 .Установить(Измерение1 );
НаборЗаписей.Отбор.Измерение2 .Установить(Измерение2 );
НаборЗаписей.Отбор.Измерение3 .Установить(Измерение3 );
НаборЗаписей.Прочитать();
Для каждого Стр Из ТЧ Цикл
ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Измерение1 = Измерение1 ;
ЗаписьНабора.Измерение2 = Измерение2 ;
ЗаписьНабора.Измерение3 = Измерение3 ;
ЗаписьНабора.Измерение4 = Измерение4 ;
КонецЦикла;
НаборЗаписей.Записать();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот