Имя: Пароль:
1C
1С v8
Автозаполнение табличной части документа из справочника
0 mila_99
 
17.05.18
20:11
Помогите:)
Документ создается программно и зависимости от номенклатуры надо записать табличную часть документа данными из справочника "ПереченьВходногоКонтроля".


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

    Возврат СписокПараметров;    

КонецФункции
1 Мимохожий Однако
 
17.05.18
20:54
(0) Объсни фрагмент
ПереченьВходногоКонтроля.ПараметрыПроверки.(
                   |        Ссылка КАК Ссылка,
                   |        НомерСтроки КАК НомерСтроки,
                   |        НаименованиеПараметров КАК НаименованиеПараметров,
                   |        ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                   |        ТУПараметра КАК ТУПараметра,
                   |        ТребованияКПараметру КАК ТребованияКПараметру
                   |    ) КАК ПараметрыПроверки
2 Mankubus
 
17.05.18
20:54
(0) вопрос то где?
3 AlvlSpb
 
17.05.18
21:09
(0) Функция ПолучитьПараметрыПроверки(Номенклатура) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПереченьВходногоКонтроля.ПараметрыПроверки.Ссылка.Номенклатура КАК Номенклатура,
                   |    ПереченьВходногоКонтроля.ПараметрыПроверки.НаименованиеПараметров КАК НаименованиеПараметров,
                   |     ПереченьВходногоКонтроля.ПараметрыПроверки.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                   |    ПереченьВходногоКонтроля.ПараметрыПроверки.ТУПараметра КАК ТУПараметра,
                   |    ПереченьВходногоКонтроля.ПараметрыПроверки.ТребованияКПараметру КАК ТребованияКПараметру
                   |ИЗ
                   |    Справочник.ПереченьВходногоКонтроля.ПараметрыПроверки КАК ПереченьВходногоКонтроля
                   |ГДЕ
                   |    ПереченьВходногоКонтроля.Ссылка.Номенклатура = &Номенклатура";
    
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Результат = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
        СписокПараметров = Новый Структура;
      
        СписокПараметров.Вставить("НаименованиеПараметров");
        СписокПараметров.Вставить("ЕдиницаИзмерения");
        СписокПараметров.Вставить("ТУПараметра");
        СписокПараметров.Вставить("ТребованияКПараметру");
    
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        СписокПараметров.НаименованиеПараметров = ВыборкаДетальныеЗаписи.НаименованиеПараметров;
        СписокПараметров.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.ЕдиницаИзмерения;
        СписокПараметров.ТУПараметра = ВыборкаДетальныеЗаписи.ТУПараметра;
        СписокПараметров.ТребованияКПараметру = ВыборкаДетальныеЗаписи..ТребованияКПараметру;
            
    КонецЦикла;

    Возврат СписокПараметров;    

КонецФункции
4 Доминошник
 
17.05.18
21:14
А какое отношение заголовок темы - "Автозаполнение табличной части документа" имеет к запросу, читающему табличную часть документа?
5 AlvlSpb
 
17.05.18
21:25
(3) Твою дивизию. Копировал и не убрал точки. Запрос не так

"ВЫБРАТЬ
                   |    ПереченьВходногоКонтроляПараметрыПроверки.Ссылка.Номенклатура КАК Номенклатура,
                   |    ПереченьВходногоКонтроляПараметрыПроверки.НаименованиеПараметров КАК НаименованиеПараметров,
                   |     ПереченьВходногоКонтроляПараметрыПроверки.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                   |    ПереченьВходногоКонтроляПараметрыПроверки.ТУПараметра КАК ТУПараметра,
                   |    ПереченьВходногоКонтроляПараметрыПроверки.ТребованияКПараметру КАК ТребованияКПараметру
                   |ИЗ
                   |    Справочник.ПереченьВходногоКонтроля.ПараметрыПроверки КАК ПереченьВходногоКонтроляПараметрыПроверки
                   |ГДЕ
                   |    ПереченьВходногоКонтроля.ПараметрыПроверки.Ссылка.Номенклатура = &Номенклатура";
6 mila_99
 
17.05.18
21:41
(5) подскажи, как правильно теперь обратиться к функции, чтобы все строки табличной части записывал в документ в коде:
&НаКлиенте
    Процедура СоздатьПротокол(Команда)
    ФормаОбъекта=ПолучитьФорму("Документ.ПротоколИспытанийИзделий.Форма.ФормаДокумента");
    ДанныеФормы=ФормаОбъекта.Объект;
    ДанныеФормы.Основание=Объект.Ссылка;

    ТекСтрока=Элементы.Номенклатура.ТекущиеДанные;
    ДанныеФормы.Наименование=ТекСтрока.Наименование;
    
    Для каждого НоваяСтрока из  ?  Цикл
        Парам1 = ПолучитьПараметрыПроверки(ТекСтрока.Наименование);
        НоваяСтрока = ДанныеФормы.Испытания.Добавить();
        НоваяСтрока.Номенклатура=Парам1.Наименование;
        НоваяСтрока.НаименованиеПараметров = Парам1.НаименованиеПараметров;
        НоваяСтрока.ЕдиницаИзмерения = Парам1.ЕдиницаИзмерения;
        НоваяСтрока.ТУПараметра = Парам1.ТУПараметра;
        НоваяСтрока.ТребованияКПараметру = Парам1.ТребованияКПараметру;
    КонецЦикла;

    Парам = ПолучитьЗаводскойНомер(ТекСтрока.Наименование);
    ДанныеФормы.ЗаводскойНомер = Парам.ЗаводскойНомер;
        
    КопироватьДанныеФормы(ДанныеФормы,ФормаОбъекта.Объект);
    ФормаОбъекта.Открыть();
    КонецПроцедуры
7 AlvlSpb
 
17.05.18
22:12
(6) Ну это вообще белиберда, извините. Лучше объясните, что вы хотите сделать
8 mila_99
 
17.05.18
22:13
в общем, создаю документ программно из другого документа.Мне нужно табличную часть создаваемого документа заполнить данными из справочника.как это сделать ?
9 AlvlSpb
 
17.05.18
22:26
(8) Чтобы долго не объяснять https://1c-programmer-blog.ru/programmirovanie/kak-otkryt-formu-s-zapolneniem.html Делаете вашу таблицу из справочника с такими же полями как у ТЧ открываемого документа и передаете ее как параметр в открываемую форму
Ну и вдогонку http://catalog.mista.ru/public/236382/
10 mila_99
 
17.05.18
23:42
не могу никак разобраться.как передать?
11 hhhh
 
18.05.18
06:27
(10) так как-то

Функция ПолучитьПараметрыПроверки(Номенклатура) Экспорт
+ Code

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


КонецФункции

и потом так




ДанныеФормы.Испытания.Загрузить(ПолучитьПараметрыПроверки(ТекСтрока.Наименование));
12 mila_99
 
18.05.18
22:27
выдает ошибку:
{Документ.НаправлениеНаВходнойКонтроль.Форма.ФормаДокумента.Форма(146)}: Ошибка при вызове метода контекста (ПолучитьПараметрыПроверки)
       ДанныеФормы.Испытания.Загрузить(ПолучитьПараметрыПроверки(ТекСтрока.Наименование));
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'
13 hhhh
 
18.05.18
23:09
(12) вы это на сервере делайте. не надо вам тут передачу между клиентом и сервером мутить.
14 mila_99
 
19.05.18
00:14
а теперь ошибку не выдает, но данные не заполняются. Появляется пустая строка