Изменение подчиненности элемента в прайс листе
13.05.2009
17:29
#1
"Люди добрые помогите. Пытаюсь написать код, при котором автоматически менялась бы подчиненность в справочнике прайс-лист, при изменении подчиненности в справочнике номенклатура. Вот код:
Процедура ПриПереносеЭлементаВДругуюГруппу()
спр=СоздатьОбъект("Справочник.ПрайсЛист");
спр1=СоздатьОбъект("Справочник.Номенклатура");
текэл = Спр1.ТекущийЭлемент();
спр.НайтиПоНаименованию(текэл);
спр.Родитель=Спр1.Родитель;
спр.Выгружен=0;
спр.Записать();
СтатусВозврата(0);
Возврат;
КонецПроцедуры
Выдает сообщение об ошибке
{Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль(205)}: Не выбран элемент!
спр.Родитель=Спр1.Родитель;
Где может быть ошибка? "
Процедура ПриПереносеЭлементаВДругуюГруппу()
спр=СоздатьОбъект("Справочник.ПрайсЛист");
спр1=СоздатьОбъект("Справочник.Номенклатура");
текэл = Спр1.ТекущийЭлемент();
спр.НайтиПоНаименованию(текэл);
спр.Родитель=Спр1.Родитель;
спр.Выгружен=0;
спр.Записать();
СтатусВозврата(0);
Возврат;
КонецПроцедуры
Выдает сообщение об ошибке
{Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль(205)}: Не выбран элемент!
спр.Родитель=Спр1.Родитель;
Где может быть ошибка? "
13.05.2009
19:06
#2
"Интересно как это все понимать:
> спр=СоздатьОбъект("Справочник.ПрайсЛист");
Спр - это Прайс лист, ладно.
> спр1=СоздатьОбъект("Справочник.Номенклатура");
Спр1 - это номенклатуры
> текэл = Спр1.ТекущийЭлемент();
Извините, а что вы получите через ТекущийЭлемент(), если после создания объекта ничего не выбирали? Может сначала найдете интересующий вас объект.
> спр.НайтиПоНаименованию(текэл);
А это вообще бред - НайтиПоНаименованию подразумевает, что ищется наименование. А вы вместо наименования подсовываете Объект, да еще и Номенклатуры. Конечно преобразование в строку пройдет, но вы уверены, что результатом будет именно наименование? К тому же ищите Наименование Прайса = Наименованию Номенклатуры (может конечно они у вас и равны по каким-то причинам)
> спр.Родитель=Спр1.Родитель;
И это писк, который переводиться так: ПрайсЛист = Номенклатура.
Короче - ошибок пруд пруди
"
> спр=СоздатьОбъект("Справочник.ПрайсЛист");
Спр - это Прайс лист, ладно.
> спр1=СоздатьОбъект("Справочник.Номенклатура");
Спр1 - это номенклатуры
> текэл = Спр1.ТекущийЭлемент();
Извините, а что вы получите через ТекущийЭлемент(), если после создания объекта ничего не выбирали? Может сначала найдете интересующий вас объект.
> спр.НайтиПоНаименованию(текэл);
А это вообще бред - НайтиПоНаименованию подразумевает, что ищется наименование. А вы вместо наименования подсовываете Объект, да еще и Номенклатуры. Конечно преобразование в строку пройдет, но вы уверены, что результатом будет именно наименование? К тому же ищите Наименование Прайса = Наименованию Номенклатуры (может конечно они у вас и равны по каким-то причинам)
> спр.Родитель=Спр1.Родитель;
И это писк, который переводиться так: ПрайсЛист = Номенклатура.
Короче - ошибок пруд пруди
"
13.05.2009
21:12
#3
"Процедура ПриПереносеЭлементаВДругуюГруппу(ТекЭл, НовГр)
спр=СоздатьОбъект("Справочник.ПрайсЛист");
Спр.НайтиПоНаименованию(НовГр.Наименование);
НовГрПрайсЛиста = Спр.ТекущийЭлемент();
спр.НайтиПоНаименованию(текэл.Наименование);
Спр.Родитель = НовГрПрайсЛиста;
Спр.Записать();
КонецПроцедуры
"
спр=СоздатьОбъект("Справочник.ПрайсЛист");
Спр.НайтиПоНаименованию(НовГр.Наименование);
НовГрПрайсЛиста = Спр.ТекущийЭлемент();
спр.НайтиПоНаименованию(текэл.Наименование);
Спр.Родитель = НовГрПрайсЛиста;
Спр.Записать();
КонецПроцедуры
"
13.05.2009
21:41
#4
"Что то я мучался, мучался... не могу вспомнить в какой конфигурации есть этот справочник. Точно помню, что видел, но где не помню. Вроде в каких то старых релизах "Торговля и склад". Там смысл был в том, что помимо справочника номенклатуры существовал отдельный справочник "ПрайсЛист", куда можно было добавлять ссылки на справочник номенклатуры и организовать в нем отражение лишь нужной части справочника номенклатуры и сгруппировать их каким то иным образом, не обязательно совпадающим с группировками справочника Номенклатуры. Поскольку вы такую задачу решаете, выходит, что у вас справочники Номенклатуры и Прайс лист по структуре синхронны. Исходя из этого соображения, вот вариант решения:
В форме списка справочника Номенклатура пишем:
Процедура ПриПереносеЭлементаВДругуюГруппу(Элемент,Группа)
ПрайсЛист=СоздатьОбъект("Справочник.ПрайсЛист");
Если ПрайсЛист.НайтиПоРеквизиту("Товар",Элемент)=1 Тогда
ПарныйЭлементВПрайсЛисте=ПрайсЛист.ТекущийЭлемент();
СтруктураГрупп=СоздатьОбъект("СписокЗначений");
Если ПустоеЗначение(Группа)=0 Тогда
ТекГруппа=Группа;
Пока 1=1 Цикл
СтруктураГрупп.ДобавитьЗначение(ТекГруппа);
ТекГруппа=ТекГруппа.Родитель;
Если ПустоеЗначение(ТекГруппа)=1 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=1;
ПрайсЛист.ИспользоватьРодителя(ПолучитьПустоеЗначение("Справочник.ПрайсЛист"));
РазмерСтруктурыГрупп=СтруктураГрупп.РазмерСписка();
Для i=1 По РазмерСтруктурыГрупп Цикл
НомерГруппыВСтруктуре=РазмерСтруктурыГрупп-i+1;
Если ПрайсЛист.НайтиПоНаименованию(СтруктураГрупп.ПолучитьЗначение(НомерГруппыВСтруктуре).Наименование,1,1)=1 Тогда
ПрайсЛист.ИспользоватьРодителя(ПрайсЛист.ТекущийЭлемент());
Иначе
ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=0;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=1 Тогда
НовыйРодительВПрайсЛисте=ПрайсЛист.ТекущийЭлемент();
Если ПрайсЛист.НайтиЭлемент(ПарныйЭлементВПрайсЛисте)=1 Тогда
ПрайсЛист.Родитель=НовыйРодительВПрайсЛисте;
ПрайсЛист.Записать();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры"
В форме списка справочника Номенклатура пишем:
Процедура ПриПереносеЭлементаВДругуюГруппу(Элемент,Группа)
ПрайсЛист=СоздатьОбъект("Справочник.ПрайсЛист");
Если ПрайсЛист.НайтиПоРеквизиту("Товар",Элемент)=1 Тогда
ПарныйЭлементВПрайсЛисте=ПрайсЛист.ТекущийЭлемент();
СтруктураГрупп=СоздатьОбъект("СписокЗначений");
Если ПустоеЗначение(Группа)=0 Тогда
ТекГруппа=Группа;
Пока 1=1 Цикл
СтруктураГрупп.ДобавитьЗначение(ТекГруппа);
ТекГруппа=ТекГруппа.Родитель;
Если ПустоеЗначение(ТекГруппа)=1 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=1;
ПрайсЛист.ИспользоватьРодителя(ПолучитьПустоеЗначение("Справочник.ПрайсЛист"));
РазмерСтруктурыГрупп=СтруктураГрупп.РазмерСписка();
Для i=1 По РазмерСтруктурыГрупп Цикл
НомерГруппыВСтруктуре=РазмерСтруктурыГрупп-i+1;
Если ПрайсЛист.НайтиПоНаименованию(СтруктураГрупп.ПолучитьЗначение(НомерГруппыВСтруктуре).Наименование,1,1)=1 Тогда
ПрайсЛист.ИспользоватьРодителя(ПрайсЛист.ТекущийЭлемент());
Иначе
ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=0;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=1 Тогда
НовыйРодительВПрайсЛисте=ПрайсЛист.ТекущийЭлемент();
Если ПрайсЛист.НайтиЭлемент(ПарныйЭлементВПрайсЛисте)=1 Тогда
ПрайсЛист.Родитель=НовыйРодительВПрайсЛисте;
ПрайсЛист.Записать();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры"
Читают тему
(гостей: 1)