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

Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 1
|СписаниеСоСчета.Ссылка
|    ИЗ
|Документ.СписаниеСоСчета КАК СписаниеСоСчета
|    ГДЕ
|СписаниеСоСчета.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект.ДокументОснование);

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

Отрабатывает как то криво, создается еще один документ с реквизитом из второго документа.

Что не так делаю, подскажите?
1 стаканыч
 
12.09.14
17:38
Правило это находится в Поля поиска
2 стаканыч
 
12.09.14
18:21
Кто в пятницу вечером работает - тот молодец!
3 Мимохожий Однако
 
12.09.14
18:24
Как вариант: использовать произвольный запрос в Алгоритмах.
4 стаканыч
 
12.09.14
18:30
(3) а не то же самое? поиск работает ( документ меняет реквизит ), но и создается пустой документ, как бы этот хвост отрубить
5 ArchLord
 
12.09.14
18:36
хм, нечто похожее я тоже делал все ок было, правда я еще ПрекратитьПоиск = Истина; дописываю всегда

ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.
6 Мимохожий Однако
 
12.09.14
18:37
Попробуй Отказ=Истина; для не нового документа после заполнения реквизитов.
7 стаканыч
 
12.09.14
18:40
(5) в конец кода из (0) добавил - нет изменений
8 стаканыч
 
12.09.14
18:43
(6) по идее документ всегда не новый.. куда конкретнее добавить отказ?
9 Мимохожий Однако
 
12.09.14
18:48
(8)Так, где создаешь документ, который, судя по всему уже найден.
10 Мимохожий Однако
 
12.09.14
18:48
*так, где..
11 Мимохожий Однако
 
12.09.14
18:48
Блин.. *там,где..
12 стаканыч
 
12.09.14
18:50
Я его не создаю, я его нахожу и затем

СсылкаНаОбъект = ВыборкаПоискаДокументов.Ссылка;

Откуда новый документ то.
13 стаканыч
 
15.09.14
10:09
Остался я там же, где и был. Помогите
14 стаканыч
 
15.09.14
10:10
Выяснилось, что ничего не находит :)
15 vicof
 
15.09.14
10:46
(0) Делай произвольный запрос в ПВД, получай там какие нужно данные, и результат запроса присваивай переменной ВыборкаДанных. Настраивай ПКО и ПКС, профит.
16 probably
 
15.09.14
10:54
А ты документ где ищешь?
В приемнике?
У тебя в условии чушь, по-моему написана.
Что и где ты ищешь?
17 Ymryn
 
15.09.14
10:56
А как ты получаешь
  СсылкаНаОбъект = ВыборкаПоискаДокументов.Ссылка;
если у тебя выше
Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект.ДокументОснование);
?
У тебя изначально документ на другой должен спозиционироваться, а потом ты исправляешь?
Плюс, это когда выполняется, какой обработчик?
18 Naumov
 
15.09.14
11:13
(0) Вообще при таких задачах делают ПВД с произвольной выборкой, в которой готовят объект к выгрузке в нужном виде сразу.
Довыгрузка при помощи правил не слишком хорошая идея.
19 стаканыч
 
15.09.14
11:42
(16) (17) тут смысл в том, что я сначала беру из СсылкаНаОбъект документ основание, и в этот объект гружу ( СсылкаНаОбъект = ВыборкаПоискаДокументов.Ссылка; )

т.е. подменяю ссылку на значение реквизита этой ссылки
20 стаканыч
 
15.09.14
11:43
(18) я посмотрел типовые правил УТ-БП , там есть документ ПлатежноеПоручениеИсходящее , грузит из ДокументСсылка.СписаниеСРасчетногоСчета в ДокументСсылка.ПлатежноеПоручениеИсходящее

Реализовано кодом :

Если ТипЗнч(СвойстваПоиска) = Тип("Соответствие")
    И СвойстваПоиска.Получить("{УникальныйИдентификатор}") <> Неопределено
    И ТипЗнч(СвойстваПоиска["{УникальныйИдентификатор}"]) = Тип("Строка")
Тогда
    СсылкаДляПоискаАккредитивПереданный = Неопределено;
    СсылкаДляПоискаИнкассовоеПоручениеПолученное = Неопределено;
    СсылкаДляПоискаПлатежноеТребованиеПолученное = Неопределено;
    СсылкаДляПоискаПлатежныйОрдерСписаниеДенежныхСредств = Неопределено;
    Попытка
        СсылкаДляПоискаАккредитивПереданный = Документы.АккредитивПереданный.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойстваПоиска["{УникальныйИдентификатор}"]));
        СсылкаДляПоискаИнкассовоеПоручениеПолученное = Документы.ИнкассовоеПоручениеПолученное.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойстваПоиска["{УникальныйИдентификатор}"]));
        СсылкаДляПоискаПлатежноеТребованиеПолученное = Документы.ПлатежноеТребованиеПолученное.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойстваПоиска["{УникальныйИдентификатор}"]));
        СсылкаДляПоискаПлатежныйОрдерСписаниеДенежныхСредств = Документы.ПлатежныйОрдерСписаниеДенежныхСредств.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойстваПоиска["{УникальныйИдентификатор}"]));
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // Удалось создать УникальныйИдентификатор из ключа соответствия СвойстваПоиска["{УникальныйИдентификатор}"] //
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Исключение
        СсылкаДляПоискаАккредитивПереданный = Неопределено;
        СсылкаДляПоискаИнкассовоеПоручениеПолученное = Неопределено;
        СсылкаДляПоискаПлатежноеТребованиеПолученное = Неопределено;
        СсылкаДляПоискаПлатежныйОрдерСписаниеДенежныхСредств = Неопределено;
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // НЕ удалось создать УникальныйИдентификатор из ключа соответствия СвойстваПоиска["{УникальныйИдентификатор}"] //
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    КонецПопытки;
    
    Если СсылкаДляПоискаАккредитивПереданный <> Неопределено
        ИЛИ СсылкаДляПоискаИнкассовоеПоручениеПолученное <> Неопределено
        ИЛИ СсылкаДляПоискаПлатежноеТребованиеПолученное <> Неопределено
        ИЛИ СсылкаДляПоискаПлатежныйОрдерСписаниеДенежныхСредств <> Неопределено
    Тогда
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //==========================================================================================================================================================================//
        // Удалось создать УникальныйИдентификатор из ключа соответствия СвойстваПоиска["{УникальныйИдентификатор}"]                                                                //
        //==========================================================================================================================================================================//
        // Необходимо для поддержания цепочек документов расчетов                                                                                                                   //
        // Выполняется аналогичный поиск конвертации по внутреннему идентификатору в таблицах документов                                                                            //
        // Документ.РеализацияОтгруженныхТоваров И Документ.ПередачаОС                                                                                                              //
        // Выполняется в следствии следующих условий.                                                                                                                               //
        // Документы в Бухгалтерии предприятия:                                                                                                                                     //
        // - "Передача ОС"                                                                                                                                                          //
        // - "Реализация отгруженных товаров"                                                                                                                                       //
        // - "Реализация товаров и услуг"                                                                                                                                           //
        // при выгрузке в Управление торговли, конвертируются в один тип документа "Реализация товаров и услуг".                                                                    //
        // При обратной выгрузке по ссылке, выше указанных документов "Передача ОС" и "Реализация отгруженных товаров", в БП выгрузится пустая ссылка "Реализации товаров и услуг", //
        // так как в направлении выгрузки из УТ в БП нет возможности определить тип документа источника в следствии этого нет соответствующих правил конвертаций.                   //
        //                                                                                                                                                                          //
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        Запрос = Новый Запрос();
        Запрос.Текст = "
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    АккредитивПереданный.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.АккредитивПереданный КАК АккредитивПереданный
        |ГДЕ
        |    АккредитивПереданный.Ссылка = &СсылкаДляПоискаАккредитивПереданный
        |ОБЪЕДИНИТЬ ВСЕ
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    ИнкассовоеПоручениеПолученное.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ИнкассовоеПоручениеПолученное КАК ИнкассовоеПоручениеПолученное
        |ГДЕ
        |    ИнкассовоеПоручениеПолученное.Ссылка = &СсылкаДляПоискаИнкассовоеПоручениеПолученное
        |ОБЪЕДИНИТЬ ВСЕ
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    ПлатежноеТребованиеПолученное.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ПлатежноеТребованиеПолученное КАК ПлатежноеТребованиеПолученное
        |ГДЕ
        |    ПлатежноеТребованиеПолученное.Ссылка = &СсылкаДляПоискаПлатежноеТребованиеПолученное
        |ОБЪЕДИНИТЬ ВСЕ
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    ПлатежныйОрдерСписаниеДенежныхСредств.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ПлатежныйОрдерСписаниеДенежныхСредств КАК ПлатежныйОрдерСписаниеДенежныхСредств
        |ГДЕ
        |    ПлатежныйОрдерСписаниеДенежныхСредств.Ссылка = &СсылкаДляПоискаПлатежныйОрдерСписаниеДенежныхСредств
        |";
        Запрос.УстановитьПараметр("СсылкаДляПоискаАккредитивПереданный", СсылкаДляПоискаАккредитивПереданный);
        Запрос.УстановитьПараметр("СсылкаДляПоискаИнкассовоеПоручениеПолученное", СсылкаДляПоискаИнкассовоеПоручениеПолученное);
        Запрос.УстановитьПараметр("СсылкаДляПоискаПлатежноеТребованиеПолученное", СсылкаДляПоискаПлатежноеТребованиеПолученное);
        Запрос.УстановитьПараметр("СсылкаДляПоискаПлатежныйОрдерСписаниеДенежныхСредств", СсылкаДляПоискаПлатежныйОрдерСписаниеДенежныхСредств);
        РезультатПоискаДокументов = Запрос.Выполнить();
        Если НЕ РезультатПоискаДокументов.Пустой() Тогда
            ВыборкаПоискаДокументов = РезультатПоискаДокументов.Выбрать();
            Если ВыборкаПоискаДокументов.Следующий() Тогда
                СсылкаНаОбъект = ВыборкаПоискаДокументов.Ссылка;
                Параметры.ДокументыЗагруженныеИзНесоовпадающихТиповДокументов.Добавить(СсылкаНаОбъект);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;
21 Naumov
 
15.09.14
12:03
(20) И какие выводы сделал?
Правда описанное - задача наоборот. один документ выгружается в два разных.
22 Naumov
 
15.09.14
12:03
но смысл примерно тот же.
23 стаканыч
 
15.09.14
12:30
(21) я вывод сделал из этой строки
СсылкаНаОбъект = ВыборкаПоискаДокументов.Ссылка;

Пытаюсь также подменить СсылкаНаОбъект