Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:39

Перебор регистра наколения, запись, если есть записи перезаписывать

Автор Gererro, 12 сен 2017, 12:22

0 Пользователей и 1 гость просматривают эту тему.

Gererro

Помоги люди добрые!
Обработка создает документ корректировки регистра накопления.
Как можно в случае если документ по данным реквизитам уже присутствует в "Документах корректировки" задать вопрос о его перезаписи.
Код:


Процедура КнопкаВыполнитьНажатие(Кнопка)
   //Проверка на незаполнение полей формы
   Если Не ЗначениеЗаполнено(ОкончаниеПериода) Тогда
       Сообщить("Поле Окончание Периода не заполнено!");
       Возврат;
   Конецесли;

   Если Не ЗначениеЗаполнено(Организация) Тогда
       Сообщить("Поле Организация не заполнено!");
       Возврат;
   Конецесли;

   Если Не ЗначениеЗаполнено(Контрагент) Тогда
       Сообщить("Поле Контрагент не заполнено!");
       Возврат;
   Конецесли;
   
   Если Не ЗначениеЗаполнено(Договор) Тогда
       Сообщить("Поле Договор Контрагента не заполнено!");
       Возврат;
   Конецесли;
   
   //Смотрим выбран ли Документ корректировки

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

   ДвиженияКорр = НовДокКоррЗап.Движения;
   НовСтрРег = НовДокКоррЗап.ТаблицаРегистровНакопления.Добавить();
   НовСтрРег.Имя = "ВзаиморасчетыСКонтрагентами";
   НовСтрРег.Представление = "Взаиморасчеты с контрагентами";
   //Получаем набор записей
   ВзаиморасчетыСКонтрагентами = ДвиженияКорр.ВзаиморасчетыСКонтрагентами;
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ВзаиморасчетыСКонтрагентамиОбороты.Период,
      |   ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
      |   ВзаиморасчетыСКонтрагентамиОбороты.Сделка,
      |   ВзаиморасчетыСКонтрагентамиОбороты.Организация,
      |   ВзаиморасчетыСКонтрагентамиОбороты.Контрагент,
      |   ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход,
      |   ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход,
      |   ВзаиморасчетыСКонтрагентамиОбороты.Регистратор
      |ИЗ
      |   РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
      |         &НачалоПериода,
      |         &ОкончаниеПериода,
      |         Регистратор,
      |         Организация = &Организация
      |            И Контрагент = &Контрагент
      |            И ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиОбороты
      |ГДЕ
      |   ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход <> 0";
      
   Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода));
   Запрос.УстановитьПараметр("ОкончаниеПериода", Новый Граница(КонецДня(ОкончаниеПериода), ВидГраницы.Включая));
   Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
      
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();   
   
   Пока Выборка.Следующий() Цикл
      
      
      Строка = ВзаиморасчетыСКонтрагентами.Добавить();
      Строка.Период             = КонецДня(Выборка.Период);
      Строка.Регистратор          = НовДокКоррЗап.Ссылка;
      Строка.ВидДвижения          = ВидДвиженияНакопления.Расход;
      Строка.Активность          = Истина;
      Строка.Сделка             = Выборка.Сделка;
      Строка.Организация          = Выборка.Организация;
      Строка.Контрагент          = Выборка.Контрагент;
      Строка.ДоговорКонтрагента    = Выборка.ДоговорКонтрагента;
      Строка.СуммаВзаиморасчетов   = Выборка.СуммаВзаиморасчетовПриход;
      Строка.СуммаУпр          = Выборка.СуммаУпрПриход;
            
   КонецЦикла;
      
   //Движение по РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчета
   НовСтрРег = НовДокКоррЗап.ТаблицаРегистровНакопления.Добавить();
   НовСтрРег.Имя = "ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов";
   НовСтрРег.Представление = "Взаиморасчеты с контрагентами по документам расчетов";
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов = ДвиженияКорр.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов;
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Период,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДокументРасчетовСКонтрагентом,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ВидРасчетовСКонтрагентом,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.УпрУчет,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Организация,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Контрагент,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовПриход,
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаРеглПриход
   |ИЗ
   |   РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(
   |         &НачалоПериода,
   |         &ОкончаниеПериода,
   |         Регистратор,
   |         Организация = &Организация
   |            И Контрагент = &Контрагент
   |            И ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты
   |ГДЕ
   |   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовПриход <> 0";
   
   Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода));
   Запрос.УстановитьПараметр("ОкончаниеПериода", Новый Граница(КонецДня(ОкончаниеПериода), ВидГраницы.Включая));
   Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);

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

      
КонецПроцедуры

Процедура ВыбПериодНажатие(Элемент)
   НастройкаПериода = Новый НастройкаПериода;
   НастройкаПериода.РедактироватьКакИнтервал = Истина;
   НастройкаПериода.РедактироватьКакПериод = Истина;
   НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
   НастройкаПериода.УстановитьПериод(НачалоПериода, ?(ОкончаниеПериода='0001-01-01', ОкончаниеПериода, КонецДня(ОкончаниеПериода)));
   Если НастройкаПериода.Редактировать() Тогда
      НачалоПериода = НастройкаПериода.ПолучитьДатуНачала();
      ОкончаниеПериода = НастройкаПериода.ПолучитьДатуОкончания();
   КонецЕсли;
КонецПроцедуры


oleg-x

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск