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

Новая тема
Показывать по 10 20 40 сообщений
Помогите с работой таблиц значений
есть 2-е таблицы значений с колонками Номенклатура и Количество(число), как вычесть Количество одной таблицы из другой в цикле, чтобы строчка вычитания искалась по номенклатуре?
зы. Комплексная 77
"Самый простой вариант:
Для Стр1 = 1 По Т1.Количество() Цикл
 Стр2 = 0;
 Если Т2.НайтиЗначение (Т1.ПолучитьЗначение (Стр1, "Номенклатура"), Стр2, "Номенклатура") = 0 Тогда
   Продолжить;
 КонецЕсли;
 Т2.УстановитьЗначение (Т2.ПолучитьЗначение (Стр2, "Количество") - Т1.ПолучитьЗначение (Стр1, "Количество"));
КонецЦикла;

Сложнее, но и быстрее если отсортировать таблицы и обойтись без Поиска значения."
"Надо было одну таблицу делать. А потом Таб.Свернуть("Номеклатура",",");"
Тоже верно. Что-то я стормозил.
"задача такая, есть непроведенные накладные нужно выбрать из них товар с количеством вычесть из него то что есть на данный момент на складе и запихнуть в приход.
я хочу сделать таб значений товара из накладных и таб значений из регистра остатки, вычесть из таб значений накладных таблицу значений регистра остатков...так корректно будет?
код начала:
ТаблицаНоменклатуры.ВыбратьСтроки();
Пока ТаблицаНоменклатуры.ПолучитьСтроку()=1 Цикл
Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Рег.ВыбратьИтоги();                    
Ном=0;
Пока Рег.ПолучитьИтог()=1 Цикл
                    Тут нужно сравнить по номенклатуре(???)и
                    ТаблицаНоменклатуры.Количество = ТаблицаНоменклатуры.Количество-Рег.Количество

вот с сравнением у меня загвоздка
ТаблицаНоменклатуры - это созданная таблица из накладных с колонками Номенклатура и Количество"
Ну да. Если вы к таблице Накладной добавите строки из таблицы остатков, только количеству приписав минус, тогда свернув таблицу останется пробежать по ней и выбрать строки со значением > 0
т.е. если я делаю цикл выборки из регистра остатки в цикле выборки строк таблицы, то по умолчанию выборка идет по одинаковой номенклатуре? остается только удалить строки с количество<0, так наверно проще будет
"Вот что получилось...тока работает некорректно, подскажите где ошибка...количество неправильное выводит в итоге
Процедура Сформировать()

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

ДокР.ВыбратьСтроки();
Пока ДокР.ПолучитьСтроку() = 1 Цикл
ТаблицаНоменклатуры.НоваяСтрока();
ТаблицаНоменклатуры.Номенклатура = ДокР.Номенклатура;
ТаблицаНоменклатуры.Количество = ДокР.Количество;
ТаблицаНоменклатуры.Цена = ДокР.Цена;
Сообщить("Перебор реализаций " + СокрЛП(ДокР) + ТаблицаНоменклатуры.Номенклатура);
КонецЦикла;
КонецЕсли;
КонецЦикла;
ТаблицаНоменклатуры.Свернуть("Номенклатура", "Количество, Цена");
ТаблицаНоменклатуры.ВыбратьСтроки();
Пока ТаблицаНоменклатуры.ПолучитьСтроку()=1 Цикл
Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Рег.ВыбратьИтоги();                    
Ном=0;
Пока Рег.ПолучитьИтог()=1 Цикл
ТаблицаНоменклатуры.Количество = ТаблицаНоменклатуры.Количество-Рег.Количество;
Если ТаблицаНоменклатуры.Количество<=0 Тогда
ТаблицаНоменклатуры.УдалитьСтроку();
КонецЕсли;
КонецЦикла;
КонецЦикла;



ДокВ=СоздатьОбъект("Документ.ПоступлениеТМЦ");                                                                              
Контрагенты = СоздатьОбъект("Справочник.Контрагенты");

ТочкаНачала = ДатаНачала;  
ТочкаКонца =  ДатаКонца;
   


ДокВ.Новый();
ДокВ.ДатаДок = ДатаНачала;  

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

При этом стоит учесть:
 Если в документе у вас несколько строк с одной номенклатурой, то свертка увеличит Цену, что в общем-то не верно. А если учесть, что вы их собираете из разных документов - вероятность такого случая достаточна хорошая. Вывод - Собирать 2 таблицы одна с количеством, другая с ценой. В случае разных цен, можно будет усреднить или еще как-то обработать.

"
кто цену суммирует *?
Читают тему
(гостей: 1)

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