Имя: Пароль:
1C
1С v8
Заказ покупателя, учет производства часть 2. Оптимизация!
,
0 sora_tm
 
28.01.12
23:35
В продолжение темы
v8: Заказ покупателя, учет производства, тч.

Создал Справочник "ПроизводствоПродукции", реквизит "Номенклатура" и ТЧ ВидыРабот. Теперь в "Заказе покупателя" заполняется ТЧ "Производство", но код вышел адски кривой, как мне кажется, запрос в цикле некрасиво как то... Может кто подскажет лучший вариант как реализовать?


Процедура ЗаполнитьНажатие(Элемент)
   
   Запрос = Новый Запрос;    
   Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст = "
       |ВЫБРАТЬ
       |    Док.НомерСтроки,
       |    Док.Номенклатура        
       |ИЗ
       |    Документ.ЗаказПокупателя.Товары КАК Док
       |ГДЕ
       |    Док.Ссылка = &ТекущийДокумент";
   ВыборкаТоваров = Запрос.Выполнить().Выбрать();    
   
   Пока  ВыборкаТоваров.Следующий() цикл
       ПередНом = ("" + ВыборкаТоваров.Номенклатура +"");
       Сообщить(ПередНом);
       
       Запрос.УстановитьПараметр("ВТНоменклатура", ПередНом);
       Запрос.Текст = "
       |ВЫБРАТЬ
       |    ТЧ.Номенклатура Как Номенклатура,
       |    ПроизводствоПродукции.Ссылка
       |ИЗ              
       |    Справочник.ПроизводствоПродукции КАК ПроизводствоПродукции  
       |ЛЕВОЕ СОЕДИНЕНИЕ    
       |    Справочник.ПроизводствоПродукции.ВидыРабот КАК ТЧ
       |    ПО ТЧ.Ссылка = ПроизводствоПродукции.Ссылка
       |ГДЕ ПроизводствоПродукции.Номенклатура.Наименование = &ВТНоменклатура";
       ВыборкаПроизводство = Запрос.Выполнить().Выбрать();
       
       Пока  ВыборкаПроизводство.Следующий() цикл
       Сообщить(ВыборкаПроизводство.Номенклатура);
       СтрокаТЧ = Производство.Добавить();
       СтрокаТЧ.Номенклатура = ВыборкаПроизводство.Номенклатура;
       СтрокаТЧ.Количество = 1;
   Конеццикла
Конеццикла
КонецПроцедуры
1 sora_tm
 
28.01.12
23:37
"Сообщить" использовал для отладки, чтобы видеть что в переменные попадают.
2 Рэйв
 
28.01.12
23:38
(0)
>>но код вышел адски кривой, как мне кажется, запрос в цикле некрасиво как то.

бог не любит не тебя ни твоего кода.
веревку и мыло могу продать по сходной цене.
3 Serg_1960
 
28.01.12
23:46
Первый запрос не нужен и даже вреден. У Вас уже есть объект - нет смысла к нему обращаться через запрос к базе. Второй запрос в цикле - тоже не фонтан.

Всё что Вы написали - решается одним запросом и выгрузкой результата в ТЧ.

(2) +1
4 H A D G E H O G s
 
28.01.12
23:50
(0) Тимур - а кем вы работали до 1С?
5 DarKySiK
 
28.01.12
23:55
бррр... аж глаз режет. А "ВТНоменклатура" неспроста))) видимо видел что-то про временные таблицы, но за чем они так  и не понял.. Ничего, опыт приходит со временем.
6 sora_tm
 
29.01.12
00:01
(4) Да я и не работаю в 1С, это так, скорее увлечение. Нас обслуживает франч, но правлю сам формочки печатные, платформу обновляю. Сейчас я просто пробую как можно улучшить текущий заказ покупателя, но все равно будут делать программисты, и не факт, что так как я. Я сам понимаю, что должны работать профи, чревато самоуправство... Работаю начальником информационно технической службы, изучаю 1С только для собственного развития, не более.
7 sora_tm
 
29.01.12
00:02
(5) Угу, завтра  еще покумекаю, может дойдет.
8 Джинн
 
29.01.12
00:03
(6) Вы сначала суете палец в розетку, а только потом изучаете законы электротехники?
9 DarKySiK
 
29.01.12
00:05
(6) Начните с книжек. Полезнее будет.
10 H A D G E H O G s
 
29.01.12
00:06
(8) Метод старинного ученого Тыка - очень даже не плох.
11 sora_tm
 
29.01.12
00:08
(8) Опыт ничто не заменит! Шутю. Ну мне так нравится колупаться, я же не рабочую базу ворочу.
12 sora_tm
 
29.01.12
00:10
(9) Пытаюсь, Радченко потихоньку читаю, и всегда прежде чем пытать вопросами, ищу в книгах которые в комплекте шли. Но в них местами очень скудно все.
13 H A D G E H O G s
 
29.01.12
00:15
Как то так

Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    ПроизводствоПродукцииВидыРабот.Номенклатура,
|    СУММА(1) КАК Количество
|ИЗ
|    Справочник.ПроизводствоПродукции.ВидыРабот КАК ПроизводствоПродукцииВидыРабот
|ГДЕ
|    ПроизводствоПродукцииВидыРабот.Ссылка.ПометкаУдаления = ЛОЖЬ
|    И ПроизводствоПродукцииВидыРабот.Ссылка.Номенклатура В(&МассивНоменклатур)
|
|СГРУППИРОВАТЬ ПО
|    ПроизводствоПродукцииВидыРабот.Номенклатура";
Запрос.УстановитьПараметр("МассивНоменклатур",Товары.Выгрузить("Номенклатура"));
ТЗ=Запрос.Выполнить().Выгрузить();
Производство.Загрузить(ТЗ);
14 sora_tm
 
29.01.12
09:22
(13) Спасибо большое, действительно все просто, только не совсем понял

Запрос.УстановитьПараметр("МассивНоменклатур",Товары.Выгрузить("Номенклатура"));
ТЗ=Запрос.Выполнить().Выгрузить();
Производство.Загрузить(ТЗ);

Товары.выгрузить это мы берем и сразу из ТЧ документа грузим в "МассивНоменклатур" только номенклатуру? А в запросе сравниваем наличие в элементе справочника наличие данной номенклатуры из массива и в конце загружаем в ТЧ "Производство" результат запроса?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан