Имя: Пароль:
1C
1С v8
Программное создание нового документа ЗаказКлиента
,
0 IamLev
 
26.06.12
22:17
Платформа: 8.2.15.317
Конфигурация: УТ 11.0.8.8
Суть проблемы: Делаю обработку по загрузке нового заказа клиента. Данные беру из скульной базы, т.е. подключение идет через ком объект. Все выполняется &НаСервере.  
Документы загружаются нормально, все заполняется. Они нормально записываются. Но вот незадача, при открытии списка документов и самого документа не отображаются итоговые показатели документа.  
Предложили сделать через ОткрытьФорму, т.е. получить форму, заполнить ее данными и открыть, но мне это не подходит, т.к. я получаю не один документ заказа, а несколько в Цикле, т.е. я не могу каждый новый открытый документ записывать, к тому же при этом есть заморочки по подключению к самой скульной базе &НаКлиенте.
Подскажите, какие могут быть варианты решения этой проблемы.
1 Amra
 
26.06.12
22:22
ЕСли мне память не изменяет, в шапке документа есть "итоговые" реквизиты. Судя по всему их не заполняешь. Год назад такое же делал как и ты
2 IamLev
 
26.06.12
22:27
В шапке документа - это в реквизитах самого объекта?
3 Klesk
 
26.06.12
22:30
(0) +(1) юзай модули формы и объекта
что то типа РассчитатьСуммуВзаиморасчетов()
4 IamLev
 
26.06.12
22:43
Вот последнее не понял. Можно по подробнее? :)
5 IamLev
 
26.06.12
22:46
Поясню. Итоговые показатели - это реквизиты формы. Я не знаю где, но они явно где-то хранятся и после закрытия документа.
Есть там процедура такая:
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтоговыеПоказателиЗаказа(Форма)
   
   // Заполнение итогов по таблице "Товары"
   
   КоллекцияТовары = Форма.Объект.Товары;
   Форма.СуммаЗаказано     = КоллекцияТовары.Итог("СуммаСНДС") - КоллекцияТовары.Итог("СуммаСНДСОтменено");
   Форма.СуммаНДСЗаказано  = КоллекцияТовары.Итог("СуммаНДС") - КоллекцияТовары.Итог("СуммаНДСОтменено");
   Форма.СуммаАвтоСкидки   = КоллекцияТовары.Итог("СуммаАвтоматическойСкидки") - КоллекцияТовары.Итог("СуммаАвтоматическойСкидкиОтменено");
   Форма.СуммаРучнойСкидки = КоллекцияТовары.Итог("СуммаРучнойСкидки") - КоллекцияТовары.Итог("СуммаРучнойСкидкиОтменено");
   Форма.СуммаСкидки       = Форма.СуммаАвтоСкидки + Форма.СуммаРучнойСкидки;
   Форма.СуммаОтменено     = КоллекцияТовары.Итог("СуммаСНДСОтменено");
   
   Если КоллекцияТовары.Итог("СуммаСНДСОтменено") = КоллекцияТовары.Итог("СуммаСНДС") Тогда
       Форма.ВсеСтрокиОтменены = Истина;
   Иначе
       Форма.ВсеСтрокиОтменены = Ложь;
   КонецЕсли;
   
   СуммаЗаказано     = КоллекцияТовары.Итог("Сумма") - КоллекцияТовары.Итог("СуммаОтменено");
   
   Если СуммаЗаказано > 0 Тогда
       Форма.ПроцентАвтоСкидки   = Форма.СуммаАвтоСкидки * 100 / (СуммаЗаказано + Форма.СуммаСкидки);
       Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / (СуммаЗаказано + Форма.СуммаСкидки);
       Форма.ПроцентСкидки       = Форма.ПроцентАвтоСкидки + Форма.ПроцентРучнойСкидки;
   ИначеЕсли Форма.СуммаСкидки > 0 Тогда
       Форма.ПроцентАвтоСкидки   = Форма.СуммаАвтоСкидки * 100 / Форма.СуммаСкидки;
       Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / Форма.СуммаСкидки;
       Форма.ПроцентСкидки       = Форма.ПроцентАвтоСкидки + Форма.ПроцентРучнойСкидки;
   Иначе
       Форма.ПроцентАвтоСкидки   = 0;
       Форма.ПроцентРучнойСкидки = 0;
       Форма.ПроцентСкидки       = 0;
   КонецЕсли;
   
   // Заполнение итогов по этапам оплаты
   
   ПредыдущееЗначениеДаты = Дата(1,1,1);
   Форма.НомерСтрокиПолнойОплаты = 0;
   ПроцентПлатежейОбщий = 0;
   
   Форма.СуммаАвансаДоОбеспечения = 0;
   Форма.СуммаПредоплатыДоОтгрузки = 0;
   Форма.СуммаКредитаПослеОтгрузки = 0;
   Форма.ПроцентАвансаДоОбеспечения = 0;
   Форма.ПроцентПредоплатыДоОтгрузки = 0;
   Форма.ПроцентКредитаПослеОтгрузки = 0;
   
   СоответствиеВариантовОплаты = Новый Соответствие;
   СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыОплатыКлиентом.АвансДоОбеспечения"),
       Новый Структура("Сумма, Проценты", "СуммаАвансаДоОбеспечения", "ПроцентАвансаДоОбеспечения")
   );
   СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыОплатыКлиентом.ПредоплатаДоОтгрузки"),
       Новый Структура("Сумма, Проценты", "СуммаПредоплатыДоОтгрузки", "ПроцентПредоплатыДоОтгрузки")
   );
   СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки"),
       Новый Структура("Сумма, Проценты", "СуммаКредитаПослеОтгрузки", "ПроцентКредитаПослеОтгрузки")
   );
   
   Для Каждого ТекСтрока Из Форма.Объект.ЭтапыГрафикаОплаты Цикл
       ПроцентПлатежейОбщий = ПроцентПлатежейОбщий + ТекСтрока.ПроцентПлатежа;
       ТекСтрока.ПроцентЗаполненНеВерно = (ПроцентПлатежейОбщий > 100);
       ТекСтрока.ДатаЗаполненаНеВерно = (ПредыдущееЗначениеДаты > ТекСтрока.ДатаПлатежа);
       ПредыдущееЗначениеДаты = ТекСтрока.ДатаПлатежа;
       Если ПроцентПлатежейОбщий = 100 Тогда
           Форма.НомерСтрокиПолнойОплаты = ТекСтрока.НомерСтроки;
       КонецЕсли;
       ИменаЭлементов = СоответствиеВариантовОплаты[ТекСтрока.ВариантОплаты];
       Если ИменаЭлементов <> Неопределено Тогда
           Форма[ИменаЭлементов.Сумма] = Форма[ИменаЭлементов.Сумма] + ТекСтрока.СуммаПлатежа;
           Форма[ИменаЭлементов.Проценты] = Форма[ИменаЭлементов.Проценты] + ТекСтрока.ПроцентПлатежа;
       КонецЕсли;
   КонецЦикла;
   
   // Выбор странцицы отображения НДС
   
   Если Форма.Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС")
       ИЛИ Форма.Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД") Тогда
       
       Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница   = Форма.Элементы.СтраницаБезНДС;
       Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоБезНДС;
       
   Иначе
       
       Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница   = Форма.Элементы.СтраницаСНДС;
       Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоСНДС;
       
   КонецЕсли;
   
КонецПроцедуры

Она заполняет их когда открыта форма. Но я создаю объект программно, следовательно к форме вообще никак обратиться не могу...
6 IamLev
 
26.06.12
22:51
Получается, что на сервере я не могу получить форму, а на клиенте не могу получить Объект. Веселуха...
7 Amra
 
26.06.12
23:41
(6) Зачем тебе объект на клиенте?
8 Amra
 
26.06.12
23:52
(5) Вообщем ради интересаа посмотрел. Итоговые показатели это реквизиты шапки объекта
9 IamLev
 
03.07.12
19:29
Не в этом фишка была...
Как оказалось, итоговый показатель Сумма, который выводится в списке документов, считается по полю таблицы Товары. Я думал что это сумма, но ошибался... Считает по полю СуммаСНДС. :)
Всем спасибо! :)
10 IamLev
 
03.07.12
19:31
Если заполнить это поле, то итоговый показатель в шапке объекта рассчитывается автоматом при записи объекта.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший