Имя: Пароль:
1C
1С v8
ЕдиницаХраненияОстатков
,
0 EKO LX
 
11.09.12
15:25
Здравствуйте.
вот процедура
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Запрос = Новый Запрос;
   
   Запрос.Текст =
           "ВЫБРАТЬ
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Ссылка " +?(ВГруппеИлиРавно="равно","=&Ссылка", "В ИЕРАРХИИ (&Ссылка)");
   
    Запрос.УстановитьПараметр("Ссылка",Товар);
   
    Результат = Запрос.Выполнить().Выбрать();
   
   Пока Результат.Следующий() ЦИКЛ
       
       Ссылка = Результат.Ссылка;
       Сообщить(Ссылка.Наименование);
       
       
   Если Ссылка.ЭтоГруппа Тогда
       Продолжить;
   КонецЕсли;

   ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, Ссылка);
   Если ВыборкаЕдиниц.Следующий() Тогда
       НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
   Иначе
       НайденнаяЕдиницаОбъект                         = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
       НайденнаяЕдиницаОбъект.Наименование            = БазоваяЕдиницаИзмерения.Наименование;
       НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения;
       НайденнаяЕдиницаОбъект.Коэффициент             = 1;
       НайденнаяЕдиницаОбъект.Владелец                = Ссылка;

       Попытка
           НайденнаяЕдиницаОбъект.Записать();
       Исключение
           Сообщить("Не удалось записать единицу: " + ОписаниеОшибки(), СтатусСообщения.Важное);
           Отказ = Истина;
           Возврат;
       КонецПопытки;

       НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
   КонецЕсли;

   ЕдиницаХраненияОстатков = НайденнаяЕдиница;

   Попытка
       ЕдиницаХраненияОстатков.Записать();
   Исключение
       Отказ = Истина;
   КонецПопытки;
         КонецЦикла;
КонецПроцедуры

процедура работает, но не полностью. добавляет БазоваяЕдиницаИзмерения, но не добавляет ЕдиницаХраненияОстатков. в чем ошибка?
1 salvator
 
11.09.12
15:30
(0) Отладчик?
2 zladenuw
 
11.09.12
15:32
подскажу, разные типы
3 rinatru
 
11.09.12
15:33
(2) ты не прав.
4 Cандер
 
11.09.12
15:34
Могу, конечно ошибаться, но единицу хранения просто так не поменяешь. Где-то в коде (точно не помню) стоит "Отказ = Истина;".
5 zladenuw
 
11.09.12
15:34
(3) думаешь ?
6 rinatru
 
11.09.12
15:34
объектном = Ссылка.получитьобъект();
объектном.единицахраненияостатков = НайденнаяЕдиница;
объектном.записать();
7 DrShad
 
11.09.12
15:37
(4) открой для себя конструкцию
Если ОбменДанными.Загрузка Тогда
   Возврат;
КонецЕсли;

и перейдешь на новый уровень
8 Cандер
 
11.09.12
15:38
(7) Это к чему?
9 DrShad
 
11.09.12
15:40
(8) к твоему посту в этой ветке естественно
10 golden-pack
 
11.09.12
15:41
(8) это тебе ответ на (4) ... все нечем крыть ?
11 palpetrovich
 
11.09.12
15:44
(0)  Процедура КнопкаВыполнитьНажатие(Кнопка) - это где?
ЕдиницаХраненияОстатков - это что?

случайно не из типовой копи-паст?

Процедура ПроверитьЕдиницуХраненияОстатков(Отказ)

   Если ЗначениеЗаполнено(ЕдиницаХраненияОстатков) Тогда
       Возврат;
   КонецЕсли;

   ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, Ссылка);
   Если ВыборкаЕдиниц.Следующий() Тогда
       НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
   Иначе
       НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
       НайденнаяЕдиницаОбъект.Наименование            = БазоваяЕдиницаИзмерения.Наименование;
       НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения;
       НайденнаяЕдиницаОбъект.Коэффициент             = 1;
       НайденнаяЕдиницаОбъект.Владелец                = Ссылка;

       Попытка
           НайденнаяЕдиницаОбъект.Записать();
       Исключение
           Сообщить("Не удалось записать единицу хранения остатков: " + ОписаниеОшибки(), СтатусСообщения.Важное);
           Отказ = Истина;
           Возврат;
       КонецПопытки;

       НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
   КонецЕсли;

   ЕдиницаХраненияОстатков = НайденнаяЕдиница;

   Попытка
       ЗаписатьВФорме();
   Исключение
       Отказ = Истина;
   КонецПопытки;

КонецПроцедуры // ПроверитьЕдиницуХраненияОстатков()
12 golden-pack
 
11.09.12
15:45
(11) ЕдиницаХраненияОстатков это ЕдиницаХраненияОстатков. Кэп.
13 rinatru
 
11.09.12
15:48
я так понял, что ТС программно прописывает единицы в номенклатуре... элемент ЕдиницыИзмерения создал. а в карточке элемента Номенклатуры ссылку не привязал
14 DrShad
 
11.09.12
15:48
(12) если более подробно, то та единица в которой буду сформированы движения документа
15 zladenuw
 
11.09.12
15:49
(13) так может это в форме элемента
16 palpetrovich
 
11.09.12
15:50
(12) спасибо, но это так-же может быть и переменная, реквизит формы, реквизит документа, справочника, обработки...
17 Reset
 
11.09.12
15:50
(11) Реквизит объекта номенклатура, думаю
18 DrShad
 
11.09.12
15:50
(16) вы совершенно правы - это и есть реквизит справочника Номенклатура
19 Reset
 
11.09.12
15:52
Хотя если в контексте (0) - это переменная со ссылкой
20 palpetrovich
 
11.09.12
15:53
(18) телепат? ...я вот не уверен что эта процедура у автора в  справочнике Номенклатура, мне почему-то кажется, что в обработке
21 Reset
 
11.09.12
15:53
(19), а гоню. Это действительно что угодно может быть, зависит от контекста, где (0) написано
22 palpetrovich
 
11.09.12
15:54
+20 могу конечно ошибаться, но автор пояснять не хочет :)
23 Reset
 
11.09.12
15:55
Но там явно ссылка и
   Попытка
       ЕдиницаХраненияОстатков.Записать();
всегда вызывает исключение
24 DrShad
 
11.09.12
15:56
судя по конструкции

Отказ = Истина;

это таки модуль объекта
25 Reset
 
11.09.12
15:56
Думаю это кривая и косая копипаста с поста ПалПетровича, ну точнее с его первоисточника
26 palpetrovich
 
11.09.12
15:57
(23) ксати да :)

а в чем смысл
|    Номенклатура.Ссылка " +?(ВГруппеИлиРавно="равно","=&Ссылка", "В ИЕРАРХИИ (&Ссылка)");
она как-то по другому работает разве чем:
|    Номенклатура.Ссылка В ИЕРАРХИИ (&Ссылка)";
?
27 Reset
 
11.09.12
15:57
(24) Судя по названию процедуры "КнопкаВыполнитьНажатие(Кнопка)"  -наврядли модулб объекта :)
28 Reset
 
11.09.12
15:58
А отказ - это тупо переменная, котрая исчезает после завершения этой процедуры
29 palpetrovich
 
11.09.12
15:58
(25) ну первоисточнок - в УТ, в модуле формы спраочника номенклатура :)
30 Reset
 
11.09.12
15:58
Короче я раскрыл заговор. Автору учить отличие между объектом и ссылкой.
31 DrShad
 
11.09.12
15:59
(27) тоже первым делом сомневался, но...
32 Reset
 
11.09.12
16:01
Автор кстати создал тему и свалил, истину мы не узнаем ^^
33 palpetrovich
 
11.09.12
16:12
(0) как-то так получше будет:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Запрос.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Ссылка В ИЕРАРХИИ (&ВыбНоменклатура)");
   
    Запрос.УстановитьПараметр("Ссылка",Товар);
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() ЦИКЛ
        НоменклатураСсылка = Результат.Ссылка;
        Если НоменклатураСсылка.ЭтоГруппа Тогда
            Продолжить;
        КонецЕсли;
       
        ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, НоменклатураСсылка);
        Если ВыборкаЕдиниц.Следующий() Тогда
            НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
        Иначе
            НайденнаяЕдиницаОбъект                         = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
            НайденнаяЕдиницаОбъект.Наименование            = НоменклатураСсылка.БазоваяЕдиницаИзмерения.Наименование;
            НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = НоменклатураСсылка.БазоваяЕдиницаИзмерения;
            НайденнаяЕдиницаОбъект.Коэффициент             = 1;
            НайденнаяЕдиницаОбъект.Владелец                = НоменклатураСсылка;
            Попытка
                НайденнаяЕдиницаОбъект.Записать();
            Исключение
                Сообщить("Не удалось записать единицу: " + ОписаниеОшибки(), СтатусСообщения.Важное);
                Возврат;
            КонецПопытки;
            НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
        КонецЕсли;
       
        НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект();
        НоменклатураОбъект.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
        Попытка
            НоменклатураОбъект.Записать();
        Исключение
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры    
зы: не проверял, но вроде ошибок нет :)
34 palpetrovich
 
11.09.12
16:14
* мля :)
Запрос.УстановитьПараметр("ВыбНоменклатура",ВыбНоменклатура); // ВыбНоменклатура - реквизит на форме обработки
35 EKO LX
 
11.09.12
17:17
Спасибо большое palpetrovich! а ошибка есть, забыли поставить "." между Номенклатура и Ссылка :)

НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект();
36 palpetrovich
 
11.09.12
17:22
(35) не-не, там-же раньше НоменклатураСсылка = Результат.Ссылка;
а вот что забыл, так это вначале: Запрос = новый Запрос; :)
37 Reset
 
11.09.12
17:30
(35) Гы-гы. Не надо там точки