Имя: Пароль:
1C
1С v8
Груповое измененение табличной части документов.
0 Данил Сергеевич
 
12.06.13
10:48
Надо в документах "Платёжное Поручение входящее" изменить реквизит табличной части "Проект"(при условии если оно незаполенно) на значение Документ.ДоговорКонтрагента.ОсновнойПроект
Делаю внешнюю обработку
Пишу
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Докум = Документы.ПлатежноеПоручениеВходящее.Выбрать();  
Пока Докум.Следующий() Цикл
док = Докум.ПолучитьОбъект();
   
Для Каждого СтрокаТЧ ИЗ док.РасшифровкаПлатежа Цикл
  Если СтрокаТЧ.Проект = Неопределено Тогда
 СтрокаТЧ.Проект = Докум.ДоговорКонтрагента.ОсновнойПроект;
 док.Записать(РежимЗаписиДокумента.Проведение);
  КонецЕсли;
КонецЦикла;
КонецЦикла;

КонецПроцедуры

Всё вроде работает, но часть документов не обрабатывается, а остается так же пусто в табличной части значение "Проект". Что не так?
1 Данил Сергеевич
 
12.06.13
10:48
Конфигурация УПП, делаю в демобазе
2 shuhard
 
12.06.13
10:54
(0)[ док.Записать(РежимЗаписиДокумента.Проведение);
  КонецЕсли;
КонецЦикла;
КонецЦикла;]
всё не так
3 jsmith82
 
12.06.13
10:55
пустой проект в договоре?
4 Данил Сергеевич
 
12.06.13
11:03
(2) А как сделать?
5 Mitriy
 
12.06.13
11:04
Сервис - Групповая обработка справочников и документов
6 Kreont
 
12.06.13
11:06
(5) через "это" не получится

(0) так может в договоре "ОсновнойПроект" не заполнен?
7 Данил Сергеевич
 
12.06.13
11:08
(6)Основной проект заполнен везде, это первым делом сделал и как раз "груповой обработкой..." а вот что мне надо ей не делается вы правы.
8 Kreont
 
12.06.13
11:12
ну для начала 100% строку:
док.Записать(РежимЗаписиДокумента.Проведение);
вынеси за цикл внутренний
9 Kreont
 
12.06.13
11:15
и проверку лучше делать через Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Проект)
может у тебя определено но не заполнено :)
10 Данил Сергеевич
 
12.06.13
11:24
(9) Да это уже понял, спасибо и сделал вот так.

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Докум = Документы.ПлатежноеПоручениеВходящее.Выбрать();   //НачДата,КонДата
Пока Докум.Следующий() Цикл
док = Докум.ПолучитьОбъект();
   
Для Каждого СтрокаТЧ ИЗ док.РасшифровкаПлатежа Цикл
  Если ЗначениеЗаполнено(СтрокаТЧ.Проект) = Ложь Тогда
 СтрокаТЧ.Проект = Докум.ДоговорКонтрагента.ОсновнойПроект;
 
КонецЕсли;

КонецЦикла;
док.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;

КонецПроцедуры


И вроде и там где не получалось изменилось, но остался один документ "Платежное поручение входящее", где в табличной части несколько строк, там не заполнено(. Что ещё можно поменять чтоб машина заработала?
11 Данил Сергеевич
 
12.06.13
11:32
(9)Kreont выручай я тебе СтартМаню переведу)))
12 Kreont
 
12.06.13
11:34
да один док.вручную исправь уже :)
13 Данил Сергеевич
 
12.06.13
11:41
(12) Надо чтоб программа отрабатывала, так как я потом на живую базу буду обрабатывать, а там может и все документы будут с множеством строк, да и сюда же мне потом надо будет затолкать такую же обработку для других типов документов: "Платежное поручение искходящее", "Расходный кассовый ордер", и т.д...
14 Dionis Sergeevich
 
12.06.13
11:50
(13) Так что не работает? Не все документы в выборку попадают?
15 Kreont
 
12.06.13
11:51
Еще неувязку вижу, смотри:
Докум = Документы.ПлатежноеПоручениеВходящее.Выбрать();
выбирает вроде все документы (и помеченные, и непроведенные тоже), а потом ниже уже проводишь

я б вообще выборку через запрос написал...

а с тч непонятно, по коду вроде норм :( пройдись пошагово отладчиком по тому документу где несколько строк
16 Dionis Sergeevich
 
12.06.13
11:56
Да кстати, запросом можно выбрать сразу тч и поставить условия на пустую ссылку, проведение и пометку удаления
17 Данил Сергеевич
 
12.06.13
17:44
(15) Разобрался всё работает, щас хочу оптимизировать через запрос, пишу :


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

А как дальше то всё это дело написать, чтоб реквизит табличной части "Проект" принял занчение реквизита "ДоговорКонтрагента.ОсновнойПроект" той же табличной части и потом всё это дело записалось...
18 Данил Сергеевич
 
12.06.13
18:07
Даю СтартМани за подсказку)))
19 Данил Сергеевич
 
12.06.13
18:32
Разобрался, может кому поможет:
Запрос = Новый Запрос;
    Запрос.Текст = " ВЫБРАТЬ
       |Ссылка,
       |Организация,
       |РасшифровкаПлатежа.Проект
       |Из
       |Документ.ПлатежноеПоручениеИсходящее
       |Где
       |РасшифровкаПлатежа.Проект = НЕОПРЕДЕЛЕНО";
       
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Док = Выборка.Ссылка.ПолучитьОбъект();
       Для каждого Строка Из Док.РасшифровкаПлатежа Цикл
           Строка.Проект = Строка.ДоговорКонтрагента.ОсновнойПроект;
    КонецЦикла;
   Док.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
20 Kreont
 
12.06.13
18:46
да че ты пристал со стартманями, я вообще хз что это такое :)