Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Дек 2017, 16:16
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Программное изменение родителя элемента справочника  (Прочитано 6413 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Всем привет.
Изучаю потихоньку создание внешних обработок и столкнулся с проблемой:
Обработка редактирует элемент справочника номенклатура, заменяя меры измерения. Эти самые меры берутся из другого справочника. Всё заменяется, но изменения не записываются и при записи возникает ошибка, связанная с родителем элемента справочника. Справочник номенклатура никому не подчинён и я предположил, что проблема не в нём, а при выборе единицы измерения нужно указать её родителем справочник номенклатура. Так вот, проблема заключается в том, что при попытке изменить родителя кодом
ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
Номенклатура = ЭтаФорма.Номенклатура; //это форма моей внешней обработки, в ней есть поле с именем "Номенклатура", ссылающееся на соответствующий справочник. В нём я выбираю текущий элемент для редактирования
ЕдиницаИзмерения.Владелец = Номенклатура;
Конфигурация ругается, намекая что
ЕдиницаИзмерения.Владелец
не подлежит редактированию.
Где я на этот раз облажался?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.


Оффлайн k_aleks80

  • **
  • Сообщений: 65
  • РЕПУТАЦИЯ: 14
  • КПД: 22%
  • Регистрация: 2011-09-08
  • Сайт: 
  • Профессия: Программист 1С
Если у тебя обычная обработка (не на управляемых формах):
тогда не:
Цитировать
Номенклатура = ЭтаФорма.Номенклатура; ...
, а все-таки, скорее всего:
Номенклатура = ОбработкаОбъект.Номенклатура;
ну и соответственно у обработки должен быть реквизит Номенклатура с соответствующим типом

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
1) полный текст ошибки как ругается конфигуратор
2) справочник КлассификаторЕдиницИзмерения обычно никому не подчинен, из-за этого может и ругаться - вы пытаетесь назначить владельца справочнику у которого его нет
3) НайтиПоНаименованию() возвращает только ссылку. после этого надо объект получить чтобы иметь возможность изменять реквизиты найденной ЕдИзм.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
1) полный текст ошибки как ругается конфигуратор
2) справочник КлассификаторЕдиницИзмерения обычно никому не подчинен, из-за этого может и ругаться - вы пытаетесь назначить владельца справочнику у которого его нет
3) НайтиПоНаименованию() возвращает только ссылку. после этого надо объект получить чтобы иметь возможность изменять реквизиты найденной ЕдИзм.
1)
{Форма.Форма.Форма(17)}: Поле объекта недоступно для записи (Владелец)
ЕдиницаИзмерения.Владелец = Номенклатура;
2) Если не пытаться записать владельца, тогда эта ошибка
{Форма.Форма.Форма(18)}: Ошибка при вызове метода контекста (Записать)
Номенклатура2.Записать();
по причине:
Не удалось записать "Банан (Номенклатура)"!
Банан -- это тестовый элемент номенклатуры. При этом внизу экрана появляется сообщение с текстом
У базовой единицы номенклатуры "Банан" неверно указан владелец!
, но табло говорит что владельца там нет и никогда не было, да и справочник Номенклатура ни кому не подчинён.
Добавлено: 25 Мар 2015, 03:19

3) Воспользовался методом ПолучитьОбъект(), теперь появляется такая ошибка
Значение не является значением объектного типа (Владелец)
СП пишет, что Владелец
Цитировать
Содержит ссылку на владельца элемента справочника.
, поэтому я и пытаюсь записать владельцем ссылку на номенклатуру. У меня такое чувство, что я плохо объясняю, поэтому пусть код скажет за меня.
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если ЭтаФорма.ЭлементыФормы.МераИзмерения.Значение = "Штуки" Тогда
Номенклатура = ЭтаФорма.Номенклатура;
Объект = Номенклатура.ПолучитьОбъект();
Объект.МераИзмерения = Справочники.МерыИзмерения.НайтиПоНаименованию("Штуки");
ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
Иначе
Номенклатура = ЭтаФорма.Номенклатура;
Объект = Номенклатура.ПолучитьОбъект();
Объект.МераИзмерения = Справочники.МерыИзмерения.НайтиПоНаименованию("Вес");
ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
ЕдиницаОбъект = ЕдиницаИзмерения.ПолучитьОбъект();
КонецЕсли;
Объект.БазоваяЕдиницаИзмерения = Объект.МераИзмерения.БазоваяЕдиницаИзмерения;
ЕдиницаОбъект.Владелец = Объект;
Объект.Записать();
КонецПроцедуры
Добавлено: 25 Мар 2015, 03:23

Ещё пытался сделать так
ЕдиницаОбъект.Владелец = Номенклатура
, но ошибка та же:
Значение не является значением объектного типа (Владелец)
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Последний раз редактировалось: Golickoff; 25 Мар 2015, 03:23. Причина: Объединение сообщений

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
1) по идее у вас схема с УТ, только реквизиты по другому названы...
т.е. есть номенклатура и у нее 2 реквизита на тему единиц измерения: базоваяединицаизмерения (тип спрссылка.классификаторедизм) и мераизмерения (типа спрссылка.МерыИзмерения). первый спр-к (классификатор...) - не подчинен, второй - подчинен. соответственно владельца надо у второго реквизита менять а не у первого.
2) "Если ЭтаФорма.ЭлементыФормы.МераИзмерения.Значение = "Штуки" Тогда" - объясните ЭТО. "МераИзмерения" на форме что имеет тип Строка?
судя по названию - тип спрссылка.МерыИзмерения
3)
Объект.МераИзмерения = Справочники.МерыИзмерения.НайтиПоНаименованию("Штуки");
по идее надо искать в пределах владельца - номенклатуры, 3ий или 4ый параметр НайтиПоНаименованию()

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
по идее надо искать в пределах владельца - номенклатуры, 3ий или 4ый параметр НайтиПоНаименованию()
На форме ВО есть табло с перечислением, которое не является ссылкой на объекты конфигурации. Т.е. там находятся только "Штуки" и "Вес" и хранятся эти значения в самой ВО. Да, это строка.
Добавлено: 25 Мар 2015, 04:32

В оригинальной конфигурации на форме элемента есть три поля выбора: Мера измерения (СправочникСсылка.МерыИзмерения), Базовая единица (СправочникСсылка.КлассификаторЕдиницИзмерения) и Единица отчётов (я его не трогаю). При выборе на форме ВО меры измерения, устанавливается мера измерения из справочника меры измерения (прошу прощения за масляное масло). После в зависимости от выбранной меры меняется базовая единица, родителя которой я и пытаюсь изменить. Если отключить изменение базовой единицы, она естественно не меняется, но и ошибок никаких не возникает.
Добавлено: 25 Мар 2015, 05:26

*На форме ВО есть поле с перечислением. Поле, а не табло.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Последний раз редактировалось: Golickoff; 25 Мар 2015, 05:26. Причина: Объединение сообщений

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
стандартная УТшная схема.
у базовой единицы (вернее у элемента справочника КлассификаторЕдиницИзмерения) нет никакого владельца.
а вот у меры измерения (вернее у элемента справочника МерыИзмерения) - есть.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Хорошо, я нашёл кусок кода, вызывающий сообщение об ошибке. Вот он
Если БазоваяЕдиницаИзмерения.Владелец <> Ссылка Тогда
    Сообщить("У базовой единицы номенклатуры """ + СокрЛП(Ссылка) + """ неверно указан владелец!",    СтатусСообщения.Важное);
    Отказ = Истина;
КонецЕсли;
А вот кусок моего кода:
Номенклатура = ЭтаФорма.Номенклатура;
Объект = Номенклатура.ПолучитьОбъект();
БазаОбъект = Объект.БазоваяЕдиницаИзмерения.ПолучитьОбъект();
БазаОбъект.Владелец = Номенклатура;
При этом табло показывает, что БазаОбъект.Владелец = Банан и имеет тип СправочникСсылка.Номенклатура, ну а конфигурация выдаёт сообщение
Цитировать
У базовой единицы номенклатуры "Банан" неверно указан владелец!
Я так понимаю, на месте БазаОбъект.Владелец должно быть что-то другое?
Добавлено: 25 Мар 2015, 11:52

Что примечательно, в самой конфигурации базовая единица меняется автоматически при изменении меры измерения вот таким кодом
Если БазоваяЕдиницаИзмерения.Пустая() Тогда
БазоваяЕдиницаОКЕИ = МераИзмерения.БазоваяЕдиницаИзмерения.ЕдиницаПоКлассификатору;
Иначе
Ответ = Вопрос("Изменить базовую единицу?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет);
Если Ответ = КодВозвратаДиалога.Да Тогда
БазоваяЕдиницаОКЕИ = МераИзмерения.БазоваяЕдиницаИзмерения.ЕдиницаПоКлассификатору;
КонецЕсли;
КонецЕсли;
Родителей здесь ничто не трогает и никаких ошибок не возникает. По сути, я делаю то же самое, но появляется ошибка. Откуда она -- ума не приложу.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Последний раз редактировалось: Golickoff; 25 Мар 2015, 11:52. Причина: Объединение сообщений

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
значит НЕстандартная УТшная схема )
надо конфигу смотреть, как именно справочники настроены.
а то модуль ясновидения сломался.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Я могу скинуть конфигурацию, но конфигурация может попросить ключ. Кидать?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.


Теги: родитель 
 

Как вызвать "Анализ субконто" из справочника "Контрагенты"

Автор EnigManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6500
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 4201
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 638
Последний ответ 10 Май 2017, 20:44
от ilnur75
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2039
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Работа с формой Справочника "Физ.Лица" в ЗУП 2.5

Автор Митя_Просто_МитяРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3894
Последний ответ 15 Дек 2011, 00:04
от Vit1501

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
157 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
47 Сообщений
oleg-x
44 Сообщений
andron81_81
44 Сообщений
BuhRust
33 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 254
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal