helpf.pro
Регистрация

v8.2 УП: УТ 11 внешняя обработка

asdfr1
08.04.2013 23:37Прочитано: 1256
по задумке в каждую номенклатуру добавляется характеристика из "СписокЗнач"

пытаюсь впихнуть ещё одним циклом - процессор загружается на 99 %, не пойму что не так
Код 1C v 8.2 УП
 &НаСервере 
Функция ЗаполнитьОбъект(Знач док)
докоб=док.получитьобъект();
докпроведен=док.проведен;
таб=новый ТаблицаЗначений;
таб.Колонки.Добавить("Номен");
таб.Колонки.Добавить("Цена");
таб.Колонки.Добавить("Видцены");

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

Для Каждого ТекущаяСтрока Из СписокЗнач Цикл
отдел1=ТекущаяСтрока.Значение;
отдел1=Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(отдел1);
Сообщить(отдел21);
КонецЦикла;

для каждого текстрока из докоб.товары цикл
Для Каждого ТекущаяСтрока Из СписокЗнач Цикл
отдел1=ТекущаяСтрока.Значение;
отдел21=Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(отдел1);

текстрока.характеристика= отдел21;
номен=текстрока.номенклатура;
цена=текстрока.цена; видцены=текстрока.видцены;
новстрока=таб.добавить();
новстрока.номен=номен;
новстрока.видцены=видцены;
новстрока.цена=цена;
//Возврат;
Продолжить;
Сообщить(Отдел21);

КонецЦикла;
КонецЦикла;

для каждого текстрока из таб цикл
новстрока=докоб.товары.добавить();
новстрока.номенклатура=текстрока.номен;
новстрока.видцены=текстрока.видцены;
новстрока.цена=текстрока.цена;
конеццикла;
// вторая


докоб.записать(?(докпроведен,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись));

КонецФункции
Yandex
Возможно, вас также заинтересует
Реклама на портале
DJ_Serega
09.04.2013 00:33Ответ № 1
(0) asdfr1, Чесно. не понял что нужно и что написано.
1. Зачем этот код? Просто вывести с сообщения список полученных характеристик?
Код 1C v 8.2 УП
 
Для Каждого ТекущаяСтрока Из СписокЗнач Цикл
отдел1 = ТекущаяСтрока.Значение;
отдел1 = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(отдел1);
Сообщить(отдел21);
КонецЦикла;

2. Ну и следующий тудаже. Первым циклом, зачем-то заполняем какую-то таблицу. А потом задваиваем номенклатуру в "товары" и при этом в текущую строку записываем найденную характеристику.
Код 1C v 8.2 УП
 
для каждого текстрока из докоб.товары цикл

Для Каждого ТекущаяСтрока Из СписокЗнач Цикл

отдел1 = ТекущаяСтрока.Значение;
отдел21 = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(отдел1);

текстрока.характеристика = отдел21;

номен = текстрока.номенклатура;
цена = текстрока.цена;
видцены = текстрока.видцены;

новстрока=таб.добавить();
новстрока.номен = номен;
новстрока.видцены = видцены;
новстрока.цена = цена;

//Возврат;

Продолжить;

Сообщить(Отдел21);

КонецЦикла;

КонецЦикла;

для каждого текстрока из таб цикл
новстрока = докоб.товары.добавить();
новстрока.номенклатура = текстрока.номен;
новстрока.видцены = текстрока.видцены;
новстрока.цена = текстрока.цена;
конеццикла;


Попытаться понять задачу конечно попробую, но не понятно (повторюсь) что нужно и что написано *09

upd: цикл в цикле это и так горе, так еще и непонятно зачем... Хотя... есть 10 строк номенклатуры, есть 10 отделов... Получится 100 строк (для меня) непонятно чего ) если так и надо...
Изменено 09.04.13 00:39:34
DJ_Serega
09.04.2013 00:42Ответ № 2
(0) asdfr1, И "по задумке в каждую номенклатуру добавляется характеристика из "СписокЗнач" " хотелось так, а получилось "последнее сообщение предыдущего поста".
DJ_Serega
09.04.2013 00:44Ответ № 3
Чуть подправил но всеравно непонятно *09
Код 1C v 8.2 УП
 
&НаСервере
Функция ЗаполнитьОбъект(Знач док)

докоб=док.получитьобъект();
докпроведен=док.проведен;

таб=новый ТаблицаЗначений;
таб.Колонки.Добавить("Номен");
таб.Колонки.Добавить("Цена");
таб.Колонки.Добавить("Видцены");

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

///////++++++++ ИМХО не надо. Достаточно массива +++++++++++++ /////////////

//СписокЗнач = Новый СписокЗначений;
//СписокЗнач.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Хар"));
//
//Для Каждого ТекущаяСтрока Из СписокЗнач Цикл
// отдел1=ТекущаяСтрока.Значение;
// отдел1=Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(отдел1);
// Сообщить(отдел21);
//КонецЦикла;

///////+++++++++++++++++++++ /////////////

МассивОтделов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Хар");
// Дабы не менять дальше переменные обзовем также
СписокЗнач = МассивОтделов;

///////++++++++ ИМХО не надо. Достаточно массива +++++++++++++ /////////////


для каждого текстрока из докоб.товары цикл

Для Каждого ТекущаяСтрока Из СписокЗнач Цикл

///////++++++++ У нас уже в массиве (СписокЗнач) есть ссылки, зачем искать непонятно +++++++++++++ /////////////

//отдел1=ТекущаяСтрока.Значение;
//отдел21=Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(отдел1);
//
//текстрока.характеристика= отдел21;

///////+++++++++++++++++++++ /////////////

текстрока.характеристика = ТекущаяСтрока;

///////++++++++ У нас уже в массиве (СписокЗнач) есть ссылки, зачем искать непонятно +++++++++++++ /////////////

номен=текстрока.номенклатура;
цена=текстрока.цена;
видцены=текстрока.видцены;

новстрока=таб.добавить();
новстрока.номен=номен;
новстрока.видцены=видцены;
новстрока.цена=цена;
//Возврат;
Продолжить;
Сообщить(Отдел21);

КонецЦикла;

КонецЦикла;

для каждого текстрока из таб цикл
новстрока=докоб.товары.добавить();
новстрока.номенклатура=текстрока.номен;
новстрока.видцены=текстрока.видцены;
новстрока.цена=текстрока.цена;
конеццикла;
// вторая


докоб.записать(?(докпроведен,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись));

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


upd: пошел спать *07
asdfr1
09.04.2013 11:59Ответ № 4
спс !
DJ_Serega
09.04.2013 12:08Ответ № 5
(4) asdfr1, у меня получилось угадать что нужно? )
asdfr1
09.04.2013 15:04Ответ № 6
да, то самое ) и всё же он берёт последнее знач из массива )...

попробовал , по совету, запросом:
Код 1C v 8.2 УП
  &НаСервере 
Функция ЗаполнитьОбъект(Знач док)

докоб=док.получитьобъект();
докпроведен=док.проведен;

таб=новый ТаблицаЗначений;
таб.Колонки.Добавить("Номен");
таб.Колонки.Добавить("Цена");
таб.Колонки.Добавить("Видцены");

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

Запрос.УстановитьПараметр("Ссылка", Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию("Ассортимент"));
Запрос.УстановитьПараметр("ДокСсылка", докоб);

докоб.товары.загрузить(запрос.выполнить().выгрузить());


докоб.записать(?(докпроведен,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись));


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

вообще всю табличку очищает, возвращает, нав пусто )
DJ_Serega
09.04.2013 16:36Ответ № 7
(6) asdfr1, Руками пишете текст запроса?
asdfr1
09.04.2013 16:46Ответ № 8
да )
DJ_Serega
09.04.2013 18:25Ответ № 9
(8) asdfr1, а чего не конструктором?
asdfr1
11.04.2013 09:43Ответ № 10
мда, легко ошибится
Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или .
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.