Имя: Пароль:
1C
1С v8
Поможите люди добрые с КД2.. Как строку в свойстваизначения запихать
0 AddinAQ
 
24.12.12
16:55
Коротко о себе:
Чуть-чуть ковыряю 8.2 платформу (УТ), первый раз в глаза вижу КД, семерку знаю неплохо.

Коротко о задаче:
Переношу данные из самописной ТиС 7.7 в УТ типовую. Справочник Контрагенты в 7 имеет реквизит тип "Строка", в типовой УТ такого реквизита нет, и поэтому данные решено перенести в свойства с таким же названием, как и название реквизита в 7.

Перерыл кучу материала, но толи я какой-то отсталый, толи еще какие-то проблемы в развитии были, но не могу я победить эту шайтан-машину (КД), если кто пошагово объяснит, буду много благодарен.
1 leonidkorolev
 
24.12.12
17:04
Вариантов много можно предложить. Я предложу один как бы я сделал.

Добавляем ПКО для РС ЗначенияСвойств (или как он там называется). У этого ПКО также необходимо настроить ПКС для всех измерений и ресурсов. У них может тоже потребуется указать ПКО.  У ПКС строкового типа указываем это ПКО (для РС ЗначенияСвойств). Там еще придется создать в ПКС исходящие данные или значению присвоить структуру.

Если КД не видел, то наверно не поймешь что я написал. Но проще некуда. Читай основы, потом вернись на форум.
2 AddinAQ
 
24.12.12
17:16
(1) Читаю, обложился кучей методичек. Но почему-то такой вопрос не осветили, думаю он слишком прост, а я просто туплю :)

Реквизит в 7 называется CASID (8знаковая строка), в УТ в в карточке контрагента(в режиме предприятия) на закладке свойства добавил свойство CASID.

В КД создаю ПКО для этого реквизита - источник CASID. В получателе непонятно что выставлять, там можно только конкретный реквизит указать.
3 AddinAQ
 
24.12.12
18:01
Кажется начинаю понимать (1) :)
Создал вручную ПКО "СвойстваКонтрагентов"

ОбъектИсточник: СправочникСсылка.Контрагенты
ОбъектПриемник: РегистрСведенийЗапись.ЗначенияСвойствОбъектов

Добавил три свойства этого регистра:

Источник (получить из входящих), Приемник - Объект, ПКО Контрагенты
Источник CASID, Приемник - Значение, безПко.
Источник (получить из входящих), Приемник - Свойство, без ПКО (тут фиксированная строка CASID, хз пока как ее воткнуть)

Правильно иду?
4 Aleksey
 
24.12.12
20:01
(3) Нет, Лучше выгрузку по правилу заюзать. ЗАчем тебе каждый раз ВСЕ контрагенты?
5 ilpar
 
24.12.12
20:05
Если УТ 10.3, то возможно лучший вариант сделать -таки реквизит )
6 ilpar
 
24.12.12
20:06
УТ 11 уже можно доп. реквизитами.
7 AddinAQ
 
24.12.12
23:39
(5) (6) Почему в 10.3 лучше реквизит ? Там их просто много, не хочется захламлять форму как в 7.7.

У них несколько обменов с разными поставщиками у каждого свои ID на наших контрагентов и товары. Хранилось раньше в реквизитах, но в 8 решил запихать в Свойства
8 acsent
 
24.12.12
23:45
выгрузитьпоправилу(структурасданными,,,,,,имяпкорегистрсведений)
9 acsent
 
24.12.12
23:46
хотя (3) тоже вариант
10 AddinAQ
 
24.12.12
23:51
а (5) кто-нибудь прокомментирует? А то может зря себе мозг сношаю :) ?
11 AddinAQ
 
25.12.12
02:38
Текс.. С вариантом (3) разобрался, получилось, спасибо всем.

Для другой задачи решил попробовать (4) и (8), показалось меньше геморроя. В 7.7 есть строковый реквизит контрагента - Юридический адрес, в УТ соответственно снова РС.

Создал ПКО КонтактнаяИнформация для значений регистра сведений, выставил свойства без источника, создал ПВД с произвольным алгоритмом выборки

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

Клиенты=СоздатьОбъект("Справочник.Контрагенты");
Клиенты.ВыбратьЭлементы();
Пока Клиенты.ПолучитьЭлемент()=1 Цикл
   Если Клиенты.ЭтоГруппа()=1 Тогда
       Продолжить;
   КонецЕсли;
ВыборкаДанных.НоваяСтрока();
ВыборкаДанных.Объект=Клиенты.ТекущийЭлемент();
ВыборкаДанных.Представление=Клиенты.ЮридическийАдрес;
ВыборкаДанных.Вид="ЮридическийАдрес";
ВыборкаДанных.Тип="ПеречислениеСсылка.ТипыКонтактнойИнформации.Адрес";
КонецЦикла;
ВыгрузитьПоПравилу(ВыборкаДанных,,,,"КонтактнаяИнформация");

Пытаюсь выгрузить - висим :( Шо не так, подскажите, пожалуйста?
12 AddinAQ
 
25.12.12
02:40
Кажется понял - в после выгрузки надо было :)
13 AddinAQ
 
25.12.12
02:46
не хочет блин ничего выгружать - 0 объектов :(
Лан, пойду спать утро вечеро мудренее
14 AddinAQ
 
25.12.12
02:47
Или вместо
ВыборкаДанных.Объект=Клиенты.ТекущийЭлемент();
попробовать
ВыборкаДанных.Объект=Клиенты.Наименование;
?
15 vicof
 
25.12.12
05:08
(14) Это ты в семерке перекодировал
16 ilpar
 
25.12.12
07:17
Все просто, типовые отчеты в 10.3 написаны без учета свойств.

А если реквизит у справочника, отобрать по нему затруднений ни в одном отчете не возникнет.
17 ilpar
 
25.12.12
07:18
2) Выкинутый на форму реквизит значительно нагляднее где-то там спрятанного свойства.
18 ilpar
 
25.12.12
07:20
по структуре в (7) возможно и стоит свойства использовать.
19 AddinAQ
 
25.12.12
10:14
(15) так если выгрузка из 7ки же и идет.. Соответственно на семерошном языке пишу в после выгрузки. Или не так?
20 cw014
 
25.12.12
10:44
Я тут наверное припозднился, да и не всю ветку осилил... А что за реквизит такой с типом "Строка", что он так остро необходим в УТ?
21 Йохохо
 
25.12.12
10:45
ВыборкаДанных.Тип="Адрес";

// ВыгрузитьПоПравилу(ВыборкаДанных,,,,"КонтактнаяИнформация"); не нужно

"У них несколько обменов с разными поставщиками у каждого свои ID на наших контрагентов и товары. Хранилось раньше в реквизитах, но в 8 решил запихать в Свойства" - регистр сведений НоменклатураКонтрагентов
почему типовые не возьмешь правила?
22 Йохохо
 
25.12.12
10:47
(20) коды синхронизации с поставщиками
23 AddinAQ
 
25.12.12
15:26
(21) не подойдут типовые никак .. Исходная база можно сказать самописная, настолько сильные отличия от типовой (крутится постоянно с 2000 года)..
24 AddinAQ
 
25.12.12
15:27
(21) если укажу

ВыборкаДанных.Тип="Адрес";

Нужно ПКО создавать для этого перечисления, с поиском по наименованию.
25 AddinAQ
 
25.12.12
15:28
(24) Знак вопроса забыл :)
26 Йохохо
 
25.12.12
15:38
под рукой только ТИС-КА 1.1, там контактная информация есть
кцкв
Таб = СоздатьОбъект("таблицаЗначений");
Таб.НоваяКолонка("Объект");
Таб.НоваяКолонка("Вид");
Таб.НоваяКолонка("Тип");
Таб.НоваяКолонка("Представление");

//контрагенты
СпрКонтрагенты = СоздатьОбъект("Справочник.Контрагенты");
СпрКонтрагенты.ВыбратьЭлементы();
Пока СпрКонтрагенты.ПолучитьЭлемент()=1 Цикл
   Если СпрКонтрагенты.ЭтоГруппа()=1 Тогда
       Продолжить;
   КонецЕсли;
   Если пустоеЗначение(СпрКонтрагенты.юрФизЛицо)=1 Тогда
       продолжить;
   КонецЕсли;
   
   Если ПустоеЗначение(СпрКонтрагенты.юрФизЛицо.ЮрАдрес)=0 Тогда
       Таб.НоваяСтрока();
       Таб.Объект = СпрКонтрагенты.ТекущийЭлемент();
       Таб.Вид = "ЮрАдресКонтрагента";
       Таб.Тип = "Адрес";
       Таб.Представление = глПредставлениеАдреса(СпрКонтрагенты.ЮрФизЛицо.ЮрАдрес);
   КонецЕсли;
   Если ПустоеЗначение(СпрКонтрагенты.юрФизЛицо.ФактАдрес)=0 Тогда
       Таб.НоваяСтрока();
       Таб.Объект = СпрКонтрагенты.ТекущийЭлемент();
       Таб.Вид = "ФактАдресКонтрагента";
       Таб.Тип = "Адрес";
       Таб.Представление = глПредставлениеАдреса(СпрКонтрагенты.ЮрФизЛицо.ФактАдрес);
   КонецЕсли;
   Если ПустоеЗначение(СпрКонтрагенты.юрФизЛицо.Телефоны)=0 Тогда
       Таб.НоваяСтрока();
       Таб.Объект = СпрКонтрагенты.ТекущийЭлемент();
       Таб.Вид = "ТелефонКонтрагента";
       Таб.Тип = "Телефон";
       Таб.Представление = СпрКонтрагенты.ЮрФизЛицо.Телефоны;
   КонецЕсли;
КонецЦикла;
27 Йохохо
 
25.12.12
15:41
(24) нет
еще кусок тебе нужен )
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку()=1 Цикл
   ВходящиеДанные = СоздатьОбъект("СписокЗначений");
   ВходящиеДанные.Установить("Объект",Таб.Объект);
   ВходящиеДанные.Установить("Тип",Таб.Тип);
   ВходящиеДанные.Установить("Вид",Таб.Вид);
   ВходящиеДанные.Установить("Представление",Таб.Представление);
   
   ВыгрузитьПоПравилу(,, ВходящиеДанные,, "КонтактнаяИнформация");
КонецЦикла;
28 AddinAQ
 
25.12.12
15:57
(26), (27) все вставить в после выгрузки ?
в ПКС на всех четырех получить из входящих данных?
29 Йохохо
 
25.12.12
16:13
это пвд
да
30 AddinAQ
 
25.12.12
16:40
(29) Блин я наверное туплю.. Выручайте плиз, с этим разберусь и по аналогии остальное сделаю.

1. Сделал ПКО "Контактная информация", источник - пусто, приемник - РегистрСведенийЗапись.КонтактнаяИнформация
2. В нем сделал 4 ПВС: Объект, Представление, Вид, Тип, источник пусто, приемник соответствующий РС. Везде поставил галку получать из входящих данных.
3.Создал ПВД "Адреса" по правилу "Контактная информация", объект выборки - пусто, способ отбора данных - Произвольный алгоритм.
4. В этом ПВД в "Перед выгрузкой" вставил код слив (26) + (27), и исправил имена реквизитов как в моей базе + поставил перед выбратьстроки() выбратьстроку() чтобы увидеть что там набирается.
5. Сохранил правила и исправил ert выгрузки на предложенный.
6. Начинаю выгружать из 7ки поставив галочку выгрузки только напротив этого правила.
7. Получаю ответ:

Начало выгрузки:   25.12.12 16:30:02
Выгружено объектов:   0
Окончание выгрузки:   25.12.12 16:30:02

8. ТЗ не вылезло, т.е. обработчик не вызвал эту процедуру.

Что может быть не так?.. Ну кроме того что руки не оттуда :)
31 Йохохо
 
25.12.12
16:50
ПередОбработкой
"2. .. приемник соответствующий РС" - описка?
дай почту, отправлю типовые правила ТИС-КА, будет, что посмотреть хоть. КА ~= УТ 10
32 AddinAQ
 
25.12.12
16:53
33 AddinAQ
 
25.12.12
17:01
(31) не совсем вопрос понял.
Наверное я неправильно сформулировал:
Приемник - измерения РС
34 Йохохо
 
25.12.12
17:05
ушло ^^
в кд на удивление хорошая справка, кнопни "Информация по обработчикам" в форме ПВД
35 AddinAQ
 
25.12.12
17:16
(34) Спасибо :)
Действительно удобная кнопка .. Пихать надо было в перед обработкой, а не перед выгрузкой :))
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.