Форум программистов, компьютерный форум CyberForum.ru

1С: Собственные программы

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 1, средняя оценка - 4.00
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 152
#1

1C 8.x (тонкий) Обращение к данным реквизита табличной части документа - 1С

25.12.2016, 16:07. Просмотров 239. Ответов 6
Метки нет (Все метки)

Всем привет, уже полдня парюсь над проблемой, нужна ваша подмога, голова дымит, уже не соображает. Есть документ Заказ, у него таблица Товары, в ней номенклатура (Справочник.Номенклатура), у которой в справочнике есть реквизит РазделЗаказа - не могу из модуля формы документа обратиться к таблице документа (нужен реквизит РазделЗаказа у номенклатуры, которая в таблице). Уже все перепробовал, такую фигню наворотил, вроде отрабатывает, но ощущение, что все должно быть проще. Вот код
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
&НаСервере
Функция ПолучитьРазделЗаказа(Номенклатура)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   Номенклатура.РазделЗаказа
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |
    |СГРУППИРОВАТЬ ПО
    |   Номенклатура.РазделЗаказа";
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    ТЗРазделЗаказа = Новый Массив;
    //ТЗРазделСчетЗаказа.Колонки.Добавить("РазделЗаказа");
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //РазделЗаказа  = ВыборкаДетальныеЗаписи.РазделЗаказа;
        //Стр = ТЗРазделЗаказа.Добавить() ;
        //Стр.РазделЗаказа = ВыборкаДетальныеЗаписи.РазделЗаказа;
        Структура = Новый Структура;
        Структура.Вставить("РазделЗаказа", ВыборкаДетальныеЗаписи.РазделЗаказа);
        ТЗРазделЗаказа.Добавить(Структура);
    КонецЦикла;
    
    Возврат ТЗРазделЗаказа;
 
    
КонецФункции
 
&НаКлиенте
Процедура Распечатать(ТабДок, МассивПараметрКоманды)
    
    //Для Каждого Стр из Объект.Товары Цикл
    //  
    //  ТЗНоменклатура = Стр.Номенклатура;
    //  
    //КонецЦикла;
    //Массив = Новый Массив;
    //Для каждого Стр из Объект.Товары Цикл
    //  Структ = Новый Структура("Номенклатура");
    //  Структ.Номенклатура = Стр.Номенклатура;  
    //  Массив.Добавить(Структ);
    // КонецЦикла;
    ТЗРазделЗаказа = ПолучитьРазделЗаказа(Элементы.Товары.ТекущиеДанные.Номенклатура);
    Для Каждого ЭлементМассива из ТЗРазделЗаказа Цикл
        Если  Строка(ЭлементМассива.РазделЗаказа) = "Р_1" Тогда
            РазделЗаказа1 = "Р_1";
        КонецЕсли;
        Если Строка(ЭлементМассива.РазделЗаказа) = "Р_2" Тогда
            РазделЗаказа2 = "Р_2";
        КонецЕсли;
        КонецЦикла;
        Если ЗначениеЗаполнено(РазделЗаказа1) Тогда
            ТабДок = Новый ТабличныйДокумент;
            МассивПараметрКоманды = Новый Массив;
            МассивПараметрКоманды.Добавить(Объект.Ссылка);
            ПечатьП1(ТабДок, МассивПараметрКоманды);
            ТабДок.Показать("п.1 Распоряжение на склад");
        КонецЕсли;
        Если ЗначениеЗаполнено(РазделЗаказа2) Тогда
            ТабДок = Новый ТабличныйДокумент;
            МассивПараметрКоманды = Новый Массив;
            МассивПараметрКоманды.Добавить(Объект.Ссылка);
            ПечатьП2(ТабДок, МассивПараметрКоманды);
            ТабДок.Показать("п.2 Распоряжение транспортной службе");
        КонецЕсли;
    
КонецПроцедуры
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2016, 16:07     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа
Посмотрите здесь:

Присвоение значения реквизита к табличной части 1С 1C 8.x
Отображение не стандартного реквизита справочника в табличной части документа 1С
Автоматическое заполнение табличной части документа при изменении реквизита этого документа 1С
Заполнение табличной части документа при выборе реквизита 1С 1C 8.x
Обращение к табличной части конкретного документа в измерении регистра сведейний 1С
1С Отбор по данным табличной части справочника
Из одного документа получить данные табличной части другого документа 1С
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
engel89
1 / 1 / 1
Регистрация: 23.12.2016
Сообщений: 17
26.12.2016, 14:35     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа #2
Если правильно понял суть вопроса, то:

серверную часть я бы так сделал,

1C
1
2
3
4
5
6
&НаСервере
Функция ПолучитьРазделЗаказа(Номенклатура)
 
 Возврат Номенклатура.РазделЗаказа; 
    
КонецФункции
в итоге функция вернет данные реквизита РазделЗаказа номенклатуры в реквизит табличной части документа по номенклатуре, указанной в табличной части, чтобы вернула, на клиенте должен отработать код

1C
1
2
ТекДанные = Элементы.Товары.ТекущиеДанные;
    ТекДанные.РазделЗаказа= ПолучитьРазделЗаказа(ТекДанные.Номенклатура);
Добавлено через 14 минут
А, дошло, вы пытаетесь обратиться к табличной части документа, тогда ваш вариант подходит)
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 152
26.12.2016, 20:08  [ТС]     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В итоге: как я и думал, можно было все покороче обыграть (два вечера пришлось попыхтеть, перед НГ голова совсем не варит), получилось так (может кому пригодится):
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
&НаСервере
Функция ПолучитьРазделЗаказа(Номенклатура)
    
    МассивРЗ = Новый Массив;
    Для Каждого ТекущаяСтрока Из Объект.Товары Цикл
        МассивРЗ.Добавить(ТекущаяСтрока.Номенклатура.РазделЗаказа);
    КонецЦикла;
    
    Возврат МассивРЗ;
    
КонецФункции
 
&НаКлиенте
Процедура Распечатать(ТабДок, МассивПараметрКоманды)
 
    РазделЗаказа = ПолучитьРазделЗаказа(Объект.Ссылка);
    Для Каждого ЭлементМассива из РазделСчетЗаказа Цикл
        Если  Строка(ЭлементМассива) = "Р_1" Тогда
            РазделЗаказа1 = "Р_1";
        КонецЕсли;
        Если Строка(ЭлементМассива) = "Р_2" Тогда
            РазделЗаказа2 = "Р_2";
        КонецЕсли;
    КонецЦикла;
    ТабДок = Новый ТабличныйДокумент;
    ТабДок2 = Новый ТабличныйДокумент;
 
    МассивПараметрКоманды = Новый Массив;
    МассивПараметрКоманды.Добавить(Объект.Ссылка);
    //п.1
    Если ЗначениеЗаполнено(РазделЗаказа1) Тогда
        ПечатьП1(ТабДок, МассивПараметрКоманды);
        ТабДок.Показать("п.1 Распоряжение на склад");
    КонецЕсли;
    //п.2
    Если ЗначениеЗаполнено(РазделЗаказа2) Тогда
        ПечатьП2(ТабДок2, МассивПараметрКоманды);
        ТабДок2.Показать("п.2 Распоряжение транспортной службе");
    КонецЕсли;
КонецПроцедуры
Joker_vad
451 / 392 / 47
Регистрация: 26.09.2012
Сообщений: 1,689
28.12.2016, 17:20     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа #4
Табличный документ можно заполнять и на сервере, да и принято их заполнять на сервере, где все реквизиты доступны. А на клиенте их только показать
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 152
28.12.2016, 17:30  [ТС]     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа #5
Они и заполняются на сервере (Процедуры ПечатьП1 и ПечатьП2 потом на сервере выполняются). В данной задаче, мне надо было отработать так, что в зависимости от РазделаЗаказа (реквизит у номенклатуры, которая находится в табличной части текущего документа) выводился на печать определенный макет (т.к. в табличной части номенклатура может быть как и с разделом П1, так и с разделом П2 (но на самом деле у меня там 9 макетов и 9 разделов))
Joker_vad
451 / 392 / 47
Регистрация: 26.09.2012
Сообщений: 1,689
28.12.2016, 17:35     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа #6
Все равно не понимаю этих прыжков с клиента на сервер. Да и ладно, работает - нетрож. Особо тут не на оптимизируешь.
Dethmontt
28.12.2016, 17:46     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа
  #7

Не по теме:

zersturen, ничего... Через ГОД или ДВА посмотришь на свое творение и скажешь "ёёёёёёёёёёёёёёёёёё..... как я мог такое написать...?" )))

Yandex
Объявления
28.12.2016, 17:46     1C 8.x (тонкий) Обращение к данным реквизита табличной части документа
Ответ Создать тему
Опции темы

Текущее время: 20:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru