|
Перебор записей, | ☑ | ||
---|---|---|---|---|
0
Gererro
12.09.17
✎
12:33
|
Люди подскажите. Обработка создает документ корректировки записей регистров. На данный момент если документ такой уже существует, то обработка сама его перезаписывает. Как можно описать перебор записей и в случае если такая запись присутствует в РежимДиалогВопрос.ДаНет предлагал его перезаписать.
Сам код обработки: Процедура КнопкаВыполнитьНажатие(Кнопка) //Проверка на незаполнение полей формы Если Не ЗначениеЗаполнено(ОкончаниеПериода) Тогда Сообщить("Поле Окончание Периода не заполнено!"); Возврат; Конецесли; Если Не ЗначениеЗаполнено(Организация) Тогда Сообщить("Поле Организация не заполнено!"); Возврат; Конецесли; Если Не ЗначениеЗаполнено(Контрагент) Тогда Сообщить("Поле Контрагент не заполнено!"); Возврат; Конецесли; Если Не ЗначениеЗаполнено(Договор) Тогда Сообщить("Поле Договор Контрагента не заполнено!"); Возврат; Конецесли; //Смотрим выбран ли Документ корректировки Если Не ЗначениеЗаполнено(ДокументКорректировки) Тогда НовДокКоррЗап = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент(); НовДокКоррЗап.Дата = ТекущаяДата(); НовДокКоррЗап.Комментарий = "Корректировка начислений ГПХ"; НовДокКоррЗап.Ответственный = Пользователи.ТекущийПользователь(); Иначе НовДокКоррЗап = ДокументКорректировки.ПолучитьОбъект(); Конецесли; ДвиженияКорр = НовДокКоррЗап.Движения; НовСтрРег = НовДокКоррЗап.ТаблицаРегистровНакопления.Добавить(); НовСтрРег.Имя = "ВзаиморасчетыСКонтрагентами"; НовСтрРег.Представление = "Взаиморасчеты с контрагентами"; //Получаем набор записей ВзаиморасчетыСКонтрагентами = ДвиженияКорр.ВзаиморасчетыСКонтрагентами; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиОбороты.Период, | ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента, | ВзаиморасчетыСКонтрагентамиОбороты.Сделка, | ВзаиморасчетыСКонтрагентамиОбороты.Организация, | ВзаиморасчетыСКонтрагентамиОбороты.Контрагент, | ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход, | ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход, | ВзаиморасчетыСКонтрагентамиОбороты.Регистратор |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты( | &НачалоПериода, | &ОкончаниеПериода, | Регистратор, | Организация = &Организация | И Контрагент = &Контрагент | И ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиОбороты |ГДЕ | ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход <> 0"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода)); Запрос.УстановитьПараметр("ОкончаниеПериода", Новый Граница(КонецДня(ОкончаниеПериода), ВидГраницы.Включая)); Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Строка = ВзаиморасчетыСКонтрагентами.Добавить(); Строка.Период = КонецДня(Выборка.Период); Строка.Регистратор = НовДокКоррЗап.Ссылка; Строка.ВидДвижения = ВидДвиженияНакопления.Расход; Строка.Активность = Истина; Строка.Сделка = Выборка.Сделка; Строка.Организация = Выборка.Организация; Строка.Контрагент = Выборка.Контрагент; Строка.ДоговорКонтрагента = Выборка.ДоговорКонтрагента; Строка.СуммаВзаиморасчетов = Выборка.СуммаВзаиморасчетовПриход; Строка.СуммаУпр = Выборка.СуммаУпрПриход; КонецЦикла; //Движение по РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчета НовСтрРег = НовДокКоррЗап.ТаблицаРегистровНакопления.Добавить(); НовСтрРег.Имя = "ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов"; НовСтрРег.Представление = "Взаиморасчеты с контрагентами по документам расчетов"; ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов = ДвиженияКорр.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Период, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДокументРасчетовСКонтрагентом, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ВидРасчетовСКонтрагентом, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.УпрУчет, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Организация, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Контрагент, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовПриход, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаРеглПриход |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты( | &НачалоПериода, | &ОкончаниеПериода, | Регистратор, | Организация = &Организация | И Контрагент = &Контрагент | И ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты |ГДЕ | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовПриход <> 0"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода)); Запрос.УстановитьПараметр("ОкончаниеПериода", Новый Граница(КонецДня(ОкончаниеПериода), ВидГраницы.Включая)); Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Строка = ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Добавить(); Строка.Период = КонецДня(Выборка.Период); Строка.Регистратор = НовДокКоррЗап.Ссылка; Строка.ВидДвижения = ВидДвиженияНакопления.Расход; Строка.Активность = Истина; Строка.Сделка = Выборка.Сделка; Строка.ДокументРасчетовСКонтрагентом = Выборка.ДокументРасчетовСКонтрагентом; Строка.ВидРасчетовСКонтрагентом = Выборка.ВидРасчетовСКонтрагентом; Строка.Организация = Выборка.Организация; Строка.Контрагент = Выборка.Контрагент; Строка.УпрУчет = Выборка.УпрУчет; Строка.ДоговорКонтрагента = Выборка.ДоговорКонтрагента; Строка.СуммаВзаиморасчетов = Выборка.СуммаВзаиморасчетовПриход; Строка.СуммаРегл = Выборка.СуммаРеглПриход; КонецЦикла; НовДокКоррЗап.Записать(); Сообщить ("Создан"+ " " + НовДокКоррЗап); КонецПроцедуры Процедура ВыбПериодНажатие(Элемент) НастройкаПериода = Новый НастройкаПериода; НастройкаПериода.РедактироватьКакИнтервал = Истина; НастройкаПериода.РедактироватьКакПериод = Истина; НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; НастройкаПериода.УстановитьПериод(НачалоПериода, ?(ОкончаниеПериода='0001-01-01', ОкончаниеПериода, КонецДня(ОкончаниеПериода))); Если НастройкаПериода.Редактировать() Тогда НачалоПериода = НастройкаПериода.ПолучитьДатуНачала(); ОкончаниеПериода = НастройкаПериода.ПолучитьДатуОкончания(); КонецЕсли; КонецПроцедуры |
|||
1
Господин ПЖ
12.09.17
✎
12:37
|
еще раз но внятно чего надо
|
|||
2
Beduin
12.09.17
✎
12:37
|
(1) Сделать за него работу
|
|||
3
vicof
12.09.17
✎
12:38
|
Какой-то костыль явно
|
|||
4
Gererro
12.09.17
✎
12:40
|
Меня интересует как можно перебрать записи и в случае если такая запись в Документах корректировки записей регистра уже есть выдать вопрос пользователю о его замене.
|
|||
5
Gererro
12.09.17
✎
12:41
|
Через РежимДиалогВопрос
|
|||
6
Ёпрст
12.09.17
✎
12:43
|
(4) Записи чего перебираешь и хде?
|
|||
7
shadow_sw
12.09.17
✎
12:43
|
записи какие перебираешь то?
|
|||
8
Господин ПЖ
12.09.17
✎
12:44
|
бери да перебирай
набор.Прочитать() |
|||
9
Gererro
12.09.17
✎
12:47
|
Записи РегистраНакопления ВзаиморасчетаСКонтрагентомОбороты и ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты. Обработка эти данные пишет в документ корректировку записей регистров. Меня интересует что после Набор.Прочитать() как задать пользователю вопрос о том, что такая запись уже присутствует и задать вопрос о ее перезаписи.
|
|||
10
Gererro
12.09.17
✎
12:48
|
(7)
|
|||
11
Господин ПЖ
12.09.17
✎
12:50
|
открыть СП на "Вопрос"
|
|||
12
Рэйв
12.09.17
✎
12:51
|
(9)>> как задать пользователю вопрос
Если Вопрос("О владыка! Не соблаговолишь ли ты согласиться переписать существующую запись?",РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да Тогда //TODO КонецЕсли; |
|||
13
Gererro
12.09.17
✎
12:55
|
(12) это да, но где в коде прописать, что такая запись уже есть, и дальше уже:
"Если Вопрос("О владыка! Не соблаговолишь ли ты согласиться переписать существующую запись?",РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да Тогда " |
|||
14
Рэйв
12.09.17
✎
13:01
|
(13)В том месте кода,где ты определил, "что такая запись уже есть"
|
|||
15
Beduin
12.09.17
✎
13:02
|
(14) Он не понимает как сравнить две разные записи регистров
|
|||
16
Рэйв
12.09.17
✎
13:04
|
(15)Тогда ему сначала следует изучить основы риторики, что бы научиться членораздельно задавать вопросы:-)
|
|||
17
Рэйв
12.09.17
✎
13:08
|
(13)Так чего ты точно хочешь то?
|
|||
18
Gererro
12.09.17
✎
13:13
|
Мне нужно понять где в коде прописать условие, что если запись в Документах корректировки регистров накопления присутствует, то задать вопрос о ее перезаписи.
|
|||
19
Рэйв
12.09.17
✎
13:20
|
(18)Переберай набор записей документа и сверяй с проверочными полями своей записи.Если поля все совпали, то запись такая есть.
|
|||
20
Wirtuozzz
12.09.17
✎
13:20
|
(18) Сложилось впечатление, что мастер не понимает как сравнить две записи регистра. А как ты планируешь записи сравнивать?
|
|||
21
Рэйв
12.09.17
✎
13:22
|
(18)хотя таких записей, про которые придется спрашивать, может быть вагон. Вспотеют за каждую кнопочку жать:-)
|
|||
22
Wirtuozzz
12.09.17
✎
13:25
|
Проверка уникальности записи регистра производится по всем измерениям регистра. Еще раз, по ВСЕМ без исключения измерениям, включая системные, если есть регистратор и когда регистр периодический.
А когда у одного регистратора могут появиться дубли записей? Предположу, что в случае каких-то омерзительных доработок, при формировании проводок. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |