Имя: Пароль:
1C
1С v8
Конвертация данных из строки в табличную часть.
,
0 ТутЯ
 
18.12.12
10:17
Подскажите, пожалуйста, как выполнить такой перенос данных.

В 1с7.7 есть справочник "Контрагенты" с реквизитами "Адрес", "ЮрАдрес", "Телефон".
В 1с8.2 есть справочник "Контрагенты" с табличной частью "Контактная информация", где реквизиты "Тип"(Перечисление), "Вид"(Справочник с предопределенными элементами), "Представление".

На форуме нашла
v8: Конвертация данных, подчиненный справочник в табличную часть справочника.


Написала для примера КПС

Источник - получить значение из входящих данных
Приемник - КонтактнаяИнформация
В "ПередВыгрузкой" код:

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

КоллекцияОбъектов.НоваяСтрока();
КоллекцияОбъектов.Тип  = "ЮрАдрес";
КоллекцияОбъектов.Представление = Источник.ЮрАдрес;

Вопросы:
1) как нарисовать тип и вид, если мы выгружаем из 7.7?
2) как обработать полученную ТЗ?
3) или это делается не так?
1 floody
 
18.12.12
10:23
а фото то где
2 lEvGl
 
гуру
18.12.12
10:27
(1) Achtung!!!
3 Alex S D
 
18.12.12
10:28
(1)+1
4 Lokli
 
18.12.12
10:29
Хм... Вообще-то в 8.2 обычно используется не табличная часть, а регистр сведений. Ну да ладно, пока это не важно.

В указанной вами тебе есть очень хороший пост №2. Цитирую: "Блин, наверно без прочтения мануалов нахрапом не взять, туго понимаю механизм. Пойду читать."

(2), (3)Сами вы ахтунг. :))) Пишет, то "нашла", "написала".
5 Alex S D
 
18.12.12
10:30
(4) сам ты ахтунг, я тут причем)
6 Alex S D
 
18.12.12
10:31
(4) ты плохо знаешь например ут 11 - там КИ в таб. части
7 floody
 
18.12.12
10:31
народ похоже вообще темы не читает, тупо смотрит сразу пол, если "м", переходят к следующей)
8 Rlogin
 
18.12.12
10:32
(4) Топикстартер палится "Нашла.." "Написала .."
9 ТутЯ
 
18.12.12
10:53
(4) А сами читали? Туго и плохо знаю, поэтому и спрашиваю!
(8) пол женский, фото показывала
10 ТутЯ
 
18.12.12
10:54
Спросить быстрее чем прочитать...
11 Lokli
 
18.12.12
11:14
Я бы сделал так:
У ПКО Номенклатуры создал бы группу свойств аналогичную ТЧ приёмника. А в обработчике события "ГруппаСвойств.Перед обработкой" заполнял бы предопределённую переменную "Входящие данные".
12 ТутЯ
 
18.12.12
11:20
Спасибо. Ответ найден и вопрос закрыт.
13 Lokli
 
18.12.12
11:21
Ну дык поделись своим вариантом решения. Интересно же.
14 ТутЯ
 
18.12.12
11:34
15 ТутЯ
 
18.12.12
11:52
т.к. код писать нужно 1с77, то получается так:
   КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
   КоллекцияОбъектов.НоваяКолонка("Тип");
   КоллекцияОбъектов.НоваяКолонка("Вид");
   КоллекцияОбъектов.НоваяКолонка("Представление");
       
   КоллекцияОбъектов.НоваяСтрока();
   КоллекцияОбъектов.Тип  = "Адрес";
   КоллекцияОбъектов.Представление = Источник.Адрес;
   
   КоллекцияОбъектов.НоваяСтрока();
   КоллекцияОбъектов.Тип  = "ЮрАдрес";
   КоллекцияОбъектов.Представление = Источник.ЮрАдрес;
16 ТутЯ
 
18.12.12
11:52
Остается прикрутить только "Вид", а так работает.
17 Aprobator
 
18.12.12
11:55
да Вид вообще прикрутить раз плюнуть. Там же ссылка на предопределенные элементы. Тупо строкой имя предопределенного значения из конфигуратора. Даже правило конвертации значения рисовать не надо.
18 ТутЯ
 
18.12.12
12:03
Спасибо. Пробую, тестирую
19 ТутЯ
 
21.12.12
15:33
все получилось, но возник другой вопрос:


В справочнике Номенклатура 1с77 есть поля
склад
стеллаж
полка
ячейка

в 1с8 в справочнике "Номенклатура" есть таличная часть "Адресное хранение"
с реквизитами:
склад
ЗоныСкладов
сталлажи
полки
ячейки


где
"Ячейки" - справочник, подчиненный справочнику "Полки"
"Полки" подчинен справочнику "Сталлажи"
"Сталлажи" подчинен справочнику "Зоны складов"
"Зоны складов" подчинен справочнику "Склады"

Как реализовать перенос с подчиненными?

Как в предыдущем вопросе для ПКО Номенклатура->Номенклатура
создала ПКГС      ...- >"Адресное хранение" (получать из входящих данных)
в обработчике "Перед обработкой" код

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

КоллекцияОбъектов.НоваяСтрока();
КоллекцияОбъектов.Склад  = Источник.Склад;
КоллекцияОбъектов.Зона  = "Основная";
КоллекцияОбъектов.Стеллаж = Источник.Стеллаж;
КоллекцияОбъектов.Полка  = Источник.Полка;
КоллекцияОбъектов.Ячейка = Источник.Ячейка;

Подскажите, плиз, как создать подчинение?
20 Aprobator
 
21.12.12
15:48

ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить("АдресноеХраниние", КоллекцияОбъектов);
21 Aprobator
 
21.12.12
15:49
ну и у адресных данных галку взвести "Получать из внешних данных".
22 Aprobator
 
21.12.12
15:50
код добавить в том же обработчике только чуть ниже. И я бы не стал использовать имя переменной КоллекцияОбъектов.
23 ТутЯ
 
21.12.12
15:50
Что дает (20)?
24 Aprobator
 
21.12.12
15:51
(23) указываешь имя подчиненной коллекции объектов. В данно случае ТЧ "АдресноеХранение".
25 Aprobator
 
21.12.12
15:52
а ты в ПКГС напрямую все делаешь.
26 Aprobator
 
21.12.12
15:52
тогда соррь
27 ТутЯ
 
21.12.12
15:53
внутри группы добавлены строчки
28 Aprobator
 
21.12.12
15:53
хотя при данном коде галка получать из входящих данных не нужна, поскольку ты явно заполняешь состав коллекции.
29 ТутЯ
 
21.12.12
15:54
да, и там же и правила нужно нарисовать как я понимаю...
30 Aprobator
 
21.12.12
15:54
(29) нет - ссылка на правила указывается у реквизитов внутри группы
31 ТутЯ
 
21.12.12
15:55
я про это
32 Aprobator
 
21.12.12
15:57
а все понял про  что ты
33 Aprobator
 
21.12.12
16:00
внутри группы у реквизитов делаешь так:
Для Ячейки к примеру

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

и в ПКО куда это передается для владельца ставишь галку Получать из входящих данных.
34 Aprobator
 
21.12.12
16:00
также в перед выгрузкой.
35 ТутЯ
 
21.12.12
16:02
Смущает текст "ПолкаВладелец"
36 Aprobator
 
21.12.12
16:04
(35) ну пропиши просто Источник.Владелец ). Я просто к примеру показал.
37 Aprobator
 
21.12.12
16:05
тьфу Источник.Полка.
38 acsent
 
21.12.12
16:05
(20) зачем такой изврат?
39 Aprobator
 
21.12.12
16:05
если что я фотки еще не видел )
40 Aprobator
 
21.12.12
16:05
(38) да косякнул чего то )
41 Aprobator
 
21.12.12
16:07
+(40) у меня эта КД просто мозг выела. Достали эти переносы. Механизм КД сам по себе - чудесный. Но блин, как тяжко разгребать кривые данные и "выпрямлять" их для переноса.
42 acsent
 
21.12.12
16:08
(38) хотя в типовых правилах такое сплошь и рядом. Но зачем
43 Aprobator
 
21.12.12
16:11
(42) в типовых хз зачем. Я просто такие вещи прописываю не в ПКГС, а в ПКО (вот по привычке тут и ляпнул). Потом чисто удобнее лазить и смотреть где и что заполнял. Сразу в объект залез и там сразу все видишь. А не каждое ПКГС ковырять отдельно еще.
44 ТутЯ
 
21.12.12
16:11
фото добавила
45 Aprobator
 
21.12.12
16:13
помогло?
46 ТутЯ
 
21.12.12
16:15
Ошибка исполнения обработчика:  ПКС_ПередВыгрузкой_Номенклатура_АдресноеХранение_Стеллаж_Реквизит16
 - Поле агрегатного объекта не обнаружено (Зона)
47 Aprobator
 
21.12.12
16:16
галка у ПКГС получать из входящих данных убрана?
48 ТутЯ
 
21.12.12
16:18
и с галкой и без галки ошибка одинаковая
49 Aprobator
 
21.12.12
16:21
ну дык там надо:

ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Владелец", "Основная");
[/С]
50 Aprobator
 
21.12.12
16:21
а не Источни.Зона ))))
51 Aprobator
 
21.12.12
16:21
Источник.Зона ))))
52 ТутЯ
 
21.12.12
16:23
дада, щас пробую
53 ТутЯ
 
21.12.12
16:35
ЗоныСкладов пустое наименование
Сталлажи не создалась запись
54 Aprobator
 
21.12.12
16:44
значит что то не так в ПКО для свойств стеллажи и Зоны складов.
55 ТутЯ
 
21.12.12
16:48
Зону складов заполнила)
56 ТутЯ
 
21.12.12
16:50
Стеллаж не записывает.
57 Aprobator
 
21.12.12
16:50
))))ладно - дальше сама разберешься. Пшел работать. Тоже КД ковыряю.
58 Aprobator
 
21.12.12
16:51
(56) смотри отладчиком - почему. Правило конвертации не забыла указать?
59 ТутЯ
 
21.12.12
16:51
Спасиб.)
60 Stim
 
21.12.12
17:00
охх,ёё. посмотрел фото, сразу забыл, что хотел написать, чтобы помочь..
61 ТутЯ
 
21.12.12
17:02
Вопрос актуальный еще. Настроить ПКО для Стеллажей)
62 Stim
 
21.12.12
17:03
ради Бога, поставьте поскромнее фото..
63 ТутЯ
 
21.12.12
17:06
Тогда в другой раз фото. Только что в той не скромного...
64 ТутЯ
 
04.01.13
14:01
Если как в v8: Конвертация данных. Договор в контрагентах. нарисовать текст, то не работает
//
ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Владелец", Источник.Склад);
ИсходящиеДанные.Установить("Зона", "Основная");
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ЗоныСкладов");

//  
ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Владелец", "Основная");
ИсходящиеДанные.Установить("Стеллаж", Источник.Стеллаж);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"Стеллажи");

//
ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Владелец", Источник.Стеллаж);
ИсходящиеДанные.Установить("Полка", Источник.Полка);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"Полки");

//
ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Владелец", Источник.Полка);
ИсходящиеДанные.Установить("Ячейка", Источник.Ячейка);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"Ячейки");
65 ТутЯ
 
04.01.13
14:13
Связку Склад-Зоны складов создает, а дальше никак.
В табличной части элементы заполняются, но они без подчинения.
66 Aprobator
 
04.01.13
19:24
Может правила для владельцев не понимала или ссылки на них?
67 Aprobator
 
04.01.13
19:24
Не прописала?
68 ТутЯ
 
04.01.13
19:25
все получилось. Щас напишу как сделала.
69 Aprobator
 
04.01.13
19:28
Там главное вроде владельца первым создать.
70 ТутЯ
 
04.01.13
19:36
ПКГС
...-> Адресное хранение
Перед обработкой

Если ПустоеЗначение(Источник.Склад)=1 Тогда
   Склад = Константа.ОснСклад;
Иначе      
   Склад = Источник.Склад;
КонецЕсли;

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

   КоллекцияОбъектов.НоваяСтрока();
   КоллекцияОбъектов.Склад  = Склад;
   КоллекцияОбъектов.Зона  = "Основная";
   КоллекцияОбъектов.Стеллаж = Источник.Стеллаж;
   КоллекцияОбъектов.Полка  = Источник.Полка;
   КоллекцияОбъектов.Ячейка = Источник.Ячейка;

Внутри группы
1. источник пустой- приемник "Склад" правило конвертации "Склады", короче все просто
2. источник пустой-приемник "Зона" правило "ЗоныСкладов"
в ПередВыгрузкой код
Если ПустоеЗначение(Источник.Склад)=1 Тогда
   Склад = Константа.ОснСклад;
Иначе      
   Склад = Источник.Склад;
КонецЕсли;


ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Владелец", Склад);
ИсходящиеДанные.Установить("Зона", "Основная");
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ЗоныСкладов");

ПКО "ЗоныСкладов"
источник пустой- приемник "СправочникСсылка.ЗоныСкладов"
1) ПКС "Наименование" поиск по полю
источник пустой(получить значение из входящих данных)
в ПРиВыгрузке код
Значение = ВходящиеДанные.Получить("Зона");

2) ПКС "Владелец" поиск по полю
источник пустой(получить значение из входящих данных)
в ПРиВыгрузке код
Значение = ВходящиеДанные.Получить("Владелец");
короче тоже все просто


3.источник пустой-приемник "Стеллажи"
в ПередВыгрузкой код
Если ПустоеЗначение(Источник.Склад)=1 Тогда
   Склад = Константа.ОснСклад;
Иначе      
   Склад = Источник.Склад;
КонецЕсли;

ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Склад", Склад);
ИсходящиеДанные.Установить("Владелец", "Основная");
ИсходящиеДанные.Установить("Стеллаж", Источник.Стеллаж);

ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"Стеллажи");


ПКО "Стеллажи"
источник пустой- приемник СправочникСсылка.Стеллажи
1) для наименования  Значение = ВходящиеДанные.Получить("Стеллаж"); (аналогично как для зоны)

2)для владельца
ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Владелец", ВходящиеДанные.Получить("Склад"));
ИсходящиеДанные.Установить("Зона", "Основная");
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ЗоныСкладов");


и т.д....

Смысл в том чтобы в при поиске владельца учитывать владельца самого владельца :)
Закон Брукера: Даже маленькая практика стоит большой теории.