8.х Единицы измерения

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем mac9m6a, 6 дек 2011.

  1. TopicStarter Overlay
    mac9m6a
    Offline

    mac9m6a

    Регистрация:
    19 окт 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Написал автоматическую установку единиц измерений ( только "шт") у всех позиций номенклатуры, чтобы не прописывать руками.В итоге получается, что элемент номенклатуры записался, но при попытке вручную что-нибудь в нем поменять пишет:"Не удалось записать элемент номенклатуры", "у единиц хранения остатков и у единиц для отчетов номенклатуры неверно указан владелец". Хотя, если открыть форму элемента и вручную выбрать Единицу хранения остатков и Единицу для отчетов, то элемент благополучно записывается... Помогите разобраться в чем дело?
    Код:
     Процедура КнопкаВыполнитьНажатие(Кнопка) 
    Запрос = Новый Запрос("ВЫБРАТЬ
    |	Номенклатура.Ссылка,
    |	Номенклатура.БазоваяЕдиницаИзмерения
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ЭтоГруппа = ЛОЖЬ"); 
    
    Выборка = Запрос.Выполнить().Выбрать(); 
    
    Пока Выборка.Следующий() Цикл                                         
    объект = Выборка.Ссылка.ПолучитьОбъект(); 
    объект.ОбменДанными.Загрузка = Истина;
    объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Прочие мат.ценности");
    объект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(СокрЛП("796"));
    объект.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоКоду(СокрЛП("796"));
    Попытка 
    объект.Записать(); 
    Исключение 
    Сообщить(ОписаниеОшибки()); 
    КонецПопытки; 
    ОбработкаПрерыванияПользователя(); 
    КонецЦикла; 
    КонецПроцедуры 
    
    Как я понял, вся проблема в том что строчка по ЕдиницамХраненияОстатков неверна. Помогите, пожалуйста, исправить..
  2. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Попробуй ед. хранения остатков брать тоже из спр. КлассификаторЕдиницИзмерения
  3. TopicStarter Overlay
    mac9m6a
    Offline

    mac9m6a

    Регистрация:
    19 окт 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Вообще пустой столбец становится :angry:
    Может быть ошибка в том что в единицу остатков записывал первую попавшуюся единицу с кодом "796", а нужно записывать только что созданную? И как это осуществить?
  4. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    В справочнике ЕдиницыИзмерения каждого элемента есть свой владелец, вот по нему и ищи
    Код:
    
    объект.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(("шт"),,Объект.Ссылка);
    
    
    
  5. TopicStarter Overlay
    mac9m6a
    Offline

    mac9m6a

    Регистрация:
    19 окт 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Заменил эту строчку, все равно ту же ошибку выдает при попытке изменить и записать документ(
    Насчет Владельца Вы правы, но, наверное, как-то это по-другому нужно сделать :angry:
  6. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Выкладывайте обработку,завтра глянем
  7. TopicStarter Overlay
    mac9m6a
    Offline

    mac9m6a

    Регистрация:
    19 окт 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Весь код вверху это и есть вся обработка по одной кнопке нажатия, больше не было смысле писать, т.к. единица измерения только одна - это штуки
  8. Diego
    Offline

    Diego Любитель 1С Команда форума

    Регистрация:
    3 апр 2009
    Сообщения:
    966
    Симпатии:
    2
    Баллы:
    29
    В типовых конфигах в справочнике "номенклатура" в процедуре "ПриЗаписи" выполняется вот такая процедура:

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

Поделиться этой страницей