|   |   | 
| 
 | 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 | 
        Похоже я, как обычно, подвесил всех своими нетривиальными задачами :)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |