Имя: Пароль:
1C
1С v8
перезаполнение счета на оплату при изменении количества в заказе
0 kindzadza
 
02.07.13
10:41
Добрый день! необходимо при изменении количества в заказе(уже проведенного и записанного) и созданном на его основании счета на оплату изменялось сумма в любом счете....конфа УТ11+crm
сделал так....добавил кнопку на форму счета и такой код:
&НаКлиенте
Процедура ПерезаполнитьСчет(Команда)      
   ТаблицаЭтапов = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
   Для каждого СтрТаблицаЭтапов Из ТаблицаЭтапов Цикл
       Реквизит = СтрТаблицаЭтапов.НомерСтроки;
       Реквизит = СтрТаблицаЭтапов.ДатаПлатежа;
       Реквизит = СтрТаблицаЭтапов.СуммаПлатежа;
       Реквизит = СтрТаблицаЭтапов.ПроцентПлатежа;
   КонецЦикла;
   Перезаполнение(ТаблицаЭтапов);
КонецПроцедуры

&НаСервере
Процедура Перезаполнение(ТаблицаЭтапов)  
   ЗаписьЖурналаРегистрации("Отладка",
       УровеньЖурналаРегистрации.Информация, , ,
       "Выполнено1 " );

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


   Если Результат.Ссылка = Неопределено Тогда
       ДокументОбъект = Документы.СчетНаОплатуКлиенту.СоздатьДокумент();
   Иначе
       ДокументОбъект = Результат.Ссылка.ПолучитьОбъект();
   КонецЕсли;
   
   ЗаполнитьЗначенияСвойств(ДокументОбъект, Основание);
   ДокументОбъект.Заполнить(Неопределено);
   ДокументОбъект.Дата = ТекущаяДата();
   ДокументОбъект.УстановитьНовыйНомер();
   СуммаДокумента   = 0;
   КоличествоЭтапов = 0;
   НомерЭтапа       = 1;
   ПроцентПлатежа   = 0;
   Для Каждого ТекущийЭтап Из ТаблицаЭтапов Цикл
       Если Не ТекущийЭтап.Выбран Тогда
           Продолжить;
       КонецЕсли;
       СуммаДокумента = СуммаДокумента + ТаблицаЭтапов.СуммаПлатежа - ТекущийЭтап.СуммаОплаты;
       КоличествоЭтапов = КоличествоЭтапов + 1;
   КонецЦикла;
   ДокументОбъект.СуммаДокумента = СуммаДокумента;
   Если Основание.СуммаДокумента <> СуммаДокумента Тогда
       ДокументОбъект.ЧастичнаяОплата = Истина;
   КонецЕсли;
   ДокументОбъект.ЭтапыГрафикаОплаты.Очистить();
   Для Каждого ТекущийЭтап Из ТаблицаЭтапов Цикл
       Если Не ТекущийЭтап.Выбран Тогда
           Продолжить;
       КонецЕсли;
       НовыйЭтап = ДокументОбъект.ЭтапыГрафикаОплаты.Добавить();
       НовыйЭтап.ДатаПлатежа    = ТекущийЭтап.ДатаПлатежа;
       НовыйЭтап.СуммаПлатежа   = ТекущийЭтап.СуммаКОплате;
       Если СуммаДокумента > 0 Тогда
           Если НомерЭтапа = КоличествоЭтапов Тогда
               НовыйЭтап.ПроцентПлатежа = 100 - ПроцентПлатежа;
           Иначе
               НовыйЭтап.ПроцентПлатежа = НовыйЭтап.СуммаПлатежа * 100 / СуммаДокумента;
               ПроцентПлатежа = ПроцентПлатежа + НовыйЭтап.ПроцентПлатежа;
           КонецЕсли;
       КонецЕсли;
       НомерЭтапа = НомерЭтапа + 1;
   КонецЦикла;
   БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДокументОбъект.Организация, , ДокументОбъект.БанковскийСчет);
   Касса          = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(ДокументОбъект.Организация, ДокументОбъект.ФормаОплаты, ДокументОбъект.Касса);
   ДокументОбъект.НазначениеПлатежа = Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
   Основание.НомерДокумента,
   Основание.Префикс,
   Основание.ДокументОснование);
   Попытка
       ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
       СчетНаОплатуКлиенту = ДокументОбъект.Ссылка;
   Исключение
       ТекстОшибки = НСтр("ru='Не удалось записать %Документ%. %ОписаниеОшибки%'");
       ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%",       ДокументОбъект);
       ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ОписаниеОшибки%", КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
       ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
       ТекстОшибки,
       ,
       ,);
       ОтменитьТранзакцию();
   КонецПопытки;
   КонецЕсли;
   ЗафиксироватьТранзакцию();
КонецПроцедуры

во первых выходит ошибка "итератор для значения не определен"
да и вообще отладчиком не попадает в цикл в процедуре перезаполнить...ТаблицаЭтапов это табличная часть но в другой форме,в чем проблема и как исправить чтоб все попадало и заполнялось?
до этого было немного по другому сделано,все перезаполнялось,попросили добавить кнопку,но создавался новый счет если его там не было(код как в нижней процедуре)
прошу громко не кричать....только начал все это изучать и делать....