Имя: Пароль:
1C
1С v8
Как действует метод Присоединить()?
, ,
0 Gossar1C
 
22.08.13
11:40
Здравствуйте!
Подскажите пожалуйста, немогу как присоединить область штуки к номенклатуре, присоединяется почему то на следующей строке хотя:

ТабличныйДокумент (SpreadsheetDocument)
Присоединить (Join)
Синтаксис:

Присоединить(<Таблица>, <Уровень>, <ИмяГруппы>, <Открыта>)

Описание:

Присоединяет табличный документ к результирующему табличному документу, [b]помещая его в следующей колонке правее самой правой выведенной колонки[/b], начиная со строки, с которой выводился предыдущий табличный документ.


http://s017.radikal.ru/i404/1308/bb/33831f0b3506.jpg
1 SnarkHunter
 
22.08.13
11:41
Даже самым исправным инструментом можно испортить исходный материал.
2 Rie
 
22.08.13
11:42
(0) Может (так, для разнообразия) код покажешь?
3 Fedot200
 
22.08.13
11:44
(0) какой-то аляпетский атчёт и так и работает
4 Gossar1C
 
22.08.13
11:46
(2) код смехотворный, просто я в отчетах вообще не шарю и как построить нормально его не понимаю... СКД не предлагайте, мне нужна обработка чтобы потом по складам формировать заказ поставщику
5 Gossar1C
 
22.08.13
11:46
Процедура ВыполнитьФормированиеОтчета()
    
    Данные = ЗаполнитьДанныеДляОтчета();
    
    Макет  = ПолучитьОбщийМакет("МакетОтчетаПоСкладам");
    
    ДанныеЗаполнения = Данные.ТаблицаДанных.Выбрать();
    
    ТаблицаСкладов = Новый ТаблицаЗначений;
    ТаблицаСкладов.Колонки.Добавить("Склад");
    ТаблицаСкладов.Колонки.Добавить("Номенклатура");  
        
    
    Пока ДанныеЗаполнения.Следующий() Цикл  
        
        ДанныеЗаполненияПоСкладам = Неопределено;
        ДанныеЗаполненияПоСкладам = ДанныеЗаполнения.ТаблицаТоваров.Выгрузить();
        Для Каждого Элем Из ДанныеЗаполненияПоСкладам Цикл
            НоваяСтрока = ТаблицаСкладов.Добавить();
            НоваяСтрока.Склад =  Элем.Номенклатура.Склад;
            НоваяСтрока.Номенклатура = Элем.Номенклатура;
        КонецЦикла;
    КонецЦикла;    
    


    
    ТаблицаНоменклатуры = ТаблицаСкладов.Скопировать();
    
    ТаблицаСкладов.Свернуть("Склад");
        
    ОбластьШапкаТаблицыЗаказы        = Макет.ПолучитьОбласть("R1C1:R2C5");
    ОбластьДанныеТаблицыСклад          = Макет.ПолучитьОбласть("R3C1:R4C5");
    ОбластьДанныеТаблицыНоменклатура = Макет.ПолучитьОбласть("R5C1:R5C5");
    ОбластьДанныеТаблицыЗаказы          = Макет.ПолучитьОбласть("ДанныеТаблицыЗаказы");
    ОбластьДанныеТаблицыШтуки         = Макет.ПолучитьОбласть("ДанныеТаблицыНоменклатуры|ДанныеТаблицыШтуки");
    
    Объект.ПолеОтчета.Вывести(ОбластьШапкаТаблицыЗаказы);

    
    СтрП = 0;
    Проверка = Истина;
    
    Уровень = 0;
    Стр = 0;
        
    Для Каждого ЭлементСклада ИЗ ТаблицаСкладов Цикл                  
        ОбластьДанныеТаблицыСклад.Параметры.Склад = ?(ЗначениеЗаполнено(ЭлементСклада.Склад),ЭлементСклада.Склад,"<не указан>");
        Объект.ПолеОтчета.Вывести(ОбластьДанныеТаблицыСклад,Стр);    
        
        СтруктураПоиска = Новый Структура;
        СтруктураПоиска.Вставить("Склад",ЭлементСклада.Склад);
        МассивНайденных = ТаблицаНоменклатуры.НайтиСтроки(СтруктураПоиска);
        
        
        
        Для Стр = 0 По МассивНайденных.Количество() Цикл
            Если Стр <> МассивНайденных.Количество() Тогда

                Если Проверка = Истина Тогда
                    Для СтрП = 0 По Данные.ТаблицаДанных.Выбрать().Количество() Цикл
                        Если СтрП <> Данные.ТаблицаДанных.Выбрать().Количество() Тогда
                            ОбластьДанныеТаблицыШтуки.Параметры.Штуки = СтрП;
                            ОбластьДанныеТаблицыНоменклатура.Присоединить(ОбластьДанныеТаблицыШтуки);
                            Проверка = Ложь;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
                
                //Добавляем номенклатуру                   
                ОбластьДанныеТаблицыНоменклатура.Параметры.Номенклатура = МассивНайденных[Стр].Номенклатура;
                
                Объект.ПолеОтчета.Вывести(ОбластьДанныеТаблицыНоменклатура,Стр);  
                
                
            КонецЕсли;
        КонецЦикла;
        
        
        
        Стр = Стр + 1;
    КонецЦикла;
    
    ДанныеЗаполненияШапки = Данные.ТаблицаДанных.Выбрать();
    
    Пока ДанныеЗаполненияШапки.Следующий()Цикл  
        
        ГотоваяСтрока = Сред(Строка(ДанныеЗаполненияШапки.Ссылка),Найти(ДанныеЗаполненияШапки.Ссылка,"РН"),11);
                
        ОбластьДанныеТаблицыЗаказы.Параметры.Ссылка = ГотоваяСтрока;
        
        Объект.ПолеОтчета.Вывести(ОбластьДанныеТаблицыЗаказы,ДанныеЗаполненияШапки.Уровень());
                
    КонецЦикла;

    
    
КонецПроцедуры
6 Gossar1C
 
22.08.13
11:48
каких то серьезных областей кода искать не стоит, пока что просто хочу разобраться как правильно выводить все, в том числе  штуки для каждой номенклатуры и сколько их в каждом заказе
7 Fedot200
 
22.08.13
11:52
ОбластьШапкаТаблицыЗаказы        = Макет.ПолучитьОбласть("R1C1:R2C5");  а зачем такие извраты?
8 Rie
 
22.08.13
11:54
(5) Этот код:
выводит склад
справа от склада выводит штуки
потом, с новой строки, - номенклатуру
9 Gossar1C
 
22.08.13
11:55
(7) таки я конректно ячейку с картинкой получаю, если я буду по именам областей делать они делают какие то отступы, скорее всего связанные из за пересечения
10 Rie
 
22.08.13
11:56
+(8) Не знаю, как там тебе надо, но надо:
сначала Вывести() то, что слева
потом Присоединить() то, что правее
11 Kalac
 
22.08.13
11:59
(10) Либо поиграть с Итогами и обходами результата запроса для кросс-отчета
12 Gossar1C
 
22.08.13
12:00
(10) а как же мне штуки потом подсчитывать? я вот вывожу первую номенклатуру в этом складе потом ищу ее в первом заказе
заполняю параметр "штуки", далее присоединяю область, ищу в следующем заказе, и так по количество заказов, а следующую номенклатуру как обрабатывать? ведь области уже присоеденины...
13 Kalac
 
22.08.13
12:01
(12) Сначала шапку заполняешь методом присоединить, потом выводишь последовательно номенклатуру вывести и добиваешь ячейки по горизонтали методом присоединить
14 palpetrovich
 
22.08.13
12:07
цвета - вырвиглаз :)
15 Gossar1C
 
22.08.13
12:08
(13) к Области номенклатуры я присоединю допустим 10 областей ОбластьШтук и ОбластьНоменклатуры уже будет с этими областями, тоесть я первую номенклатуру заполню штуками, а вторая и следующие будут с таким же количеством штук в каждом заказе, потому что
в первый раз мы уже Присоединили к ОбластиНоменклатуры 10 областей ОбластьШтук и заполнили их, незнаю как еще объяснить четко...
16 Gossar1C
 
22.08.13
13:29
up
17 Fedot200
 
22.08.13
13:36
(15) Может дело в запросе?
18 Rie
 
22.08.13
14:01
А зачем столько мучений, если есть СКД?
19 Gossar1C
 
22.08.13
15:43
(17) дело не в данных, а в областях, когда я первый раз присоединю 10 областей они уже будут висеть и для второго и для третьего, дело в том как к ним потом обращаться? вот первые области штук я их заполнил (первой строки номенклатуры), а во второй строке номенклатуры как их уже заполнять? я ведь заполняю когда присоединяю

к примеру

Номенклатура1 +ОбластьШтук(4шт. по Заказу1) +ОбластьШтук(6шт. по Заказу2)

Номенклатура2 +ОбластьШтук(4шт. по Заказу1) +ОбластьШтук(6шт. по Заказу2)

а все потому что они уже присоеденины и заполнены
20 Gossar1C
 
22.08.13
15:45
Первый = Истина;
СтрП = 0;    
Уровень = 0;
Стр = 0;
        
Для Каждого ЭлементСклада ИЗ ТаблицаСкладов Цикл        
        
        ОбластьДанныеТаблицыСклад.Параметры.Склад = ?(ЗначениеЗаполнено(ЭлементСклада.Склад),ЭлементСклада.Склад,"<не указан>");
        Объект.ПолеОтчета.Вывести(ОбластьДанныеТаблицыСклад,Стр);    
        
        СтруктураПоиска = Новый Структура;
        СтруктураПоиска.Вставить("Склад",ЭлементСклада.Склад);
        МассивНайденных = ТаблицаНоменклатуры.НайтиСтроки(СтруктураПоиска);
        
        
        
        Для Стр = 0 По МассивНайденных.Количество() Цикл
            Если Стр <> МассивНайденных.Количество() Тогда
                
                //Добавляем номенклатуру                   
                ОбластьДанныеТаблицыНоменклатура.Параметры.Номенклатура = МассивНайденных[Стр].Номенклатура;
    
                Если Первый Тогда
                    Для СтрП = 0 По Данные.ТаблицаДанных.Выбрать().Количество() Цикл
                        Если СтрП <> Данные.ТаблицаДанных.Выбрать().Количество() Тогда
                              ОбластьДанныеТаблицыНоменклатура.Присоединить(ОбластьДанныеТаблицыШтуки);
                        КонецЕсли;
                    КонецЦикла;
                    Первый = Ложь;
                КонецЕсли;
            
        ОбластьДанныеТаблицыНоменклатура.Присоединить(ОбластьДанныеТаблицыНоменклатура);      
                                    
            КонецЕсли;
        КонецЦикла;
21 Gossar1C
 
22.08.13
15:47
сори строчку не затер, вместо ОбластьДанныеТаблицыНоменклатура.Присоединить(ОбластьДанныеТаблицыНоменклатура); Объект.ПолеОтчета.Вывести(ОбластьДанныеТаблицыНоменклатура,Стр);
22 Gossar1C
 
22.08.13
15:53
(18) в СКД можно сделать кнопочку на форме, и этой кнопочкой обращаться к данным которые выведены в отчет и формировать заказ поставщику?
23 Gossar1C
 
22.08.13
16:09
все разобрался) всем спасибо за помощь и наводки) внимательно почитал СП и метод присоединить(), Надо присоединять не к области, а обращаться сразу к Отчету тоесть Объект.ПолеОтчета.Присоединить(ОбластьШтук) и все отлично)
AdBlock убивает бесплатный контент. 1Сергей