7.7 Как реализовать суммирование реквизитов табличной части?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем UbeDN, 9 авг 2010.

  1. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    К примеру в нескольких позиций в тмц А и В есть еще по два реквизита (1 или 2, ну или сразу оба)
    как сделать что бы в подвал выводилось количество этих реквизитов?
    пример:
    А = 1; В = 2;
    Табл. часть
    ТМЦ Кол.

    А 2
    В 2

    Подвал
    1 = 2
    2 = 4

    Подскажите хоть от чего отталкиваться :unsure:
  2. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Хм, в принципе можно так:

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

    Метод желательно применять исключительно в связке с кнопкой, либо в методе ПриОкончанииРедактированияСтроки(), хотя это добавит тормозов. ))
  3. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Огромнейшее спасибо, за ответ но я видимо не рассчитал свои силы, этот метод слишком сложный =)
    я понял как можно сделать проще, отсюда следующий вопрос:
    я создал в форме элемента справочника еще один реквизит с типом число, как мне теперь сделать что бы это число попадало в колонку табличной части? ну т.е. я колонку создал, как их связать с элементом справочника?
  4. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Отсюда вопрос - опишите свой метод. Интересно же. ;)

    Все очень просто, если вы выбираете элемент в табличной части, то вы можете обращаться к нему как к реквизиту табличной части. Что это значит:

    В графе Формула свойств реквизита (в редакторе форм) скорее всего забиро наименование функции что исполняется при выборе этого реквизита. Найдите эту функцию/процедуру в модуле и допишите в нее что-то вроде:

    РеквизитЭлемента = Элемент.Реквизит;

    Где РеквизитЭлемента - это новый реквизит табличной части в который вы выгружаете нужное значение(не забудтье его создать в конфигураторе); Элемент - название реквизита ТЧ в который выбирается элемент справочника; Реквизит - название рекомого реквизита в Справочнике.

    Либо если графа Формула пуста - просто добавьте эту строку в нее.
  5. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    у меня везде реквизиты в форме элемента тмц Кол100 называется и реквизит табличной части тоже Кол100 знач. код такой должен быть ?

    Код:
    Процедура РассчетКол()
    Кол100 = Кол100.Кол100;
    КонецПроцедуры
    
    так не работает :unsure:
    [​IMG]
    [​IMG]
  6. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    В поле Формула свойств реквизита ТМЦ.

    Кол100 = ТМЦ.Кол100
  7. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    неа, все равно поле пустым остается
  8. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    :/

    1. Это вписывается в формулу/функцию реквизита "ТМЦ" табличной части документа.
    2. Типы Кол100 в справочнике и Кол100 в документе совпадают?
    3. Тип Кол100 в справочнике не периодический ли случайно? Если да то Кол100 = ТМЦ.Кол100.Получить(ДатаДок);

    Поле Формула срабатывает каждый раз когда вы выбираете ТМЦ. И только тогда.
  9. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    вписал это в функцию, типы везде число.
    результат тот же =)
  10. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Странно.

    А вы в справочнике ТМЦ это самое Кол100 добавили в собственно реквизиты? Потому что если оно существует только на форме - естественно обращения к нему будут нерезультативными.

    Вложения:

    • тмц.JPG
      тмц.JPG
      Размер файла:
      47,3 КБ
      Просмотров:
      17
  11. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    угу, там все так и сделал
    я так понял у меня оно сюда криво записано в саму функцию реквизита ТМЦ

    Код:
    Процедура РасчетСтроки(АктЭлемент="", Реакция=0)
    
    
    Если АктЭлемент="" Тогда
    АктЭлемент = Форма.АктивныйЭлемент(); 
    КонецЕсли;   
    
    Если АктЭлемент="ТМЦ" Тогда
    Если ТМЦ.Выбран()=1 Тогда
    Если ТМЦ.Вид()="ТМЦ" Тогда
    УстановкаБазЕд(Контекст,ТМЦ);
    ПолучитьПартиюПоУмолчанию(Партия,ТМЦ);
    УстЦенаБезНДС();
    УстЦенаСНДС();
    Иначе
    Коэффициент = 1;
    КонецЕсли;
    
    ЦенаБазовая = глЦенаОтпуска(Контекст, ТМЦ, ДатаДок, Константа.ОсновнаяКатегорияЦен, 1, СтавкаНДС.Ставка.Получить(ДатаДок), 1); 
    
    РасчетОстатков();
    Кво = ?(Кво=0, 1, Кво);    
    ПроцентСкидкиСтр = ПроцентСкидки; 
    
    РасчетСтроки("Кво", реакция);
    РасчетСтроки("ЦенаБезНДС", Реакция); 
    КонецЕсли;        
    
    ИначеЕсли АктЭлемент="Кво" Тогда
    Если ТМЦ.Выбран()=1 Тогда
    НетОст = Ост;
    Нет =  НетОст-Кво;                 
    Если Нет<=-0.001 Тогда
    Если реакция = -1 Тогда
    Сообщить(СокрЛП(ТМЦ)+" - НЕТ ТАКОГО КОЛИЧЕСТВА ТОВАРА НА СКЛАДЕ", "!!");
    Иначе
    Предупреждение("НЕТ ТАКОГО КОЛИЧЕСТВА ТОВАРА НА СКЛАДЕ", 20);
    КонецЕсли;
    КонецЕсли;
    
    Ящик = ?(ТМЦ.МинФас=0,0,Кво/ТМЦ.МинФас);
    РасчетСтроки("ЦенаСНДС");        
    КонецЕсли;
    
    ИначеЕсли АктЭлемент="Ед" Тогда
    Коэффициент = Ед.Коэффициент;
    РасчетСтроки("Кво", Реакция);   
    
    ИначеЕсли АктЭлемент="ЦенаБазовая" Тогда
    ПроцентСкидкиСтр = ?(ЦенаБазовая=0, 0, (ЦенаБазовая - ЦенаСНДС)*100/ЦенаБазовая); 
    СуммаБезСкидки = ЦенаБазовая * Кво;
    РасчетСтроки("СуммаБезСкидки");   
    
    ИначеЕсли АктЭлемент = "ПроцентСкидкиСтр" Тогда
    _ЦенаСНДС = (1-ПроцентСкидкиСтр/100) * ЦенаБазовая; 
    ЦенаБезНДС = глСуммаБезНДС(_ЦенаСНДС, СтавкаНДС.Ставка.Получить(ДатаДок), 4); 
    РасчетСтроки("ЦенаБезНДС");
    
    ИначеЕсли АктЭлемент="ЦенаБезНДС" Тогда
    ЦенаСНДС = глСуммаСНДС(ЦенаБезНДС, СтавкаНДС.Ставка.Получить(ДатаДок)); 
    РасчетСтроки("ЦенаСНДС");                
    
    ИначеЕсли АктЭлемент="ЦенаСНДС" Тогда
    ЦенаБезНДС = глСуммаБезНДС(ЦенаСНДС, СтавкаНДС.Ставка.Получить(ДатаДок), 4); 
    СуммаБезНДС = ЦенаБезНДС*Кво; 
    ПроцентСкидкиСтр = ?(ЦенаБазовая=0, 0, (ЦенаБазовая - ЦенаСНДС)*100/ЦенаБазовая); 
    РасчетСтроки("СуммаБезНДС"); РаспределитьОшибкуНДС();
    
    ИначеЕсли АктЭлемент="СуммаБезСкидки" Тогда
    Скидка = СуммаБезСкидки - СуммаСНДС; 
    
    ИначеЕсли АктЭлемент="СуммаБезНДС" Тогда
    ЦенаБезНДС = ?(Кво=0, СуммаБезНДС, СуммаБезНДС/Кво); 
    СуммаСНДС = ЦенаСНДС * Кво;
    НДС = СуммаСНДС - СуммаБезНДС; 
    РасчетСтроки("СуммаСНДС"); РаспределитьОшибкуНДС();
    
    ИначеЕсли АктЭлемент="Скидка" Тогда
    
    ИначеЕсли АктЭлемент="СуммаСНДС" Тогда
    СуммаБезНДС = глСуммаБезНДС(СуммаСНДС, СтавкаНДС.Ставка.Получить(ДатаДок)); 
    НДС = СуммаСНДС - СуммаБезНДС; 
    СуммаБезСкидки = ЦенаБазовая * Кво;
    ЦенаСНДС = ?(Кво=0, СуммаСНДС, СуммаСНДС/Кво); 
    ЦенаБезНДС = ?(Кво=0, СуммаБезНДС, СуммаБезНДС/Кво); 
    ПроцентСкидкиСтр = ?(ЦенаБазовая=0, 0, (ЦенаБазовая - ЦенаСНДС)*100/ЦенаБазовая); 
    Скидка = СуммаБезСкидки - СуммаСНДС;
    РаспределитьОшибкуНДС();
    
    ИначеЕсли АктЭлемент = "Ящик" Тогда
    Кво=Ящик*ТМЦ.МинФас;
    РасчетСтроки("Кво", Реакция);   
    
    ИначеЕсли АктЭлемент="НДС" Тогда
    СуммаСНДС = СуммаБезНДС + НДС;
    ЦенаСНДС = ?(Кво=0, СуммаСНДС, СуммаСНДС/Кво);
    РасчетСтроки("СуммаСНДС");  
    
    ИначеЕсли АктЭлемент = "Кол100" Тогда
    Кол100 = ТМЦ.Кол100;   
    Кво = Кол100;
    РасчетСтроки("Кво", Реакция)
    
    КонецЕсли;
    КонецПроцедуры
    
    предпоследний абзац
  12. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Все, тушите свет. Я же сказал в "ТМЦ".

    Отрывок из кода:

    Код:
    Если АктЭлемент="ТМЦ" Тогда
    Если ТМЦ.Выбран()=1 Тогда
    Если ТМЦ.Вид()="ТМЦ" Тогда
    УстановкаБазЕд(Контекст,ТМЦ);
    ПолучитьПартиюПоУмолчанию(Партия,ТМЦ);
    УстЦенаБезНДС();
    УстЦенаСНДС();
    Иначе
    Коэффициент = 1;
    КонецЕсли;
    
    //вот теперь вставляем
    Кол100 = ТМЦ.Кол100;   
    Кво = Кол100;
    //а дальше как было...
    
  13. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    когда делаю так
    Код:
    Если АктЭлемент="ТМЦ" Тогда
    Если ТМЦ.Выбран()=1 Тогда
    Если ТМЦ.Вид()="ТМЦ" Тогда
    УстановкаБазЕд(Контекст,ТМЦ);
    ПолучитьПартиюПоУмолчанию(Партия,ТМЦ);
    УстЦенаБезНДС();
    УстЦенаСНДС();   
    Кол100 = ТМЦ.Кол100;
    Кво = Кол100;
    Иначе
    Коэффициент = 1;
    КонецЕсли; 
    
    тогда столбик количество заполняется реквизитом Кол100
    когда пишу

    Код:
     Кол100 = ТМЦ.Кол100;
    Кол100 = Кол100;
    
    то столбик Кол100 пустой :unsure:
  14. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    так с этим разобрался, все работает =)
    а теперь когда ставлю галочку в реквизите ИтогПоКолонке, как его вывести в печатную форму?
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Итог("ИмяКолонки")
    
    
  16. TopicStarter Overlay
    UbeDN
    Offline

    UbeDN

    Регистрация:
    9 авг 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Всем спасибо, с вашей помощью сделал все что хотел!

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