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

Хранилище

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

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



> Проверка/создание иерархии номенклатуры          
Fabri Подменю пользователя
сообщение 12.11.13, 15:02
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 56 раз
Рейтинг: 0

Добрый день. Имеется табличное поле с колонками - Группа1, Группа2, Группа3, Номенклатура, Артикул.
Необходимо создавать номенклатуру в иерархии Группа1-Группа2-Группа3.

Я вижу код так, но мне как-то не нравится:
Для Каждого Строка Из ТабличнаяЧасть Цикл

ПервРодитель = ПроверитьИлиСоздатьГруппу(Строка.Группа1);
ВторРодитель=ПроверитьИлиСоздатьГруппу(Строка.Группа2,ПервРодитель);
ТретийРодитель=ПроверитьИлиСоздатьГруппу(Строка.Группа3,ВторРодитель);
СоздатьНоменклатуру(Строка.Номенклатура,Строка.Артикул,ТретийРодитель); //Описывать процедуру не буду, вопрос не по ней
КонецЦикла;

Функция ПроверитьИлиСоздатьГруппу(Наименование,Родитель)

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК Группа
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Родитель = &Родитель
        |    И Номенклатура.ЭтоГруппа = ЛОЖЬ
        |    И Номенклатура.Наименование = &Наименование";

    Запрос.УстановитьПараметр("Родитель", Родитель);
       Запрос.УстановитьПараметр("Наименование", Наименование);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Возврат ВыборкаДетальныеЗаписи.Группа; //Возвращаем ссылку на группу
    КонецЦикла;

Возврат СоздатьГруппу(Родитель); //Функция создает группу и возвращает ссылку на нее (описывать тут не буду, впорос не по данной функции)


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


Может у кого-то есть идеи по оптимизации данного кода, или другое решение вопроса. Спасибо.

Vofka Подменю пользователя
сообщение 12.11.13, 15:14
Сообщение #2

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

Дайте скрин табличного поля. А то я начал было писать, а потом прикинул, вдруг я не о том пишу сейчас и обломался.

Fabri Подменю пользователя
сообщение 12.11.13, 15:57
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 56 раз
Рейтинг: 0


 ! 

Правила, п.11
 




Сообщение отредактировал logist - 12.11.13, 15:32

Ardi Подменю пользователя
сообщение 12.11.13, 15:59
Сообщение #4

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Идея нормальная.
Только иногда может быть только первый. Или первый и второй родитель.

Ну и "И Номенклатура.ЭтоГруппа = истина"


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Fabri Подменю пользователя
сообщение 12.11.13, 16:05
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 56 раз
Рейтинг: 0

Если будут только первый или второй родитель то ерунда, это я пропишу:
Если ЗначениеЗаполнено(Строка.Группа3)=Ложь Тогда
СоздатьНоменклатуру(Строка.Номенклатура,Строка.Артикул,[b]ВторРодитель[/b]);
Иначе
ТретийРодитель=ПроверитьИлиСоздатьГруппу(Строка.Группа3,ВторРодитель);
КонецЕсли;


По поводу
|    И Номенклатура.ЭтоГруппа = ЛОЖЬ

спасибо, это я уже исправил, вообще код ещё не вставлял в обработку, накидал его сюда чисто для примера.

Vofka Подменю пользователя
сообщение 12.11.13, 16:23
Сообщение #6

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

Вопрос в том, как группы создавать? Собираем все в таблицу значений. Делаем к ней потом запрос, соединяем со справочником номенклатуры и смотрим каких позиций нету и их создаем. Как-то так:

...
;
ВЫБРАТЬ
   Группа1,
   Группа2,
   Группа3,
   Ном1.ГруппаСсылка1,
   Ном2.ГруппаСсылка2,
   Ном3.ГруппаСсылка3
ИЗ
   ТаблицаЗначений КАК ТаблицаЗначений

   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Ном1
      ПО Ном1.Наименование = Группа1
      И Ном1.Родитель = Значение(Справочник.Номенклатура.ПустаяСсылка)

   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Ном2
      ПО Ном2.Наименование = Группа2
      И Ном1.Родитель.Наименование = Группа1

   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Ном3
      ПО Ном3.Наименование = Группа3
      И Ном3.Родитель.Наименование = Группа2
      И Ном3.Родитель.Родитель.Наименование = Группа1
ГДЕ
   Ном1.ГруппаСсылка1 ЕСТЬ NULL
   ИЛИ Ном2.ГруппаСсылка2  ЕСТЬ NULL
   ИЛИ Ном3.ГруппаСсылка3 ЕСТЬ NULL


Код, конечно, может быть не работоспособным. Короче, это просто на подумать.

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

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


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

 

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