Имя: Пароль:
1C
1С v8
Проверка на наличие уже имеющихся идентичных записей в рег сведений.
0 Boudybuilder
 
29.10.12
13:27
Создал обработку для заполнение регистра сведений НоменклатураКонтрагента.

Хотелось бы при записи проверять имеется ли уже такая же запись с такими же данными , и если да , то не перезаписывать.


Вот так записываю:





Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Если СписокНоменклатуры.Количество() > 0 Тогда
       Ответ = Вопрос ("Установить "+СписокНоменклатуры.Количество()+" соостветствия для контрагента "+Контрагент+"?",РежимДиалогаВопрос.ДаНет);
       Если Ответ = КодВозвратаДиалога.Нет Тогда
           Возврат
       Иначе
           Для каждого Строка Из СписокНоменклатуры Цикл
               Если ЗначениеЗаполнено(Строка.Номенклатура)Тогда
                   Запись = РегистрыСведений.НоменклатураКонтрагентов.СоздатьМенеджерЗаписи();
                   Запись.Контрагент                          = Контрагент;
                   Запись.Номенклатура                        = Строка.Номенклатура;
                   Запись.ХарактеристикаНоменклатуры          = Строка.ХарактеристикаНоменклатуры;
                   Запись.КодНоменклатурыКонтрагента          = Строка.КодНоменклатурыКонтрагента;
                   Запись.АртикулНоменклатурыКонтрагента      = Строка.АртикулНоменклатурыКонтрагента;
                   Запись.НаименованиеНоменклатурыКонтрагента = Строка.НаименованиеНоменклатурыКонтрагента;
                   Запись.ШтрихКодНоменклатурыКонтрагента     = Строка.ШтрихКодНоменклатурыКонтрагента;
                   Запись.ЕдиницаНоменклатурыКонтрагента       = Строка.Номенклатура.БазоваяЕдиницаИзмерения;
                   Запись.Ответственный                       = Ответственный;
                   Запись.Дата                                = ТекущаяДата();
                   Запись.Записать();
               КонецЕсли;
           КонецЦикла;
           СписокНоменклатуры.Очистить();
       КонецЕсли;
   КонецЕсли;
   
КонецПроцедуры
1 Cube
 
29.10.12
13:30
СП украли?

РегистрСведенийМенеджерЗаписи.<Имя регистра сведений>.Выбран

Выбран (Selected)
Синтаксис:

Выбран()
Возвращаемое значение:

Тип: Булево.
Истина - запись выбрана, Ложь - в противном случае.
Описание:

Определяет, считана запись или нет.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

Если Не Курс.Выбран() Тогда
   Предупреждение("Курс не считан");
   Текст = "ru = ""Курс не считан"";"
    + " en = ""Rate is not read.""";
   Предупреждение(НСтр(Текст));
КонецЕсли;
2 Boudybuilder
 
29.10.12
13:35
)))
Если структура регистра такова:
Измерния:
-Контрагент
-Номенклатура
-ХарактеристикаНоменклатуры
Все остальное ресурсы.


А мне и ресурсы и измерения надо проверять на идентичность.
Тоесть если изменено , то записывать...
3 fisher
 
29.10.12
13:37
Измерения проверять на идентичность? Ну-ну.
4 Cube
 
29.10.12
13:37
(2) Смысл? Ну дерни запросом, только не в цикле)
5 fisher
 
29.10.12
13:38
(3) + Или это типа полная перезаливка?
6 Boudybuilder
 
29.10.12
13:41
(5) Непериодический  . Полная из имеющикся в ТЧ. Остальные записи ж не трогаются..
7 fisher
 
29.10.12
13:44
(6) Тогда по какому критерию ты собираешься определять "изменившиеся измерения"? :) Ты можешь проверить только, изменились ли ресурсы по тем комбинациям измерений,  что есть в ТЧ.
8 Boudybuilder
 
29.10.12
13:47
(7) Вот что хотел сформулировать , да не смог...
Спасибо , это мой главный вопрос и есть.
Но проверить не все изменившиеся измерения , а там Код , Наименование , Артикул.
(1) Это оно и есть?
9 Boudybuilder
 
29.10.12
14:05
Та тут вроде тупо сравнивать можно , нет?
Типа Если Запись.КодНоменклатурыКонтрагента = Строка.КодНоменклатурыКонтрагента
Тогда....
Так ведь?
10 fisher
 
29.10.12
14:44
(8) Нифига не понял. Какие измерения? Код, наименование и артикул - ресурсы у тебя.
11 Boudybuilder
 
29.10.12
14:57
(10) Да , опечатался.
12 Boudybuilder
 
29.10.12
15:08
Модифицированность() ?
13 fisher
 
29.10.12
15:22
Какая еще модифицированность?
Тупо запросом сравниваешь свою ТЧ с регистром, получаешь назад новые/измененные записи и в цикле через менеджера записи пишешь их в базу.
14 Boudybuilder
 
29.10.12
15:27
Для каждого Строка Из СписокНоменклатуры Цикл
               Если ЗначениеЗаполнено(Строка.Номенклатура)Тогда
                   Запись = РегистрыСведений.НоменклатураКонтрагентов.СоздатьМенеджерЗаписи();
                   Запись.Контрагент                          = Контрагент;
                   Запись.Номенклатура                        = Строка.Номенклатура;
                   Запись.ХарактеристикаНоменклатуры          = Строка.ХарактеристикаНоменклатуры;
                   Запись.Прочитать();
                   Запись.КодНоменклатурыКонтрагента          = СокрЛП(Строка.КодНоменклатурыКонтрагента);
                   Запись.АртикулНоменклатурыКонтрагента      = СокрЛП(Строка.АртикулНоменклатурыКонтрагента);
                   Запись.НаименованиеНоменклатурыКонтрагента = СокрЛП(Строка.НаименованиеНоменклатурыКонтрагента);
                   Запись.ШтрихКодНоменклатурыКонтрагента     = СокрЛП(Строка.ШтрихКодНоменклатурыКонтрагента);
                   Запись.ЕдиницаНоменклатурыКонтрагента       = Строка.Номенклатура.БазоваяЕдиницаИзмерения;
                   Запись.Ответственный                       = Ответственный;
                   Запись.Дата                                = ТекущаяДата();
                   Если
                       Запись.КодНоменклатурыКонтрагента          = СокрЛП(Строка.КодНоменклатурыКонтрагента) И
                       Запись.АртикулНоменклатурыКонтрагента      = СокрЛП(Строка.АртикулНоменклатурыКонтрагента)
                       Тогда
                       Запись.Записать();
                   КонецЕсли;
               КонецЕсли;
           КонецЦикла;



Так нормально?
15 hhhh
 
29.10.12
15:35
ЗаполнитьЗначенияСвойств(Запись, Строка);
16 fisher
 
29.10.12
15:52
Как нормально - я уже сказал.
17 Boudybuilder
 
29.10.12
16:55
Вобщем я сделал так:
Не проф , но работает на ура!






Для каждого Строка Из СписокНоменклатуры Цикл
               Если НЕ Строка.Номенклатура.Пустая() И НЕ Строка.Номенклатура.ЭтоГруппа Тогда
                   Запись = РегистрыСведений.НоменклатураКонтрагентов.СоздатьМенеджерЗаписи();
                   Запись.Контрагент                          = Контрагент;
                   Запись.Номенклатура                        = Строка.Номенклатура;
                   Запись.ХарактеристикаНоменклатуры          = Строка.ХарактеристикаНоменклатуры;
                   Запись.Прочитать();
                   Если
                       Запись.КодНоменклатурыКонтрагента          = СокрЛП(Строка.КодНоменклатурыКонтрагента) И
                       Запись.НаименованиеНоменклатурыКонтрагента = СокрЛП(Строка.НаименованиеНоменклатурыКонтрагента) Тогда
                   Иначе
                       Запись.Контрагент                          = Контрагент;
                       Запись.Номенклатура                        = Строка.Номенклатура;
                       Запись.ХарактеристикаНоменклатуры          = Строка.ХарактеристикаНоменклатуры;
                       Запись.КодНоменклатурыКонтрагента          = СокрЛП(Строка.КодНоменклатурыКонтрагента);
                       Запись.АртикулНоменклатурыКонтрагента      = СокрЛП(Строка.АртикулНоменклатурыКонтрагента);
                       Запись.НаименованиеНоменклатурыКонтрагента = СокрЛП(Строка.НаименованиеНоменклатурыКонтрагента);
                       Запись.ШтрихКодНоменклатурыКонтрагента     = СокрЛП(Строка.ШтрихКодНоменклатурыКонтрагента);
                       Запись.ЕдиницаНоменклатурыКонтрагента       = Строка.Номенклатура.БазоваяЕдиницаИзмерения;
                       Запись.Ответственный                       = Ответственный;
                       Запись.Дата                                = ТекущаяДата();
                       Запись.Записать();
                   КонецЕсли;
               КонецЕсли;
           КонецЦикла;