Имя: Пароль:
1C
1С v8
Пересчет в ТЧ поступления.
,
0 never_sleep
 
02.05.17
12:21
....
//Создаю новый документ поступление. Заполняю его  на основании заказа
ДокПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
...
ДокПоступление.Заполнить(ВыбЗаказПоставщику.Заказ);
....
//он забивает в ТЧ остатки по этому заказу.
//мне нужны реальные данные из выгрузки, поэтому в цикле меняю количество на рельное.
СтрокаТЧ = ДокПоступление.Товары.Найти(Справочники.Номенклатура.НайтиПоКоду(ТекущаяСтрокаТЗ.Номенклатура),"Номенклатура");
СтрокаТЧ.Количество = ТекущаяСтрокаТЗ.Количество;
СтрокаТЧ.КоличествоУпаковок = ТекущаяСтрокаТЗ.Количество;
//Но остальные колонки, зависящие от этих, разумеется автоматом не пересчитываются: Сумма, СуммаНДС, взаиморасчетов и т.п. Как сделать? Ручками прописывать их пересчет?
//Или можно вызвать что-то вида ~ "ДокПоступление.ПересчитатьТЧ"? Есть такое?
1 catena
 
02.05.17
12:23
Нету. Прописывать ручками.
2 Buster007
 
02.05.17
12:24
ну посмотри что там вызывается при в форме документа при изменении количества и то же вызови у себя
3 Ц_У
 
02.05.17
12:26
(0) в модуле менеджера посмотри, там могут быть процедуры пересчета всего, что тебе нужно
4 torgm
 
02.05.17
12:26
(0) Ленивый код. если переносишьданные будь добр запонить все ручками.
Не дай бог цена с округлением упадет.



а если тупо ответить на твой вопрос то.





    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
5 polosov
 
02.05.17
12:27
(0) Что за конфа то?
6 Рэйв
 
02.05.17
12:31
(0)Это что за тайное заклинание вуду?

Справочники.Номенклатура.НайтиПоКоду(ТекущаяСтрокаТЗ.Номенклатура)
7 polosov
 
02.05.17
12:32
(6) Да он там код хранит в ТЗ подготовленной видимо
8 Рэйв
 
02.05.17
12:34
(7)а..Ну так еще ладно:-)
9 polosov
 
02.05.17
12:35
А вообще если УФ, то можно подсмотреть клиентские конструкции в процедурах при изменении цены, к примеру.

Но использовать на сервере можно
ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ (...)
10 never_sleep
 
02.05.17
12:36
(6) В ТЗ загружаю из ДБФного файла выгрузки данные. Потом по ней формирую доки
(5) Управление торговлей, редакция 11.2 (11.2.3.213)
11 polosov
 
02.05.17
12:43
(10)
КэшированныеЗначения = Неопределено;
    СтруктураПересчетаСуммы = ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(ЭтаФорма);<--- Эту структуру сам сделай
    
    СтруктураДействий = Новый Структура;
    СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСумму");
    СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
    СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
Для Каждого СтрокаТЧ ИЗ ДокОбъект.Товары Цикл

ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    
ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);


КонецЦикла;
12 never_sleep
 
02.05.17
12:48
(11) сейчас попробую переварить. Спасибо)
13 never_sleep
 
02.05.17
14:58
(11) Короче, я все руками пропишу напрямую. Так, как мне кажется, проще.
Но по предложенному вами методу все же хотелось бы прояснить:
Код в котором бы я хотел сделать пересчет выполняется на сервере. В определении процедуры ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ написано "Вызов этой функции должен осуществляться только из клиентского модуля ОбработкаТабличнойЧастиКлиент". Можно забить на рекомендации и напрямую вызвать с сервера?
Второй вопрос можно?
В её коде делаются только 2 действия: Заполняется, если не заполнен параметр заполняется КэшированныеЗначения и вызывается ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения)
Там снова заполняется таким же самым способом параметр КэшированныеЗначения и вызываются процедуры обработки ТЧ в зависимости от структуры (собственно что и нужно). Вопрос такой, зачем нужно делать вложенную процедуру? Зачем нужна эта ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ а не сразу ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ?
Я нубоват в 8ке. Если бы вы объяснили, был бы крайне признателен.
14 polosov
 
02.05.17
16:23
(13) Вызов сервера можно делать с клиента.
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ наверно правильнее с сервера будет вызывать.
15 never_sleep
 
05.05.17
07:10
(14) Все-таки вашим способом сделал. Спасибо, что показали куда копать. За основу взял, что лежало в процедуре ТоварыКоличествоУпаковоПриИзменении и в процедурах из неё вызываемых.
//Надо найти в какой строке ТЧ документа лежит текущая строка ТЗ и скорректировать её
СтрокаТЧ = ДокПоступление.Товары.Найти(Справочники.Номенклатура.НайтиПоКоду(ТекущаяСтрокаТЗ.Номенклатура),"Номенклатура");
СтрокаТЧ.Количество = ТекущаяСтрокаТЗ.Количество;
СтрокаТЧ.КоличествоУпаковок = ТекущаяСтрокаТЗ.Количество;
//Пересчитаем остальные показатели в строке
СтруктураПересчетаСуммы = Новый Структура;
СтруктураПересчетаСуммы.Вставить("ЦенаВключаетНДС", ДокПоступление.ЦенаВключаетНДС);
НДСпоСтавкам4и2 = ДокПоступление.Контрагент.НДСпоСтавкам4и2;
СтруктураПересчетаСуммы.Вставить("НДСпоСтавкам4и2", НДСпоСтавкам4и2);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураДействий.Вставить("ПересчитатьСуммуСверхЗаказа", Новый Структура("РеализацияПоступлениеПоЗаказу, ТребуетсяЗалогЗаТару", ДокПоступление.ПоступлениеПоЗаказам, ДокПоступление.ТребуетсяЗалогЗаТару));
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧ, СтруктураДействий, КэшированныеЗначения);

Еще раз спасибо!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn