Имя: Пароль:
1C
1С v8
УПП: Загрузка характеристик номенклатуры и их свойств
0 Alex3000
 
12.07.11
20:03
Добрый день!

У нас на предприятии стоит УПП. Если это важно, то недавно перешли на 8.2.

У номенклатуры есть свойство - Заказ-комплект из справочника Номера заказ комплектов.
Выглядит это примерно так:
[URL=http://www.radikal.ru][IMG]http://s001.radikal.ru/i196/1107/7e/c3f6258db936.jpg[/IMG][/URL]
На всякий случай дублирую ссылку, не знаю, отобразится ли в форуме:
http://s001.radikal.ru/i196/1107/7e/c3f6258db936.jpg

Есть необходимость подгрузить перечень характеристик номенклатуры.
Делаю это при помощи обработки ИТС - загрузка в табличную часть - благо там есть возможность загрузки в справочник:
http://i012.radikal.ru/1107/ad/d72c10016ecb.jpg

Вставляю код При записи объекта - при загрузке в справочник Номера заказ комплектов:
http://s61.radikal.ru/i174/1107/3b/99c5d4544d82.jpg
НачинаяС=Объект.Код-Объект.КоличествоНомеров+1 ;
КоличествоНомеров =Объект.КоличествоНомеров;
       
Попытка
       Номенклатура=Объект.Владелец ;
       Запрос = Новый Запрос;
       Запрос.Текст = "ВЫБРАТЬ
                      |    _НомераЗаказКомплектов.Ссылка КАК Ссылка,
                      |    _НомераЗаказКомплектов.Код КАК Код,
                      |    _НомераЗаказКомплектов.Наименование КАК Наименование
                      |ИЗ
                      |    Справочник._НомераЗаказКомплектов КАК _НомераЗаказКомплектов
                      |ГДЕ
                      |    (&НачальныйНомер >= _НомераЗаказКомплектов.Код - _НомераЗаказКомплектов.КоличествоНомеров + 1
                      |                И &НачальныйНомер <= _НомераЗаказКомплектов.Код
                      |            ИЛИ &КонечныйНомер >= _НомераЗаказКомплектов.Код - _НомераЗаказКомплектов.КоличествоНомеров + 1
                      |                И &КонечныйНомер <= _НомераЗаказКомплектов.Код)
                      |    И _НомераЗаказКомплектов.Владелец = &Номенклатура";
       Запрос.УстановитьПараметр("НачальныйНомер", Объект.Код-Объект.КоличествоНомеров+1);
       Запрос.УстановитьПараметр("КонечныйНомер", Объект.Код);
       Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
       Выборка = Запрос.Выполнить();
       Если НЕ Выборка.Пустой() Тогда
           Выборка = Выборка.Выбрать();
           Выборка.Следующий();
           Если Объект.КоличествоНомеров=1 Тогда
               ВызватьИсключение "Данный номер ("+Формат(НачинаяС,"ЧГ=0")+") уже использован в заказ-комплекте ("+Формат(Выборка.Код,"ЧГ=0")+": "+СокрЛП(Выборка.Наименование)+")";
           Иначе
               ВызватьИсключение "Данный диапазон("+Формат(НачинаяС,"ЧГ=0")+"-"+Формат(НачинаяС+КоличествоНомеров-1,"ЧГ=0")+") уже использован в заказ-комплекте ("+Формат(Выборка.Код,"ЧГ=0")+": "+СокрЛП(Выборка.Наименование)+")";
           КонецЕсли;
       Иначе
           НовыйЭлемент = Справочники._НомераЗаказКомплектов.СоздатьЭлемент();
           НовыйЭлемент.Владелец = Номенклатура;
           НовыйЭлемент.Код = НачинаяС+КоличествоНомеров-1;
           НовыйЭлемент.КоличествоНомеров = КоличествоНомеров;
           НовыйЭлемент.Наименование = ?(КоличествоНомеров=1, Формат(НачинаяС,"ЧГ=0"),    Формат(НачинаяС,"ЧГ=0")+"-"+Формат(НачинаяС+КоличествоНомеров-1,"ЧГ=0"));
           НовыйЭлемент.Записать();        
           
           НоваяХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
           НоваяХарактеристика.Владелец = Номенклатура;
           НоваяХарактеристика.Активная = Истина;
           НоваяХарактеристика.Наименование = НовыйЭлемент.Наименование;
           НоваяХарактеристика.Записать();
           
           Ответ = НоваяХарактеристика.Ссылка;
           
           Набор = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
           Набор.Отбор.Объект.Установить(НоваяХарактеристика.Ссылка);
           Набор.Отбор.Свойство.Установить(Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение);
           НоваяСтрокаНабора = Набор.Добавить();
           НоваяСтрокаНабора.Объект     = НоваяХарактеристика.Ссылка;
           НоваяСтрокаНабора.Свойство = Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение;
           НоваяСтрокаНабора.Значение = НовыйЭлемент.Ссылка;
           Набор.Записать();
           ОписаниеОшибки="";
       КонецЕсли;
   Исключение
       ОписаниеОшибки = ОписаниеОшибки();
   КонецПопытки;

Загрузка успешно происходит:
http://s60.radikal.ru/i169/1107/99/30e48b5c174c.jpg

Следующим этапом - загружаю в справочник Характеристика номенклатуры:
http://i040.radikal.ru/1107/f3/ead5cabf724b.jpg
http://s004.radikal.ru/i206/1107/c2/1713b30b3497.jpg

Характеристика номенклатуры появляется в перечне - при редактировании элемента номенклатуры:
http://s015.radikal.ru/i333/1107/ce/edd9354b3c09.jpg

Но при открытии элемента характеристики номенклатуры, видно, что свойство Заказ-комплект - пустое.
http://s005.radikal.ru/i209/1107/2f/7074e63bc886.jpg

Что я делаю неправильно? Как подключить это свойство и на каком этапе подскажите, пожалуйста.
1 zag2art
 
12.07.11
20:10
Регистр сведений "Значения свойств объектов" заполнил?
2 Maniac
 
12.07.11
20:12
в регистр надо загружать
3 zag2art
 
12.07.11
20:12
Там "Свойство" - должна быть ссылка по моему на план видов характеристик.
4 zag2art
 
12.07.11
20:12
Здесь - НоваяСтрокаНабора.Свойство = Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение;
5 Alex3000
 
12.07.11
20:40
А вот этот код:
Набор = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
           Набор.Отбор.Объект.Установить(НоваяХарактеристика.Ссылка);
           Набор.Отбор.Свойство.Установить(Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение);
           НоваяСтрокаНабора = Набор.Добавить();
           НоваяСтрокаНабора.Объект     = НоваяХарактеристика.Ссылка;
           НоваяСтрокаНабора.Свойство = Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение;
           НоваяСтрокаНабора.Значение = НовыйЭлемент.Ссылка;
           Набор.Записать();

не записывает разве с в значения свойств объектов?
После загрузки номеров заказов и указанного кода - в данном справочнике появляется новое значение, я проверял.
6 zag2art
 
12.07.11
22:10
посмотри еще раз (3)
7 Alex3000
 
13.07.11
09:15
После того, как заменил

НоваяСтрокаНабора.Свойство = Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение;

на
НоваяСтрокаНабора.Свойство =
ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Заказ-комплект")

т.е. сделал ссылку на планы видов характеристик - в регистре значения свойств объектов запись перестала появляться.
8 Alex3000
 
14.07.11
13:03
Всё, решил.

В коде была ошибка.

Вставил код в обработку при загрузке не справочника а характеристик. Во вкладку При записи:

Объект.Записать();
Если Найти(Объект.Наименование,"-")=0 Тогда
ОдноЗначение=Ложь;
НачальныйКомплект=Число(Объект.Наименование);
КонечныйКомплект=Число(Объект.Наименование);
//Сообщить( НачальныйКомплект);
//Сообщить( КонечныйКомплект);

Иначе
ОдноЗначение=Истина;
НачальныйКомплект=Число(Лев(Объект.Наименование,Найти(Объект.Наименование,"-")-1));
КонечныйКомплект=Число(Прав(Объект.Наименование,СтрДлина(Объект.Наименование)- Найти(Объект.Наименование,"-")));
//Сообщить( НачальныйКомплект);
//Сообщить( КонечныйКомплект);

КонецЕсли;


НачинаяС=НачальныйКомплект;
//КоличествоНомеров =Объект.КоличествоНомеров;
КоличествоНомеров=КонечныйКомплект-НачальныйКомплект+1;
КодНомераЗаказа=КонечныйКомплект;

Попытка
       Номенклатура=Объект.Владелец ;
       Запрос = Новый Запрос;
       Запрос.Текст = "ВЫБРАТЬ
                      |    _НомераЗаказКомплектов.Ссылка КАК Ссылка,
                      |    _НомераЗаказКомплектов.Код КАК Код,
                      |    _НомераЗаказКомплектов.Наименование КАК Наименование
                      |ИЗ
                      |    Справочник._НомераЗаказКомплектов КАК _НомераЗаказКомплектов
                      |ГДЕ
                      |    (&НачальныйНомер >= _НомераЗаказКомплектов.Код - _НомераЗаказКомплектов.КоличествоНомеров + 1
                      |                И &НачальныйНомер <= _НомераЗаказКомплектов.Код
                      |            ИЛИ &КонечныйНомер >= _НомераЗаказКомплектов.Код - _НомераЗаказКомплектов.КоличествоНомеров + 1
                      |                И &КонечныйНомер <= _НомераЗаказКомплектов.Код)
                      |    И _НомераЗаказКомплектов.Владелец = &Номенклатура";
       Запрос.УстановитьПараметр("НачальныйНомер", НачинаяС);
       Запрос.УстановитьПараметр("КонечныйНомер", Объект.Код);
       Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
       Выборка = Запрос.Выполнить();
       
       Если НЕ Выборка.Пустой() Тогда
           Выборка = Выборка.Выбрать();
           Выборка.Следующий();
           Если Объект.КоличествоНомеров=1 Тогда
               ВызватьИсключение "Данный номер ("+Формат(НачинаяС,"ЧГ=0")+") уже использован в заказ-комплекте ("+Формат(Выборка.Код,"ЧГ=0")+": "+СокрЛП(Выборка.Наименование)+")";
           Иначе
               ВызватьИсключение "Данный диапазон("+Формат(НачинаяС,"ЧГ=0")+"-"+Формат(НачинаяС+КоличествоНомеров-1,"ЧГ=0")+") уже использован в заказ-комплекте ("+Формат(Выборка.Код,"ЧГ=0")+": "+СокрЛП(Выборка.Наименование)+")";
           КонецЕсли;
       Иначе
           НовыйЭлемент = Справочники._НомераЗаказКомплектов.СоздатьЭлемент();
           НовыйЭлемент.Владелец = Номенклатура;
           НовыйЭлемент.Код = НачинаяС+КоличествоНомеров-1;
           НовыйЭлемент.КоличествоНомеров = КоличествоНомеров;
           НовыйЭлемент.Наименование = ?(КоличествоНомеров=1, Формат(НачинаяС,"ЧГ=0"),    Формат(НачинаяС,"ЧГ=0")+"-"+Формат(НачинаяС+КоличествоНомеров-1,"ЧГ=0"));
           НовыйЭлемент.Записать();        
           
           НоваяХарактеристика = Объект; // Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
       //    НоваяХарактеристика.Владелец = Номенклатура;
       //    НоваяХарактеристика.Активная = Истина;
       //    НоваяХарактеристика.Наименование = НовыйЭлемент.Наименование;
       //    НоваяХарактеристика.Записать();
           
           Ответ = НоваяХарактеристика.Ссылка;
           
           //Св=ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Заказ-комплект");

           
           Набор = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
           Набор.Отбор.Объект.Установить(НоваяХарактеристика.Ссылка);
           Набор.Отбор.Свойство.Установить(Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение);
           //Набор.Отбор.Свойство.Установить(Св);    

           НоваяСтрокаНабора = Набор.Добавить();
           НоваяСтрокаНабора.Объект     = НоваяХарактеристика.Ссылка;
           
           
           
           //НоваяСтрокаНабора.Свойство =  Св ;
           НоваяСтрокаНабора.Свойство=Справочники._ГлобальныеЗначения.СвойствоЗаказКомплект.Значение;
           НоваяСтрокаНабора.Значение = НовыйЭлемент.Ссылка;
           Сообщить(НоваяСтрокаНабора.Значение);
           Сообщить("Прошло");
           Набор.Записать();
           ОписаниеОшибки="";
       КонецЕсли;
   Исключение

       ОписаниеОшибки = ОписаниеОшибки();
       Сообщить("Не прошло");
       Сообщить(ОписаниеОшибки);
   КонецПопытки;



Теперь всё успешно работает, всем спасибо!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.