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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем W@rt, 7 фев 2009.

  1. TopicStarter Overlay
    W@rt
    Offline

    W@rt Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    [warn="Внимание!!!"]Пользуемся тегами!!! :unsure:[/warn]

    Здравствуйте! Есть срочный вопрос! Имеется тз выгруженная из табличной части документа содержащая номенклатуру. и есть регистр остатков номенклатуры. Необходимо записи которые есть в регистре оставить, остальные удалить. Я так понимаю надо создать еще одну тз, при совпадении номенклатуры, записывать в нее и выгрузить в табличную часть документа. Но не получается((( Вот примерный код:
    Код:
    тз=СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(тз);
    регОст=СоздатьОбъект("Регистр.Остатки");
    регОст.ВыбратьИтоги();
    тз.выбратьстроки();
    итогиТЗ=СоздатьОбъект("ТаблицаЗначений");
    итогиТЗ.НоваяКолонка("Товар","Строка");
    итогиТЗ.НоваяКолонка("Количество","Число");
    итогиТЗ.НоваяКолонка("СтараяЦена","Число");
    итогиТЗ.НоваяКолонка("Сумма","Число");
    Пока регОст.ПолучитьИтог()=1 Цикл
    Если тз.НайтиЗначение(СОКРЛП(регОст.Товар),,"Товар")=1 Тогда
    итогиТЗ.НоваяСтрока();
    итогиТЗ.Товар=регОст.товар;
    итогиТЗ.Количество=регОст.КОличество;
    итогиТЗ.СтараяЦена=глЦенаПоКатегории(Товар,КатегорияЦен,ДатаДок);
    итогиТЗ.Сумма=итогиТЗ.Количество*Цена;
    Иначе
    Продолжить;
    КонецЕсли;
    КонецЦикла;
    
    
    Может что то не то делаю?
  2. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    попрубуй запросом
    с условием
    Код:
    |Услвовие( Не номенклатура В ТЗ);
    
  3. unknown181538
    Offline

    unknown181538

    Регистрация:
    24 фев 2008
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    А что именно не получается?
    И еще я сомневаюсь, что "Товар" в документе имеет тип "Строка".
  4. TopicStarter Overlay
    W@rt
    Offline

    W@rt Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    Да правы, сделано неправильно, вот так должно, но не срабатывает Остатки.СводныйОстаток(,тз.Товар,"Количество")???
    Код:
    Пока тз.ПолучитьСтроку()=1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл	</span>
    
    Если  Остатки.СводныйОстаток(,тз.Товар,"Количество") > 0  Тогда
    Продолжить;				
    Иначе
    Товар=тз.товар; 
    СтараяЦена=глЦенаПоКатегории(Товар,КатегорияЦен,ДатаДок);
    РассчитатьСумму();
    КонецЕсли; 
    КонецЦикла;
    
    
    Не ищет хотя в остатках имеется(((Не пойму
  5. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    А че находиться в переменной "остатки" ? может надо рассчитать регистры на текущийдокумент

    Остатки.СводныйОстаток(,тз.Товар,"Количество")??? -- в решистре остаткиТМЦ 3 измерения , еще запятую поставь послое ТЗ.ТОвар.
  6. TopicStarter Overlay
    W@rt
    Offline

    W@rt Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    В переменной остатки содержится ссылка на регистр "Остатки". У регистра два измерения, второе в документе не используется. запятые по-разному ставил, не помогает

    регистры рассчитываются на текущий документ.
  7. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Если Остатки.СводныйОстаток(,тз.Товар,,,"Количество") > 0 Тогда
    У меня в типой конфе все работает ,в регистре ОСтаткиТМЦ 4 измерения : фирма, номенклатура, Склад, ценаПрод.
    А ты через обработку или в самом документе ?
  8. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура Сформировать()
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Номенклатура");
    Рег=СоздатьОбъект("Регистры");
    Остатки=Рег.ОстаткиТМЦ;
    Остатки.ВременныйРасчет(1);
    Рег.РассчитатьРегистрыНа(Док.ТекущийДокумент()); // ссылка на документ на форме
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку()=1 Цикл
    Если Остатки.СводныйОстаток(,Док.Номенклатура,,,"Количество")=0 ТОгда
    ТЗ.НоваяСтрока();
    ТЗ.Номенклатура= Док.Номенклатура;
    КонецЕсли;
    КонецЦикла;
    // в таблице значения весь товар с 0 остатком
    КонецПроцедуры
    
    
  9. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    433
    Симпатии:
    3
    Баллы:
    29
    А по-моему, все можно сделать в одной таблице значений. Попробуйте так, не проверял, но вроде должно работать:

    Код:
    ТЗ = СоздатьОбъект("ТаблицаЗначений"); 
    ВыгрузитьТабличнуюЧасть(ТЗ);
    
    ТекДок = ТекущийДокумент();
    ЗапросПоОстаткам = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Период с ТекДок По ТекДок:
    |Номенклатура = Регистр.Остатки.Номенклатура:
    |Количество = Регистр.Остатки.Количество;
    |Группировка Номенклатура;
    |Функция Вналичии = НачОст(Количество);
    |Условие (Номенклатура в ТЗ.Номенклатура)";
    
    Запрос.Выполнить(ТекстЗапроса);
    
    ТЗ.НоваяКолонка("НедостающееКоличество", "Число");
    
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл     
    //первоначально считаем, что в регистре нулевые остатки
    ТЗ.НедостающееКоличество = ТЗ.Количество:
    КонецЦикла;
    
    
    Пока Запрос.Группировка("Номенклатура") = 1 Цикл   
    //теперь смотрим, что имеется
    ТЗ.НоваяСтрока();
    ТЗ.Номенклатура = Запрос.Номенклатура;
    ТЗ.НедостающееКоличество = -Запрос.ВНаличии;
    КонецЦикла;         
    
    ТЗ.Свернуть("Номенклатура", "Количество, НедостающееКоличество");
    
    //Удаляем товары, которых недостает,
    //попутно заполняя цену и сумму у имеющихся в наличии
    ТЗ.НоваяКолонка("СтараяЦена", "Число",,2); 
    ТЗ.НоваяКолонка("Сумма", "Число",,2); 
    
    ТЗ.ВыбратьСтроки();
    
    Пока (ТЗ.ПолучитьСтроку() = 1) Цикл 
    Пока (ТЗ.НедостающееКоличество > 0) Цикл
    ТЗ.УдалитьСтроку();  
    КонецЦикла; 
    ТЗ.СтараяЦена = глЦенаПоКатегории(ТЗ.Номенклатура,КатегорияЦен,ДатаДок);
    ТЗ.Сумма = ТЗ.СтараяЦена * ТЗ.Количество;
    КонецЦикла; 
    
    //Ну, и напоследок приведем таблицу к первоначальному формату
    ТЗ.УдалитьКолонку("НедостающееКоличество");
    ТЗ.Сортировать("Номенклатура");
    //Ну вот, пожалуй и все;)
    
    
  10. TopicStarter Overlay
    W@rt
    Offline

    W@rt Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    спасибо, разобрались :unsure:

Поделиться этой страницей