7.7 Не правильно заполняется строка вес.

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

  1. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

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

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Регистр.Сборка.Вес=Итог("Вес");
    считаете вес во всем документе.
  3. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    а как сделать что бы по определенным секциям считал ??
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну вы же юзаете временную ТЗ... Свернуть вес по секции, потом ищите в ТЗ и подставляйте
  5. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    приведите пример кода , пожалуйста, т.к. я в этом деле начинающий
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Для того чтобы приводить пример - нужно знать структуру метаданных... Ну примерно так.
    Допускаю что в документе есть реквизит Вес и Секция.
    Код:
    ВыгрузитьТабличнуюЧасть(ТЗ);
    ТЗ.Свернуть("Серкция","Вес");
    ...
    а=0;
    Если Тз.НайтиЗначение(ТекущаяСекция,а,"Секция")=1 Тогда
    ТЗ.ПолучитьСтрокуПоНомеру(а);
    ВесТекущийСекции=ТЗ.Вес;
    Иначе
    ВесТекущийСекции=0; //нет секции
    КонецЕсли;
    
    Это приблизительный код. Ибо вы там в коде еще секции создаете...
  7. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Нашел выход, но почему - то отображает нули, подскажите, где ошибаюсь .
    Код:
     колсек = 0;        
    вес = 0;
    ВремТЗ=СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ВремТЗ,"Коэффициент,Секции,Вес");
    ВремТЗ.ВыбратьСтроки();
    Для иот = 1 по ВремТЗ.КоличествоСтрок() цикл
    ВремТЗ.ПолучитьСтроку();
    Если ВремТЗ.Секции.Код = Строка(Секции) Тогда
    колсек = колсек + 1;
    вес = вес + ВремТЗ.Вес;
    КонецЕсли;
    КонецЦикла;
    ВремТЗ.Свернуть("2","1");
    
    ЕстьСборка=0;
    
    ДокПодч=СоздатьОбъект("Документ");
    ДокПодч.ВыбратьПодчиненныеДокументы(,,ТекущийДокумент());
    Пока ДокПодч.ПолучитьДокумент()=1 цикл
    Если ДокПодч.Проведен()=0 тогда
    ИначеЕсли ДокПодч.Вид()="V_Сборка" тогда
    ЕстьСборка=1;
    ДокПодч.ВыбратьСтроки();
    Пока ДокПодч.ПолучитьСтроку()=1 цикл
    Сек=число(ДокПодч.Секции);
    СпрСек=СоздатьОбъект("Справочник.Секции");
    Если СпрСек.НайтиПоКоду(Сек,0)=0 тогда
    СпрСек.Новый();
    СпрСек.Код=Сек;
    СпрСек.Записать();
    КонецЕсли;  
    стр=0;кол=2;
    Если ВремТЗ.НайтиЗначение(СпрСек.ТекущийЭлемент(),стр,кол)>0 тогда
    Регистр.Сборка.Склад=СкладПолучатель;
    Регистр.Сборка.Секция=СпрСек.ТекущийЭлемент();
    Регистр.Сборка.Сборщик=ДокПодч.Сборщик;
    Регистр.Сборка.Вес=вес;
    Регистр.Сборка.ПозицийПроверено=?(СпрСек.ТекущийЭлемент()=ДокПодч.СекцияПроверки,ВремТЗ.ПолучитьЗначение(стр,1),0);
    Регистр.Сборка.ПозицийВсего=ВремТЗ.ПолучитьЗначение(стр,1);
    Регистр.Сборка.Ошибок=?(СпрСек.ТекущийЭлемент()=ДокПодч.СекцияПроверки,ДокПодч.КолОшибок,0);
    Регистр.Сборка.МинутПотрачено=ДокПодч.Минуты;
    Регистр.Сборка.ДвижениеПриходВыполнить();
    ВремТЗ.УдалитьСтроку(стр);
    Иначе
    //сообщить("В перемещении не найдена секция "+ДокПодч.Секции+", хотя она есть в сборке","!");
    КонецЕсли;
    КонецЦикла;			
    КонецЕсли;
    КонецЦикла;
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    При записи в регистр у вас 0?
    Т.е. вес?
    Насколько я вижу у вас есть реквизит и одноименная переменная. Строка не спозиционирована, значит значение реквизита = 0.
    Попробуйте задать другое имя переменной... Скажем Вес1.
  9. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    поменял на Вес1, все равно нули.
    Код:
     колсек = 0;		
    вес1 = 0;
    ВремТЗ=СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ВремТЗ,"Коэффициент,Секции,Вес");
    ВремТЗ.ВыбратьСтроки();
    Для иот = 1 по ВремТЗ.КоличествоСтрок() цикл
    ВремТЗ.ПолучитьСтроку();
    Если ВремТЗ.Секции.Код = Строка(Секции) Тогда
    колсек = колсек + 1;
    вес1 = вес1 + ВремТЗ.Вес;
    КонецЕсли;
    КонецЦикла;
    ВремТЗ.Свернуть("2,Секция","1,Вес");
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    что у вас вообще это
    Код:
    ВремТЗ.Свернуть("2,Секция","1,Вес");
    а если так
    Код:
    сообщить(Вес1)
    что покажет
  11. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    нашел у себя ошибку, почему то не считает две строки
    Код:
    ВремТЗ=СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ВремТЗ,"Коэффициент,Секции,Вес");
    ВремТЗ.ВыбратьСтроки();
    Для иот = 1 по ВремТЗ.КоличествоСтрок() цикл
    ВремТЗ.ПолучитьСтроку();
    Если ВремТЗ.Секции.Код = Строка(Секции) Тогда
    колсек = колсек + 1;
    вес1 = вес1 + ВремТЗ.Вес;
    КонецЕсли;
    КонецЦикла;
    не считает строки вес1 = вес1+ВремТЗ.Вес и аналогичную строку, колсек = колсек+1

    запустил в отладчике и он их почему то пропускает.
    Понять причину не могу, еще в одном документе есть похожий код, но там работает .
  12. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А если так
    Код:
    Если СокрЛП(ВремТЗ.Секции.Код) = СокрЛП(Секции) Тогда
  13. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Попробовал, так же пустые значения.
  14. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    411
    Симпатии:
    72
    Баллы:
    54
    Здравствуйте.
    Покажите код, где вы что-то присваиваете переменной Секции. Или посмотрите ее значение в отладчике. Возможно она пустая, поэтому условие не выполняется.
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Трудно играть в угадайку не зная структуры метаданных.
    А если так
    Код:
    Если СокрЛП(ВремТЗ.Секции) = СокрЛП(Секции) Тогда
  16. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Немножко поменял код, теперь считает, но показывает общий вес по всем секциям
    Код:
    колсек = 0;        
    вес = 0;
    ВремТЗ=СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ВремТЗ,"Коэффициент,Секции,Вес");
    ВремТЗ.ВыбратьСтроки();
    Для иот = 1 по ВремТЗ.КоличествоСтрок() цикл
    ВремТЗ.ПолучитьСтроку();
    ВремТЗ.Секции.Код = Строка(Секции.Код);
    колсек = колсек + 1;
    вес1 = вес1 + ВремТЗ.Вес;
    КонецЦикла;
    ВремТЗ.Свернуть("2","1");
    ЕстьСборка=0;
    
    ДокПодч=СоздатьОбъект("Документ");
    ДокПодч.ВыбратьПодчиненныеДокументы(,,ТекущийДокумент());
    Пока ДокПодч.ПолучитьДокумент()=1 цикл
    Если ДокПодч.Проведен()=0 тогда
    ИначеЕсли ДокПодч.Вид()="V_Сборка" тогда
    ЕстьСборка=1;
    ДокПодч.ВыбратьСтроки();
    Пока ДокПодч.ПолучитьСтроку()=1 цикл
    Сек=число(ДокПодч.Секции);
    СпрСек=СоздатьОбъект("Справочник.Секции");
    Если СпрСек.НайтиПоКоду(Сек,0)=0 тогда
    СпрСек.Новый();
    СпрСек.Код=Сек;
    СпрСек.Записать();
    КонецЕсли;  
    стр=0;кол=2;
    Если ВремТЗ.НайтиЗначение(СпрСек.ТекущийЭлемент(),стр,кол)>0 тогда
    Регистр.Сборка.Склад=СкладПолучатель;
    Регистр.Сборка.Секция=СпрСек.ТекущийЭлемент();
    Регистр.Сборка.Сборщик=ДокПодч.Сборщик;
    Регистр.Сборка.Вес=вес1;
    Регистр.Сборка.ПозицийПроверено=?(СпрСек.ТекущийЭлемент()=ДокПодч.СекцияПроверки,ВремТЗ.ПолучитьЗначение(стр,1),0);
    Регистр.Сборка.ПозицийВсего=ВремТЗ.ПолучитьЗначение(стр,1);
    Регистр.Сборка.Ошибок=?(СпрСек.ТекущийЭлемент()=ДокПодч.СекцияПроверки,ДокПодч.КолОшибок,0);
    Регистр.Сборка.МинутПотрачено=ДокПодч.Минуты;
    Регистр.Сборка.ДвижениеПриходВыполнить();
    ВремТЗ.УдалитьСтроку(стр);
    Иначе
    //сообщить("В перемещении не найдена секция "+ДокПодч.Секции+", хотя она есть в сборке","!");
    КонецЕсли;
    КонецЦикла;			
    КонецЕсли;
    КонецЦикла;
  17. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Правильно... По всем... Вы же условие-то убрали. Рекомендую воспользоваться отладчиком для выявления проблемы
  18. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    411
    Симпатии:
    72
    Баллы:
    54
    А почему не получить вес сворачиванием таблицы значений, как и предлагал Бухгалтерский угодник?
  19. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Думаю автор просто не умеет, а поэтому не желает воспользоваться советом.
    К тому же (думаю ты заметила) внутри цикла по документам он создает новую секцию. Веса по ней вообще в ТЗ быть не может.
    Странная конструкция, если честно.
    Alex_Do, опиши стоящую задачу. Как то у тебя кривовастенько сделано
  20. TopicStarter Overlay
    Alex_Do
    Offline

    Alex_Do

    Регистрация:
    26 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Нужно что бы в регистре сборка отображался вес всех позиций по определенной секции. К примеру, в перемещении 47 позиций из них 13 из первой секции, а 37 из второй, мне нужно что бы общий вес позиций первой секции отображался в регистре и общий вес позиций из второй секции.

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