Имя: Пароль:
1C
1С v8
Запись справочника "Номенклатура"
0 Начинающий Чайник
 
28.01.14
20:06
Добрый день! Помогите пожалуйста!
Конфа УТ 10.3.24.1 пишу обработку которая проверяет если не записаны единицы хранения остатков, то она создаёт их на основании базовой единицы. Ошибок никаких но и единицы не появляются.

Код:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Номенклатура.Ссылка
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура
                   |ГДЕ
                   |    Номенклатура.ЭтоГруппа = ЛОЖЬ";
    ТЗ = Запрос.Выполнить().Выгрузить();
    
    
    Для каждого ЭлНомен Из ТЗ Цикл
        
        Если НЕ ЗначениеЗаполнено(ЭлНомен.Ссылка.ЕдиницаХраненияОстатков) Тогда
                        
            СоздатьЕдиницуХранения(ЭлНомен);
            
            Попытка
                ЭлНомен.Ссылка.ПолучитьОбъект().Записать();
            Исключение
                Сообщить(ОписаниеОшибки(),);
            КонецПопытки;
            
        
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

Процедура  СоздатьЕдиницуХранения(ЭлНомен)
    
    ЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    ЕдИзм.Наименование = ЭлНомен.Ссылка.БазоваяЕдиницаИзмерения.Наименование;
    ЕдИзм.Владелец = ЭлНомен.Ссылка;
    ЕдИзм.Коэффициент = 1;
    ЕдИзм.ЕдиницаПоКлассификатору = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЭлНомен.Ссылка.БазоваяЕдиницаИзмерения.Наименование,,,);
    ЕдИзм.Записать();
         
КонецПроцедуры
1 GROOVY
 
28.01.14
20:07
Феерично:           ЭлНомен.Ссылка.ПолучитьОбъект().Записать();
2 Мимохожий Однако
 
28.01.14
20:08
"Ошибок никаких но"
3 GROOVY
 
28.01.14
20:09
Ктож вас всех учит так писать...

В запросе можно отобрать нужные элементы.
Не надо писать "= Ложь".
Не стоит использовать ТЗ для обхода результата запроса. Для этого есть Выборка.
то, что в цикле, вообще жесть.
4 Начинающий Чайник
 
28.01.14
20:12
Ребят) Хорош глумиться) Лучше бы помогли))
5 Мимохожий Однако
 
28.01.14
20:13
Денег нет ..
6 hhhh
 
28.01.14
20:17
а где должны единицы появиться?
7 GROOVY
 
28.01.14
20:19
Я тебе подскажу:

Вот это: ЭлНомен.Ссылка.ПолучитьОбъект().Записать();

равно
Объект = ЭлНомен.Ссылка.ПолучитьОбъект();
Объект.Записать()

и как бы между двумя этими строками должно устанавливаться значение реквизита ЕдиницаХраненияОстатков.
8 Китайский Муй
 
28.01.14
20:23
(0) Где у тебя ЭлНомен.ЕдиницаХраненияОстатков = ЕдИзм.Ссылка;
И ЭлНомен.Записать(); ?
9 Китайский Муй
 
28.01.14
20:23
(7) Во, у Чистова более правильно... :)
10 DirecTwiX
 
28.01.14
20:31
(3) "= Ложь" работает медленнее чем НЕ?
11 МишКа
 
28.01.14
20:36
Об = ЭлНомен.ПолучитьОбъект();

твой
Объект = ЭлНомен.ПолучитьОбъект();
не будет работать в обработке.
12 МишКа
 
28.01.14
20:38
(11) (7)
13 GROOVY
 
28.01.14
21:01
(11) С чего бы вдруг?
14 GROOVY
 
28.01.14
21:01
(10) Да, лишняя операция сравнения.
15 МишКа
 
28.01.14
21:25
(13) Аааа 10.3
Будет работать, извиняюсь.
16 GROOVY
 
28.01.14
22:09
(15) Да в любой будет работать.
17 oslokot
 
28.01.14
22:48
(16) Павел, добрый вечер. Давно хотел спросить, что быстрее:

Если А <> В Тогда
Если A = НЕ В Тогда

?
18 hhhh
 
28.01.14
23:05
А <> В более надежно, тут не в скорости дело. Во втором варианте работать будет только если В типа булево.
19 HEKPOH
 
28.01.14
23:17
(3) А наши так и пишут :(
Устал бороться. Вижу - исправляю сам. Когда настроение есть :)

Еще веселит код, типа
Если А = Б Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;

Ну, неужели трудно запомнить конструкцию:
Возврат А = Б ???
20 HEKPOH
 
28.01.14
23:18
(18) вернее, если В можно привести к булево
21 МишКа
 
28.01.14
23:22
(16) В управляемых формах имя "объект" занято.
22 HEKPOH
 
28.01.14
23:23
(21) по умолчанию.
Никто не запрещает извратиться и "освободить" его :)
23 GROOVY
 
28.01.14
23:39
(21) 1. Не занято, а по умолчанию создается основной реквизит формы, причем не во всех формах, основной реквизит называется так.
2. Кто мешает удалить его или переименовать?
3. Кто говорит, что дело происходит в модуле формы?
4. Почему в 11УТ нельзя использовать обычные формы?
24 Dethmont
 
28.01.14
23:45
В (17) наверное хотел спросить:
"Павел, добрый вечер. Давно хотел спросить, что быстрее: "
Если А <> В Тогда
Если НЕ A = В Тогда
25 Dethmont
 
28.01.14
23:46
(24)+ по логике второй вариант должен быть быстрее...
26 GROOVY
 
29.01.14
00:01
Вот людям заняться нечем %)
27 Поpyчик-4
 
29.01.14
00:07
(19) Аналогично.
Исправляю сам. Когда есть желание и время.
Про Док.Реквизит.Ссылка = Регистр.Измерение.Ссылка или что-то подобное в соединениях или условиях тихо молчу.
28 Pasha
 
29.01.14
00:41
(0) Вот эти люди позорют профсоюз....
29 Начинающий Чайник
 
29.01.14
08:48
Всё разобрался просто возврат забыл сделать
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой