Таблица значений

Новая тема
Показывать по сообщений
Помогите с работой таблиц значений<br>есть 2-е таблицы значений с колонками Номенклатура и Количество(число), как вычесть Количество одной таблицы из другой в цикле, чтобы строчка вычитания искалась по номенклатуре?<br>зы. Комплексная 77
"Самый простой вариант:<br>Для Стр1 = 1 По Т1.Количество() Цикл<br>  Стр2 = 0;<br>  Если Т2.НайтиЗначение (Т1.ПолучитьЗначение (Стр1, "Номенклатура"), Стр2, "Номенклатура") = 0 Тогда<br>    Продолжить;<br>  КонецЕсли;<br>  Т2.УстановитьЗначение (Т2.ПолучитьЗначение (Стр2, "Количество") - Т1.ПолучитьЗначение (Стр1, "Количество"));<br>КонецЦикла;<br><br>Сложнее, но и быстрее если отсортировать таблицы и обойтись без Поиска значения."
"Надо было одну таблицу делать. А потом Таб.Свернуть("Номеклатура",",");"
Тоже верно. Что-то я стормозил.
"задача такая, есть непроведенные накладные нужно выбрать из них товар с количеством вычесть из него то что есть на данный момент на складе и запихнуть в приход.<br>я хочу сделать таб значений товара из накладных и таб значений из регистра остатки, вычесть из таб значений накладных таблицу значений регистра остатков...так корректно будет?<br>код начала:<br> ТаблицаНоменклатуры.ВыбратьСтроки();<br> Пока ТаблицаНоменклатуры.ПолучитьСтроку()=1 Цикл<br> Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");<br> Рег.ВыбратьИтоги();                     <br> Ном=0;<br> Пока Рег.ПолучитьИтог()=1 Цикл<br>                     Тут нужно сравнить по номенклатуре(???)и<br>                     ТаблицаНоменклатуры.Количество = ТаблицаНоменклатуры.Количество-Рег.Количество<br><br>вот с сравнением у меня загвоздка<br>ТаблицаНоменклатуры - это созданная таблица из накладных с колонками Номенклатура и Количество"
Ну да. Если вы к таблице Накладной добавите строки из таблицы остатков, только количеству приписав минус, тогда свернув таблицу останется пробежать по ней и выбрать строки со значением > 0
т.е. если я делаю цикл выборки из регистра остатки в цикле выборки строк таблицы, то по умолчанию выборка идет по одинаковой номенклатуре? остается только удалить строки с количество<0, так наверно проще будет
"Вот что получилось...тока работает некорректно, подскажите где ошибка...количество неправильное выводит в итоге<br>Процедура Сформировать()<br><br> Номенклатура = СоздатьОбъект("Справочник.Номенклатура"); <br> ТаблицаНоменклатуры = СоздатьОбъект("ТаблицаЗначений");<br> ТаблицаНоменклатуры.НоваяКолонка("Номенклатура","Справочник.Номенклатура",,,,,,);<br> ТаблицаНоменклатуры.НоваяКолонка("Количество","Число",,,,,,);<br> ТаблицаНоменклатуры.НоваяКолонка("Цена","Число",,,,,,);<br> ДокР=СоздатьОбъект("Документ.Реализация"); <br> ДокР.ВыбратьДокументы(ДатаНачала, ДатаКонца); <br> Пока ДокР.ПолучитьДокумент()=1 Цикл<br>     Если (ДокР.Проведен()=0) и (ДокР.ПометкаУдаления()=0) Тогда<br><br> ДокР.ВыбратьСтроки();<br> Пока ДокР.ПолучитьСтроку() = 1 Цикл<br> ТаблицаНоменклатуры.НоваяСтрока(); <br> ТаблицаНоменклатуры.Номенклатура = ДокР.Номенклатура;<br> ТаблицаНоменклатуры.Количество = ДокР.Количество; <br> ТаблицаНоменклатуры.Цена = ДокР.Цена;<br> Сообщить("Перебор реализаций " + СокрЛП(ДокР) + ТаблицаНоменклатуры.Номенклатура);<br> КонецЦикла;<br> КонецЕсли;<br> КонецЦикла;<br> ТаблицаНоменклатуры.Свернуть("Номенклатура", "Количество, Цена"); <br> ТаблицаНоменклатуры.ВыбратьСтроки();<br> Пока ТаблицаНоменклатуры.ПолучитьСтроку()=1 Цикл<br> Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");<br> Рег.ВыбратьИтоги();                     <br> Ном=0;<br> Пока Рег.ПолучитьИтог()=1 Цикл<br> ТаблицаНоменклатуры.Количество = ТаблицаНоменклатуры.Количество-Рег.Количество;<br> Если ТаблицаНоменклатуры.Количество<=0 Тогда<br> ТаблицаНоменклатуры.УдалитьСтроку();<br> КонецЕсли;<br> КонецЦикла;<br> КонецЦикла;<br><br><br><br> ДокВ=СоздатьОбъект("Документ.ПоступлениеТМЦ");                                                                              <br> Контрагенты = СоздатьОбъект("Справочник.Контрагенты");<br><br> ТочкаНачала = ДатаНачала;   <br> ТочкаКонца =  ДатаКонца;<br>    <br><br><br> ДокВ.Новый();<br> ДокВ.ДатаДок = ДатаНачала;   <br> <br> ТаблицаНоменклатуры.ВыбратьСтроки();   <br> Пока ТаблицаНоменклатуры.ПолучитьСтроку() = 1 Цикл<br> ДокВ.НоваяСтрока();   <br> ДокВ.Номенклатура = ТаблицаНоменклатуры.Номенклатура;<br>   ДокВ.Количество = ТаблицаНоменклатуры.Количество;<br> ДокВ.Цена = ТаблицаНоменклатуры.Цена; <br> ДокВ.Сумма = ДокВ.Количество * ДокВ.Цена; <br> КонецЦикла;          <br> ДокВ.Записать();<br> Сообщить("Записан новый документ "+ДокВ.Вид()+", №: "+ДокВ.НомерДок+" от "+ДокВ.ДатаДок);<br>КонецПроцедуры<br>"
"Я оставил только часть для сокращения, закомментированое - это типа удалить. Остальное писал навскидку (возможны ошибки :) )<br>>   ....<br>> //ТаблицаНоменклатуры.Свернуть("Номенклатура", "Количество, Цена"); <br>> //ТаблицаНоменклатуры.ВыбратьСтроки();<br>> //Пока ТаблицаНоменклатуры.ПолучитьСтроку()=1 Цикл<br>> Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");<br>> Рег.ВыбратьИтоги();                     <br>> // Ном=0;<br>> Пока Рег.ПолучитьИтог()=1 Цикл<br>>   // ТаблицаНоменклатуры.Количество = ТаблицаНоменклатуры.Количество-Рег.Количество;<br>>   // Если ТаблицаНоменклатуры.Количество<=0 Тогда<br>>   // ТаблицаНоменклатуры.УдалитьСтроку();<br>>   // КонецЕсли;<br>    ТаблицаНоменклатуры.НоваяСтрока();<br>    ТаблицаНоменклатуры.Номенклатура = Рег.Номенклатура;<br>    ТаблицаНоменклатуры.Количество = -Рег.Количество;<br>    ТаблицаНоменклатуры.Цена = 0;<br>>   КонецЦикла;<br>    ТаблицаНоменклатуры.Свернуть("Номенклатура", "Количество, Цена"); <br>>   //КонецЦикла;<br>> <br>> <br>> <br>>ДокВ=СоздатьОбъект("Документ.ПоступлениеТМЦ");                                                                           > Контрагенты = СоздатьОбъект("Справочник.Контрагенты");<br>> ....<br>> ТаблицаНоменклатуры.ВыбратьСтроки();   <br>> Пока ТаблицаНоменклатуры.ПолучитьСтроку() = 1 Цикл<br>    Если ТаблицаНоменклатуры.Количество <= 0 Тогда Продолжить; КонецЕсли;<br>> ДокВ.НоваяСтрока();   <br>> ДокВ.Номенклатура = ТаблицаНоменклатуры.Номенклатура;<br>>     ДокВ.Количество = ТаблицаНоменклатуры.Количество;<br>> ДокВ.Цена = ТаблицаНоменклатуры.Цена; <br>> ДокВ.Сумма = ДокВ.Количество * ДокВ.Цена; <br>> КонецЦикла;<br>    Если ДокВ.Количество() > 0 Тогда<br>> ДокВ.Записать();<br>> Сообщить("Записан новый документ "+ДокВ.Вид()+", №: "+ДокВ.НомерДок+" от "+ДокВ.ДатаДок);<br>    КонецЕсли;<br>> КонецПроцедуры<br>> <br><br>При этом стоит учесть:<br>  Если в документе у вас несколько строк с одной номенклатурой, то свертка увеличит Цену, что в общем-то не верно. А если учесть, что вы их собираете из разных документов - вероятность такого случая достаточна хорошая. Вывод - Собирать 2 таблицы одна с количеством, другая с ценой. В случае разных цен, можно будет усреднить или еще как-то обработать.<br><br>"
кто цену суммирует *?
Читают тему
(гостей: 1)

Быстрый переход