helpf.pro
Регистрация

Как проверить есть ли добавляемая запись в регистре сведений

bless18
03.06.2010 10:17Прочитано: 22737
Здравствуйте!
Имеется обработка, после заполнения полей которой при нажатии на кнопку, данные записываются в документ и проводятся по регистру сведений. Проблема в том, что сколько бы раз не нажималась кнопка, столько новых повторяющихся записей появляется в документе
Как проверить есть ли аналогичная запись в регистре сведений
Yandex
Возможно, вас также заинтересует
Реклама на портале
bless18
03.06.2010 10:38Ответ № 1
Вот код, где я записываю данные обработки в документ..
И где-то тут нужно поставить проверку на существование добавляемой записи в регистре, чтобы один и тот же документ недозаписывался много раз
Код 1C v 8.х
 Процедура ЗаписатьВДокументНажатие(Элемент)
НовыйДокумент = Документы.ЗавершенныеЗадачи.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.УстановитьНовыйНомер();
НовыйДокумент.Отдел = ЭтотОбъект.Отдел;
НовыйДокумент.ПолучательЗадачи = ЭтотОбъект.ПолучательЗадачи;
НовыйДокумент.Пользователь = ОбработкаОбъект.Пользователь;


Для Каждого СтрокаТЗ Из ЭтотОбъект.Пользователи Цикл
Если СтрокаТЗ.ЗадачаЗавершена = Истина Тогда
СтрокаЗавершениеЗадачи = НовыйДокумент.ЗавершениеЗадач.Добавить();
СтрокаЗавершениеЗадачи.ДатаВыполненияПоПлану=СтрокаТЗ.ДатаВыполненияПоПлану;
СтрокаЗавершениеЗадачи.ДатаВыполненияПофакту=СтрокаТЗ.ДатаВыполненияПофакту;
СтрокаЗавершениеЗадачи.ДатаНачалаВыполнения=СтрокаТЗ.ДатаНачалаВыполнения;
СтрокаЗавершениеЗадачи.ЗадачаЗавершена=СтрокаТЗ.ЗадачаЗавершена;
СтрокаЗавершениеЗадачи.ИсполнительЗадачи=СтрокаТЗ.ИсполнительЗадачи;
СтрокаЗавершениеЗадачи.ПользовательСистемы=СтрокаТЗ.ПользовательСистемы;
СтрокаЗавершениеЗадачи.Приоритет=СтрокаТЗ.Приоритет;
СтрокаЗавершениеЗадачи.ПроцентОставшегосяВремени=СтрокаТЗ.ПроцентОставшегосяВремени;
СтрокаЗавершениеЗадачи.ТекущаяЗадача=СтрокаТЗ.ТекущаяЗадача;
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли
КонецЦикла;
Предупреждение("Данные записаны в документ Завершенные задачи");
КонецПроцедуры
E_Migachev
03.06.2010 10:41Ответ № 2
(0) bless18, Перед добавление нужно проверять существующие записи через выборку
Код 1C v 8.х
 РегистрСведений.Выбрать(ДатаН, ДатаК, Отбор)   

Далее перебираешь записи и сравниваешь их с добавляемой!
E_Migachev
03.06.2010 10:44Ответ № 3
(1) Судя по коду ты из обработки создаешь документ ЗавершенныеЗадачи, а потом перебирая табличное поле Пользователи, для каждой строки создаешь документ ЗавершениеЗадач! Так?
А запись в какой регистр и где происходит? при проведении ЗавершениеЗадач?
bless18
03.06.2010 10:52Ответ № 4
Да, я из обработки создаю документ Завершенные Задачи
А запись в регистр происходит в модуле документа Завершненный задачи в процедре обработка проведения
bless18
03.06.2010 11:16Ответ № 5
РегистрСведений.Выбрать(ДатаН, ДатаК, Отбор)
Этим я уже проверяю есть ли записи?
E_Migachev
03.06.2010 11:40Ответ № 6
а покажи код модуля проведения Завершненный задачи
bless18
03.06.2010 11:48Ответ № 7
Код 1C v 8.х
 Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаЗавершениеЗадач Из ЗавершениеЗадач Цикл
// регистр РаспределениеЗадачи
Движение = Движения.РаспределениеЗадачи.Добавить();
Движение.Период = Дата;
Движение.ПолучательЗадачи = ЭтотОбъект.ПолучательЗадачи;
Движение.ИсполнительЗадачи = ТекСтрокаЗавершениеЗадач.ИсполнительЗадачи;
Движение.НаименованиеЗадачи = ТекСтрокаЗавершениеЗадач.ТекущаяЗадача;
Движение.Пользователь = ЭтотОбъект.Пользователь;
Движение.Приоритет = ТекСтрокаЗавершениеЗадач.Приоритет;
Движение.ДатаВыполнения = ТекСтрокаЗавершениеЗадач.ДатаВыполненияПоПлану;
Движение.ДатаНачалаВыполнения = ТекСтрокаЗавершениеЗадач.ДатаНачалаВыполнения;
Движение.Отдел = ЭтотОбъект.Отдел;
Движение.НаименованиеЗадачи=ТекСтрокаЗавершениеЗадач.ТекущаяЗадача;
Движение.ДатаВыполненияПоФакту = ТекСтрокаЗавершениеЗадач.ДатаВыполненияПофакту;
Движение.ЗадачаЗавершена=Истина;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Вот код
E_Migachev
03.06.2010 11:53Ответ № 8
А получается у тебя задвоенные строки в табличной части ЗавершениеЗадач? или они могут быть в разных документах?
bless18
03.06.2010 11:58Ответ № 9
Эти строки аналогичны тем, которые есть в табличном поле обработки: все реквизиты обработки = реквизитам документа
E_Migachev
03.06.2010 12:04Ответ № 10
Так получается у тебя задвоения уже в самой обработке!? так их надо и табличной части и убрать...
E_Migachev
03.06.2010 12:15Ответ № 11
при проведении удалять дубли конечно можно, но это не правильный подход *11
bless18
03.06.2010 12:19Ответ № 12
Мне нужно не удалять, а запретить их добавление
Я сейчас сделала так:
Код 1C v 8.х
 
Процедура ЗаписатьВДокументНажатие(Элемент)
НовыйДокумент = Документы.ЗавершенныеЗадачи.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.УстановитьНовыйНомер();
НовыйДокумент.Отдел = ЭтотОбъект.Отдел;
НовыйДокумент.ПолучательЗадачи = ЭтотОбъект.ПолучательЗадачи;
НовыйДокумент.Пользователь = ОбработкаОбъект.Пользователь;
Запрос=новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| РаспределениеЗадачиСрезПоследних.НаименованиеЗадачи
|ИЗ
| РегистрСведений.РаспределениеЗадачи.СрезПоследних(&Дата, ) КАК РаспределениеЗадачиСрезПоследних";
Запрос.УстановитьПараметр("Дата", КонецДня(ЭтотОбъект.Дата));
Результат = Запрос.Выполнить().Выгрузить();
СтрокаТч=ЭлементыФормы.Пользователи.ТекущиеДанные;
Для Каждого СтрокаРаспределениеЗадачи Из Результат Цикл
Если СтрокаТч.ТекущаяЗадача=СтрокаРаспределениеЗадачи.НаименованиеЗадачи Тогда
КонецЕсли;
КонецЦикла;
Предупреждение ("Такой документ уже существует");
Для Каждого СтрокаТЗ Из ЭтотОбъект.Пользователи Цикл

Если СтрокаТЗ.ЗадачаЗавершена = Истина Тогда
СтрокаЗавершениеЗадачи = НовыйДокумент.ЗавершениеЗадач.Добавить();
СтрокаЗавершениеЗадачи.ДатаВыполненияПоПлану=СтрокаТЗ.ДатаВыполненияПоПлану;
СтрокаЗавершениеЗадачи.ДатаВыполненияПофакту=СтрокаТЗ.ДатаВыполненияПофакту;
СтрокаЗавершениеЗадачи.ДатаНачалаВыполнения=СтрокаТЗ.ДатаНачалаВыполнения;
СтрокаЗавершениеЗадачи.ЗадачаЗавершена=СтрокаТЗ.ЗадачаЗавершена;
СтрокаЗавершениеЗадачи.ИсполнительЗадачи=СтрокаТЗ.ИсполнительЗадачи;
СтрокаЗавершениеЗадачи.ПользовательСистемы=СтрокаТЗ.ПользовательСистемы;
СтрокаЗавершениеЗадачи.Приоритет=СтрокаТЗ.Приоритет;
СтрокаЗавершениеЗадачи.ПроцентОставшегосяВремени=СтрокаТЗ.ПроцентОставшегосяВремени;
СтрокаЗавершениеЗадачи.ТекущаяЗадача=СтрокаТЗ.ТекущаяЗадача;
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли
КонецЦикла;
Предупреждение("Данные записаны в документ Завершенные задачи");
КонецПроцедуры

По наименованию задачи делаю отбор, дублирующиеся записи находятся..Вот теперь как сделать, чтобы они не записывалисьв документ?
E_Migachev
03.06.2010 12:40Ответ № 13
Если я тебя правильно понял, то пробуй так:
Код 1C v 8.х
 СтрокаТч=ЭлементыФормы.Пользователи.ТекущиеДанные;
ЕСТЬДОК=Ложь;
Для Каждого СтрокаРаспределениеЗадачи Из Результат Цикл
Если СтрокаТч.ТекущаяЗадача=СтрокаРаспределениеЗадачи.НаименованиеЗадачи Тогда
ЕСТЬДОК=Истина;
КонецЕсли;
КонецЦикла;
Если ЕСТЬДОК Тогда
Предупреждение ("Такой документ уже существует");
Иначе
Для Каждого СтрокаТЗ Из ЭтотОбъект.Пользователи Цикл

Если СтрокаТЗ.ЗадачаЗавершена = Истина Тогда
СтрокаЗавершениеЗадачи = НовыйДокумент.ЗавершениеЗадач.Добавить();
СтрокаЗавершениеЗадачи.ДатаВыполненияПоПлану=СтрокаТЗ.ДатаВыполненияПоПлану;
СтрокаЗавершениеЗадачи.ДатаВыполненияПофакту=СтрокаТЗ.ДатаВыполненияПофакту;
СтрокаЗавершениеЗадачи.ДатаНачалаВыполнения=СтрокаТЗ.ДатаНачалаВыполнения;
СтрокаЗавершениеЗадачи.ЗадачаЗавершена=СтрокаТЗ.ЗадачаЗавершена;
СтрокаЗавершениеЗадачи.ИсполнительЗадачи=СтрокаТЗ.ИсполнительЗадачи;
СтрокаЗавершениеЗадачи.ПользовательСистемы=СтрокаТЗ.ПользовательСистемы;
СтрокаЗавершениеЗадачи.Приоритет=СтрокаТЗ.Приоритет;
СтрокаЗавершениеЗадачи.ПроцентОставшегосяВремени=СтрокаТЗ.ПроцентОставшегосяВремени;
СтрокаЗавершениеЗадачи.ТекущаяЗадача=СтрокаТЗ.ТекущаяЗадача;
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли
КонецЦикла;
Предупреждение("Данные записаны в документ Завершенные задачи");
КонецЕсли;
bless18
03.06.2010 13:09Ответ № 14
О, спасибо вам огромное!!!!!
Именно так и нужно было!
bless18
03.06.2010 13:19Ответ № 15
Вопрос закрыт!
Подсказка: Щелкнув по значку (справа от названия вопроса), вы получите список ответов на похожие вопросы!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.