Имя: Пароль:
1C
1С v8
Помогите исправить ошибку - не меняет договор
0 Sefuirosu
 
01.07.14
22:06
Запрос = Новый Запрос("ВЫБРАТЬ
    |    РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    |    РеализацияТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента,
    |    РеализацияТоваровУслуг.Контрагент КАК Контрагент
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |    РеализацияТоваровУслуг.Дата >= &ДатаНач
    |    И РеализацияТоваровУслуг.Дата <= &ДатаКон
    |    И РеализацияТоваровУслуг.ПометкаУдаления = ЛОЖЬ
    |    И РеализацияТоваровУслуг.Организация = &Организация
    |");
    
    Запрос.УстановитьПараметр("ДатаНач", ЭлементыФормы.ДатаНач.Значение);
    Запрос.УстановитьПараметр("ДатаКон", ЭлементыФормы.ДатаКон.Значение);
    Запрос.УстановитьПараметр("Организация", ЭлементыФормы.Организация.Значение);

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();
    ДоговораСпр = Справочники.ДоговорыКонтрагентов;
    Пока Выборка.Следующий() Цикл
        Контрагент = Выборка.Контрагент.ПолучитьОбъект();
        ДоговорКонтрагента = Выборка.ДоговорКонтрагента.ПолучитьОбъект();
        ДоговорДляПроверки = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор с покупателем 2014",,,Контрагент.Ссылка);
        Если ПустаяСтрока(ДоговорДляПроверки) Тогда
            ДоговорК = ДоговораСпр.СоздатьЭлемент();
            //ДоговорК.Организация = Справочники.Организации.НайтиПоКоду("00001");
            ДоговорК.Организация = ЭлементыФормы.Организация.Значение;
            ДоговорК.Владелец = Контрагент.Ссылка;
            ДоговорК.Наименование = "Основной договор с покупателем 2014";
            ДоговорК.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;              
            ДоговорК.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду("643");
            ДоговорК.Записать();
            
            Контрагент.ОсновнойДоговорКонтрагента = ДоговорК.Ссылка;
            Контрагент.Записать();
            
            ДоговорКонтрагента = Контрагент.ОсновнойДоговорКонтрагента;
            Контрагент.Записать();
    
        КонецЕсли;
    КонецЦикла;


Конфигурация: БП 2.0
Тип: Обработка.

Что должно быть:

1) Система должна искать контрагентов, которые пользовались документом "РеализацияТоваровИУслуг" (в указанный в форме промежуток времени, по указанной организации), затем, во всех найденных контрагентах создает новый договор, с некоторыми параметрами и делает его основным. ----> Эта часть работает нормально.

2) Система должна заменить договор в "РеализацияТоваровИУслуг" на созданный договор. ----->>> Не работает, выдает ошибку: {Форма.Форма.Форма(1532)}: Метод объекта не обнаружен (Записать)
            ДоговорКонтрагента.Записать();
При этом, если выполнить отладку, также видно, что новый договор все еще не присваивается. Посмотрите пожалуйста, в чем моя ошибка.

Большое спасибо за любую помощь!
Весь день мучаюсь!
1 ДенисЧ
 
01.07.14
22:17
ДоговорКонтрагента = Контрагент.ОсновнойДоговорКонтрагента;
тут у тебя ссылка. А ссылку ты не запишешь
2 Sefuirosu
 
01.07.14
22:26
Понимаю.
А как тогда сделать правильным образом, чтобы запись прошла? Какое значение вытянуть?
3 Мимохожий Однако
 
01.07.14
22:40
Сначала получи объект документа, потом замени ссылку договора и затем записывай.
4 Sefuirosu
 
01.07.14
22:47
Так вроде делаю:
ДоговорКонтрагента = Выборка.ДоговорКонтрагента.ПолучитьОбъект();
Вот в этот момент здесь ДоговорКонтрагента равен старому договору.
Вот пытаюсь его заменить на новый и записать, но что-то у меня не получается. А с контрагентом нормально вышло.

P.S: Там, в конце, была опчатка в записи, у меня так:             ДоговорКонтрагента.Записать();

Но тоже не работает....
5 mdocs
 
01.07.14
22:56
да нафиг тебе объект договора - тебе нужен объект документа реализации и в нем надо заменить ссылку.
6 GreatOne
 
01.07.14
22:58
и правда, в запросе лишних полей целых 2.
Кстати ДоговорДляПроверки = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор с покупателем 2014",,,Контрагент.Ссылка);
        Если ПустаяСтрока(ДоговорДляПроверки) Тогда


Может лучше <> Неопределено или ЗначениеЗаполнено()? Как он вообще в условие попадает?
7 Sefuirosu
 
01.07.14
23:14
mdocs, так это ведь и есть объект объект документа реализации, разве нет?

РеализацияТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента

Извиняюсь за свой тупеж, весь день сижу и наверно уже зациклился сам :)...
8 hhhh
 
01.07.14
23:43
а где у вас ДоговорКонтрагента.Записать();   ?? Ведь нет этого в программе. Вы наверно нам совершенно другой кусок выложили
9 Sefuirosu
 
01.07.14
23:53
hhhh, да, там была опечатка.

Чтобы было удобнее всего, выложил файл самой обработки в интернет:

http://files.mail.ru/80A43B2C313743F88EBD62C489C8C089

Кнопка обработки запускает "Процедура СозданиеДоговоровНажатие(Элемент)"

Посмотрите пожалуйста, если не сложно. Буду очень признателен!
10 hhhh
 
02.07.14
00:00
ну в общем как-то так

Реал = Выборка.Ссылка.ПолучитьОбъект();
Реал.ДоговорКонтрагента = ДоговорК.Ссылка;
Реал.Записать();
11 Sefuirosu
 
02.07.14
10:01
Ага, заработало!
Большое спасибо! Думал сам в этом направлении, только затупил, и неправильно сделал переменную.
12 Sefuirosu
 
02.07.14
10:27
А как теперь найти и обойти все документы по найденным (обработкой) в РеализацииТоваровИУслуг контрагентам, в которых присутствует тип договора "с покупателем" и поменять в этих документах их текущие договора на новый (который создает обработка)?

Т.е. теперь надо подставить найденным контрагентам во все их документы, в которых присутствуют договора с покупателями созданный договор.