Имя: Пароль:
1C
1С v8
Заполнение поля ввода в табличной части
0 Gill
 
10.11.11
16:29
Привет всем!
Есть ТЧ документа след.вида:
№стр Работник Техника   ВидРаботы          ПутевойЛист
1    Иванов   Камаз     Перевозка товара   ...
2    Петров   ГАЗ       Перевозка товара   ...

На форме приделана кнопка процедура которой по каждой строке создает документ ПутевойЛист.Вопрос: у меня в текущем примере создасться 2 путевых листа, как заполнить реквизиты ТЧ в поле ПутевойЛист соответствующими ссылками на созданные документы?

...
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
       
ТЧДанные=Запрос.Выполнить().Выгрузить();
       Информация=ТЧДанные.Скопировать(,"Работник,Техника");
       Информация.Свернуть("Работник,Техника");
       
Для каждого Очередной из Информация цикл
           
ПутевойЛистАвто=Документы.ПутевойЛистАвтотранспорта.СоздатьДокумент();
ПутевойЛистАвто.Дата = Дата + 1;
ПутевойЛистАвто.Организация = Организация;
ПутевойЛистАвто.Водитель=Очередной.Работник;
ПутевойЛистАвто.ТранспортноеСредство=Очередной.Техника;

Состав=ТЧДанные.НайтиСтроки(Новый Структура("Работник,Техника",Очередной.Работник, Очередной.Техника));
Для каждого СтрокаСДанными из Состав цикл
СтрокаТЧ=ПутевойЛистАвто.ТЧЗадание.Добавить();
...
СтрокаТЧ.ВидРаботы=СтрокаСДанными.ВидРаботы;
КонецЦикла;    
ПутевойЛистАвто.Записать(РежимЗаписиДокумента.Запись);
ЭтотОбъект.Записать();            
Форма=ПутевойЛистАвто.ПолучитьФорму();
Форма.Открыть();    
КонецЦикла;
1 DrShad
 
10.11.11
16:38
код в топку
2 Gill
 
10.11.11
16:54
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
       |    СводныйПланРабот.Работник,        
               |    СводныйПланРабот.Техника,
       |    СводныйПланРабот.ВидРаботы
       |ИЗ
       |    Документ.СводныйПлан.Работы КАК СводныйПланРаботы
       |ГДЕ
       |    СводныйПланРаботы.Ссылка = &ТекущийДокумент";
       
Запрос.УстановитьПараметр("ТекущийДокумент",ДокументОбъект.Ссылка);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
       
ТЧДанные=Запрос.Выполнить().Выгрузить();
       Информация=ТЧДанные.Скопировать(,"Работник,Техника");
       Информация.Свернуть("Работник,Техника");
       
Для каждого Очередной из Информация цикл
           
ПутевойЛистАвто=Документы.ПутевойЛистАвтотранспорта.СоздатьДокумент();
ПутевойЛистАвто.Дата = Дата + 1;
ПутевойЛистАвто.Организация = Организация;
ПутевойЛистАвто.Водитель=Очередной.Работник;
ПутевойЛистАвто.ТранспортноеСредство=Очередной.Техника;

Состав=ТЧДанные.НайтиСтроки(Новый Структура("Работник,Техника",Очередной.Работник, Очередной.Техника));
Для каждого СтрокаСДанными из Состав цикл
СтрокаТЧ=ПутевойЛистАвто.ТЧЗадание.Добавить();
...
СтрокаТЧ.ВидРаботы=СтрокаСДанными.ВидРаботы;
КонецЦикла;    
ПутевойЛистАвто.Записать(РежимЗаписиДокумента.Запись);
ЭтотОбъект.Записать();            
Форма=ПутевойЛистАвто.ПолучитьФорму();
Форма.Открыть();    
КонецЦикла;
3 Gill
 
10.11.11
17:09
^
4 Maxus43
 
10.11.11
17:11
см. (1)
5 Gill
 
10.11.11
17:14
(1),(3)какой еще код вы имеете ввиду?
6 Maxus43
 
10.11.11
17:15
по делу об "как заполнить реквизиты ТЧ в поле ПутевойЛист соответствующими ссылками на созданные документы?"

После записи каждого документа запоминай их ссылки, например в массив. После записи всех доков будеш иметь ссылки на новые документы
7 Gill
 
10.11.11
17:17
(6) а как прописывать соответствие строки ТЧ к созданному документу?
8 Maxus43
 
10.11.11
17:20
в документе "Документ.СводныйПлан.Работы" в таком случае обычно ставится реквизит в этой ТЧ, и там ссылки на новые доки
9 Gill
 
10.11.11
17:22
(8) реквизит в ТЧ Работы у меня имеется - Наряд (тип ДокументСсылка.ПутевойЛистАвтотранспорта), я не врубаюсь как именно записать созданный док в этот реквизит
10 Шапокляк
 
10.11.11
17:25
(7) Добавьте в таблицу Информация колонку со ссылкой на создаваемые документы. После того как все документы создадутся, шебуршите таблицу Информация и заполняйте строки в своем документе.
11 Gill
 
10.11.11
17:25
(8) если я напишу
Для каждого СтрокаТЧ из Работы цикл
СтрокаТЧ.Наряд = ПутевойЛистАвто.Ссылка
КонецЦикла

//у меня в обе строки ТЧ Работы записывается один и тот же наряд, хотя их создалось 2
12 Maxus43
 
10.11.11
17:28
ПутевойЛистАвто.Записать(РежимЗаписиДокумента.Запись);
СтрокаТЧ.Наряд = ПутевойЛистАвто.Ссылка

не?
13 hhhh
 
10.11.11
17:33
(12) похоже СтрокаТЧ у него в документе ПутевойЛист. А в (11) это он хочет в ЭтотОбъект записать строку.
14 Gill
 
10.11.11
17:35
(13) Да, мне нужно именно в текущий документ записать ссылку на созданный путевой лист, а не в сам путевой лист
15 Gill
 
10.11.11
17:35
+(14) точнее наоборот, мне нужно именно в текущий документ записать ссылку на созданный путевой лист, а не в сам путевой лист
16 Maxus43
 
10.11.11
17:39
(14)(15) не пиши так больше, я чуть не завис пока отличия пытался найти
17 Gill
 
10.11.11
17:43
в конце кода из (2) пишу
Для каждого СтрокаТЧ из Работы цикл
СтрокаТЧ.Наряд = ПутевойЛистАвто.Ссылка
КонецЦикла

и в итоге в каждую строку записывается ссылка на один и тот же созданный документ, а не 2 разных как нужно
18 Maxus43
 
10.11.11
17:44
(17) > (6). а я домой
19 Шапокляк
 
10.11.11
17:51
(17) Вы, судя по коду, делаете следующее:
В открытой форме документа запускаете формирование путевых листов. Для этого вы запросом по табличной части работы получаете таблицу значений Информация, строк в которой столько,сколько сочетаний Работник-Техника - и столько же путевых листов будет создано. Так?
20 Gill
 
10.11.11
17:51
(19) да, именно так
21 hhhh
 
10.11.11
17:52
(20) наверно, уже нужно

Состав=Работы.НайтиСтроки(Новый Структура("Работник,Техника",Очередной.Работник, Очередной.Техника));
Для каждого СтрокаТЧ из Состав цикл
СтрокаТЧ.Наряд = ПутевойЛистАвто.Ссылка
КонецЦикла
22 Шапокляк
 
10.11.11
17:53
(20) Ну вот. Значит, вам надо после формирования таблицы значений Информация добавить в нее колонку Путевой лист. В процессе обхода цикла по строкам Информация не просто создавать ПутевойЛист, но и записывать ссылку на него в колонку таблицы Информация.
23 Gill
 
10.11.11
17:54
(21) мне нужно добавлять ссылку не в создаваемом документе, а в текущем (из которого) создается путевой лист
24 Шапокляк
 
10.11.11
17:56
Таким образом, после формирования всех путевых листов у вас будет таблица Информация, в каждой строке которой будет Работник, Техника, ПутевойЛист.
Дальше переберите строки этой таблицы Информация и для каждой строки найдите в своей табличной части Работы такие строки, в которых такие же Работник и Техника и запишите туда Путевой лист из перебираемой строки Информации.
25 Gill
 
10.11.11
18:00
(24) понять бы еще как это сделать с использованием встренного языка 1с
26 Шапокляк
 
10.11.11
18:03
ПЕРВАЯ ЧАСТЬ

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

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
       
ТЧДанные=Запрос.Выполнить().Выгрузить();
       Информация=ТЧДанные.Скопировать(,"Работник,Техника");
       Информация.Свернуть("Работник,Техника");
////////////ВОТ ТУТА
Информация.Колонки.Добавить("ПутевойЛист");
       
Для каждого Очередной из Информация цикл
           
ПутевойЛистАвто=Документы.ПутевойЛистАвтотранспорта.СоздатьДокумент();
ПутевойЛистАвто.Дата = Дата + 1;
ПутевойЛистАвто.Организация = Организация;
ПутевойЛистАвто.Водитель=Очередной.Работник;
ПутевойЛистАвто.ТранспортноеСредство=Очередной.Техника;

Состав=ТЧДанные.НайтиСтроки(Новый Структура("Работник,Техника",Очередной.Работник, Очередной.Техника));
Для каждого СтрокаСДанными из Состав цикл
СтрокаТЧ=ПутевойЛистАвто.ТЧЗадание.Добавить();
...
СтрокаТЧ.ВидРаботы=СтрокаСДанными.ВидРаботы;


КонецЦикла;    
ПутевойЛистАвто.Записать(РежимЗаписиДокумента.Запись);
////// И ТУТА
Очередной.ПутевойЛист=ПутевойЛистАвто.ссылка;
ЭтотОбъект.Записать();  /// НАФИГ не надо          
Форма=ПутевойЛистАвто.ПолучитьФорму();
Форма.Открыть();    
КонецЦикла;
27 Шапокляк
 
10.11.11
18:05
ДАЛЕЕ:
Для каждого Стр Из Информация Цикл
Для Каждого СтрРаботники Из Работы Цикл
Если СтрРаботники.Работа=Стр.Работа И СтрРаботники.Техника=Стр.Техника тогда
СтрРаботники.КакойТамНадоРеквизит=Стр.Путевойлист;
КонецЦикла;
КонецЦикла;
28 Шапокляк
 
10.11.11
18:06
пардон
Если СтрРаботники.Работа=Стр.Работа И СтрРаботники.Техника=Стр.Техника тогда
СтрРаботники.КакойТамНадоРеквизит=Стр.Путевойлист;

КонецЕсли;

КонецЦикла;
КонецЦикла;
29 Шапокляк
 
10.11.11
18:12
* (28)Работа=Работник
30 Gill
 
10.11.11
18:14
(26),(28) Всё получилось, спасибо Вам!!!
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший