Форум программистов, компьютерный форум, киберфорум
Наши страницы

1С: Собственные программы

Войти
Регистрация
Восстановить пароль
 
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
#1

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

12.02.2018, 19:22. Просмотров 156. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Увеличение цен в выбранном документе на процент (1С):

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

Увеличение на процент - Java SE
Дан кусок интерфейса: /** * Спортсмен начал тренировки, пробежав в первый день 10 км. * Каждый следующий день он увеличивал...

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

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

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

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

10
polax
605 / 379 / 122
Регистрация: 16.01.2015
Сообщений: 1,276
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
605 / 379 / 122
Регистрация: 16.01.2015
Сообщений: 1,276
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
605 / 379 / 122
Регистрация: 16.01.2015
Сообщений: 1,276
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
605 / 379 / 122
Регистрация: 16.01.2015
Сообщений: 1,276
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
605 / 379 / 122
Регистрация: 16.01.2015
Сообщений: 1,276
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
Привет! Вот еще темы с ответами:

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

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

Как преобразовать текст в документе из латиницы в кириллицу ("только в кавычках") во всем документе - Delphi
Здравствуйте уважаемые форумчане! Собственно сабж. Нашел интересную функцию которая работает а что делать дальше ума не приложу. ...

Определить процент выполнения плана по каждому месяцу и процент выполнения годового плана - VBA
Известны плановый и фактический выпуск продукции (в тоннах) по месяцам года. Определить процент выполнения плана по каждому месяцу и...


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

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

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