Имя: Пароль:
1C
1C 7.7
v7: Порядки обхода запроса по бухитогам
0 Tester
 
18.09.13
17:14
Всем привет. Вроде опыта в 1С 7.7 достаточно, но попытки оптимизации в плане увеличения быстродействия привели в тупик.
Хочу выполнить один запрос к бухитогам по разным счетам, а потом только лишь обрабатывать результаты данного запроса. Выгрузки бухитогов в 2-мерную таблицы значений нету, потэтому приходится извращаться с обходами результатов.
В общем вначале выполняется запрос, а потом 2 процедуры
//*******************************************
Процедура ПолучитьОстаток(Партия)    
  Если Ит.ПолучитьСубконто(ВидыСубконто.Партии, , Партия) = 1 Тогда
    Ит.ВыбратьСчета();
    Пока Ит.ПолучитьСчет() = 1 Цикл
      Если Ит.Счет <> СчетПоКоду("РЗ") Тогда    
    Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл
      Если Ит.СКД("К") <> 0 Тогда
        ТЗ.Остаток = ТЗ.Остаток + Ит.СКД("К");
      КонецЕсли;
    КонецЦикла;
      КонецЕсли;                
    КонецЦикла;    
  КонецЕсли;
КонецПроцедуры

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

В одной процедуре мне нужно:
1. Получить партию
2. Перебрать счета
3. Перебрать склады

А во второй:
1. Получить счет
2. Получить партию
3. Перебрать склады

Процедура выполняются поочереди: 1-я, 2-я, 1-я, 2-я и т.д. для всех строк ТЗ.
1 zak555
 
18.09.13
17:15
запрос весь где ?
2 Tester
 
18.09.13
17:18
Проблема в том, что 1-я работает правильно, 2-я нет. Если во второй поменять местами строки
Если Ит.ПолучитьСчет(, СчетПоКоду("РЗ")) = 1 Тогда
Если Ит.ПолучитьСубконто(ВидыСубконто.Партии, , Партия) = 1 Тогда
то все работает.
3 Tester
 
18.09.13
17:19
Вставлю весь код:
Перем Ит;

//*******************************************
//Процедура ПолучитьСклады(Партия)
//    Если Ит.ПолучитьСубконто(ВидыСубконто.Партии, , Партия) = 1 Тогда
//        Ит.ВыбратьСчета();
//        Пока Ит.ПолучитьСчет() = 1 Цикл
//            Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
//            Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл
//                ТЗ.Склад = ?(ПустоеЗначение(ТЗ.Склад)=1, СокрЛП(Ит.Субконто(ВидыСубконто.МестаХранения).Наименование), ТЗ.Склад + ", " + СокрЛП(Ит.Субконто(ВидыСубконто.МестаХранения)));
//            КонецЦикла;
//        КонецЦикла;
//    КонецЕсли;
//КонецПроцедуры

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

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

//*******************************************
Процедура Сформировать()
    ТЗ.Очистить();
    ТЗ.НоваяКолонка("Партия", "Справочник.Партии");
    ТЗ.НоваяКолонка("Склад", "Строка");
    ТЗ.НоваяКолонка("Остаток", "Число", 15, 3);
    ТЗ.НоваяКолонка("Резерв", "Число", 15, 3);
    Товар = СоздатьОбъект("Справочник.Номенклатура");
    Товар.НайтиПоКоду("С00010738");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура, Товар, 2);
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);        
    Ит.ИспользоватьСубконто(ВидыСубконто.Партии);          
    Ит.ВыполнитьЗапрос(, '10.09.2013', "41.1, 43.1, 41.5, РЗ",,,,, "К");        
    Ит.ВыбратьСчета();
    Пока Ит.ПолучитьСчет() = 1 Цикл        
        Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
        Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл
            Ит.ВыбратьСубконто(ВидыСубконто.Партии);
            Пока Ит.ПолучитьСубконто(ВидыСубконто.Партии) = 1 Цикл
                Если Ит.СКД("К") > 0 Тогда
                    ТЗ.НоваяСтрока();
                    ТЗ.Партия = Ит.Субконто(ВидыСубконто.Партии);                        
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    // Повторим на всякий случай запрос, чтобы не иметь зависимости от результатов обхода
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура, Товар, 2);
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);        
    Ит.ИспользоватьСубконто(ВидыСубконто.Партии);          
    Ит.ВыполнитьЗапрос(, '10.09.2013', "41.1, 43.1, 41.5, РЗ",,,,, "К");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        //ПолучитьСклады(ТЗ.Партия);
        ПолучитьОстаток(ТЗ.Партия);
        ПолучитьРезерв(ТЗ.Партия);
    КонецЦикла;
КонецПроцедуры
4 Ёпрст
 
гуру
18.09.13
17:29
>>>// Повторим на всякий случай запрос, чтобы не иметь зависимости от результатов обхода

Зачет, ага..
Ты это, в цикл его оберни, а то быстро слишком работает, не разглядеть ни черта, всё мелькает на экране - гораздо приятнее смотреть на белый мёртвый фон, на нём мухи отчетливее видны.
5 zak555
 
18.09.13
17:33
почему отбор непоследний в использоватьСбуконто ?
6 Tester
 
18.09.13
17:36
(5)  я же написал, что 2-й запрос здесь временно для исключения влияние результатов предыдущих обходов.
Объясни лучше как обходить по разным уровням итоги одного запроса?!
7 Tester
 
18.09.13
17:37
(5) а какая разница 1-й он или последний?
8 zak555
 
18.09.13
17:37
(6) и первый и второй запросы неверны
9 zak555
 
18.09.13
17:38
перепиши так

Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);        
    Ит.ИспользоватьСубконто(ВидыСубконто.Партии);          
    Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура, Товар, 2);
    
    Ит.ВыполнитьЗапрос(, '10.09.2013', "41.1, 43.1, 41.5, РЗ",,,,, "К");


будет быстрее
10 Tester
 
18.09.13
17:40
(9) Проверил, не влияет! Тут проблема в 2-й процедурах с разными порядками обхода.
Игрался с ВыбратьСчета(1) и с ВыбратьСубконто(, 1) - результат меняется, но все равно логики не пойму.
11 zak555
 
18.09.13
17:43
зачем рассчитывать остатки по счету РЗ, если его результат не смотрится ?
12 Tester
 
18.09.13
17:45
Все смотрится: Процедура ПолучитьРезерв(Партия)
13 Tester
 
18.09.13
17:48
Сори, но вот ужал код, чтобы не было всяких ёпрст (без обид :-D ):
Перем Ит;

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

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

//*******************************************
Процедура Сформировать()
    ТЗ.Очистить();
    ТЗ.НоваяКолонка("Партия", "Справочник.Партии");
    ТЗ.НоваяКолонка("Склад", "Строка");
    ТЗ.НоваяКолонка("Остаток", "Число", 15, 3);
    ТЗ.НоваяКолонка("Резерв", "Число", 15, 3);
    Товар = СоздатьОбъект("Справочник.Номенклатура");
    Товар.НайтиПоКоду("С00010738");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");    
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);        
    Ит.ИспользоватьСубконто(ВидыСубконто.Партии);          
    Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура, Товар, 2);
    Ит.ВыполнитьЗапрос(, '10.09.2013', "41.1, 43.1, 41.5, РЗ",,,,, "К");        
    Ит.ВыбратьСчета();
    Пока Ит.ПолучитьСчет() = 1 Цикл        
        Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
        Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл
            Ит.ВыбратьСубконто(ВидыСубконто.Партии);
            Пока Ит.ПолучитьСубконто(ВидыСубконто.Партии) = 1 Цикл
                Если Ит.СКД("К") > 0 Тогда
                    ТЗ.НоваяСтрока();
                    ТЗ.Партия = Ит.Субконто(ВидыСубконто.Партии);                        
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;    
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл        
        ПолучитьОстаток(ТЗ.Партия);
        ПолучитьРезерв(ТЗ.Партия);
    КонецЦикла;
КонецПроцедуры
14 zak555
 
18.09.13
17:48
я всё равно не понял -- какая задача
15 zak555
 
18.09.13
17:49
+ (14) и почему нельзя получить ТЗ за один обход ?
16 Tester
 
18.09.13
17:51
(14) Задача любопытства. Выполняем 1 запрос, а после в разных процедурах получаем данные по результату запроса в различных разрезах и с разными порядками обхода результатов!
(15) За 1 обход получить можно без проблем, но... задача любопытства :)
17 Ёпрст
 
гуру
18.09.13
17:53
(15) дык нужно замедлить, не мешай эксперементатору.
:)
18 zak555
 
18.09.13
17:58
а так ?



ТЗ.Очистить();
ТЗ.НоваяКолонка("Партия", "Справочник.Партии");
ТЗ.НоваяКолонка("Склад", "Строка");
ТЗ.НоваяКолонка("Остаток", "Число", 15, 3);
ТЗ.НоваяКолонка("Резерв", "Число", 15, 3);

Товар = СоздатьОбъект("Справочник.Номенклатура");    
Товар.НайтиПоКоду("С00010738");

Ит = СоздатьОбъект("БухгалтерскиеИтоги");    
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);        
Ит.ИспользоватьСубконто(ВидыСубконто.Партии);          
Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура, Товар, 2);
Ит.ВыполнитьЗапрос(, '10.09.2013', "41.1, 43.1, 41.5, РЗ",,,,, "К");

Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл
    
    Ит.ВыбратьСубконто(ВидыСубконто.Партии);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.Партии) = 1 Цикл
        
        Ит.ВыбратьСчета();
        Пока Ит.ПолучитьСчет() = 1 Цикл
            
            ТЗ.НоваяСтрока();
            ТЗ.Склад = Ит.Субконто(ВидыСубконто.МестаХранения)
            ТЗ.Партия = Ит.Субконто(ВидыСубконто.Партии);
            Если Ит.Счет = СчетПоКоду("РЗ") Тогда
                ТЗ.Резерв = Ит.СКД("К");    
            Иначе
                ТЗ.Остаток = Ит.СКД("К");    
            КонецЕсли;
            
        КонецЦикла;
    КонецЦикла;
КонецЦикла;

ТЗ.Свернуть("Партия, Склад", "Резерв,Остаток");
19 Tester
 
18.09.13
18:06
(18) Спасибо, так будет работать. Но, не знаю как объяснить, нужно, чтобы был 1 запрос (!) и 2 разных (!) перебора результатов, например 1-й по по счетам/партиям, а 2-й по партиям/счетам и они должны следовать друг за другом для каждой строчки ТЗ!!!

В общем на сегодня спасибо за помощь, завтра буду дальше ковырять...
20 ADirks
 
18.09.13
19:30
(0) Если нужна оптимизация - возьми AccounsRecordset http://www.1cpp.ru/forum/YaBB.pl?num=1181817217

работать с семёркой штатными методами ... ну, можно сказать, моветон уже ...
21 zak555
 
18.09.13
19:31
(19) я не понимаю
22 Tester
 
19.09.13
11:35
Новый вброс :)
На форме ТЗ и 3 кнопки. Код такой:

Перем Ит;

//*******************************************
Процедура Кнопка1ВыполнениеЗапроса()
    ТЗ.Очистить();
    ТЗ.НоваяКолонка("Склад", "Справочник.МестаХранения");
    ТЗ.НоваяКолонка("Товар", "Справочник.Номенклатура");
    ТЗ.НоваяКолонка("Партия", "Справочник.Партии");
    ТЗ.НоваяКолонка("Остаток", "Число", 15, 3);    
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");    
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);        
    Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
    Ит.ИспользоватьСубконто(ВидыСубконто.Партии);              
    Ит.ВыполнитьЗапрос(, РабочаяДата(), "41.1");                
КонецПроцедуры

//*******************************************
Процедура Кнопка2ПолучениеИтоговПоСкладуИТовару()
    Если ПустоеЗначение(Ит) = 0 Тогда
        ТЗ.УдалитьСтроки();
        Склад = СоздатьОбъект("Справочник.МестаХранения");        
        Товар = СоздатьОбъект("Справочник.Номенклатура");
        Если (Склад.НайтиПоНаименованию("Склад №1") = 1) и (Товар.НайтиПоКоду("С00010738") = 1) Тогда                        
            Если Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения, , Склад) = 1 Тогда                
                Если Ит.ПолучитьСубконто(ВидыСубконто.Номенклатура, , Товар) = 1 Тогда
                    Ит.ВыбратьСубконто(ВидыСубконто.Партии);
                    Пока Ит.ПолучитьСубконто(ВидыСубконто.Партии) = 1 Цикл
                        ТЗ.НоваяСтрока();
                        ТЗ.Склад = Ит.Субконто(ВидыСубконто.МестаХранения);
                        ТЗ.Товар = Ит.Субконто(ВидыСубконто.Номенклатура);
                        ТЗ.Партия = Ит.Субконто(ВидыСубконто.Партии);
                        ТЗ.Остаток = Ит.СКД("К");
                    КонецЦикла;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

//*******************************************
Процедура Кнопка3ПолучениеИтоговПоТоваруИСкладу()
    Если ПустоеЗначение(Ит) = 0 Тогда
        ТЗ.УдалитьСтроки();
        Склад = СоздатьОбъект("Справочник.МестаХранения");        
        Товар = СоздатьОбъект("Справочник.Номенклатура");
        Если (Склад.НайтиПоНаименованию("Склад №1") = 1) и (Товар.НайтиПоКоду("С00010738") = 1) Тогда                                    
            Если Ит.ПолучитьСубконто(ВидыСубконто.Номенклатура, , Товар) = 1 Тогда
                Если Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения, , Склад) = 1 Тогда                
                    Ит.ВыбратьСубконто(ВидыСубконто.Партии);
                    Пока Ит.ПолучитьСубконто(ВидыСубконто.Партии) = 1 Цикл
                        ТЗ.НоваяСтрока();
                        ТЗ.Склад = Ит.Субконто(ВидыСубконто.МестаХранения);
                        ТЗ.Товар = Ит.Субконто(ВидыСубконто.Номенклатура);
                        ТЗ.Партия = Ит.Субконто(ВидыСубконто.Партии);
                        ТЗ.Остаток = Ит.СКД("К");
                    КонецЦикла;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Порядок нажатия кнопок:
1, 2 - получаем на складе "Склад №1" все партии товара "Арматура А500С 8мм"
1, 3 - получаем на складе "Склад №1" все партии товара "Арматура А500С 8мм"
1, 2, 3 - получаем остатки всех партий всех (!) товаров на складе "Склад № 1"
1, 3, 2 - получаем остатки всех партий товара "Арматура А500С 8мм" на всех (!) складах.

Вопрос: как добиться единообразного(!) выполнения всех четырех вариантов комбинаций кнопок, не меняя (!) порядков обхода процедур? Другими словами, как после выполнения кнопки 2 сбить курсор в Ит, чтобы кнопка 3 выполнилась с таким же результатом?
23 Tester
 
19.09.13
14:34
Разобрался вроде, но только с 1-м способом.
1-й способ - задача решается с помощью разделения выборок по номерам. Вот реально работающий код:
Перем Ит;

//*******************************************
Процедура Кнопка1ВыполнениеЗапроса()
    ТЗ.Очистить();
    ТЗ.НоваяКолонка("Склад", "Справочник.МестаХранения");
    ТЗ.НоваяКолонка("Товар", "Справочник.Номенклатура");
    ТЗ.НоваяКолонка("Партия", "Справочник.Партии");
    ТЗ.НоваяКолонка("Остаток", "Число", 15, 3);    
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");    
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);        
    Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
    Ит.ИспользоватьСубконто(ВидыСубконто.Партии);              
    Ит.ВыполнитьЗапрос(, РабочаяДата(), "41.1");                
КонецПроцедуры

//*******************************************
Процедура Кнопка2ПолучениеИтоговПоСкладуИТовару()
    Если ПустоеЗначение(Ит) = 0 Тогда
        ТЗ.УдалитьСтроки();
        Склад = СоздатьОбъект("Справочник.МестаХранения");        
        Товар = СоздатьОбъект("Справочник.Номенклатура");
        Если (Склад.НайтиПоНаименованию("Склад №1") = 1) и (Товар.НайтиПоКоду("С00010738") = 1) Тогда
            //// Открытие выборки по всем субконто
            //Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения, 1);
            //Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения);            
            //Ит.ВыбратьСубконто(ВидыСубконто.Номенклатура, 1);
            //Ит.ПолучитьСубконто(ВидыСубконто.Номенклатура);                        
            //Ит.ВыбратьСубконто(ВидыСубконто.Партии, 1);
            //Ит.ПолучитьСубконто(ВидыСубконто.Партии);
            Если Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения, 1, Склад) = 1 Тогда                
                Если Ит.ПолучитьСубконто(ВидыСубконто.Номенклатура, 1, Товар) = 1 Тогда
                    Ит.ВыбратьСубконто(ВидыСубконто.Партии, , , 1);
                    Пока Ит.ПолучитьСубконто(ВидыСубконто.Партии, 1) = 1 Цикл
                        ТЗ.НоваяСтрока();
                        ТЗ.Склад = Ит.Субконто(ВидыСубконто.МестаХранения);
                        ТЗ.Товар = Ит.Субконто(ВидыСубконто.Номенклатура);
                        ТЗ.Партия = Ит.Субконто(ВидыСубконто.Партии);
                        ТЗ.Остаток = Ит.СКД("К");
                    КонецЦикла;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

//*******************************************
Процедура Кнопка3ПолучениеИтоговПоТоваруИСкладу()
    Если ПустоеЗначение(Ит) = 0 Тогда
        ТЗ.УдалитьСтроки();
        Склад = СоздатьОбъект("Справочник.МестаХранения");        
        Товар = СоздатьОбъект("Справочник.Номенклатура");
        Если (Склад.НайтиПоНаименованию("Склад №1") = 1) и (Товар.НайтиПоКоду("С00010738") = 1) Тогда                                                
            //// Открытие выборки по всем субконто
            //Ит.ВыбратьСубконто(ВидыСубконто.Номенклатура, 1);
            //Ит.ПолучитьСубконто(ВидыСубконто.Номенклатура);
            //Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения, 1);
            //Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения);            
            //Ит.ВыбратьСубконто(ВидыСубконто.Партии, 1);
            //Ит.ПолучитьСубконто(ВидыСубконто.Партии);            
            Если Ит.ПолучитьСубконто(ВидыСубконто.Номенклатура, 2, Товар) = 1 Тогда                
                Если Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения, 2, Склад) = 1 Тогда                
                    Ит.ВыбратьСубконто(ВидыСубконто.Партии, , , 2);
                    Пока Ит.ПолучитьСубконто(ВидыСубконто.Партии, 2) = 1 Цикл
                        ТЗ.НоваяСтрока();
                        ТЗ.Склад = Ит.Субконто(ВидыСубконто.МестаХранения);
                        ТЗ.Товар = Ит.Субконто(ВидыСубконто.Номенклатура);
                        ТЗ.Партия = Ит.Субконто(ВидыСубконто.Партии);
                        ТЗ.Остаток = Ит.СКД("К");
                    КонецЦикла;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
2-й способ - без разделения на выборки с помощью открытия выборки по всем субконто (закомментированные участки кода), но я не могу разобраться в какой последовательности нужно переоткрывать выборки по всем субконто, как не игрался, результата не принесло. Если кто-то пояснит, то буду рад...
24 Tester
 
19.09.13
15:25
Похоже я, как обычно, подвесил всех своими нетривиальными задачами :)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан