Имя: Пароль:
1C
 
Перебор записей,
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
Проверка уникальности записи регистра производится по всем измерениям регистра. Еще раз, по ВСЕМ без исключения измерениям, включая системные, если есть регистратор и когда регистр периодический.

А когда у одного регистратора могут появиться дубли записей? Предположу, что в случае каких-то омерзительных доработок, при формировании проводок.
2 + 2 = 3.9999999999999999999999999999999...