Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Заполнение ТЧ на форме по выбору в другой ТЧ
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
EvgenM
Добрый день или другого времени суток.

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

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



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

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

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

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


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

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

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


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

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



 ! 

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


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





 ! 

Правила, 11! В следующий раз картинки будут удалены.
 
sava1
результат запроса в массив, вернуть клиенту, заполнить ТП
EvgenM
Цитата(sava1 @ 01.10.14, 13:13) необходимо зарегистрироваться для просмотра ссылки
результат запроса в массив, вернуть клиенту, заполнить ТП

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

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

В типовых в общем модуле есть функция
ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт

EvgenM
Цитата(sava1 @ 01.10.14, 14:25) необходимо зарегистрироваться для просмотра ссылки
Код покажите

В пером посте ото и весь код.
Возврат и заполнение ТЧ так и не осилил.
Цитата(sava1 @ 01.10.14, 14:25) необходимо зарегистрироваться для просмотра ссылки
В типовых в общем модуле есть функция
ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт

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

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

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

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

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

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


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

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

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

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

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

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



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


Теперь уходит в цикл и сидит там - пока не прекращаю отладку.
logist
Цитата(EvgenM @ 06.10.14, 13:58) необходимо зарегистрироваться для просмотра ссылки
Результат = Запрос.ВыполнитьПакет();

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


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


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


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

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.