Вход | Регистрация
 
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 или кнопку "Обновить" в браузере.