УНФ. Увеличение вложенности узлов. Использование рекурсии.

23.12.09

Разработка - Механизмы типовых конфигураций

Пытаясь внедрить "Управление небольшой фирмой" на производственном предприятии, обнаружил, что уровень вложенности узлов всего один. Другими словами, если узел состоит в свою очередь также из узлов, по кнопке "Заполнить по спецификации " заполняется только первый уровень.

Пытаясь внедрить "Управление небольшой фирмой" на производственном предприятии, обнаружил, что уровень вложенности узлов всего один. Другими словами, если узел состоит в свою очередь также из узлов, по кнопке заполняется только первый уровень.

Что-же делать, ведь только на этом предприятии уровень вложенности может доходить до 3.  Теоретически и до бесконечности, но я с этим не сталкивался.

Ответ: Использовать рекурсию. Рекурсивными называются те процедуры и функции которые вызывают сами себя.

Итак перепишем процедуру ЗаполнитьТабличнуюЧастьПоСпецификации() в модуле объекта СборкаЗапасов.

	 Процедура ЗаполнитьТабличнуюЧастьПоСпецификации() Экспорт
    Запасы.Очистить();
    ЗаполнитьПоСпецификации(Спецификация, Количество); //
КонецПроцедуры

Ну и напишем собственно рекурсивную процедуру. Она почти такая же? как старая процедура ЗаполнитьТабличнуюЧастьПоСпецификации() - даже скопирована с нее, но несколько короче.

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

Теперь узел может состоять также из узлов, а те в свою очередь из других и так далее, вплодь до бесконечности. Рекурсия будеть использоваться, пока все узлы не будут разобраны на составляющие.

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    477    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    366    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    556    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    440    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    520    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2568    YA_418728146    11    

42

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1122    8    2ncom    3    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

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

28.12.2023    4952    mrXoxot    11    

100
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Reaper_1C 122 10.12.09 09:30 Сейчас в теме
Осталось сделать разузлование не по одной спецификации, а по списку спецификаций.
2. Michael_Osipov 10 10.12.09 09:39 Сейчас в теме
Вы имеете ввиду заполнение документа СборкаЗапасов списком номенклатуры ?
3. gutentag 253 12.12.09 14:47 Сейчас в теме
А почему надо лезть и править в конфигурацию? Почему нельзя сделать ввиде внешней обрабтки или обработки табличной части???
Michael_Osipov; +1 Ответить
4. Michael_Osipov 10 15.12.09 06:06 Сейчас в теме
5. grohman33 08.05.20 21:09 Сейчас в теме
Здравствуйте, сделал всё по инструкции, добавил новую процедуру, старую изменил, при проверке кода выдаёт ошибку:

{Документ.СборкаЗапасов.МодульОбъекта(53,43)}: Ожидается ключевое слово 'Тогда' ('Then')
Если Выборка.ТипСтрокиСостава<<?>> Перечисления.ТипыСтрокСоставаСпецификации.Узел Тогда (Проверка: Сервер)
6. Ermak96 21.05.20 11:19 Сейчас в теме
Посмотрите на дату публикации. 2009 год. Это я делал когда УНФ была в статусе бета. 1С использовала мой код, но время идет, все меняется. Теперь очевидно код изменился. Вам ничего делать не надо, разузлование должно быть стандартной процедурой. Ищите причину в другом месте. А УНФ я давно не занимаюсь.
Оставьте свое сообщение