|
УТ11. Программно изменить вид номенклатуры | ☑ | ||
---|---|---|---|---|
0
kIR
18.06.13
✎
16:07
|
Здрасьте.
Есть база с перенесенной номенклатурой. Вся номенклатура без видов. Требуется: для каждой позиции установить вид номенклатуры в зависимости от группы. ТОесть если группа 3го уровня,то вид - наименование группы 2го уровня, если 2го-то 2го,если 1го-то 1го. Написал примерно вот что: &НаКлиенте Процедура Сделать(Команда) СоздатьИустановитьВидыНомнклатуры(); КонецПроцедуры &НаСервере Процедура СоздатьИустановитьВидыНомнклатуры() ЗапросНоменклатуры = Новый Запрос; ЗАпросНоменклатуры.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Родитель, | Номенклатура.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ЛОЖЬ"; Выборка = ЗапросНоменклатуры.Выполнить().Выбрать(); а = 0; Пока Выборка.Следующий() Цикл Если НЕ Выборка.Родитель= Неопределено Тогда Если Не Выборка.Родитель.Родитель = неопределено ТОгда Если Не Выборка.Родитель.Родитель.Родитель = неопределено ТОгда ОбъектНоменклатуры = Выборка.ссылка.ПолучитьОбъект(); ОбъектНоменклатуры.ВидНоменклатуры = ПроверитьВидНоменклатуры(Выборка.РОдитель.Родитель); ОбъектНоменклатуры.Записать(); Иначе ОбъектНоменклатуры = Выборка.ссылка.ПолучитьОбъект(); ОбъектНоменклатуры.ВидНоменклатуры = ПроверитьВидНоменклатуры(Выборка.РОдитель.Родитель); ОбъектНоменклатуры.Записать(); КонецЕсли; ОбъектНоменклатуры = Выборка.ссылка.ПолучитьОбъект(); ОбъектНоменклатуры.ВидНоменклатуры = ПроверитьВидНоменклатуры(Выборка.РОдитель); ОбъектНоменклатуры.Записать(); КонецЕсли; ОбъектНоменклатуры = Выборка.ссылка.ПолучитьОбъект(); ОбъектНоменклатуры.ВидНоменклатуры = ПроверитьВидНоменклатуры(Выборка.РОдитель); ОбъектНоменклатуры.Записать(); КонецЕсли; а=а+1; КонецЦикла; Сообщить("Обработано " + а + " позиций номенклатуры!") КонецПроцедуры &НаСервере Функция ПроверитьВидНоменклатуры(Родитель) Запрос = Новый Запрос; ЗАпрос.УстановитьПараметр("Наименование",Родитель.Наименование); Запрос.Текст = "ВЫБРАТЬ | ВидыНоменклатуры.Ссылка |ИЗ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры |ГДЕ | ВидыНоменклатуры.Наименование = &Наименование"; Итог = Запрос.Выполнить().Выбрать(); Если Итог.Количество()>0 тогда Возврат Итог.ссылка; Иначе НовыйВидНоменклатуры = Справочники.ВидыНоменклатуры.СоздатьЭлемент(); НовыйВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар; НовыйВидНоменклатуры.Наименование = РОдитель.Наименование; НовыйВидНоменклатуры.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг; НовыйВидНоменклатуры.Записать(); Возврат НовыйВидНоменклатуры.Ссылка; КонецЕсли; КонецФункции Виды то он создает,но вот в элементах то номенклары вид все равно не указан... чяднт? |
|||
1
kIR
18.06.13
✎
16:08
|
да,косячок есть,он создает несколько одинаковых видов,но я его уже поправил
|
|||
2
Флудер
18.06.13
✎
16:08
|
В обработчике передзаписью стоит проверка на запрет изменения виданоменклатуры в некоторых случаях. Может отрабатывает?
|
|||
3
mikecool
18.06.13
✎
16:10
|
а чего бы не Выборка.Ссылка.Уровень() проверять?
|
|||
4
kIR
18.06.13
✎
16:10
|
(2) а программно ее можно отрубить?
|
|||
5
mikecool
18.06.13
✎
16:11
|
запрос в цикле...
|
|||
6
kIR
18.06.13
✎
16:16
|
(5) поясни
|
|||
7
Zapal
18.06.13
✎
16:24
|
(0) <<рукалицо>>
|
|||
8
mikecool
18.06.13
✎
16:25
|
(6) ты на каждой итерации по номенклатуре делаешь запрос к видам
|
|||
9
Флудер
18.06.13
✎
16:26
|
(4) ОбменДанными.Загрузка=Истина
|
|||
10
Zapal
18.06.13
✎
16:29
|
думаю косяк где-то здесь:
Итог = Запрос.Выполнить().Выбрать(); Если Итог.Количество()>0 тогда Возврат Итог.ссылка; |
|||
11
kIR
19.06.13
✎
08:51
|
(10) именно)спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |