Таблица значений
03.03.2010
13:08
#1
Помогите с работой таблиц значений<br>есть 2-е таблицы значений с колонками Номенклатура и Количество(число), как вычесть Количество одной таблицы из другой в цикле, чтобы строчка вычитания искалась по номенклатуре?<br>зы. Комплексная 77
03.03.2010
14:08
#2
"Самый простой вариант:<br>Для Стр1 = 1 По Т1.Количество() Цикл<br> Стр2 = 0;<br> Если Т2.НайтиЗначение (Т1.ПолучитьЗначение (Стр1, "Номенклатура"), Стр2, "Номенклатура") = 0 Тогда<br> Продолжить;<br> КонецЕсли;<br> Т2.УстановитьЗначение (Т2.ПолучитьЗначение (Стр2, "Количество") - Т1.ПолучитьЗначение (Стр1, "Количество"));<br>КонецЦикла;<br><br>Сложнее, но и быстрее если отсортировать таблицы и обойтись без Поиска значения."
03.03.2010
14:21
#5
"задача такая, есть непроведенные накладные нужно выбрать из них товар с количеством вычесть из него то что есть на данный момент на складе и запихнуть в приход.<br>я хочу сделать таб значений товара из накладных и таб значений из регистра остатки, вычесть из таб значений накладных таблицу значений регистра остатков...так корректно будет?<br>код начала:<br> ТаблицаНоменклатуры.ВыбратьСтроки();<br> Пока ТаблицаНоменклатуры.ПолучитьСтроку()=1 Цикл<br> Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");<br> Рег.ВыбратьИтоги(); <br> Ном=0;<br> Пока Рег.ПолучитьИтог()=1 Цикл<br> Тут нужно сравнить по номенклатуре(???)и<br> ТаблицаНоменклатуры.Количество = ТаблицаНоменклатуры.Количество-Рег.Количество<br><br>вот с сравнением у меня загвоздка<br>ТаблицаНоменклатуры - это созданная таблица из накладных с колонками Номенклатура и Количество"
03.03.2010
14:35
#6
Ну да. Если вы к таблице Накладной добавите строки из таблицы остатков, только количеству приписав минус, тогда свернув таблицу останется пробежать по ней и выбрать строки со значением > 0
03.03.2010
14:42
#7
т.е. если я делаю цикл выборки из регистра остатки в цикле выборки строк таблицы, то по умолчанию выборка идет по одинаковой номенклатуре? остается только удалить строки с количество<0, так наверно проще будет
03.03.2010
15:55
#8
"Вот что получилось...тока работает некорректно, подскажите где ошибка...количество неправильное выводит в итоге<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>"
03.03.2010
17:35
#9
"Я оставил только часть для сокращения, закомментированое - это типа удалить. Остальное писал навскидку (возможны ошибки
)<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>"

ЗиК .292. В своде проводок "обойти" 97 счет1С 8.1 базовая. Релиз 1.6.23.2 Как активировать программу на Windows 7 64-bit???
Читают тему
(гостей: 1)