Версия для печати темы (https://pro1c.org.ua/index.php?s=c7ad941349623848be1e80084584fa21&showtopic=10960)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Группировка и итоги по верхнему уровню родителя

Автор: olmar 04.02.13, 12:37

Помогите пожалуйста. Конфигурация 1с 77 комплексная. Нужно вывести на печать товар по группам, где есть колонки "количество" и "сумма".
При этом коде выводит на печать товар по группам и наименование верхнего уровня родителя. А вот кол-во и сумму считает только по первой подгруппе.

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗ);
ТЗ.НоваяКолонка("Род");
ТЗ.НоваяКолонка("Роди");
ТЗ.НоваяКолонка("Кво");
ТЗ.НоваяКолонка("СуммаСНДС","Число",15,3);
ТЗ.ВыбратьСтроки();


Пока ТЗ.ПолучитьСтроку() = 1 Цикл

ТЗ.Род = ТЗ.ТМЦ.Родитель;
ТЗ.Роди = ТЗ.ТМЦ.Родитель;

КонецЦикла;
ТЗ.Сортировать("Род,ТМЦ");
УдалитьСтроки();
ЗагрузитьТабличнуюЧасть(ТЗ);
ТЗ.Свернуть("Род,Роди","Кво,СуммаСНДС");
старыйРодитель = ПолучитьПустоеЗначение("Справочник.ТМЦ");

==================================
//Здесь идет код который не имеет отношения
==================================
старыйРодитель = ?(Ном = 1,ПолучитьПустоеЗначение("Справочник.ТМЦ"),старыйРодитель);
Род = ТМЦ.Родитель;
Роди = ТМЦ.Родитель;
Пока ПустоеЗначение(Род.Родитель) = 0 Цикл
Род = Род.Родитель;
КонецЦикла;
Если старыйРодитель<>Род Тогда
ТекГруппаСтр = Строка(Род);
ст = 0;
Если ТЗ.НайтиЗначение(Роди,ст,"Роди")=1 Тогда
грКво = ТЗ.ПолучитьЗначение(ст,"Кво");
грСуммаСНДС = Формат(Окр(ТЗ.ПолучитьЗначение(ст,"СуммаСНДС"),2),"Ч10.2");
КонецЕсли;
Таб.ВывестиСекцию("Группа");
КонецЕсли;
старыйРодитель = Род;


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


 i 

Для выделения кода имеется специальный тег
 


Какой тег для выделения кода??? В ВВ кодах я его не нашел.

Автор: Cthulhu 04.02.13, 15:00

ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл
  ТЗ.Род=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;
   Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл ТЗ.Роди=ТЗ.Роди.Родитель КонецЦикла;
КонецЦикла; ТЗ.Свернуть("Роди","Кво,СуммаСНДС");

Автор: olmar 04.02.13, 17:07

Цитата(Cthulhu @ 04.02.13, 15:00) *
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл
  ТЗ.Род=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;
   Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл ТЗ.Роди=ТЗ.Роди.Родитель КонецЦикла;
КонецЦикла; ТЗ.Свернуть("Роди","Кво,СуммаСНДС");

Не, Вашим кодом ТЗ.Роди присваивается верхний уровень родителя ТМЦ. Но не считает вообще. Тут что получается. у товара родитель один, но уровни вложенности подродителей разные. Допустим есть Верхний уровень "Колбаса" -> в нем уровни "Копченая" и "Вареная" -> в копченой еще есть родитель. Так вот в моем коде считает по уровню "Копченая", а не по самому верхнему уровню "Колбаса" дабы посчитать итог К-во и Цена по Копченой и Вареной.

Так же в отладчике ругается на Родитель -
Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл
{Документ.Счет.Форма.Модуль(502)}: Значение не представляет агрегатный объект (Родитель)

Автор: Cthulhu 04.02.13, 17:19

а подумать хоть чуть самому и типизировать колонку "Роди"?..
(и - я не понял, при чем тут "в отладчике"? если это стандартная ругань режима предприятия - в соответствии с чем утверждение о том, как оно считает или не считает вообще лишено смысля до тех пор, пока код не отработает полностью чтобы увидеть результат)

Автор: olmar 04.02.13, 17:28

Цитата(Cthulhu @ 04.02.13, 17:19) *
а подумать хоть чуть самому и типизировать колонку "Роди"?..

Я вам очень благодарен за помощь. Но я уже как только не думал. Не получается. Неделю мучаюсь. По поводу отладчика я и не знал, что это нормальное явление когда вылетает отладка с такой ошибкой. Как же отследить работу программы в отладчике?

Работа программы то завершается.

Автор: Cthulhu 04.02.13, 18:24

//ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");
ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");//или какого там вида справочник...
// ...
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл
  //ТЗ.Род=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;//ошибка моя, но видна невооруженным глазом
  ТЗ.Роди=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;
  Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл ТЗ.Роди=ТЗ.Роди.Родитель КонецЦикла;
КонецЦикла; ТЗ.Свернуть("Роди","Кво,СуммаСНДС");

"отладчик" - совсем не то, что вы думаете. "вылетает" не "отладчик", а сама программа. "отладчик" - это режим работы (строго говоря - ещё один экземпляр программы, запущенный в специ.режиме). лучше почитать по этому поводу документацию. хотя бы сначала. но это все - немного другая тема.

Автор: olmar 04.02.13, 18:34

Цитата(Cthulhu @ 04.02.13, 18:24) *
//ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");
ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");//или какого там вида справочник...
// ...
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл
  //ТЗ.Род=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;//ошибка моя, но видна невооруженным глазом
  ТЗ.Роди=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;
  Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл ТЗ.Роди=ТЗ.Роди.Родитель КонецЦикла;
КонецЦикла; ТЗ.Свернуть("Роди","Кво,СуммаСНДС");

Так это же тот же самый код, что и выше. Так не сворачивает по самому верхнему родителю.
ТЗ.Роди=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;
здесь я так понял скорее всего опечатка и вторая строка должна быть ТЗ.Род=ТЗ.ТМЦ.Родитель; , но все равно это не спасает.

Автор: Cthulhu 04.02.13, 18:41

все там сворачивает. кроме пикового случая когда ТМЦ не в группе, а в корне, или просто пустой. в таком случае - доп.проверка нужна, не ожидал такой коварности:

//ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");
ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");//или какого там вида справочник...
// ...
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл
  Если ТЗ.ТМЦ.Выбран()<>1 Тогда Продолжить КонецЕсли;
  ТЗ.Род=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;
  Если ТЗ.Роди.Выбран()<>1 Тогда Продолжить КонецЕсли;
  Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл ТЗ.Роди=ТЗ.Роди.Родитель КонецЦикла;
КонецЦикла; ТЗ.Свернуть("Роди","Кво,СуммаСНДС");

Автор: Домовик 04.02.13, 19:25

...вообще задание не понятно.. что-то сворачивать, что-то показывать... что-то нет... уровни какие-то...

на форму ТаблицуЗначений объект формы ( в коде //тз=Создатьобъект("ТаблицаЗначений")),
и кнопку поставить, в ней Свернуть(). после всего не забыть очистить таблицу.
Нагляднее будет, что там в таблице.
В Отладчике точки останова поставить. Это про вопрос, что "вылетает отладка с ошибкой".

Автор: Flexy 05.02.13, 0:08

Имхо запросом удобней

|Док = Документ.ВашДок.ТекущийДокумент;
|Товар = Документ.ВашДок.Товар;
|Сумм = Документ.ВашДок.Сумма;
|Кво = Документ.ВашДок.Количество;
|Функция Сум = Сумма(Сумм);
|Функция Кол = Сумма(Кво);
|Группировка Товар;
|Условие(Док = ТекущийДокумент());

//...Итоги по группам товаров в выборке уже есть.
//Дальше для анализа и печати можно:
Пока Запрос.Группировка("Товар")= 1 Цикл
  Если Товар.Уровень() =....Тогда
...
  КонецЕсли;
КонецЦикла;

Автор: Cthulhu 05.02.13, 9:56

Цитата(Flexy @ 05.02.13, 0:08) *
Имхо запросом удобней ...

Сохранять открытый (или даже новый) документ ради того, чтобы получить печ.форму?.. очень сомнительное "удобство" и несомненно грубая методологическая ошибка.

Автор: Flexy 05.02.13, 10:12

Цитата(Cthulhu @ 05.02.13, 9:56) http://pro1c.org.ua/index.php?act=findpost&pid=64400
документ ради того, чтобы получить печ.форму?.. очень сомнительное "удобство" и несомненно грубая методологическая ошибка.

А где было сказано, что документ новый, не записанный?

Автор: Cthulhu 05.02.13, 10:44

Цитата(Flexy @ 05.02.13, 10:12) *
А как док, если он не новый, может быть открыт, если он не записан в БД?

"Кто на ком стоял", простите?
только по секрету и только Вам: документы открывают не только для просмотра, но и для внесения в них изменений.
Цитата
А где было сказано, что документ новый, не записанный?

Документ в общем случае может быть и новый, и записанный - ибо речь ведется о контексте формы документа и без оговорок о режиме просмотра.
Вами же предложен "удобный" способ, который оперирует данными не контекста формы документа, а объекта данных - каковой объект может не существовать или не совпадать с данными формы этого документа (котрые и нужно распечатать в нужном виде).

очень странно, что такие вещи приходится объяснять. и жаль, что я позволил спровоциовать себя на оффтопик.
за сим, ежели возжелаете далее пытаться сохранить хорошую мину при плохой игре - вэлкам, но уже соло.

Автор: Домовик 05.02.13, 11:09

чего вы спорите, автор до запросов еще не дошел.

Автор: olmar 05.02.13, 15:49

Цитата(Cthulhu @ 04.02.13, 18:41) *
все там сворачивает. кроме пикового случая когда ТМЦ не в группе, а в корне, или просто пустой. в таком случае - доп.проверка нужна, не ожидал такой коварности:
//ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");
ТЗ.НоваяКолонка("Роди","Спраочник.ТМЦ");//или какого там вида справочник...
// ...
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл
  Если ТЗ.ТМЦ.Выбран()<>1 Тогда Продолжить КонецЕсли;
  ТЗ.Род=ТЗ.ТМЦ.Родитель; ТЗ.Роди=ТЗ.ТМЦ.Родитель;
  Если ТЗ.Роди.Выбран()<>1 Тогда Продолжить КонецЕсли;
  Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл ТЗ.Роди=ТЗ.Роди.Родитель КонецЦикла;
КонецЦикла; ТЗ.Свернуть("Роди","Кво,СуммаСНДС");

Ну не сворачивает ни как.
В описании проблемы я написал весь код, который отвечает за вывод на печать секции Группа.
Вот что получается при Вашем коде:


А вот, что получается с моим кодом написанным в начале темы.


Так вот в моем коде сворачивает и выводит на печать только по подгруппе "Отбеливатели", а подгруппа "Стиральные порошки " выводится, но не суммируется с подгруппой "отбеливатели." По идее должно вообще сворачивать по верхнему уровню "Ariel" обе подгруппы, какая бы вложеность у них не была. Т.е находим верхний уровень родителя и сворачиваем К-во и Сумму по самому верхнему уровню родителя все подгруппы, которые относятся к этому самому верхнему уровню.

Может здесь играет роль этот код?
Если старыйРодитель<>Род Тогда
        ТекГруппаСтр = Строка(Род);
        ст = 0;
        Если ТЗ.НайтиЗначение(Роди,ст,"Роди")=1 Тогда
            грКво = ТЗ.ПолучитьЗначение(ст,"Кво");
            грСуммаСНДС = Формат(Окр(ТЗ.ПолучитьЗначение(ст,"СуммаСНДС"),2),"Ч10.2");
        КонецЕсли;
        Таб.ВывестиСекцию("Группа");
    КонецЕсли;

Автор: Домовик 05.02.13, 16:26

заполняем в таблице родителей с проверкой на уровень.
сворачиваем несколько раз. загружая промеж. результат в еще в таблицы Уровень1, Уровень2,... УровеньN. И сохраняя исходнуюю только товарами.
При обходе исходной таблицы, обращаемся к таблицам уровней, достаем значение.

Автор: olmar 05.02.13, 17:07

Цитата(Домовик @ 05.02.13, 16:26) *
аполняем в таблице родителей с проверкой на уровень.
сворачиваем несколько раз. загружая промеж. результат в еще в таблицы Уровень1, Уровень2,... УровеньN. И сохраняя исходнуюю только товарами.
При обходе исходной таблицы, обращаемся к таблицам уровней, достаем значение.

М-да. Если бы я знал как это делать. Я учусь 1с-ке.

Автор: alex040269 05.02.13, 17:29

Цитата(Flexy @ 05.02.13, 0:08) http://pro1c.org.ua/index.php?act=findpost&pid=64389
М-да. Если бы я знал как это делать. Я учусь 1с-ке.


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

Автор: olmar 05.02.13, 18:06

Цитата(alex040269 @ 05.02.13, 17:29) *
Тогда, как говаривал дедушка Вирт, разделяйте и властвуйте, т.е. разделяйте всю задачу на более мелкие и решайте их, потом каждую из них делите еще на более мелкие и т.д., пока каждая из подзадач будет легко решаемой.
увы. как правильно делить приходит только с опытом.
так что делайте, анализируйте и делайте все сначала.

Вот так вот я уже более недели мучаюсь с данным вопросом. Решил помощи на форуме найти. А меня отправляют к моим же костылям. На Инфостарте и то быстрее и конкретнее помогают решить проблему. Я хоть сразу вижу в чем ошибка и учусь быстрее. Что еще стоило ожидать от профи Корона на голове и ни какой помощи. Только Cthulhu адекватно и по человечески начал помогать.

Автор: Домовик 05.02.13, 23:27

расскажите мне, забитому пенсионеру с Короной, что такое Инфорстарт? Честно, не знаю.

Ну, вообще, чтоб тот адекватный, по-повашему, ответ получить, нужно сесть и написать код и отлаживать. У кого есть на это время? советуют общие механизмы.
ту все адекватно ответили. Даже заспорили о вариантах решения.
Сложность тут в том, что итоговые значения нужно выводить до перечисления вложенных элементов, и в том, что товар, может быть и на первом уровне, и на последнем.

перевожу на код, часть моего сообщения:

Уровень2=СоздатьОБъект("ТаблицаЗначений");
Уровень1=СоздатьОБъект("ТаблицаЗначений");
ТекТМЦ=СоздатьОБъект("Справочник.ТМЦ");


ВыгрузитьТабличнуюЧасть(ТЗ);
ТЗ.НоваяКолонка("Уровень1");
ТЗ.НоваяКолонка("Уровень2");
ТЗ.НоваяКолонка("Кво");
ТЗ.НоваяКолонка("СуммаСНДС","Число",15,3);
ТЗ.ВыбратьСтроки();

Пока ТЗ.ПолучитьСтроку() = 1 Цикл
ТекТМЦ.НайтиЭлемент(ТЗ.ТМЦ);
Если ТекТМЦ.Уровень()=1 Тогда
ТЗ.Уровень1=ТекТМЦ; ТЗ.Уровень2=ТекТМЦ;
ИначеЕсли ТекТМЦ.Уровень()=2 Тогда  
    ТЗ.Уровень2=ТекТМЦ;
    ТЗ.Уровень1=ТекТМЦ.Родитель;
ИначеЕсли ТекТМЦ.Уровень()=3 Тогда
    ТЗ.Уровень2=ТекТМЦ.Родитель;
    ТЗ.Уровень1=ТЗ.Уровень2.Родитель;    
КонецЕсли;    
КонецЦикла;

ТЗ.Сортировать("Уровень1,Уровень2,ТМЦ");
ТЗ.Выгрузить(Уровень1);
Уровень1.Свернуть("Уровень1","Кво");
ТЗ.Выгрузить(Уровень2);
Уровень2.Свернуть("Уровень2","Кво");
    
// теперь у вас три таблицы. с данными третьего уровня, с итогами второго уровня, с итогами первого.
// тут вам еще надо поработать,  
Тз.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл  
ТекУровень=0;    
Нашли= Уровень1.НайтиЗначение(ТЗ.Уровень1,ТекУровень,"Уровень1");    // пример того, как вынимать итоговые значения с других таблиц
Если Нашли =1 Тогда Кво =Уровень1.ПолучитьЗначение(ТекУровень,"Кво");
    Сообщить(Кво);
КонецЕсли;    
КонецЦикла;

Автор: olmar 06.02.13, 10:25

Цитата(Домовик @ 05.02.13, 23:27) http://pro1c.org.ua/index.php?act=findpost&pid=64448
ИначеЕсли ТекТМЦ.Уровень()=2 Тогда  
    ТЗ.Уровень2=ТекТМЦ;
    ТЗ.Уровень1=ТекТМЦ.Родитель;
ИначеЕсли ТекТМЦ.Уровень()=3 Тогда
    ТЗ.Уровень2=ТекТМЦ.Родитель;
    ТЗ.Уровень1=ТЗ.Уровень2.Родитель;  

А если уровне более 10? Такое условие я делал на уровни, когда нужно было вывести верхний уровень. Оказалось можно было сделать гораздо проще
вот таким кодом
Род = ТМЦ.Родитель; 
Роди = ТМЦ.Родитель;
Пока ПустоеЗначение(Род.Родитель) = 0 Цикл
Род = Род.Родитель;
КонецЦикла;

Автор: Vofka 06.02.13, 10:36

olmar, ну так бегите на инфостарт, что у нас забыли?

Автор: Домовик 06.02.13, 10:42

если кво уровней не известно, то там по-другому делается.
тут показано, как работать группировками по уровням. я не знаю, какие надо вам выводить, какие нет.


в моем коде есть еще одна ошибка. она на результат не влияет, но она .. тематическая.. ).

Автор: olmar 06.02.13, 10:44

Цитата(Vofka @ 06.02.13, 10:36) *
ну так бегите на инфостарт, что у нас забыли?
Извините, что дал ссылку. Понимаю, что виноват. Человеку пример привел не более.

Автор: Cthulhu 06.02.13, 12:50

вроде разжевано до кода - как сформировать ТЗ с итогами по родителям первого уровня.
нужно что-то другое? формулируйте так, чтобы было понятно собеседникам.
(инфостарт - ресурс, на который с такими вопросами на таком уровне даже понимания собственной задачи идти бесполезняк; идите на мисту - там может и поизмываются, но больше вероятность, что поймут "птичий язык")

Автор: olmar 06.02.13, 13:47

Цитата(Cthulhu @ 06.02.13, 12:50) http://pro1c.org.ua/index.php?act=findpost&pid=64498
В следующий раз картинка, вставленная не по правилам будет удалена! Уже второй раз исправляю. Прочтите правила.
 

Vofka извините, я исправлюсь. Я быстро учусь всему))

Все нашел решение. Сейчас все проверю и со сринами и кодом отпишусь.

Автор: olmar 06.02.13, 15:12

Cthulhu Я все-таки немного по-своему решил найти родителя верхнего уровня. Вы Предлагали

Пока ТЗ.Роди.Родитель.Выбран()<>0 Цикл ТЗ.Роди=ТЗ.Роди.Родитель КонецЦикла;
Я решил найти родителя через
Пока ПустоеЗначение (ТЗ.Роди.Родитель) = 0 Цикл 
            ТЗ.Роди=ТЗ.Роди.Родитель;
        КонецЦикла;
Не нашел разницы между Выбран() и ПустоеЗначение(), решил оставить второе.
Ваш код действительно работал. Но так как я не правильно выводил на печать секцию "Группа" в коде
Роди = ТМЦ.Родитель;
Пока ПустоеЗначение(Род.Родитель) = 0 Цикл
Род = Род.Родитель;
КонецЦикла;
Если старыйРодитель<>Род Тогда
ТекГруппаСтр = Строка(Род);
ст = 0;
Если ТЗ.НайтиЗначение(Роди,ст,"Роди")=1 Тогда
грКво = ТЗ.ПолучитьЗначение(ст,"Кво");
грСуммаСНДС = Формат(Окр(ТЗ.ПолучитьЗначение(ст,"СуммаСНДС"),2),"Ч10.2");
КонецЕсли;

Где искалось найденое значение "Кво" по столбцу "Роди". А "Роди" здесь было равно не вехнему родителю. Из-за
Роди = ТМЦ.Родитель;

Естественно условие игнорировалось и выводило нули.
Раньше я предполагал, что загвоздка кроется в формировании секции "Группа".Даже код вставил. Но все были почему-то зациклены на формировании таблицы.
Изменив код и присвоив переменной "Роди" родителя верхнего уровня . Все стало на свои места.
    Роди = ТМЦ.Родитель;
    Пока ПустоеЗначение(Роди.Родитель) = 0 Цикл
        Роди = Роди.Родитель;
    КонецЦикла;

    Если старыйРодитель<>Роди Тогда
        ТекГруппаСтр = Строка(Роди);
        ст = 0;
        Если ТЗ.НайтиЗначение(Роди,ст,"Роди")=1 Тогда
            грКво = ТЗ.ПолучитьЗначение(ст,"Кво");
            грСуммаСНДС = Формат(Окр(ТЗ.ПолучитьЗначение(ст,"СуммаСНДС"),2),"Ч10.2");
        КонецЕсли;
        Таб.ВывестиСекцию("Группа");
    КонецЕсли;
    старыйРодитель = Роди;

Находится значение "Роди" , в столбце "Роди" Если ТЗ.НайтиЗначение(Роди,ст,"Роди")=1 , которое было ранее присвоено переменной "Роди" с помощью цикла
Пока ПустоеЗначение(Роди.Родитель) = 0 Цикл
Роди = Роди.Родитель;
КонецЦикла;

И найдя его выводит итоги "Кво" и "СуммаСНДС" по вехнему родителю.
Не знаю насколько я доступно все описал. Так как знаю 1с только на 10%. Поправьте меня, если я где-то ошибся в описании последовательности работы кода. Если можно как-то лучше написать код подскажите пожалуйста. Всем большое спасибо. Извините кому грубо отвечал. Просто хотелось помощи не на словах, а кодом. Cthulhu Вам отдельное большое спасибо. Ну и вот сама печать собственно говоря.


Автор: Домовик 07.02.13, 11:24

только первый уровень нужен был? понятно. все верно - использовали цикл с рекурсией. сами разобрались. "спасибка"

ПустоеЗначение() и Выбран() чаще всего без разницы. Выбран() знает позицию элемента справочника. ПустоеЗначение() -нет. Если удалить элементы, но оставятся где-то на них ссылки в реквизитах формы, то ПустоеЗначение() там покажет 0, Выбран() скорее всего 1. надо проверить.

Автор: olmar 07.02.13, 11:36

Ясненько. Спасибо за обьяснение.

Автор: Cthulhu 08.02.13, 22:09

Цитата(olmar @ 06.02.13, 10:25) *
...очень давно существует...

нет, не очень. и - уже скурвился, пардон мон френч. точнее - его "хозяйчик".

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua