|
Подскажите Студенту. Изменение цены. Номенклатура | ☑ | ||
---|---|---|---|---|
0
Muaviya
21.06.20
✎
10:09
|
Задание
Изменить цену для конкретного товара во всех документах установка цен номенклатуры - установить 10 000. (Номенклатуру, которую будем менять выбираем на форме обработки. Используем обход табличной части документа и вспоминаем как задавали условия – чтобы менять не все а только то, что нужно) Как я понимаю надо решить задачу в обработке 1. Создать кнопку "изменить на 10 000" 2. Создать Кнопку "Выберите наименование" 3. При выборе наименования выбирается товар и при нажатии на кнопку "10 000" его цена в документе "УстановкаЦенНоменклатуры" меняется на 10 000 Возникшие проблемы. 1. Создаю кнопку "Выберите наименование". Создаю ее согласно условиям задачи в форме обработки. Если выбираю "ДокументСсылка.УстановкаЦенНоменклатуры" то при нажатии выбираются только документы без возможности выбора товара Если создаю ее "СправочникиСсылка.Номенклатура" То товар выбирается. Но мне не понятно как в таком случае взять наименование из справочника номенклатура проверить его есть ли оно в документе УстановкаЦенНоменклатуры и если есть то присвоить ему значение цены в 10 000. Такое вообще в 1С возможно ? Или это бред ? Помогите пожалуйста справиться с задачкой. Из того что я смог сделать Меняю ВСЕ товары на 10 000 следующим кодом. &НаСервере Процедура УстановкаЦеныНаСервере() Выборка = Документы.УстановкаЦенНоменклатуры.Выбрать(); Пока Выборка.Следующий() Цикл; НЦ = Выборка.ПолучитьОбъект(); Для Каждого ТекСтр ИЗ НЦ.Данные Цикл ТекСтр.Цена = 10000; КонецЦикла; НЦ.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; КонецПроцедуры |
|||
1
Timon1405
21.06.20
✎
10:15
|
Ребят, я начинающих хирург, выдали разрезанный апельсин, сказали сшить обратно чтобы не гнилой был. он лежит на столе, я его выбрал на столе, взять его в руки или так пробовать шить? можно использовать швейную машинку? какую иглу посоветуете? пока вроде сшил, но косточки снаружи остались, это нормально?
|
|||
2
Галахад
гуру
21.06.20
✎
10:31
|
Для Каждого ТекСтр ИЗ НЦ.Данные Цикл
Если ТекСтр.Номенклатура = ТотСамыйРеквизитНаФормеСТипомНоменклатура Тогда ТекСтр.Цена = 10000; КонецЕсли; КонецЦикла; |
|||
3
Галахад
гуру
21.06.20
✎
10:32
|
(1) Зря ты так. Чел потрудился и описал задачу.
|
|||
4
hhhh
21.06.20
✎
13:11
|
(0) наименования нахрен никогда никому не нужны. Работай с самими товарами.
Кнопка 2. Создать Кнопку "Выберите товар" |
|||
5
Ёпрст
21.06.20
✎
17:36
|
(0)
1.кидаешь на форму реквизит диалога, ставишь ему тип Справочник.Номенклатура, идентификатор назначаешь ему Валенки, например. 2.создаешь команду формы, УстановитьЦенуВаленкам, при создании ставишь переключатель создать процу на клиенте и на сервере 3. создаешь кнопку, назначаешь ей команду УстановитьЦенуВаленкам (или просто команду установить ценуВаленкам тащишь на форму, оно само кнопкой станет) 4.создаешь реквизит формы с типом чиисло 15.2, называешь его Цена далее в модуле пишешь &НаКлиенте Процедура УстановитьЦенуВаленкам() |
|||
6
Krendel
21.06.20
✎
17:39
|
(0) Это регистр сведений, менять во всех документах цену это методологически не правильно!
Достаточно сгенерировать документ установка цен номенклатуры на дату изменения цены |
|||
7
Krendel
21.06.20
✎
17:39
|
если мы говорим про типовые конфигурации
Как у вас там в ЗУПе реализовано, я хз |
|||
8
Ёпрст
21.06.20
✎
17:47
|
&НаКлиенте
Процедура УстановитьЦенуВаленкам() УстановитьЦенуВаленкамНаСервере() КонецПроцедуры &НаСервере Процедура УстановитьЦенуВаленкамНаСервере() Запрос = Новый Запрос("ВЫБРАТЬ |УстановкаЦенНоменклатурыТовары.Ссылка КАК Ссылка, |УстановкаЦенНоменклатурыТовары.НомерСтроки-1 КАК НомерСтроки |ИЗ | Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары |ГДЕ | УстановкаЦенНоменклатурыТовары.Номенклатура = &Номенклатура И УстановкаЦенНоменклатурыТовары.Цена<>&Цена |ИТОГИ ПО Ссылка" ) ; Запрос.УстановитьПараметр("Номенклатура",Объект.Валенки); Запрос.УстановитьПараметр("Цена",Объект.Цена); ВыборакаДокументы = Запрос.Выполнить().Выбрать(ОбходРезулататЗапроса.ПоГруппировка); Пока ВыборакаДокументы.Следующий() Цикл ДокОбъект = ВыборакаДокументы.ССылка.ПолучитьОбъект(); Выборка = ВыборкаДокументы.Выбрать(); Пока Выборка.Следующий() Цикл ДокОбъект.Товары[Выборка.НомерСтроки].Цена = Объект.Цена; КонецЦикла; ДокОбъект.Записать(); КонецЦиклаа; КонецПроцедуры Наслаждаешься, кушаешь печенки.. |
|||
9
Muaviya
21.06.20
✎
20:37
|
Спасибо всем за помощь !
Спасибо за подсказку Галахад. По его подсказке создал вот такой код Код и рекомендации которые написал Ёпрст увидел уже после решения. Но написал он код интересный буду его тестить. &НаСервере Процедура Цена15000НаСервере() Выборка = Документы.УстановкаЦенНоменклатуры.Выбрать(); Пока Выборка.Следующий() Цикл; НЦ = Выборка.ПолучитьОбъект(); Для Каждого ТекСтр ИЗ НЦ.Данные Цикл Если ТекСтр.Номенклатура = ВыберитеТовар Тогда ТекСтр.Цена = 15000; КонецЕсли; КонецЦикла; НЦ.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; Сообщить("Что бы увидеть изменения необходимо перезагрузить клиент"); КонецПроцедуры Работает он таким образом. Поскольку задание было делать в обработке в обработке его и делал Создана команда (цена 15000) она же является и кнопкой Создан реквизит (ВыбиретеТовар) он тоже является кнопкой ВыберитеТовар имеет тип СправочникСсылка.Номенклатура Тыкаем на ВыберитеТовар выбираем из списка номенклатуры товар например Сахар Тыкаем на кнопку "Цена 15000" и в документе "УстановкаЦенНоменклатуры значение цены сахара меняется на 15 000. Осталось одно НО ! Для того что бы увидеть изменения надо перезагрузить клиент (закрыть и открыть снова) Почему так я не знаю. Вопрос преподу задам. Но обучаюсь дистанционно. Ответит, не ответит - увидим И еще вопрос. Как вставлять код на форуме как это сделал Ёпрст ? |
|||
10
Muaviya
21.06.20
✎
20:38
|
Прикольно получилось даже обрабатывать ничего не пришлось. Код сам вставился красиво !!!
|
|||
11
Timon1405
21.06.20
✎
21:21
|
(8) ДокОбъект.Товары[Выборка.НомерСтроки].Цена = Объект.Цена;
такой код сломается на 1001 строке |
|||
12
Ёпрст
21.06.20
✎
21:23
|
(11) с х..ли ?
|
|||
13
Timon1405
21.06.20
✎
21:29
|
(12) Пардон, сломался бы Сообщение.Поле = Товары[Выборка.НомерСтроки].Цена;//Сообщение.Сообщить()
|
|||
14
D_E_S_131
22.06.20
✎
12:09
|
(9) Если уж конечно "забить" на перебор всех документов, вместо выборки нужных документов запросом (как написано в (8) ), то хотя бы перед циклом перебора ТЧ документа сделай "ЕстьИзменения = Ложь;" , а внутри условия после установки новой цены "ЕстьИзменения = Истина;" и потом записывай документ если ЕстьИзменения, а не все документы подряд (препод хоть увидит, что ты пытаешься не угробить базу).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |