Имя: Пароль:
1C
1С v8
КД: по каждой строке документа - новый документ
,
0 lg2marvel
 
29.10.15
17:00
Добрый день. Почитал как делают люди (в том числе и тут на форуме) - понял что реализовать возможно.

Что делаю:
Создал ПКО без источника с данными, обозвал "КомплектацияНоменклатурыПересорт", пока без табличной части - просто чтоб создавался документ. в ПКС - галочка "получать из входящих данных.
Создал ПВД, в событии ПередВыгрузкой:

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

Пробую - ошибка при выгрузке с источника:

Ошибка в обработчике события ПередВыгрузкойОбъекта
    ПВД                    =  АктПересортицы
    Объект                 =  Акт пересортицы О0000000035 от 29.10.2015 10:19:52  (Документ объект: Акт пересортицы)
    Обработчик             =  ПередВыгрузкойОбъектаВыборки
    ОписаниеОшибки         =  Значение не является значением объектного типа (УникальныйИдентификатор)
    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9411)
    КСообщенияОбОшибках    =  33

Что-бы могло значить? Что не так?
1 Temai
 
29.10.15
17:49
Во 1 попробуй кинуть в ПередОбработкой
во 2 посмотри на это правило оно точно работает и сделано было для входящего документа.

Для каждого Стр из ТЗ Цикл
    ВходящиеДокументы = Стр.Ссылка;
    ВыгрузитьПоПравилу(ВходящиеДокументы, , , , "ВходящиеДокументы");
КонецЦикла;
2 lg2marvel
 
03.11.15
10:24
(1) Если помещаю в ПередОбработкой ругается на Объект

Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
    ПВД                    =  АктПересортицы
    Обработчик             =  ПередОбработкойВыгрузкиДанных
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,23)}: Переменная не определена (Объект)
    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(13931)
    КСообщенияОбОшибках    =  31
3 lg2marvel
 
03.11.15
10:48
Может нужно создать группу ТЧ документа источника и как-то передать текущие значения в ПВД?
4 toys
 
03.11.15
11:10
в твоем случае удобней юзать параметр ВыборкаДанных
в ПВД ПередОбработкой
ВыборкаДанных = Новый Структура();
ВыборкаДанных.Вставить("Номер",ОбъектНомер);
...
ну и в ПВД в шапке ПКО укажи явно...и все)
5 lg2marvel
 
03.11.15
11:20
6 lg2marvel
 
03.11.15
11:26
(4) Переменная не определена (Объект) Как только перемещаю в ПередОбработкой
7 lg2marvel
 
03.11.15
11:29
(0) Фу блин, с этой ошибкой разобрался, ну нельзя же в цикле обращаться к данным.
8 lg2marvel
 
03.11.15
11:31
(7) а нет, как только добавляю
ВыгрузитьПоПравилу(,,ВходящиеДанные,,"КомплектацияНоменклатурыПересорт");

сразу же ошибка:  Значение не является значением объектного типа (УникальныйИдентификатор)
9 bolder
 
03.11.15
11:36
(5)Сними выгрузку по уникальному идентификатору в /1.png
10 toys
 
03.11.15
11:47
в 2.png правило укажи в шапке, используй выборку данных
11 lg2marvel
 
03.11.15
11:54
(9) http://i.piccy.info/i9/0e620a6c01e0d4ee46df1714ccb8c0ab/1446540611/59124/958438/4.png в таком случае будут ли сопоставляться документы в источнике и приемнике?
(10) http://i.piccy.info/i9/ec0abccadcff524592aef12702cfbe59/1446540859/36439/958438/5.png так вроде работает, буду писать дальше...
12 Naumov
 
03.11.15
11:57
(11) А как ты собираешься сопоставлять 1 ко многим по единственному ключу?, убирай поиск по ГУИ
13 Naumov
 
03.11.15
11:58
+ Формируй свой КлючВыгрузкиДанных
14 lg2marvel
 
03.11.15
11:59
(13) Спасибо, действительно.
15 lg2marvel
 
03.11.15
15:44
подскажите плз, сделал вот так: http://i.piccy.info/i9/d434f248c58dd28a31ff1143ee695706/1446554434/20839/958438/6.png

Номер документа при выгрузке формирую следующим образом:
Источник: О0000000033
Приемник: ОП062-00033

где 62 будет меняться, оно как бы номер строки. Как бы сделать так чтоб при переброске оно синхронизировалось? Что б намутить в ПКО?
16 lg2marvel
 
03.11.15
15:45
Поиск по "дате", "складу" и "номеру"
17 Naumov
 
03.11.15
17:40
(16) а смысл в поиск ставить склад? дата и номер должны дать уникальность
18 lg2marvel
 
04.11.15
10:11
(17) Дату оказалось не удобно брать для уникальности, оставил номер, склад. На тестовых прогонах вроде все ок.

Дошел до переноса данных из табличной части документа и тут затык.

    ВходящиеДанные.Вставить("ПометкаУдаления",Объект.ПометкаУдаления);    
    ВходящиеДанные.Вставить("Комментарий","Акт пересортицы №"+Объект.Номер+" от "+Объект.Дата);
    ВходящиеДанные.Вставить("Количество",Объект.Товары.НоваяКоличество);
    ВходящиеДанные.Вставить("Номенклатура",Объект.Товары.НоваяНоменклатура);



Пробовал так же

    ВходящиеДанные.Вставить("Количество",Объект.НоваяКоличество);
    ВходящиеДанные.Вставить("Номенклатура",Объект.НоваяНоменклатура);

Эффект один и тот же НоваяКоличество - Неверное имя атрибута. Как правильно это сделать?
19 lg2marvel
 
04.11.15
10:27
Или отобрать все значения ТЧ запросом с условием пономеру строки и потом передавать в параметр?
20 lg2marvel
 
04.11.15
10:32
ВходящиеДанные.Вставить("Количество",Объект.Товары.ТекущиеДанные.НоваяКоличество);

Тоже самое: Поле объекта не обнаружено (ТекущиеДанные)
21 lg2marvel
 
04.11.15
10:53
Текст модуля:

НомерСтроки = 0;

Для Каждого Строка Из Объект.Товары Цикл
    
    НомерСтроки = Формат(Число(НомерСтроки) + 1,"ЧЦ=3; ЧДЦ=0");
    Если СтрДлина(НомерСтроки)=1 Тогда
        Параметры.Префикс = "П00"+НомерСтроки+"-";
    ИначеЕсли СтрДлина(НомерСтроки)=2 Тогда
        Параметры.Префикс = "П0"+НомерСтроки+"-";
    ИначеЕсли СтрДлина(НомерСтроки)=3 Тогда
        Параметры.Префикс = "П"-НомерСтроки+"-";
    Иначе
        Сообщить("Длина номера строки в документе больше 3, не предусмотрено обработкой!");
        Параметры.Префикс = "err"+"-";
        Продолжить;
    КонецЕсли;
    
    ВходящиеДанные = Новый Структура;
        
    ВходящиеДанные.Вставить("Номер",Параметры.Префикс+Прав(Объект.Номер,6));
    //Сообщить("Номер в ПВД "+Параметры.Префикс+Прав(Объект.Номер,6));
    //Сообщить("Номер строки "+Параметры.Префикс);    
    ВходящиеДанные.Вставить("Дата",Объект.Дата);
    ВходящиеДанные.Вставить("Склад",Объект.Склад);
    ВходящиеДанные.Вставить("Организация",Объект.Фирма.Ссылка);
    ВходящиеДанные.Вставить("Проведен",Объект.Проведен);
    ВходящиеДанные.Вставить("ПометкаУдаления",Объект.ПометкаУдаления);    
    ВходящиеДанные.Вставить("Комментарий","Акт пересортицы №"+Объект.Номер+" от "+Объект.Дата);
    

    ВходящиеДанные.Вставить("Количество",Объект.Товары.ТекущиеДанные().НоваяКоличество);
    
    
    ВыгрузитьПоПравилу(,,ВходящиеДанные,,"КомплектацияНоменклатурыПересорт");    
КонецЦикла;
22 lg2marvel
 
04.11.15
10:55
и этот столбец есть в документе!
http://i.piccy.info/i9/771daa0a23bb740f2829e5ee88379ea4/1446623679/19214/958438/7.png
23 lg2marvel
 
04.11.15
11:02
Модуль:
НомерСтроки = 0;

Для Каждого Строка Из Объект.Товары Цикл
    
    НомерСтроки = Формат(Число(НомерСтроки) + 1,"ЧЦ=3; ЧДЦ=0");
    Если СтрДлина(НомерСтроки)=1 Тогда
        Параметры.Префикс = "П00"+НомерСтроки+"-";
    ИначеЕсли СтрДлина(НомерСтроки)=2 Тогда
        Параметры.Префикс = "П0"+НомерСтроки+"-";
    ИначеЕсли СтрДлина(НомерСтроки)=3 Тогда
        Параметры.Префикс = "П"-НомерСтроки+"-";
    Иначе
        Сообщить("Длина номера строки в документе больше 3, не предусмотрено обработкой!");
        Параметры.Префикс = "err"+"-";
        Продолжить;
    КонецЕсли;
    
    ВходящиеДанные = Новый Структура;
        
    ВходящиеДанные.Вставить("Номер",Параметры.Префикс+Прав(Объект.Номер,6));
    //Сообщить("Номер в ПВД "+Параметры.Префикс+Прав(Объект.Номер,6));
    //Сообщить("Номер строки "+Параметры.Префикс);    
    ВходящиеДанные.Вставить("Дата",Объект.Дата);
    ВходящиеДанные.Вставить("Склад",Объект.Склад);
    ВходящиеДанные.Вставить("Организация",Объект.Фирма.Ссылка);
    ВходящиеДанные.Вставить("Проведен",Объект.Проведен);
    ВходящиеДанные.Вставить("ПометкаУдаления",Объект.ПометкаУдаления);    
    ВходящиеДанные.Вставить("Комментарий","Акт пересортицы №"+Объект.Номер+" от "+Объект.Дата);
    
//МД_Реквизиты = Объект.Метаданные().Реквизиты;
//Для Каждого МетаРеквизит Из МД_Реквизиты Цикл
//Сообщить(МетаРеквизит.Имя + " = " + Объект.[МетаРеквизит.Имя]);
//КонецЦикла;
    ВходящиеДанные.Вставить("Количество",Объект.НоваяКоличество);
    //ВходящиеДанные.Вставить("Номенклатура",Объект.Товары.НоваяНоменклатура);
    //ВходящиеДанные.Вставить("Количество",Объект.Количество);
    //ВходящиеДанные.Вставить("Количество",Объект.Номенклатура);    
    
    ВыгрузитьПоПравилу(,,ВходящиеДанные,,"КомплектацияНоменклатурыПересорт");    
КонецЦикла;
24 lg2marvel
 
04.11.15
13:43
Нужно передать в ТЧ документа приемника 1 строку. Как правильно это сделать? Из ПВД передаю данные которые будут реквизитами этой строки, но получаю ошибку: Получение элемента по индексу для значения не определено
25 lg2marvel
 
04.11.15
13:57
зергуд, спасибо за участие.
26 Naumov
 
04.11.15
14:45
(24) Во входящие данные ТЗ с подходящими колонками передай.
27 lg2marvel
 
05.11.15
09:35
Получилось как-то так:

НомерСтроки = 0;

Для Каждого Строка Из Объект.Товары Цикл
    
    НомерСтроки = Формат(Число(НомерСтроки) + 1,"ЧЦ=3; ЧДЦ=0");
    Если СтрДлина(НомерСтроки)=1 Тогда
        Параметры.Префикс = "П00"+НомерСтроки+"-";
    ИначеЕсли СтрДлина(НомерСтроки)=2 Тогда
        Параметры.Префикс = "П0"+НомерСтроки+"-";
    ИначеЕсли СтрДлина(НомерСтроки)=3 Тогда
        Параметры.Префикс = "П"-НомерСтроки+"-";
    Иначе
        Сообщить("Длина номера строки в документе больше 3, не предусмотрено обработкой!");
        Параметры.Префикс = "err"+"-";
        Продолжить;
    КонецЕсли;
    
    ВходящиеДанные = Новый Структура;
        
    ВходящиеДанные.Вставить("Номер",Параметры.Префикс+Прав(Объект.Номер,6));
    ВходящиеДанные.Вставить("Дата",Объект.Дата);
    ВходящиеДанные.Вставить("Склад",Объект.Склад);
    ВходящиеДанные.Вставить("Организация",Объект.Фирма.Ссылка);
    ВходящиеДанные.Вставить("Проведен",Объект.Проведен);
    ВходящиеДанные.Вставить("ПометкаУдаления",Объект.ПометкаУдаления);    
    ВходящиеДанные.Вставить("Комментарий","Акт пересортицы №"+Объект.Номер+" от "+Объект.Дата);
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |АктПересортицы.Ссылка,
    |АктПересортицы.Товары.(
    |    Ссылка,
    |    НомерСтроки,
    |    Номенклатура,
    |    НоваяНоменклатура,
    |    Количество,
    |    НоваяКоличество,
    |    ИдентификаторСтроки,
    |)
    |ИЗ
    |Документ.АктПересортицы КАК АктПересортицы
    |ГДЕ
    |    АктПересортицы.Ссылка = &Ссылка И
    |    АктПересортицы.Товары.НомерСтроки = &НомерСтроки
    |";
    

    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    Запрос.УстановитьПараметр("НомерСтроки", Число(НомерСтроки));
    КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();    
    
    ВходящиеДанные.Вставить("Количество",КоллекцияОбъектов[0][1][0][5]);
    ВходящиеДанные.Вставить("Номенклатура",КоллекцияОбъектов[0][1][0][3]);
    ВходящиеДанные.Вставить("Комплектующие",КоллекцияОбъектов);
    Параметры.КВО = Число(КоллекцияОбъектов[0][1][0][4]);
    Параметры.ТМЦ = КоллекцияОбъектов[0][1][0][2];    
    
    ВыгрузитьПоПравилу(,,ВходящиеДанные,,"КомплектацияНоменклатурыПересорт");    
КонецЦикла;


Может есть какие-то грубые ошибки?