Помогите выбрать определенный документ

1. Evgen13 27.02.20 09:54 Сейчас в теме
Помогите, пожалуйста.
Смотрите, есть документ калькуляция. Есть цены на определенные услуги, которые заполняет бухгалтерия, но в калькуляциях они сами не изменяются. Было решено сделать Кнопку "Пересчет", которая пересчитывала бы цены.
То есть заходим в документ, цены старые, нажимаем "Пересчитать" и цены новые.
написал обработку для этой кнопки, но не работает, помогите, в чем может быть проблема

Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	Калькуляция.Ссылка КАК Ссылка
	               |ИЗ
	               |	Документ.Калькуляция КАК Калькуляция
	               |ГДЕ
	               |	Калькуляция.Проведен = &Проведен" ;
	Запрос.УстановитьПараметр("Проведен", Истина);
	
	СписокДокументов=Запрос.Выполнить().Выбрать();
	Пока СписокДокументов.Следующий() Цикл
	ДокОбъект = СписокДокументов.Ссылка.ПолучитьОбъект();
	Для Каждого Стр из ДокОбъект.Услуги Цикл
		Запрос= Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	КалькуляцияУслуги.Ссылка КАК Ссылка,
		               |	КалькуляцияУслуги.Номенклатура КАК Номенклатура,
		               |	КалькуляцияУслуги.Цена КАК Цена,
		               |	ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаНовая
		               |ИЗ
		               |	Документ.Калькуляция.Услуги КАК КалькуляцияУслуги
		               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
		               |		ПО КалькуляцияУслуги.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
		               |ГДЕ
		               |	КалькуляцияУслуги.Ссылка = &Ссылка";
		Запрос.УстановитьПараметр("Ссылка", СписокДокументов.Ссылка);
		СписокНовыхЦен=Запрос.Выполнить().Выгрузить();
		Номенклатура=Стр.Номенклатура;
		Цена = Стр.Цена;
		НайденнаяСтрока = СписокНовыхЦен.Найти(Номенклатура,"Номенклатура");
		Если НайденнаяСтрока<>Неопределено Тогда
							     НоваяЦена=НайденнаяСтрока.ЦенаНовая;
							  Иначе
							  	 НоваяЦена=0;
							  КонецЕсли; 
							  Если Цена<>НоваяЦена Тогда
								Стр.Цена = НоваяЦена;  
								Стр.Сумма = НоваяЦена * Стр.Количество  * Стр.Периодичность;
								ПересчитатьСуммуНДС(Стр, ДокОбъект.СуммаВключаетНДС);
							  КонецЕсли; 
						КонецЦикла;
						ДокОбъект.Записать();
						КонецЦикла;
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
44. EVKash 14 28.02.20 09:40 Сейчас в теме +0.18 $m
(43)
Для каждого СтрокаТоваров Из ТЗУслуги Цикл

Надо
Для каждого СтрокаТоваров Из Объект.Услуги Цикл
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 27.02.20 10:08 Сейчас в теме
Во-первых, запрос в цикле - это ужасно, не надо так делать, всю эту выборку можно прекрасно поместить в один запрос.
Во-вторых, что говорит отладчик?
va582; VAAngelov; +2 Ответить
3. user633533_encantado 11 27.02.20 10:08 Сейчас в теме
Запрос в цикле это конечно фи.

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


Теперь ругается на запрос
4. ico 27.02.20 10:12 Сейчас в теме
А задача какая? Перезаполнить все документы Калькуляция актуальными ценами? А для чего все это? Перезаписать документы за всю историю работы. Это может быть довольно затратная по времени операция. Молчу уже про запрос в цикле...
Ошибки навскидку не видно. Единственное замечание - переменная НоваяЦена не инициализирована и участвует в операции сравнения.
Отладчиком пройдитесь.
5. xSavantx 25 27.02.20 10:15 Сейчас в теме
Много вопросов и мало ответов:
1) На основании каких выводов вы решили, что у вас не работает?
2) Говорили, что в документе нажимаете кнопку "Пересчитать". Так зачем эта кнопка пересчитывает все проведенные документы, а не только текущий?
Далее не критичные, но все-таки ошибки:
3) Два запроса можно слить в один и да, запрос в цикле - это жесть
4) Вместо "Калькуляция.Проведен = &Проведен" пишите просто "Калькуляция.Проведен" и дополнительный параметр для запроса не придется устанавливать

Отладчиком умеете пользоваться?
7. Evgen13 27.02.20 10:18 Сейчас в теме
(5)
Да, Вы правы. Нужно только текущий документ, а не все проведенные. Как такое реализовать, не подскажите?
8. xSavantx 25 27.02.20 10:18 Сейчас в теме
Я бы просто выгрузил ТЧ документа в таблицу и использовал ее в качестве параметра запроса. Далее левым соединением присоединил бы РС "ЦеныНоменклатуры" - код бы уменьшился в разы + оптимизация
9. Evgen13 27.02.20 10:59 Сейчас в теме
(8)
(5)
(4)
Не работает совсем теперь, ребят. Подскажите, пожалуйста
11. GYlgamesh 27.02.20 11:01 Сейчас в теме
(9)Полный код процедуры/функции в студию!

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

БП3,0
15. GYlgamesh 27.02.20 11:18 Сейчас в теме
(13)
СписокДокументов=Запрос.Выполнить().Выбрать();

Код этого запроса в студию!
16. Evgen13 27.02.20 11:59 Сейчас в теме
(15)
Так вот и прошу помощи у Вас, не работает такой код
17. GYlgamesh 27.02.20 12:11 Сейчас в теме
(16)мб AnyDesk? И прям на глазах у тебя состряпаю?

П.С: Надумаешь пиши https://t.me/FreeBooRET
18. Evgen13 27.02.20 12:28 Сейчас в теме
(17)
если хочешь, то давай
19. GYlgamesh 27.02.20 13:06 Сейчас в теме
(18)Не предлагал бы иначе, пиши в телегу
10. GYlgamesh 27.02.20 10:59 Сейчас в теме
(8) Однозначно тру решение. За запрос в цикле расстрел на месте с отрубанием конечностей.
12. mazechild 27.02.20 11:01 Сейчас в теме
Оптимизация хороша, когда есть на неё время. Если у человека горит, то надо сначала сделать рабочий вариант, а потом уже думать над оптимизацией. К тому же с опытом это всё нарабатывается.
14. GYlgamesh 27.02.20 11:04 Сейчас в теме
(12)Как показывает практика времени всегда не хватает и такие времянки копятся и копятся и копятся. Так что (набравшись опыта) тру решения делаю сразу (ну если честнее в подавляющем большинстве случаев, но бывает... чего уж там).
20. dshershen86 27.02.20 13:40 Сейчас в теме
(12)Нет, нужно сразу учиться стандартизированному программированию. Четко понимать, что, к чему и почему. Тут написан треш, парень говорит, что пишет для документА, при этом использует запрос для получиния документов. Запрос в цикле, использует метод найти, если хотя бы в этом запросе в цикле можно было бы передать параметр номенклатура. Я бы даже интерном не брал.

Реализовывать нужно одним запросом.
user774630; +1 Ответить
21. GYlgamesh 27.02.20 14:12 Сейчас в теме
(20)Да никто не спорит что выше адов трешак. Я и хочу ему онлайн показать рассказать, но что-то пока мне так и не написал в телегу.
22. Evgen13 27.02.20 15:08 Сейчас в теме
Ребят, Хелп.
"ВЫБРАТЬ
                   |	КалькуляцияУслуги.Цена КАК Цена,
                   |	КалькуляцияУслуги.Номенклатура КАК Номенклатура,
                   |	ЦеныНоменклатурыСрезПоследних.Цена КАК НоваяЦена,
                   |	Калькуляция.Ссылка КАК Ссылка
                   |ИЗ
                   |	Документ.Калькуляция.Услуги КАК КалькуляцияУслуги
                   |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                   |		ПО КалькуляцияУслуги.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                   |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.Калькуляция КАК Калькуляция
                   |		ПО КалькуляцияУслуги.Ссылка = Калькуляция.Ссылка
                   |ГДЕ
                   |	КалькуляцияУслуги.Ссылка.Проведен" 
Показать


вот рабочий запрос, помогите все это к кнопке привязать
23. GYlgamesh 27.02.20 15:17 Сейчас в теме
25. Evgen13 27.02.20 15:18 Сейчас в теме
(23)
ну харош уже. помогите лучше
24. EVKash 14 27.02.20 15:18 Сейчас в теме
(22) Мда... понимание так и не приходит...
Этот рабочий запрос вернет вам цены по всем калькуляциям.
Второе левое соединение бессмысленно. Калькуляция.Ссылка - это тоже самое, что и КалькуляцияУслуги.Ссылка.

Это в форме документа происходит?

(23) да ладно) учится человек методом проб и ошибок)))
26. Evgen13 27.02.20 15:18 Сейчас в теме
29. GYlgamesh 27.02.20 15:20 Сейчас в теме
(24)Учится надо почитывая мануалы! А не ползти на ощупь когда в кармане гаджет с навигатором.
30. Evgen13 27.02.20 15:23 Сейчас в теме
(29)
чтож без дела то умничаете, мануальщики
31. EVKash 14 27.02.20 15:30 Сейчас в теме
(30) видцены один в регистре? или параметром задается? или в документе указан?
32. Evgen13 27.02.20 15:39 Сейчас в теме
(31)
или параметром задаетс

в документе указан
33. Evgen13 27.02.20 16:00 Сейчас в теме
34. EVKash 14 27.02.20 16:22 Сейчас в теме
(33) вот пример для ТЧ Товары
&НаСервере
Процедура Расш1_Команда1ПослеНаСервере()
	
	ВидЦены = Объект.ВидЦены;
	
	ТЗТовары = Объект.Товары.Выгрузить(,"Номенклатура");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	              |	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
	              |	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
	              |ИЗ
	              |	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
	              |			,
	              |			Номенклатура В (&ТЗТовары)
	              |				И ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних";
	Запрос.УстановитьПараметр("ТЗТовары", ТЗТовары);
	Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
	
	ТЗ_Цены = Запрос.Выполнить().Выгрузить();
	
	Для каждого СтрокаТоваров Из Объект.Товары Цикл
		СтрТЗ_Цен = ТЗ_Цены.Найти(СтрокаТоваров.Номенклатура, "Номенклатура");
		Если СтрТЗ_Цен = Неопределено Тогда 
			Продолжить;
		Иначе
			СтрокаТоваров.Цена = СтрТЗ_Цен.Цена;
			//ну и дальше еще что надо заполнить.
		КонецЕсли; 
	КонецЦикла; 
		
КонецПроцедуры

&НаКлиенте
Процедура Расш1_Команда1После(Команда)
	
	Расш1_Команда1ПослеНаСервере();
	
КонецПроцедуры

Показать
35. Evgen13 27.02.20 16:41 Сейчас в теме
(34)

ВидЦены = Объект.ВидЦены;

ТЗТовары = Объект.Товары.Выгрузить(,"Номенклатура");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| ,
| Номенклатура В (&ТЗТовары)
| И ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних";
Запрос.УстановитьПараметр("ТЗТовары", ТЗТовары);
Запрос.УстановитьПараметр("ВидЦены", ВидЦены);

ТЗ_Цены = Запрос.Выполнить().Выгрузить();

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


все равно не работает
а так, спасибо за помощь
а не за бестолковые отписки
36. EVKash 14 27.02.20 16:56 Сейчас в теме
(35) что не работает-то?
ошибка? или в холостую?
Это только пример. Проверял на заказе в УТ11 - работает.
37. Evgen13 28.02.20 08:28 Сейчас в теме
(36)
А тогда как вытащить количество и периодичность?
Чтобы все перемножалось и получалась сумма?
38. Evgen13 28.02.20 09:11 Сейчас в теме
(36)
Когда хочу посчитать сумму, программа зацикливается

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

Помогите, пожалуйста, добить до конца
39. EVKash 14 28.02.20 09:21 Сейчас в теме
(38)
    Для каждого СтрокаТоваров Из ТЗУслуги Цикл
        СтрТЗ_Цен = ТЗ_Цены.Найти(СтрокаТоваров.Номенклатура, "Номенклатура");
        Если СтрТЗ_Цен = Неопределено Тогда 
            Продолжить;
        Иначе
            СтрокаТоваров.Цена = СтрТЗ_Цен.цена;
            //Количество не меняется!!!
            СтрокаТоваров.Сумма = СтрокаТоваров.Кол * СтрокаТоваров.Цена;
        КонецЕсли; 
Показать
может вам чем-то другим заняться?
40. Evgen13 28.02.20 09:23 Сейчас в теме
(39)
Для каждого СтрокаТоваров Из ТЗУслуги Цикл
СтрТЗ_Цен = ТЗ_Цены.Найти(СтрокаТоваров.Номенклатура, "Номенклатура");
Если СтрТЗ_Цен = Неопределено Тогда
Продолжить;
Иначе
СтрокаТоваров.Цена = СтрТЗ_Цен.цена;
//Количество не меняется!!!
СтрокаТоваров.Сумма = СтрокаТоваров.Кол * СтрокаТоваров.Цена;
КонецЕсли;


Хочу изучать 1с)
42. EVKash 14 28.02.20 09:33 Сейчас в теме
(40)
СтрокаТоваров.Сумма = СтрокаТоваров.Кол * СтрокаТоваров.Цена;
проверьте написание.
или не на эту строчку ругается?
В ошибке - подробно - полный текст?
43. Evgen13 28.02.20 09:35 Сейчас в теме
(42)
 ТЗУслуги = Объект.Услуги.Выгрузить(,"Номенклатура"); 
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                   |	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
                   |ИЗ
                   |	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних";
	
	
    ТЗ_Цены = Запрос.Выполнить().Выгрузить();
	Для каждого СтрокаТоваров Из ТЗУслуги Цикл
        СтрТЗ_Цен = ТЗ_Цены.Найти(СтрокаТоваров.Номенклатура, "Номенклатура");
        Если СтрТЗ_Цен = Неопределено Тогда 
            Продолжить;
        Иначе
            СтрокаТоваров.Цена = СтрТЗ_Цен.Цена;
            СтрокаТоваров.Сумма = СтрокаТоваров.Количество * СтрТЗ_Цен.Цена;
        КонецЕсли;
Показать


{Документ.Калькуляция.Форма.ФормаДокумента.Форма(1829)}: Поле объекта не обнаружено (Цена)
СтрокаТоваров.Цена = СтрТЗ_Цен.Цена;
44. EVKash 14 28.02.20 09:40 Сейчас в теме +0.18 $m
(43)
Для каждого СтрокаТоваров Из ТЗУслуги Цикл

Надо
Для каждого СтрокаТоваров Из Объект.Услуги Цикл
45. Evgen13 28.02.20 09:41 Сейчас в теме
(44)
Даааааааа, тоже дошло)
Спасибо большооооооооое тебе!!
46. Evgen13 28.02.20 09:45 Сейчас в теме
(42)
А как записать эти цены? Чтобы они сохранились?
ТЗ_Цены.Записать();
не работает(
47. Evgen13 28.02.20 09:49 Сейчас в теме
(42)
я тупица)
Спасибо еще раз!!
48. Evgen13 28.02.20 10:29 Сейчас в теме
(42)
Друг, помоги еще раз, пожалуйста

Смотри, нужно пересчитать СуммуНДС, есть процедура для этого, но из кнопки она не вызывается(

ПересчитатьСуммуНДС(СтрокаТоваров, ТЗУСЛУГИ.СуммаВключаетНДС);
Это вставляем в кнопку,

&НаСервере
Процедура ПересчитатьСуммуНДС(Строка, СуммаВключаетНДС, ПрименяютсяСтавки4и2 = Ложь, НалоговыйАгентПоФЗ335 = Ложь) Экспорт
	
	Сумма = Строка.Сумма;
	
	Если НалоговыйАгентПоФЗ335 Тогда 
		Строка.СуммаНДС = 0;
	Иначе
		Строка.СуммаНДС = УчетНДСКлиентСервер.РассчитатьСуммуНДС(Сумма, СуммаВключаетНДС, УчетНДСВызовСервераПовтИсп.ПолучитьСтавкуНДС(Строка.СтавкаНДС, ПрименяютсяСтавки4и2));
	КонецЕсли;
	
 //Строка.Всего    = Сумма + ?(СуммаВключаетНДС, 0, Строка.СуммаНДС);

КонецПроцедуры
Показать


А это сама процедура, ругается на это

{Документ.Калькуляция.Форма.ФормаДокумента.Форма(1831)}: Поле объекта не обнаружено (СуммаВключаетНДС)
ПересчитатьСуммуНДС(СтрокаТоваров, ТЗУСЛУГИ.СуммаВключаетНДС);
50. EVKash 14 28.02.20 11:15 Сейчас в теме
(48)
        Иначе
            СтрокаТоваров.Цена = СтрТЗ_Цен.Цена;
            СтрокаТоваров.Сумма = СтрокаТоваров.Количество * СтрТЗ_Цен.Цена;
            ПересчитатьСуммуНДС(СтрокаТоваров, Объект.СуммаВключаетНДС)
        КонецЕсли;
И про запись... По хорошему вместо записи надо устанавливать модифицированность.
ЭтаФорма.Модифицированность = Истина;
А записывать документ или нет, принимает решение пользователь.
51. Evgen13 28.02.20 11:32 Сейчас в теме
(50)
ПересчитатьСуммуНДС(СтрокаТоваров, Объект.СуммаВключаетНДС)

Спасибо!

Но решил по-другому

ЗначениеСтавкиНДС = УчетНДСВызовСервераПовтИсп.ПолучитьСтавкуНДС(СтрокаТоваров.СтавкаНДС);
СтрокаТоваров.СуммаНДС = УчетНДСКлиентСервер.РассчитатьСуммуНДС(СтрокаТоваров.Сумма, Объект.СуммаВключаетНДС, ЗначениеСтавкиНДС);
49. Evgen13 28.02.20 10:39 Сейчас в теме
41. Evgen13 28.02.20 09:29 Сейчас в теме
(39)
Поле объекта не обнаружено (Цена)

(((
ну почему так??
27. GYlgamesh 27.02.20 15:19 Сейчас в теме
на УФ (Управляемые формы) создаёшь команду и на форму её перетаскиваешь в нужное место. В яндексе "1с управляемы формы как добавить кнопку" 100500 инструкций с картинками.
28. Evgen13 27.02.20 15:20 Сейчас в теме
(27)
Спасибо, очень подробно объяснил. Лайк
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот