Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Подскажите Студенту. Изменение цены. Номенклатура

Подскажите Студенту. Изменение цены. Номенклатура
Я
   Muaviya
 
21.06.20 - 10:09
Задание

Изменить цену для конкретного товара во всех документах установка цен номенклатуры - установить 10 000. (Номенклатуру, которую будем менять выбираем на форме обработки. Используем обход табличной части документа и вспоминаем как задавали условия – чтобы менять не все а только то, что нужно)

Как я понимаю надо решить задачу
в обработке
1. Создать кнопку "изменить на 10 000"
2. Создать Кнопку "Выберите наименование"
3. При выборе наименования выбирается товар и при нажатии на кнопку "10 000" его цена в документе "УстановкаЦенНоменклатуры" меняется на 10 000


Возникшие проблемы.
1. Создаю кнопку "Выберите наименование".
Создаю ее согласно условиям задачи в форме обработки. Если выбираю "ДокументСсылка.УстановкаЦенНоменклатуры" то при нажатии выбираются только документы без возможности выбора товара

Если создаю ее "СправочникиСсылка.Номенклатура" То товар выбирается. Но мне не понятно как в таком случае взять наименование из справочника номенклатура проверить его есть ли оно в документе УстановкаЦенНоменклатуры и если есть то присвоить ему значение цены в 10 000.
Такое вообще в 1С возможно ? Или это бред ?

Помогите пожалуйста справиться с задачкой.


Из того что я смог сделать

Меняю ВСЕ товары на 10 000 следующим кодом.


&НаСервере
Процедура УстановкаЦеныНаСервере()
Выборка = Документы.УстановкаЦенНоменклатуры.Выбрать();

Пока Выборка.Следующий() Цикл;
НЦ = Выборка.ПолучитьОбъект();

Для Каждого ТекСтр ИЗ НЦ.Данные Цикл
ТекСтр.Цена = 10000;
КонецЦикла;

НЦ.Записать(РежимЗаписиДокумента.Проведение);

КонецЦикла;

КонецПроцедуры
   Timon1405
 
1 - 21.06.20 - 10:15
Ребят, я начинающих хирург, выдали разрезанный апельсин, сказали сшить обратно чтобы не гнилой был. он лежит на столе, я его выбрал на столе, взять его в руки или так пробовать шить? можно использовать швейную машинку? какую иглу посоветуете? пока вроде сшил, но косточки снаружи остались, это нормально?
   Галахад
 
2 - 21.06.20 - 10:31
Для Каждого ТекСтр ИЗ НЦ.Данные Цикл
Если ТекСтр.Номенклатура = ТотСамыйРеквизитНаФормеСТипомНоменклатура Тогда
ТекСтр.Цена = 10000;
КонецЕсли;
КонецЦикла;
   Галахад
 
3 - 21.06.20 - 10:32
(1) Зря ты так. Чел потрудился и описал задачу.
   hhhh
 
4 - 21.06.20 - 13:11
(0) наименования нахрен никогда никому не нужны. Работай с самими товарами.

Кнопка 2. Создать Кнопку "Выберите товар"
   Ёпрст
 
5 - 21.06.20 - 17:36
(0)

1.кидаешь на форму реквизит диалога, ставишь ему тип Справочник.Номенклатура, идентификатор назначаешь ему Валенки, например.
2.создаешь команду формы, УстановитьЦенуВаленкам, при создании ставишь переключатель создать процу на клиенте и на сервере
3. создаешь кнопку, назначаешь ей команду УстановитьЦенуВаленкам (или просто команду установить ценуВаленкам тащишь на форму, оно само кнопкой станет)
4.создаешь реквизит формы с типом чиисло 15.2, называешь его Цена
далее в модуле пишешь
&НаКлиенте
Процедура УстановитьЦенуВаленкам()
   Krendel
 
6 - 21.06.20 - 17:39
(0) Это регистр сведений, менять во всех документах цену это методологически не правильно!

Достаточно сгенерировать документ установка цен номенклатуры на дату изменения цены
   Krendel
 
7 - 21.06.20 - 17:39
если мы говорим про типовые конфигурации

Как у вас там в ЗУПе реализовано, я хз
   Ёпрст
 
8 - 21.06.20 - 17:47
&НаКлиенте
Процедура УстановитьЦенуВаленкам()
  УстановитьЦенуВаленкамНаСервере()
КонецПроцедуры
&НаСервере
Процедура УстановитьЦенуВаленкамНаСервере()
    Запрос = Новый Запрос("ВЫБРАТЬ
    |УстановкаЦенНоменклатурыТовары.Ссылка КАК Ссылка,
    |УстановкаЦенНоменклатурыТовары.НомерСтроки-1 КАК НомерСтроки
|ИЗ
|    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
|ГДЕ
|    УстановкаЦенНоменклатурыТовары.Номенклатура = &Номенклатура И УстановкаЦенНоменклатурыТовары.Цена<>&Цена
|ИТОГИ ПО
    Ссылка"     ) ;

Запрос.УстановитьПараметр("Номенклатура",Объект.Валенки);     
Запрос.УстановитьПараметр("Цена",Объект.Цена); 
ВыборакаДокументы =     Запрос.Выполнить().Выбрать(ОбходРезулататЗапроса.ПоГруппировка);
Пока ВыборакаДокументы.Следующий() Цикл
   ДокОбъект =  ВыборакаДокументы.ССылка.ПолучитьОбъект();
   Выборка = ВыборкаДокументы.Выбрать();
   Пока Выборка.Следующий() Цикл
       ДокОбъект.Товары[Выборка.НомерСтроки].Цена = Объект.Цена;
   КонецЦикла;
   ДокОбъект.Записать();
КонецЦиклаа;
КонецПроцедуры

Наслаждаешься, кушаешь печенки..
   Muaviya
 
9 - 21.06.20 - 20:37
Спасибо всем за помощь !

Спасибо за подсказку Галахад. По его подсказке создал вот такой код

Код и рекомендации которые написал  Ёпрст увидел уже после решения. Но написал он код интересный буду его тестить.

&НаСервере
Процедура Цена15000НаСервере()
    
Выборка = Документы.УстановкаЦенНоменклатуры.Выбрать();

Пока Выборка.Следующий() Цикл;
НЦ = Выборка.ПолучитьОбъект();

Для Каждого ТекСтр ИЗ НЦ.Данные Цикл
Если ТекСтр.Номенклатура = ВыберитеТовар Тогда

ТекСтр.Цена = 15000;
КонецЕсли;
КонецЦикла;

НЦ.Записать(РежимЗаписиДокумента.Проведение);

КонецЦикла;
Сообщить("Что бы увидеть изменения необходимо перезагрузить клиент");
    
КонецПроцедуры

Работает он таким образом.
Поскольку задание было делать в обработке в обработке его и делал

Создана команда (цена 15000) она же является и кнопкой
Создан реквизит (ВыбиретеТовар) он тоже является кнопкой
ВыберитеТовар имеет тип СправочникСсылка.Номенклатура

Тыкаем на ВыберитеТовар выбираем из списка номенклатуры товар например Сахар
Тыкаем на кнопку "Цена 15000" и в документе "УстановкаЦенНоменклатуры значение цены сахара меняется на 15 000.

Осталось одно НО !
Для того что бы увидеть изменения надо перезагрузить клиент (закрыть и открыть снова)

Почему так я не знаю.

Вопрос преподу задам. Но обучаюсь дистанционно. Ответит, не ответит - увидим


И еще вопрос.
Как вставлять код на форуме как это сделал Ёпрст ?
   Muaviya
 
10 - 21.06.20 - 20:38
Прикольно получилось даже обрабатывать ничего не пришлось. Код сам вставился красиво !!!
   Timon1405
 
11 - 21.06.20 - 21:21
(8) ДокОбъект.Товары[Выборка.НомерСтроки].Цена = Объект.Цена; 
такой код сломается на 1001 строке
   Ёпрст
 
12 - 21.06.20 - 21:23
(11) с х..ли ?
   Timon1405
 
13 - 21.06.20 - 21:29
(12) Пардон, сломался бы Сообщение.Поле = Товары[Выборка.НомерСтроки].Цена;//Сообщение.Сообщить()
   D_E_S_131
 
14 - 22.06.20 - 12:09
(9) Если уж конечно "забить" на перебор всех документов, вместо выборки нужных документов запросом (как написано в (8) ), то хотя бы перед циклом перебора ТЧ документа сделай "ЕстьИзменения = Ложь;" , а внутри условия после установки новой цены "ЕстьИзменения = Истина;" и потом записывай документ если ЕстьИзменения, а не все документы подряд (препод хоть увидит, что ты пытаешься не угробить базу).

Список тем форума
Рекламное место пустует  Рекламное место пустует
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.