Добрый день.
В 1С8 УПП в справочнике номенклатура есть свойство "Код 1С 7" созданное с типом план видов характеристик, тоесть такое виртуальное, значения сами хранятся в регистре сведений ЗначенияСвойствОбъектов. Мне нужно из 1С 7.7. переносить документы и номенклатуру искать по этому свойству "Код 1С 7". Помогите пожалуйста с правилами
Через КД и свойство - геморно. Проще добавить реквизит в справочник и прописать из свойства.
При прямой загрузке (через олю) типа так:
Ф
ункция ПолучитьКод1с(Элемент,СвПВХ)
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Значение Как Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Объект = &Объект
| И ЗначенияСвойствОбъектов.Свойство = &Свойство";
Запрос.УстановитьПараметр("Объект",Элемент);
Запрос.УстановитьПараметр("Свойство",СвПВХ);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() > 0 Тогда
Выборка.Следующий();
Возврат Выборка.Значение;
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Функция ПолучитьСвойствоПВХ(Перекл,НаименованиеСвойства = "Код1С7")
Если Перекл = 1 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты;
ИначеЕсли Перекл = 2 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура;
ИначеЕсли Перекл = 3 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_НоменклатурныеГруппы;
ИначеЕсли Перекл = 7 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Склады;
ИначеЕсли Перекл = 8 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ФизическиеЛица;
ИначеЕсли Перекл = 10 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов;
ИначеЕсли Перекл = 12 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ОсновныеСредства;
ИначеЕсли Перекл = 13 Тогда
Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Подразделения;
иначе
Возврат Ложь;
КонецЕсли;
Отбор = Новый Структура();
Отбор.Вставить("Наименование",НаименованиеСвойства);
ВыборкаПВХ = ПланыВидовХарактеристик.СвойстваОбъектов.Выбрать(,Отбор);
флНайдено = Ложь;
Пока ВыборкаПВХ.Следующий() Цикл
Если ВыборкаПВХ.НазначениеСвойства = Назначение Тогда
флНайдено = Истина;
Возврат ВыборкаПВХ.Ссылка;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
план видов характеристик для поиска по Коду в КД совершенно ни при чем. Поиск номенклатуры в КД по-умолчанию устанавливается по Коду. Для более точного поиска установите поиск по нескольким полям: Код, Наименование, ПолноеНаименование, Родитель, Артикул... ну и другие идентификаторы, которые у вас присутствуют в базе.
У меня выхода другого нет. Внедренцы запихнули код 1С 7 в свойство номенклатуры 1С8 УПП. По другим параметрам искать не получится так как и артикул и наименование могут не совпадать. И вот как теперь мне искать по этому свойству?
Из 1С 7.7. в ПКС Источник реквизит Код1С8 - Приемник Свойство номенклатуры Код 1С 7. Вот как-то так нужно. Обратно передавать проще, а вот в свойство и еще и искать по свойству как
Я бы сделал в НОменклатуре реквизит Код77, перенес коды из Свойств и искал по нему.
А Через свойства надо ПередЗагрузкой искать свойство, определять объект -короче гемор.
Значение = СокрЛП(Источник.ПолныйКод());
Или Код, если он уникален.
Подсказали мне часть вот такой штуки. Передавать произвольный параметр - в нашем случае код 1С 7.7., а обрабатывать в обработчике Поля поиска и вот там искать. Не могу только понять как мне в обработчике Поля поиска получить выгружаемый объект
Вот например я передаю так:
При выгрузке
ВремПриемник = Приемник;
ВремИД77 = Источник.Код;
Если ЗначениеЗаполнено(ВремИД77) Тогда
СтандартнаяОбработка = Ложь;
УзелСсылки = СоздатьУзел("Ссылка");
УстановитьАтрибут(УзелСсылки, "НеСоздаватьЕслиНеНайден", Истина);
ВремУзелИД = СоздатьУзел("id77");
УстановитьАтрибут(ВремУзелИД, "id", ВремИД77);
ДобавитьПодчиненный(УзелСсылки, ВремУзелИД);
ДобавитьПодчиненный(ВремПриемник, УзелСсылки);
КонецЕсли;
СвойствоКод = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00000000002");
НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписейЗначенияСвойств.Отбор.Свойство.Установить(СвойствоКод);
НаборЗаписейЗначенияСвойств.Прочитать();
Ну через ПоляПоиска[НазваниеПоля] должно искать
Я всегда юзаю при загрузке "Попытка-Исключение" в таких ситуациях, чтобы выловить что и куда подставлять
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua