Имя: Пароль:
1C
1C 7.7
v7: Конвертация реквизита в дополнительный реквизит.
0 DenYuliya
 
26.10.17
18:31
Добрый вечер. Подскажите пожалуйста, кто знает? У меня перенос из ТиС (7.7) в Комплексную Автоматизацию 2. Но в КА справочники "Партнеры и "Контрагенты абсолютно идентичны таким же в УТ 11.
Переносимые реквизиты булево и в источнике (дописанные реквизиты спр. Контрагенты), и в Приемнике (доп.реквизиты в спр. Партнеры).

Скачала типовые правила переноса с ТиС в УТ 11.
Там есть ПКГС для доп реквизитов, "ПКГС_Контрагенты_Партнеры_ДополнительныеРеквизиты_ПередОбработкойВыгрузки_7_20"


Если ТипЗначенияСтр(ВходящиеДанные) <> "СписокЗначений" Тогда
    ВходящиеДанные = СоздатьОбъект("СписокЗначений");
КонецЕсли;

ВходящиеДанные.Установить("ВидСправочника", "СвойстваКонтрагентов");
ВыгрузитьДополнительныеРеквизиты();


ВыгрузитьДополнительныеРеквизиты - это алгоритм выгрузки.

КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
КоллекцияОбъектов.НоваяКолонка("Значение");
КоллекцияОбъектов.НоваяКолонка("Свойство");

// Не допреквизиты, если они не используются
Если (ПустоеЗначение(Константа.ВидСвойстваКонтрагентов) = 1)
    И (ПустоеЗначение(Константа.ВидСвойстваНоменклатуры) = 1)
    ИЛИ (Источник.ЭтоГруппа() = 1) Тогда
    Возврат 0;
КонецЕсли;

ВидСправочника = ВходящиеДанные.Получить("ВидСправочника");

ТабДополнительныеРеквизиты = ?(ВидСправочника = "СвойстваНоменклатуры",
                               Параметры.ДополнительныеРеквизитыНоменклатуры,
                               Параметры.ДополнительныеРеквизитыКонтрагентов);

Если ТабДополнительныеРеквизиты = -1 Тогда
    
    ТабДополнительныеРеквизиты = СоздатьОбъект("ТаблицаЗначений");
    ТабДополнительныеРеквизиты.НоваяКолонка("Номенклатура");
    ТабДополнительныеРеквизиты.НоваяКолонка("КоллекцияОбъектов");

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(СвойстваНоменклатурыКонтрагентов)
    |ВидСвойства = Справочник.#.ВидСвойства;
    |ЗначениеСвойства = Справочник.#.ЗначениеСвойства;
    |Владелец = Справочник.#.Владелец;
    |Функция Счётчик = Счётчик();
    |Группировка Владелец упорядочить по Владелец.Код без групп;
    |Группировка ВидСвойства упорядочить по ВидСвойства.Код без групп;
    |Группировка ЗначениеСвойства без групп;
    |"//}}ЗАПРОС
    ;

    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#", ВидСправочника);
    
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка(1) = 1 Цикл
        
        ТабДополнительныеРеквизиты.НоваяСтрока();
        ТабДополнительныеРеквизиты.Номенклатура = Запрос.Владелец;
        ТабДополнительныеРеквизиты.КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
        ТабДополнительныеРеквизиты.КоллекцияОбъектов.НоваяКолонка("Значение");
        ТабДополнительныеРеквизиты.КоллекцияОбъектов.НоваяКолонка("Свойство");
        
        Пока Запрос.Группировка(2) = 1 Цикл
            Пока Запрос.Группировка(3) = 1 Цикл
                
                ТабДополнительныеРеквизиты.КоллекцияОбъектов.НоваяСтрока();
                ТабДополнительныеРеквизиты.КоллекцияОбъектов.Значение    = Запрос.ЗначениеСвойства;
                ТабДополнительныеРеквизиты.КоллекцияОбъектов.Свойство    = Запрос.ВидСвойства;
                
                Прервать;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
КонецЕсли;

Если ВидСправочника = "СвойстваНоменклатуры" Тогда
    Параметры.ДополнительныеРеквизитыНоменклатуры = ТабДополнительныеРеквизиты;
Иначе
    Параметры.ДополнительныеРеквизитыКонтрагентов = ТабДополнительныеРеквизиты;
КонецЕсли;

НомерСтроки = 0;
Если ТабДополнительныеРеквизиты.НайтиЗначение(Источник, НомерСтроки, "Номенклатура") = 1 Тогда
    КоллекцияОбъектов = ТабДополнительныеРеквизиты.ПолучитьЗначение(НомерСтроки, "КоллекцияОбъектов");
КонецЕсли;

Так же для ПКГС имеются 2 ПКС:
ПСК "Свойство" , с пустым источником и приемником "Свойство" (тип ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения).
ПКС "Значение". так же с пустым Источником и Приемником "Значение" (тип множественный, ссылки на справочники, строка, булево и т.д)

В ПКС обработчики не заполнены.

В то же время погуглила - народ в инете этот алгоритм нигде не упоминает, говорят, что надо идти таким путем:

1) надо создать в ПКГС ТаблицуЗначений:

ТЗ= Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Свойство");
ТЗ.Колонки.Добавить("Значение");
СтрокаТЗ = КоллекцияОбъектов.Добавить();

2) Потом для реквизитов "Свойство" и "Значение"сделать ПКС без источника, но с приемником.
3) для каждого приемника программно указать, какие значения они должны принимать.

В общем я запуталась... Можно несколько вопросов по пунктам? Извиняюсь, что так много, пытаюсь как-то структурировать все в голове...
1. Зачем тогда нужен сложный вариант с использованием Алгоритма в типовых правилах "ТиС - УТ11"?
Мне метод с созданием ТЗ и дальнейшим созданием ПКС для "Свойства" и "Значения" кажется более удобным, но может я что-то не понимаю просто?
2. Почему все на форумах советуют "Источник" оставлять пустым, заполняя только "Приемник"? Разве не лучше в качестве Источника указать реквизит в "Источнике" (Например, есть у меня рекв. "МеткаНедоверия", тип Булево), а в Приемнике осуществлять поиск по наименованию доп. Реквизита (то же "МеткаНедоверия")? И я правильно понимаю, что эта часть - выполняется в ПКС для "Свойства", в обработчике "ПередВыгрузкой"?
3. Теперь как-то заполнять ПКС для "Значения" надо...
Можно ли как-то из серии, правильно?
Значение = Источник.МеткаНедоверия;
4. Это надо прописывать отдельно для каждого доп.реквизита? поиск по наименованию, с указанием наименования, и дальнейшее заполнение значения.


В общем я просто не понимаю, что именно делать и верный ли у меня ход мыслей...Прокомментируйте? если бы хоть мааленький пример где-нибудь посмотреть, было бы вообще волшебно.
1 toypaul
 
гуру
26.10.17
19:17
я делал всегда по варианту

"надо создать в ПКГС ТаблицуЗначений: "

так проще. тайный смысл манипуляций в типовых правилах мне непостижим
2 SleepyHead
 
гуру
27.10.17
04:38
(1) Это претензия на универсальность, скорее всего. В коде анализируется, используеются ли допреквизиты, и если используются, то выгружаются.

По всей видимости, такой код для использования в различных конфигурациях.
3 DenYuliya
 
27.10.17
09:16
(1) А ПКС надо создавать отдельно для каждого доп.реквизита?
Отдельно ПКС Свойсво + ПКС Значение для Доп.реквизита1, потом для ДопРеквизита2 и т.д?

В итоге, если у меня 20 доп.реквизитов, получится в 1 ПКГС 20 ПКС. Верно?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.