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

23.12.09

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

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

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

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

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

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

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

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

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

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

См. также

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

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

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

07.02.2024    2351    YA_418728146    11    

40

Регистры накопления в 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    1016    6    2ncom    3    

8

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

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

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

28.12.2023    4832    mrXoxot    11    

99

Ключи аналитик учета в ЕРП, КА, УТ

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

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    7047    ids79    25    

74

Распределение по базе среднего в ЗИКГУ 3.1

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

Результат расчета начислений (отпуск, БЛ и т.д.) может распределятся по базе среднего заработка. У таких начислений на вкладке "Налоги, взносы, бухучет" стоит галка "По базе среднего заработка". Но бывают случаи, что данное распределение необходимо скорректировать.

1 стартмани

14.09.2023    445    2    Vlx    0    

1

Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)

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

В статье приведен алгоритм доработок типового механизма настройки заполнения бухгалтерской отчетности на примере конфигурации 1С:ERP. Управление холдингом (3.1.8.15). Цель доработок - сделать процесс настроек более гибким и удобным для пользователей

11.09.2023    1928    ICL-Soft    3    

12

Разбор механизма "Настройки полей формы" в 1С:ERP. Управление холдингом

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

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

18.07.2023    2156    it_box    1    

7

Работа с контактной информацией. Часть 2

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

Во второй части статьи рассмотрим вопрос преобразования адреса из старого формата в новый. Рассмотрим реальные задачи, связанные с контактной информацией.

05.06.2023    6955    biimmap    4    

41
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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С использовала мой код, но время идет, все меняется. Теперь очевидно код изменился. Вам ничего делать не надо, разузлование должно быть стандартной процедурой. Ищите причину в другом месте. А УНФ я давно не занимаюсь.
Оставьте свое сообщение