Версия для печати темы (https://pro1c.org.ua/index.php?s=87e48b50f379559c07e1c765aa070a78&showtopic=20026)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Заполнение ТЧ на форме по выбору в другой ТЧ

Автор: EvgenM 01.10.14, 11:16

Добрый день или другого времени суток.

УНФ для Украины, редакция 1.3
Управляемые формы.

Возникла необходимость сделать рабочее место технолога.
Что бы было видно какой товар обладает спецификацией и его содержимое.
Для этого создал обработку, навесил на три табличные части и динамический список(номенклатура).



Создал событие на динамическом списке "ПриАктивизацииЯчейки".

&НаКлиенте
Процедура НоменклатураПриАктивизацииЯчейки(Элемент)
        Сообщить("111");

       СТЧ = Элементы.Номенклатура.ТекущаяСтрока;
      
       СТЧ2 = Элементы.Номенклатура.ТекущиеДанные;
      
   Если  СТЧ2.Артикул <> ""   тогда
          
            ТехнологРасчет(СТЧ);  
          
        
            КонецЕсли;    

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


С помощью нее делаю выборку ссылки текущего выбранного значения в справочнике.
И передаю значение в процедуру на сервер, где вытаскиваю саму спецификацию.

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

          //
  
  КонецПроцедуры // ТехнологРасчет()


Но как ее загрузить в таблицу "СпецификацияПродукции" никак не могу разобраться.
Нашел множество подобных примеров, выкачал некоторые обработки с похожим принципом, но ниче не выходит.

Отвечу сразу на так любимый некоторыми совет : "М.Г.Радченко" читаю.



 ! 

Правила,п. 5,11
 


Картинка не вставилась.

Автор: EvgenM 01.10.14, 12:26

logist, извиняюсь, переделал.





 ! 

Правила, 11! В следующий раз картинки будут удалены.
 

Автор: sava1 01.10.14, 13:13

результат запроса в массив, вернуть клиенту, заполнить ТП

Автор: EvgenM 01.10.14, 13:34

Цитата(sava1 @ 01.10.14, 13:13) *
результат запроса в массив, вернуть клиенту, заполнить ТП

Вот на этом пункте и застрял.
Не сумел нормально вернуть клиенту и заполнить ТЧ.
При возвращении на клиента ругается, что обращаюсь к процедуре как к функции.
Другие варианты просто писали, что превышен временный интервал.

Названия выводимые в запросе и самой ТЧ совпадают.

Автор: sava1 01.10.14, 14:25

Код покажите

В типовых в общем модуле есть функция

ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт


Автор: EvgenM 01.10.14, 14:37

Цитата(sava1 @ 01.10.14, 14:25) http://pro1c.org.ua/index.php?act=findpost&pid=91734
В типовых в общем модуле есть функция
ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт

Спасибо, сейчас ее смотрю.


Автор: sava1 01.10.14, 14:48

примера:

&НаСервере
Функция ЗаполнитьМагазины()
    Массив = Новый Массив;
    Структура = Новый Структура("НомерМагазина","НомерМагазина","НаименованиеВСАП","ТорговаяПлощадь","ДатаОткрытия","Комп","ТипМагазина","Регион");
    й = 0;
    Для Каждого Стр Из Т Цикл
        Структура.Вставить("ГУИД",Стр.ГУИД);
        Структура.Вставить("НомерМагазина",Стр.НомерМагазина);
        Структура.Вставить("НаименованиеВСАП",Стр.НаименованиеВСАП);
        Структура.Вставить("ТорговаяПлощадь",Стр.ТорговаяПлощадь);
        Структура.Вставить("ДатаОткрытия",Стр.ДатаОткрытия);
        Структура.Вставить("Комп",Стр.Комп);
        Структура.Вставить("ТипМагазина",Стр.ТипМагазина);
        Структура.Вставить("Регион",Стр.Регион);
        Массив.Вставить(й,Структура);    
        й = й +1;
    КонецЦикла;
    Возврат Массив;
КонецФункции

&НаКлиенте
Процедура ПрочитатьДанные(Команда)
    Магазины.Очистить();
    Массив = ЗаполнитьМагазины();
    й=0;
    Для Каждого Стр Из Массив Цикл
        Структура = Массив.Получить(й);
        й=й+1;
        НС = Магазины.Добавить();
        НС.ГУИД = Структура.ГУИД;
        НС.НомерМагазина = Структура.НомерМагазина;
        НС.НаименованиеВСАП = Структура.НаименованиеВСАП;
        НС.ТорговаяПлощадь = Структура.ТорговаяПлощадь;
        НС.ДатаОткрытия = Структура.ДатаОткрытия;
        НС.Комп = Структура.Комп;
        НС.ТипМагазина = Структура.ТипМагазина;
        НС.Регион = Структура.Регион;
    КонецЦикла;
КонецПроцедуры

Автор: EvgenM 02.10.14, 7:48

Цитата(sava1 @ 01.10.14, 14:48) *
примера:

Не получилось ничего.
Мелочи упускаю походу из внимания.

Автор: sava1 02.10.14, 10:08

свой код покажите

Если код остался с 1 поста, то - на сервере выполняется Функция, которая возвращает массив Клиенту

ИМХО: использование ПриАктивизацииСтроки() - слишком нагло по отношению к БД - лучше Выбор() или получать все СПецификации и управлять отбором.

Автор: Vofka 02.10.14, 10:11

Обратите внимание, что пишут в СП по поводу ПриАктивизацииСтроки():

Цитата
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.


У меня, кстати, однажды был не очень приятный нежданчик, связанный с игнорированием этого примечания.

Автор: logist 02.10.14, 11:49

Цитата(Vofka @ 02.10.14, 10:11) *
У меня, кстати, однажды был не очень приятный нежданчик, связанный с игнорированием этого примечания.

Использовать их можно, только осторожно smile.gif У меня есть одно решеннице, где использую такой вариант:
Процедура ПриАктивизацииСтроки()
Если ВыполнятьПриАктивизацииСтроки Тогда // это реквизит формы, который при открытии ложь, а при нужных действиях задается Истина
   // чего-то делаем
КонецЕсли;
КонецПроцедуры

Автор: EvgenM 06.10.14, 13:58

Надеялся таки разобраться, но чую основательно заглох.

Вот весь код используемый в модуле формы.

Элементы.Номенклатура - динамический список.
Элементы.Полуфабрикаты - табличная часть на форме.

&НаКлиенте
Процедура НоменклатураПриАктивизацииСтроки(Элемент)
    
    ОбработкаСписка();
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаСписка()
    
    СТЧ = Элементы.Номенклатура.ТекущаяСтрока;
    
    СТЧ2 = Элементы.Номенклатура.ТекущиеДанные;
    
    
    Если  СТЧ2.Артикул <> ""   тогда
        
        Массив=    ТехнологРасчет(СТЧ);  
        
        
        Для Каждого Стр Из Массив Цикл
            Структура = Массив;
            НС = Элементы.Полуфабрикаты.Добавить();
            НС.Наименование2 = Структура.Наименование2;
            НС.характеристика = Структура.характеристика;
        КонецЦикла;
        
    КонецЕсли;    
    
    
КонецПроцедуры



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


Теперь уходит в цикл и сидит там - пока не прекращаю отладку.

Автор: logist 06.10.14, 17:22

Цитата(EvgenM @ 06.10.14, 13:58) *
Результат = Запрос.ВыполнитьПакет();

У Вас тут Массив из результатов выполнения запросов. ВыполнитьПакет - это если в запросе есть пакеты. Один запрос это Запрос.Выполнить(). Массив из результата можно получить только одномерный, если хотите получить два, то надо что-то типа:
ТЗ = Запрос.Выполнить().Выгрузить();
Массив1 = ТЗ.ВыгрузитьКолонку("Наименование2");
Массив2 = ТЗ,ВыгрузитьКолонку("характеристика");
Результат = Новый Массив;
Результат.Добавить(Массив1);
Результат.Добавить(Массив2);


а вместо
Цитата
Массив= ТехнологРасчет(СТЧ);


Для Каждого Стр Из Массив Цикл
Структура = Массив;
НС = Элементы.Полуфабрикаты.Добавить();
НС.Наименование2 = Структура.Наименование2;
НС.характеристика = Структура.характеристика;
КонецЦикла;


Массив=    ТехнологРасчет(СТЧ);   
КоличествоСтрок = Массив[0].Количество()-1;
        Для Индекс = 0 По  КоличетсовСтрок Цикл
            НС = Элементы.Полуфабрикаты.Добавить();
            НС.Наименование2 = Массив[0][Индекс];
            НС.характеристика = Массив[1][Индекс];
        КонецЦикла;


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua