Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
1

Увеличение цен в выбранном документе на процент

12.02.2018, 19:22. Просмотров 202. Ответов 10
Метки нет (Все метки)

Надо сделать увеличение цен в выбранном документе на процент заданный в ручную. А в комментарий к документу вывести дату изменения цен. (Внешняя обработка)

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&НаСервере
Процедура ИзменитьНаСервере()
        НоваяЦена = 0;
        Для каждого Цена из Документ.Материалы Цикл
        ХЗ = Документ.Материалы;
        НоваяЦена = ХЗ.Цена*(Процент/100);
        ХЗ.Цена = НоваяЦена;
    КонецЦикла;
    Документ.Провести();  // понимаю что ахинея
     КонецПроцедуры
 
&НаКлиенте
Процедура Изменить(Команда)
    ИзменитьНаСервере();
     
КонецПроцедуры
мне выдает
1C
1
2
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(28)}: Поле объекта не обнаружено (Цена)
        НоваяЦена = ХЗ.Цена*(Процент/100);
Хотя по идее все правильно.
Увеличение цен в выбранном документе на процент

Увеличение цен в выбранном документе на процент
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2018, 19:22
Ответы с готовыми решениями:

Заполнение цен и сумм в документе Инвентаризация
Добрый день. Конфигурация Управление торговлей 10.3 Не могу разобраться...

Увеличение на процент
Дан кусок интерфейса: /** * Спортсмен начал тренировки, пробежав в первый...

Торговля и Склад 10.3. Заполнение цен автоматом в документе "заказ покупателя"
Добрый день Подскажите как программно заполнить цены все ? в документе заказ...

Вычислить процент положительных чисел, процент отрицательных чисел и процент нулей
В цикле с клавиатуры вводятся 10 целых чисел. Вычислить процент положительных...

Вычислить процент положительных чисел, процент отрицательных чисел и процент нулей
1.Загадать случайно 100 целых чисел в диапазоне от -100 до 100. Вычислить...

10
polax
698 / 439 / 139
Регистрация: 16.01.2015
Сообщений: 1,553
12.02.2018, 19:39 2
SayM9y, Правильно только по идеи. Исходя из вашего скрина:

1C
1
2
3
4
5
6
7
8
9
10
11
12
&НаКлиенте
Процедура Изменить(Команда)
   Для каждого Стр Из Объект.Материалы Цикл // Вы меняете цены в таб части а не в поле Документ
 Если Процент > 0 Тогда // учитываем, что может быть наценка
  Стр.Цена = Стр.Цена + (Стр.Цена*Процент/100);
Иначе 
  Стр.Цена = Стр.Цена - (Стр.Цена*Процент/100); // а может и скидка
 КонецЕсли;
  Стр.Сумма = Стр.Цена*Стр.Количество; // Сумма тоже должна измениться
КонецЦикла;
     //Записывать док программно нет смысла. вы жмете кнопку, значит находитесь в форме дока, нажмете Записать или Провести вручную
КонецПроцедуры
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
12.02.2018, 20:10  [ТС] 3
Да, про сумму я уже понял. И что увеличение процента не верно прописал.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Процедура ИзменитьНаСервере()
    
    
    Для каждого Стр из Объект.Материалы Цикл
        Сумма = Стр.Сумма;
        Количество = Стр.Количество;
        Цена = Стр.Цена;
        Если Процент > 0 Тогда
            НоваяЦена = Цена * (Процент/100 +1);
            Цена = НоваяЦена; 
        Иначе
            НоваяЦена = Цена * (1 - Процент/100);
            Цена = НоваяЦена; 
        КонецЕсли;
        Сумма = Количество + Цена;
    КонецЦикла;
    Документ.Провести();
    
КонецПроцедуры

Дает ошибку
1C
1
2
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(27)}: Поле объекта не обнаружено (Материалы)
    Для каждого Стр из Объект.Материалы Цикл
И почему обьект? На документ то ссылается переменная поле Документ?
То есть по логике из Документ.Материалы

Добавлено через 10 минут
при таком раскладе обработка ошибок не выдает но и в самом документе ничего не происходит


1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Процедура ИзменитьНаСервере()
    
    
    Для каждого Стр из Документ.Материалы Цикл
        Сумма = Стр.Сумма;
        Количество = Стр.Количество;
        Цена = Стр.Цена;
        Если Процент > 0 Тогда
            НоваяЦена = Цена * (Процент/100 +1);
            Цена = НоваяЦена; 
        Иначе
            НоваяЦена = Цена * (1 - Процент/100);
            Цена = НоваяЦена; 
        КонецЕсли;
        Сумма = Количество + Цена;
    КонецЦикла;
    
    
КонецПроцедуры
А точно документ не надо программно проводить? Или обработка внесет изменения которые я при следующем открытии накладной увижу, и если меня все удовлетворяет жму провести?
0
polax
698 / 439 / 139
Регистрация: 16.01.2015
Сообщений: 1,553
12.02.2018, 20:11 4
SayM9y, Понятно. У вас это внешняя обработка. Не обратил внимание. Тогда так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&НаКлиенте
Процедура Изменить(Команда)
    ИзменитьНаСервере();
     
КонецПроцедуры
 
&НаСервере
Процедура ИзменитьНаСервере()
НашОбъект = Документ.ПолучитьОбъект();
ТЧ = НашОбъект.Материалы;
   Для каждого Стр Из ТЧ Цикл // Вы меняете цены в таб части а не в поле Документ
 Если Процент > 0 Тогда // учитываем, что может быть наценка
  Стр.Цена = Стр.Цена + (Стр.Цена*Процент/100);
Иначе 
  Стр.Цена = Стр.Цена - (Стр.Цена*Процент/100); // а может и скидка
 КонецЕсли;
  Стр.Сумма = Стр.Цена*Стр.Количество; // Сумма тоже должна измениться
КонецЦикла;
     НашОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
И зачем вы столько лишних переназначений переменных делаете
1C
1
2
3
Сумма = Стр.Сумма;
        Количество = Стр.Количество;
        Цена = Стр.Цена;
в принципе рабочее, но абсолютно лишнее
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
12.02.2018, 20:19  [ТС] 5
polax, Для упрощения.)

Результат тот же. Ошибок нет но и в документе изменений нет

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&НаСервере
Процедура ИзменитьНаСервере()
    
    
    НашОбъект = Документ.ПолучитьОбъект();
    ТЧ = НашОбъект.Материалы;
    Для каждого Стр Из ТЧ Цикл
        Сумма = Стр.Сумма;
        Количество = Стр.Количество;
        Цена = Стр.Цена;
        Если Процент > 0 Тогда
            НоваяЦена = Цена * (Процент/100 +1);
            Цена = НоваяЦена; 
        Иначе
            НоваяЦена = Цена * (1 - Процент/100);
            Цена = НоваяЦена; 
        КонецЕсли;
        Сумма = Количество + Цена;
    КонецЦикла;
        
КонецПроцедуры
0
polax
698 / 439 / 139
Регистрация: 16.01.2015
Сообщений: 1,553
12.02.2018, 20:24 6
Только ошибся. У вас нет отдельного признака Скидка/Наценка. Поэтому регулируете только плюсом или минусом цифры Процент. Тогда не нужна проверка, т.е. в любом случае:
1C
1
Стр.Цена = Стр.Цена + (Стр.Цена*Процент/100);
т.е.
1C
1
2
3
4
5
6
7
8
9
10
&НаСервере
Процедура ИзменитьНаСервере()
НашОбъект = Документ.ПолучитьОбъект();
ТЧ = НашОбъект.Материалы;
   Для каждого Стр Из ТЧ Цикл // Вы меняете цены в таб части а не в поле Документ
   Стр.Цена = Стр.Цена + (Стр.Цена*Процент/100);
  Стр.Сумма = Стр.Цена*Стр.Количество; // Сумма тоже должна измениться
КонецЦикла;
     НашОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
Добавлено через 1 минуту
SayM9y, Что-то не так скопировали или не так поставили задачу здесь. Код верный

Добавлено через 2 минуты
Понял. Вы опять используете свой код. Вот это:
1C
1
2
3
4
Цена = Стр.Цена;
        Если Процент > 0 Тогда
            НоваяЦена = Цена * (Процент/100 +1);
            Цена = НоваяЦена;
НЕ работает. Вы присваиваете новое значение переменной Цена, а надо строке Цена в таб части - Стр.Цена
Скопируйте уж мой код один в один
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
12.02.2018, 20:36  [ТС] 7
polax, Там все интереснее)) Он то срабатывает то нет) закрыл-открыл сработало и на +50% и на -50%, потом опять в отказ) Ему просто надо было дать подумать)
0
polax
698 / 439 / 139
Регистрация: 16.01.2015
Сообщений: 1,553
12.02.2018, 20:45 8
SayM9y, Так не бывает ))).

Не по теме:

Код не женщина, от настроения не зависит, и если капризничает, значит, что-то не то или не так

1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
12.02.2018, 20:48  [ТС] 9
polax, Так я получается был прав по поводу того что его надо проводить?\
0
polax
698 / 439 / 139
Регистрация: 16.01.2015
Сообщений: 1,553
12.02.2018, 20:51 10
SayM9y, Да. Я сначала не разобрался, что это внешняя обработка, посчитал по второму скрину, что вы просто назначили кнопку в самом документе. А раз речь о вн обработке - формы дока нет, вы вносите изменение и его надо сохранить. Т.е. записать, ну а проводить или нет это ваше решение
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
12.02.2018, 21:23  [ТС] 11
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&НаКлиенте
Процедура Изменить(Команда)
    ИзменитьНаСервере();
     
КонецПроцедуры
 
&НаСервере
Процедура ИзменитьНаСервере()
    НашДокумент = Документ.ПолучитьОбъект() ;
    Для каждого Стр Из НашДокумент.Материалы Цикл 
        НоваяЦена = Стр.Цена * (Процент/100 +1);
        Стр.Цена = НоваяЦена;
        Стр.Сумма = Стр.Цена*Стр.Количество; 
    КонецЦикла;
    НашДокумент.Коментарий = "Время изменения цены:" + Формат(ТекущаяДата(),"ДЛФ=DT");
    НашДокумент.Записать(РежимЗаписиДокумента.Проведение);
    
КонецПроцедуры
Финал!
0
12.02.2018, 21:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2018, 21:23

Если в input введен процент от 1 до 100, в другую ячейку таблицы вывести процент от заданного числа
Как сделать так чтоб если в инпут ввести процент от 1 до 100, то в другую...

Автоматически сделать повторяющиеся слова в документе гиперссылками на закладку в документе
В документе сделана закладка. В документе слово "хлеб" встречается много раз....

Написать программу, которая предлагает пользователю ввести 10 чисел, вычисляет процент положительных и отрицательных чисел и процент нулей и выводи
помогите =) написать программу, которая предлагает пользователю ввести 10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru