Имя: Пароль:
1C
1С v8
Виды номенклатуры - использование характеристик
0 Downkey
 
05.08.13
14:51
1С Розница 2.0.6.4 + внешняя обработка.
Если справочник Видов номенклатуры пустой программно заполняю его.

<code>
    // запрос для подсчета элементов справочника ВидыНоменклатуры    
    Запрос = Новый Запрос("ВЫБРАТЬ  
                        |    КОЛИЧЕСТВО(*) КАК КолЭлементов
                        |ИЗ
                        |    Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
                        |ГДЕ
                        |     НЕ ВидыНоменклатуры.ЭтоГруппа");
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    //если справочник ВидовНоменклатуры пустой, то заполняем - выполняется ТОЛЬКО один раз - в первый заход!!!
    Пока Выборка.Следующий() Цикл
        Если Выборка.КолЭлементов=0 тогда
            Для сч=1 по СпискоВидовНомен.Количество() цикл
                // наименование ВидаНоменклатуры - в переменную
                перемНаименованиеВидаНомен=СпискоВидовНомен.Получить(сч-1);
                // получаем ОБЪЕКТ элемента справочника, который можем модифицировать и записать
                СпрВидыНомен=Справочники.ВидыНоменклатуры.СоздатьЭлемент();    
                // записываем в НАИМЕНОВАНИЕ - наименование из заполненного заранее списка значений
                СпрВидыНомен.Наименование=перемНаименованиеВидаНомен;
                // записываем тип - как ТОВАР из перечислений
                СпрВидыНомен.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Товар;
                // записываем вариант использования характеристик
                СпрВидыНомен.ИспользованиеХарактеристик=Перечисления.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ИндивидуальныеДляНоменклатуры;
                // записываем элемент в справочник

                СпрВидыНомен.Записать();  
// ТУТ СпрВидыНомен.ИспользованиеХарактеристик СТАНОВИТСЯ РАВНО ИНЛИВИДУАЛЬНФЕДЛЯНОМЕНКЛАТУРЫ  
                // Набор свойств для характеристик-----НАЧАЛО-----------------------------------------
                // Только если ВидНомеклатуры относится к "книжкам"
                Если перемНаименованиеВидаНомен.Значение="Учебные пособия" ИЛИ
                    перемНаименованиеВидаНомен.Значение="Художественная литература" ИЛИ
                    перемНаименованиеВидаНомен.Значение="Учебники" ИЛИ
                    перемНаименованиеВидаНомен.Значение="Детская литература" ИЛИ
                    перемНаименованиеВидаНомен.Значение="Гот дом задания" Тогда
                        перемЭтоКнижка=ИСТИНА;             // подразумевает наличие дополнительных реквизитов - Автор и Издатель
                Иначе
                        перемЭтоКнижка=ЛОЖЬ;               // подразумевает отсутствие дополнительных реквизитов
                КонецЕсли;
                
                Если перемЭтоКнижка Тогда
                    // получаем ОБЪЕКТ элемента справочника, который можем модифицировать и записать
                    СпрДопРекв=Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент();    
                    СпрДопРекв.Наименование=СпрВидыНомен.Наименование+"(для характеристик)";
                    // добавить строку
                    НоваяСтрока=СпрДопРекв.ДополнительныеРеквизиты.Добавить();
                    // зааполнить реквизиты
                    НоваяСтрока.Свойство = ПВХАвторСсылка;
                    // добавить строку
                    НоваяСтрока=СпрДопРекв.ДополнительныеРеквизиты.Добавить();
                    // зааполнить реквизиты
                    НоваяСтрока.Свойство = ПВХИздательствоСсылка;
                    // записать элемент справочника НаборыДополнительныхРеквизитовИСведений
                    СпрДопРекв.Записать();    
                    СпрДопРеквСсылка=СпрДопРекв.Ссылка;
                Иначе
                    СпрДопРеквСсылка=СпрДопРекв.Ссылка.Пустая();
                КонецЕсли;
                // Набор свойств для характеристик-----КОНЕЦ-----------------------------------------
                
                Если ЗначениеЗаполнено(СпрДопРеквСсылка) Тогда
                    СпрВидыНомен.НаборСвойствХарактеристик=СпрДопРеквСсылка;
                КонецЕсли;
                // записываем элемент в справочник
                СпрВидыНомен.Записать();
// А ТУТ СпрВидыНомен.ИспользованиеХарактеристик ОПЯТЬ СТАНОВИТСЯ РАВНО НЕИСПОЛЬЗОВАТЬ  
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
</code>

Почему у меня СпрВидыНомен.ИспользованиеХарактеристик в результате становиться НеИспользовать?
Первая строка СпрВидыНомен.Записать(); добавлена чтоб убедиться, что все-таки СпрВидыНомен.ИспользованиеХарактеристик сохраняется как ИндивидуальныеДляНоенклатуры. Но почему после второй записи опять слетает на НеИспользовать???
1 Maxus43
 
05.08.13
14:52
СпрВидыНомен.Записать(); - в модуле объекта Перед/При записи смотри, + может быть в подписках
2 Downkey
 
05.08.13
14:57
(1) Ага. Посмотрю. Спасибо.
Закон Брукера: Даже маленькая практика стоит большой теории.