Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Заполнение ТЧ на форме по выбору в другой ТЧ          
EvgenM Подменю пользователя
сообщение 01.10.14, 11:16
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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



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

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

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

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


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

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

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


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

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



 ! 

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


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

Сообщение отредактировал logist - 01.10.14, 12:20

EvgenM Подменю пользователя
сообщение 01.10.14, 12:26
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

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





 ! 

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


Сообщение отредактировал Vofka - 01.10.14, 18:29

sava1 Подменю пользователя
сообщение 01.10.14, 13:13
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

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

EvgenM Подменю пользователя
сообщение 01.10.14, 13:34
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

sava1 Подменю пользователя
сообщение 01.10.14, 14:25
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Код покажите

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


EvgenM Подменю пользователя
сообщение 01.10.14, 14:37
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(sava1 @ 01.10.14, 14:25) *
Код покажите

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

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


sava1 Подменю пользователя
сообщение 01.10.14, 14:48
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

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

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

EvgenM Подменю пользователя
сообщение 02.10.14, 7:48
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

sava1 Подменю пользователя
сообщение 02.10.14, 10:08
Сообщение #9

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

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

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

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

Спасибо сказали: EvgenM,

Vofka Подменю пользователя
сообщение 02.10.14, 10:11
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

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


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

logist Подменю пользователя
сообщение 02.10.14, 11:49
Сообщение #11

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

EvgenM Подменю пользователя
сообщение 06.10.14, 13:58
Сообщение #12

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

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

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



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


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

logist Подменю пользователя
сообщение 06.10.14, 17:22
Сообщение #13

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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


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


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


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



Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: EvgenM,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 25.04.24, 1:55
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!