7.7 Цикл

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Hedinnk, 29 июн 2011.

  1. TopicStarter Overlay
    Hedinnk
    Offline

    Hedinnk

    Регистрация:
    21 апр 2011
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    В общем сделал вот так:
    Код:
    перем СЗ, oVT, КолВо, СтароеКолВо; //переменные модуля
    ....
    Процедура Комплекты(Комплектующие)
    Если Комплектующие.Комплект = Перечисление.Булево.Да Тогда
    Если СЗ.НайтиЗначение(Комплектующие) = 1 Тогда
    Возврат;
    КонецЕсли;
    СЗ.ДобавитьЗначение(Комплектующие.ТекущийЭлемент());
    Спр = СоздатьОбъект("Справочник.Комплектация");
    Спр.ИспользоватьВладельца(Комплектующие.ТекущийЭлемент());
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    СтароеКолВо = КолВо;
    КолВо = КолВо * Спр.Количество;
    Комплекты(Спр.Товар);
    КонецЦикла;
    Иначе                                                       
    oVT.NewLine();
    oVT.ТабКомплектующие = Комплектующие;
    oVT.ТабКоличество = КолВо;
    oVT.ТабКомплектующие.Примечание = ПримечаниеТабличное;
    КолВо = СтароеКолВо;
    КонецЕсли;
    КонецПроцедуры
    ....
    Процедура Печать(БыстраяПечать = 0)
    oVT.УдалитьСтроки();
    ....
    Пока ПолучитьСтроку() = 1 Цикл
    СЗ.УдалитьВсе();
    КолВо = Количество;
    Комплекты(Комплектующие);
    КонецЦикла;
    ....
    КонецПроцедуры
    ....
    СЗ = СоздатьОбъект("СписокЗначений");
    oVT = CreateObject("ValueTable");
    oVT.InsertColumn("ТабКомплектующие");
    oVT.InsertColumn("ТабЧип");
    oVT.InsertColumn("ТабКоличество");
    
    
    Вроде бы все работает, вот только не совсем уверен, правильно ли он будет считать конечное количество элементов комплекта.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Нет. Не верно. Не знаю доподлинной структуры справочника, но разве в ОДНОМ комплекте не может быть НЕСКОЛЬКО комплектующих?
  3. TopicStarter Overlay
    Hedinnk
    Offline

    Hedinnk

    Регистрация:
    21 апр 2011
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Сегодня перепроверил, все таки считает не правильно.
    Структура такова, что в одном комплекте может быть несколько комплектующих, так же в этом же комплекте могут быть и другие комплекты.
    Если в комплекте есть только комплектующие, то он вроде бы все считает верно, но как только в состав комплекта добавляется другой комплект, вот тут и начинаются пляски с итогами.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Все правильно... Потому что используется одна глобальная переменная для ВСЕХ коплектов.
  5. TopicStarter Overlay
    Hedinnk
    Offline

    Hedinnk

    Регистрация:
    21 апр 2011
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    Все, дальше моих знаний не хватает. Подскажите пожалуйста выход из сложившейся ситуации, как для каждого комплекта присвоить свою переменную, если нам не известно количество уровней вложения. Или любой другой наиболее оптимальный вариант выхода из данной ситуации.
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Таблица значений разумеется.....
  7. TopicStarter Overlay
    Hedinnk
    Offline

    Hedinnk

    Регистрация:
    21 апр 2011
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    1
    что-то вроде этого:
    Код:
    перем oVT1, НачКолВо, КолВоВладелец;
    ....
    Процедура Комплекты(Комплектующие)
    Если Комплектующие.Комплект = Перечисление.Булево.Да Тогда
    ....
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если oVT1.НайтиЗначение(Спр.Товар.Владелец,,) = 1 Тогда // Тут не уверен в формулировке, если вообще в ту сторону копаю
    КолВоВладелец =;//не знаю что сюда поставить, как то надо выдернуть данные из ТЗ, соответствующие Владельцу текущего элемента.
    Иначе
    КолВоВладелец = 1;
    КонецЕсли;
    oVT1.NewLine();
    oVT1.Комплектующие = Спр.Товар;
    oVT1.Количество = Спр.Количество * КолВоВладелец;
    КонецЦикла;
    Иначе                                                       
    oVT.NewLine();
    oVT.ТабКомплектующие = Комплектующие;//Комплектующие;
    Если oVT1.НайтиЗначение(Спр.Товар.Владелец,,) = 1 Тогда // Тут не уверен в формулировке, если вообще в ту сторону копаю
    КолВоВладелец =;//не знаю что сюда поставить, как то надо выдернуть данные из ТЗ, соответствующие Владельцу текущего элемента.
    Иначе
    КолВоВладелец = 1;
    КонецЕсли;
    oVT.ТабКоличество = НачКолВо * КолВоВладелец;
    oVT.ТабКомплектующие.ДокПрим = ПримечаниеТабличное;
    КонецЕсли;                                                  
    КонецПроцедуры
    
    
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Структура ТЗ следующая:
    - Владелец
    - Количество

    Далее все просто.
    Код:
    а=0
    Если oVT1.НайтиЗначение(Спр.Товар.Владелец,а,"Владелец") = 1 Тогда // Тут не уверен в формулировке, если вообще в ту сторону копаю                
    oVT1.ПолучитьСтрокуПоНомеру(а);
    КолВоВладелец =oVT1.Количество;//не знаю что сюда поставить, как то надо выдернуть данные из ТЗ, соответствующие Владельцу текущего элемента.
    
    
    

Поделиться этой страницей