Имя: Пароль:
1C
 
обработка:заполнение реквизита документа реквизитом другого документа
,
0 dezomorf1c
 
14.02.19
11:50
делаю обработку.На основании заказа поставщика сделан документ поступление товаров. Если в поступлении не заполнен реквизит проект, то его нужно заполнить из заказа поставщику.
как исправить ошибку? :Поле объекта не обнаружено (Следующий)
Пока ДокументыПоступления.Следующий Цикл

Процедура ЗаполнитьНаСервере()
ДокументыПоступления = Документы.ПоступлениеТоваровУслуг.Выбрать();

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    ЗаказПоставщику.Проект
               |ИЗ
               |    Документ.ЗаказПоставщику КАК ЗаказПоставщику";

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


Пока ДокументыПоступления.Следующий Цикл

    ЗаказПоставщику = ТЗ;
Если Не ЗначениеЗаполнено(ДокументыПоступления.Проект) И ЗначениеЗаполнено(ЗаказПоставщику.Проект) Тогда
ДокументОбъект = ДокументыПоступления.ПолучитьОбъект();
ДокументОбъект.Проект = ЗаказПоставщику.Проект;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
1 ZDenis
 
14.02.19
11:52
(0) Ужас
2 Василий Алибабаевич
 
14.02.19
12:00
(0) Не вдаваясь в детали (как сделал коллега из (1)) вот это вот : "Пока ДокументыПоступления.Следующий Цикл" должно быть записано вот так : "Пока ДокументыПоступления.Следующий() Цикл". Обратить особое внимание на скобки после слова "Следующий". Ибо оно - имя метода. И к нему нужно соответствующим образом обращаться.
3 dezomorf1c
 
14.02.19
12:03
(2) мне стыдно.
4 Василий Алибабаевич
 
14.02.19
12:21
(3) Крепитесь. Дальше будет хуже. Когда дойдете до "ДокументОбъект = ДокументыПоступления.ПолучитьОбъект();" - тогда осознаете весь трагизм ситуации. )))
5 ZDenis
 
14.02.19
12:25
(4) Раньше, свалиться уже на этом:
Если Не ЗначениеЗаполнено(ДокументыПоступления.Проект) И ЗначениеЗаполнено(ЗаказПоставщику.Проект) Тогда
6 dezomorf1c
 
14.02.19
12:43
(5) да, так и случилось
7 Василий Алибабаевич
 
14.02.19
12:44
(6) Вот теперь можно начинать стыдиться.
8 ZDenis
 
14.02.19
12:47
(6) вам для начала надо осмыслить откуда, что и куда вы хотите заполнить. В настоящий момент выбираете все поступления и все заказы. Но где связь между ними? Если бы даже такая обработка сработала, то вы бы во все поступления проставили какой-то проект совсем не связанный с этим поступлением.
9 dezomorf1c
 
14.02.19
13:10
Свяжутся ли теперь проекты Проекты ?=Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту("Проект", Проект);

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка",Проект);
Запрос.Текст = "ВЫБРАТЬ
               |    ЗаказПоставщику.Проект
               |ИЗ
               |    Документ.ЗаказПоставщику КАК ЗаказПоставщику
               |ГДЕ
               |    ЗаказПоставщику.Проект = &Ссылка";
10 dezomorf1c
 
14.02.19
13:10
Проект =Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту("Проект", Проект);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка",Проект);
Запрос.Текст = "ВЫБРАТЬ
               |    ЗаказПоставщику.Проект
               |ИЗ
               |    Документ.ЗаказПоставщику КАК ЗаказПоставщику
               |ГДЕ
               |    ЗаказПоставщику.Проект = &Ссылка";
11 dezomorf1c
 
14.02.19
13:14
рекв.Проект Поступления заполняется из рекв. Проект ЗаказаПоставщику
12 ZDenis
 
14.02.19
13:32
(9) Не свяжутся. Просто пройдись по реквизитам "Поступления" (визуально) и посмотри есть ли там что-то типа "ЗаказПоставщику".
Не зная конфигурации, сложно сказать как у вас там связаны документы поступления с заказами.
13 dezomorf1c
 
14.02.19
13:45
(12) Да, такой реквизит имеется в Табличной части
14 ZDenis
 
14.02.19
13:53
(13) если в табличной части, значит но одно поступление может быть несколько заказов. А если реквизит "Проект" всего один, то с какого заказа его заполнять?
15 dezomorf1c
 
14.02.19
14:51
В документе ПТУ в ТЧ товары есть Заказы, но в ТЧ товары нету Проекта, поэтому на основании одного заказа создается документ один документ ПТУ, нужно из документа заказа достать значение реквизита Проект и поместить в документ ПТУ (в реквизит Проект).
16 ZDenis
 
14.02.19
15:10
(15) Что-то типа такого

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
|    ПоступлениеТоваровУслугТовары.ЗаказПоставщику.Проект КАК Проект
|ИЗ
|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|    ПоступлениеТоваровУслугТовары.Ссылка.Проект.Ссылка ЕСТЬ NULL";

ТЗ = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из ТЗ Цикл
Док = Строка.Ссылка.ПолучитьОбъект();
Док.Проект = Строка.Проект;
Док.Записать();
КонецЦикла;
17 dezomorf1c
 
14.02.19
15:28
(16) хотел с отладчиком посмотреть ваш код, а сразу ругается :
Ошибка инициализации модуля: ОбщийМодуль.РаботаСОбщимиПеременными.Модуль
по причине:
{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(29,8)}: Переменная не определена (глОбщиеЗначения)
    Кэш = <<?>>глОбщиеЗначения;
{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(178,9)}: Переменная не определена (глОбщиеЗначения)
            Если <<?>>глОбщиеЗначения = Неопределено Тогда
{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(204,8)}: Переменная не определена (глОбщиеЗначения)
        Если <<?>>глОбщиеЗначения = Неопределено Тогда
18 dezomorf1c
 
14.02.19
15:31
проверил на двух компах
19 dezomorf1c
 
14.02.19
15:33
в любом случае , Спасибо за науку
20 ZDenis
 
14.02.19
15:44
(19) ты куда это прописала? То что я дал.

Вроде разговор про обработку был
21 dezomorf1c
 
14.02.19
15:46
(20) Прописал во внешнюю обработку
22 ZDenis
 
14.02.19
15:48
а где она в общий модуль лезет?
23 dezomorf1c
 
14.02.19
15:54
(22) не знаю. в режиме управл.приложении ошибка в общем модуле, а  в обычном приложении ошибки не выходит, но зависло
24 ZDenis
 
14.02.19
16:03
(23) оно не зависло, оно выполняется.

А в УП надо смотреть как процедуры названы. Там директивы должны быть &НаКлиенте, &НаСервере
25 dezomorf1c
 
14.02.19
17:28
(24) Такие директивы имеются
26 dezomorf1c
 
14.02.19
17:30
у меня база тяжелая 40ГБ. Оставлю на выполнение
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.