Имя: Пароль:
1C
1С v8
КД УТ 10.3 -> БП 2.0 Реализация товаров и услуг, ошибка
,
0 sora_tm
 
23.02.12
19:13
Пытаюсь править правило в КД, необходимо чтобы при выгрузке из УТ, если стоит в документе контрагент, и у контрагента есть головной контрагент, чтобы в БП в реализацию попадал Головной контрагент. Проблема возникла с договорами. Есть код в ПКО РЕализация Т и у, в ПослеВыгрузки

Объект.Контрагент = Объект.Контрагент.ГоловнойКонтрагент;
Объект.ДоговорКонтрагента = ПолучитьДоговорКонтрагента(Объект.Контрагент, Объект.Дата);

Функция ПолучитьДоговорКонтрагента(Контрагент, Дата)
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    ДоговорыКонтрагентов.Ссылка
   |ИЗ
   |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
   |ГДЕ
   |    ДоговорыКонтрагентов.Владелец = &Владелец
   |    И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
   |    И ДоговорыКонтрагентов.Дата = &Дата
   |    И (НЕ ДоговорыКонтрагентов.ПометкаУдаления)";
   
   Запрос.УстановитьПараметр("Владелец", Контрагент);    Запрос.УстановитьПараметр("ВидДоговора", Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
   Запрос.УстановитьПараметр("Дата", НачалоМесяца(Дата));
   
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   
   Если Выборка.Следующий() Тогда
       ДогС = Выборка.Ссылка;
   Иначе
       Дог = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
       Дог.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
       Дог.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
       Дог.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
       Дог.Владелец = Контрагент;
       Дог.Дата = НачалоМесяца(ДатаТиража);
       Дог.УстановитьНовыйКод();
       Дог.Наименование = "Газеты за "+Формат(Дата, "ДФ='MMMM yyyy'");
       Дог.Организация = Организация;
       Дог.ТипЦен = Контрагент.ОсновнойДоговорКонтрагента.ТипЦен;
       
       Попытка
           Дог.Записать();
           ДогС = Дог.Ссылка;
       Исключение
           Сообщить(ОписаниеОшибки());
           ДогС = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
       КонецПопытки;
       
       
           
   Конецесли;
   
   Возврат ДогС;
       
КонецФункции


Ошибка при обмене в БП:

Начало загрузки:   23.02.2012 18:58:23

Ошибка в обработчике события ПослеЗагрузкиОбъекта
   ИмяПКО                 =  РеализацияТоваровУслуг
   ТипОбъекта             =  Реализация товаров и услуг
   Объект                 =  Реализация товаров и услуг УТ000000465 от 04.01.2012 0:00:01
   Обработчик             =  ПослеЗагрузкиОбъекта
   ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(6,1)}: Ожидается последовательность операторов
   ПозицияМодуля          =  Обработка.ОбменДаннымиXML(7531)
   КодСообщения           =  21

Ошибка при загрузке данных: {Обработка.ОбменДаннымиXML(1596)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
   ИмяПКО                 =  РеализацияТоваровУслуг
   ТипОбъекта             =  Реализация товаров и услуг
   Объект                 =  Реализация товаров и услуг УТ000000465 от 04.01.2012 0:00:01
   Обработчик             =  ПослеЗагрузкиОбъекта
   ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(6,1)}: Ожидается последовательность операторов
   ПозицияМодуля          =  Обработка.ОбменДаннымиXML(7531)
   КодСообщения           =  21

Окончание загрузки: 23.02.2012 18:58:27

Где накосячил? В обработке код работает, хочу его сунуть в обмен...
1 sora_tm
 
23.02.12
19:16
Дог.Дата = НачалоМесяца(ДатаТиража);

Я исправил, но тоже самое.
2 Агент Инфостарта
 
23.02.12
19:18
(0) При выгрузке или загрузке договоров надо менять владельца.
3 eduspec82
 
23.02.12
19:18
отладку включи при выгрузке с подстановкой кодов процедур сразу увидишь где ошибка ...
4 Агент Инфостарта
 
23.02.12
19:20
Нет, владельца менять не следует, создавать новый договор для головного контрагента.
5 eduspec82
 
23.02.12
19:20
ошибка компиляции = синтаксическая ошибка кода при выполнить (...)
6 sora_tm
 
23.02.12
19:22
(4) Дык я и пытаюсь создавать...
7 Агент Инфостарта
 
23.02.12
19:24
(6) А в чём проблема?
8 sora_tm
 
23.02.12
19:26
(7) ТАк в (0) же все написал.
9 sora_tm
 
23.02.12
19:27
(7) Функция ПолучитьДоговорКонтрагента ищет, если не находит создает.
10 sora_tm
 
23.02.12
19:29
(3) К сожалению как это сделать не знаю, пользуюсь только когда код пишу, а как при обмене использовать не понял.
11 Агент Инфостарта
 
23.02.12
19:31
(10) Надо пользоваться алгоритмами КД2, если эта функция у вас не входит в конфигурацию.
12 sora_tm
 
23.02.12
19:36
(11) Т.е. описывать функцию в ПКО в ПослеВыгрузки нельзя?
13 Агент Инфостарта
 
23.02.12
19:38
(12) Можно, флажок "Использовать при загрузке" алгоритма. Похоже, вы неправильно понимаете принцип использования алгоритмов в КД 2.
14 sora_tm
 
23.02.12
19:42
(13) В справке написано, что используются алгоритмы, когда необходимо один алгоритм использовать в нескольких ПКО, у меня один ПКО :)
15 Агент Инфостарта
 
23.02.12
19:45
(14) Тогда пишите код непосредственно в обработчике, раз в справке "напейсано".

Так сказал капрал, а капралу надо верить. (с)
16 sora_tm
 
23.02.12
19:47
(15) Так у меня все и написано. Может вы не разворачивали +Code в первом посте?
17 Агент Инфостарта
 
23.02.12
19:51
(16) Развернул. Сама Функция ПолучитьДоговорКонтрагента(Контрагент, Дата) где у вас находится? Если в алгоритмах, то так не правильно.
18 sora_tm
 
23.02.12
19:55
(17) Нет, все сейчас находится в ПКО РеализацияТоваровУслуг, в вкладке После Загрузки
19 Агент Инфостарта
 
23.02.12
19:57
(18) Функции и процедуры в обработчиках не объявляются, так как код обработчика выполняется  через процедуру Выполнить(.............);
20 sora_tm
 
23.02.12
20:03
Спасибо огромное, в этом и проблема. Т.е. ее надо объявить в алгоритмах?
21 Агент Инфостарта
 
23.02.12
20:04
(20) Объявить в алгоритмах, но вызывать не как процедуру/функцию.
22 sora_tm
 
23.02.12
21:06
(21) Спасибо огромное, все получилось!!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.