8.х Копирование реквизит элемента один в другую

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем EKO LX, 10 сен 2012.

  1. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Помогите пожалуйста с кодом.

    На рисунке форма элемента справочника Номенклатура. нужно из верхнего реквизита Штрихкод (Номенклатура.Штрихкод) скопировать в нижнюю часть (), по окончании процесса записать справочник, чтобы Ед.Изм. которое в верхней части элемента, записалась в Ед. хранение остатков. какой код нужно написать?

    Посмотреть вложение 12184

    Вложения:

    • spav.jpg
      spav.jpg
      Размер файла:
      101,6 КБ
      Просмотров:
      60
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    А нижняя часть у Вас ТЧ справочника или это регистр сведений? Вы я так понимаю хотите реализовать то же смое что и в стандартных конфах, что мешает код там подстотреть?
  3. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Регистр сведений. Я бы с удовольствие, но не знаю как. Буду благодарен за любую помощь!
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вот по единицы хранения

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

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    спасибо большое! вот что еще с Справочник.Номенклатура раздобыл

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

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    НУ это он базовую единицу записывает. А хранения остатков - он уже записывает по базовой
  7. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    сейчас добавлю в обработчик, посмотрю что получится
  8. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Draco, спасибо! все работает, только одна зацепка. в этой процедуре ед. изм. записывает в свою форму, т.е. как понял она определена для номенклатуры и записывается в нее при ОК или Сохранить. нужно добраться до этой формы из моей обработки. как написать ссылку к ней? чем заменить эту запись?

    Код:
     ЗаписатьВФорме();
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну если Вы из обработки делаете вызов то вам этого не надо


    Расширение формы элемента справочника (Catalog item form extension)
    ЗаписатьВФорме (WriteInForm)

    Синтаксис:ЗаписатьВФорме()

    Возвращаемое значение:Тип: Булево.
    Истина - объект записан; Ложь - в противном случае.

    Описание:Записывает объект, редактируемый в данный момент в форме.


    Доступность:Толстый клиент.

    Пример: Если ЗаписатьВФорме() Тогда
    Сообщить("Объект записан.");
    КонецЕсли;

    ,
  10. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    не совсем сообразил что тут. но опять ЗаписатьВФорме. в обработке выдает ошибку: Форма.Форма(51,3)}: Процедура или функция с указанным именем не определена (ЗаписатьВФорме)
    <<?>>ЗаписатьВФорме();

    нужно как-то к этой форме из обработки ссылаться и записать ее
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Просто записать вызовите. или код привидите, что бы видно было.
  12. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    я не знаю как это сделать. нужно найти эту же Номенклатуру и записать ее
  13. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Можете код выложить?
  14. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    заменяю ЗаписатьВФорме на НайденнаяЕдиница.Записать();

    так правильно?

    Код:
    Элемент.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоКоду(Ед.Код);
    Элемент.Записать();
  15. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну если дает - нужный результат - то правильно!
    Давайте по порядку. Вы в первом посте указали форму элемента справочника номенклатура. Вы весь код из формы вызываете?
  16. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    вот что я использую

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

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вы это код зпускаете из обработки? или формы? кнопа Выполнить где находиться?
  18. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Вот смотрите. здесь все идет прекрасно

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

    из обработки
  19. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Смотрите , я правильно Вас понял
    1. Берет запросом и получате выборку номенклатур
    2. Для каждой номенклатуры в запросе вы ищете еденицу измерения
    2. если находите, то хорошо, если нет, то создаете новую еденицу в справочнике едениц измерения
    3. потом созданную еденицу измерения иди найденую вы присваиваете Еденице хранения остатков
    Единица храненияОстатков - это что?
  20. TopicStarter Overlay
    EKO LX
    Offline

    EKO LX

    Регистрация:
    28 сен 2011
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Приведу пример на рисунке. Эта обработка заполняет то что начерчена зеленым, а то что красным остается пустым, мне нужно ее заполнить

    Посмотреть вложение 12192

    Вложения:

    • spravo4nik.jpg
      spravo4nik.jpg
      Размер файла:
      116,2 КБ
      Просмотров:
      19

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