7.7 Проблема с подсчетом

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

  1. TopicStarter Overlay
    slr116rus
    Offline

    slr116rus

    Регистрация:
    12 сен 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Внес новый реквизит "Секции" в табличную форму документа под названием "ЗАКАЗ", и ввел процедуру сортировка, которая автоматически прставляет эти секции при записи данного документа. Возникла проблема, при выполнении данной процедуры пропадает значение "Всего", которое отображает общую стоимость. Подскажите как можно разрешить данную проблему ?
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Смотрите вашу процедуру заполнения секций... Однозначно в ней проблема.
    Если не можете сами понять - выложите код этой процедуры
  3. TopicStarter Overlay
    slr116rus
    Offline

    slr116rus

    Регистрация:
    12 сен 2013
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Код:
    //******************************************************************************
    Процедура Сортировка()
    ТЗмал=СоздатьОбъект("ТаблицаЗначений");ТЗмал.КоличествоКолонок(2);//ТМЦ, порядковый номер
    Спр=СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();НомНомер=0;
    Пока Спр.ПолучитьЭлемент()=1 цикл
    НомНомер=НомНомер+1;
    ТЗмал.НоваяСтрока();
    ТЗмал.УстановитьЗначение(ТЗмал.КоличествоСтрок(),1,Спр.ТекущийЭлемент());
    ТЗмал.УстановитьЗначение(ТЗмал.КоличествоСтрок(),2,НомНомер);
    КонецЦикла;
    
    ТЗ123=СоздатьОбъект("ТаблицаЗначений");
    ТЗ123.КоличествоКолонок(2);
    
    ТЗдок=СоздатьОбъект("ТаблицаЗначений");
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("кол1","Строка",,,"1",40,,1);
    ТЗ.НоваяКолонка("кол2","Строка",,,"2",40,,1);
    ТЗ.НоваяКолонка("кол3","Строка",,,"3",40,,1);
    ТЗ.НоваяКолонка("кол4","Строка",,,"4",40,,1);
    ТЗ.НоваяКолонка("кол5","Строка",,,"5",40,,1);
    ТЗ.НоваяКолонка("кол6","Строка",,,"6",40,,1);			 
    ТЗ.НоваяКолонка("кол7","Строка",,,"7",40,,1);
    ТЗ.НоваяКолонка("кол8","Строка",,,"8",40,,1);
    ТЗ.НоваяКолонка("кол9","Строка",,,"9",40,,1);
    ТЗ.НоваяКолонка("кол10","Строка",,,"10",40,,1);
    ТЗ.НоваяКолонка("кол11","Строка",,,"11",40,,1);
    ТЗ.НоваяКолонка("кол12","Строка",,,"12",40,,1);
    
    Спр=СоздатьОбъект("Справочник.Номенклатура");
    Текст=СоздатьОбъект("Текст");
    ИмяФайла="";
    ИмяКаталога="";
    //ФС.ВыбратьФайл(0,ИмяФайла,ИмяКаталога,"Файл сохранения настройки");
    ИмяКаталога=КаталогИБ();
    ИмяФайла="123.txt";
    Текст.Открыть(ИмяКаталога+ИмяФайла);
    
    Для й=1 по Текст.КоличествоСтрок() цикл
    стр=Текст.ПолучитьСтроку(й);
    
    ПозицияРазделителя=найти(стр,"|");
    ЗнСтр=число(сокрлп(лев(стр,ПозицияРазделителя-1)));
    Стр=прав(стр,стрдлина(стр)-ПозицияРазделителя);
    ПозицияРазделителя=найти(стр,"|");
    ЗнКол=число(сокрлп(лев(стр,ПозицияРазделителя-1)));
    Стр=прав(стр,стрдлина(стр)-ПозицияРазделителя);
    ПозицияРазделителя=найти(стр,"|");
    Код=сокрлп(лев(стр,ПозицияРазделителя-1));
    Стр=прав(стр,стрдлина(стр)-ПозицияРазделителя);
    //Если Спр.НайтиПоКоду(Код,0)>0 тогда
    Если ТЗ.КоличествоСтрок()>=ЗнСтр тогда
    Иначе
    Для гу=ТЗ.КоличествоСтрок()+1 по ЗнСтр цикл
    ТЗ.НоваяСтрока();
    КонецЦикла;
    КонецЕсли;
    ТЗ.УстановитьЗначение(ЗнСтр,ЗнКол,Код);
    ТЗ123.НоваяСтрока();
    ТЗ123.УстановитьЗначение(ТЗ123.КоличествоСтрок(),1,Код);
    ТЗ123.УстановитьЗначение(ТЗ123.КоличествоСтрок(),2,ЗнКол);
    КонецЦикла;
    
    
    СпрСек=СоздатьОбъект("Справочник.Секции");
    //ИмяФайла=КаталогИБ()+"123.txt";
    //ТЗ123=СоздатьОбъект("ТаблицаЗначений");
    //ТЗ123.КоличествоКолонок(2);
    //Если ФС.СуществуетФайл(ИмяФайла)=0 тогда
    // сообщить("Не найден файл с секциями. Должный путь нахождения: "+ИмяФайла);
    // //СтатусВозврата(0);Возврат;
    //Иначе
    // Текст123=СоздатьОбъект("Текст");
    // Текст123.Открыть(ИмяФайла);
    // Для й=1 по Текст123.КоличествоСтрок() цикл
    //  Строка123=Текст123.ПолучитьСтроку(й);//  1|1|3106|  или  58|2|3441|
    //  Поз=Найти(Строка123,"|");
    //  Зн1=лев(Строка123,Поз-1);// 1  или  58
    //  Строка123=прав(Строка123,стрдлина(Строка123)-Поз);
    //  Поз=Найти(Строка123,"|");
    //  Зн2=лев(Строка123,Поз-1);// 1  или  2
    //  Строка123=прав(Строка123,стрдлина(Строка123)-Поз);
    //  Поз=Найти(Строка123,"|");
    //  Зн3=лев(Строка123,Поз-1);// 3106  или  3441
    //  ТЗ123.НоваяСтрока();
    //  ТЗ123.УстановитьЗначение(ТЗ123.КоличествоСтрок(),1,Зн3);
    //  ТЗ123.УстановитьЗначение(ТЗ123.КоличествоСтрок(),2,Зн2);
    // КонецЦикла;
    //КонецЕсли;
    
    ВыгрузитьТабличнуюЧасть(ТЗдок);
    ТЗдок.Свернуть("Товар,Единица,Коэффициент,Цена,Секции","Количество,Сумма");
    ТЗдок.НоваяКолонка("С","Число",40,,"С",40,,1);
    ТЗдок.НоваяКолонка("Н","Число",8,0,"Н",40,,1);
    ТЗдок.НоваяКолонка("Яряд","Число",4,,,,,1);  
    ТЗдок.НоваяКолонка("Ястеллаж","Число",4,,,,,1);
    ТЗдок.НоваяКолонка("Название","Строка",40,,,40,,1);//ДК 28-02
    ТЗдок.ВыбратьСтроки();
    Пока ТЗдок.ПолучитьСтроку()=1 цикл
    Секция=0;Секция2="000";
    ТЗдок.Яряд=ТЗдок.товар.ячейка.ряд;	 
    ТЗдок.Ястеллаж=ТЗдок.товар.ячейка.стелаж;
    ТЗдок.Название=ТЗдок.товар.наименование; 
    // Сообщить (ТЗдок.Яряд+" - ряд - стеллаж"+ТЗдок.Ястеллаж+" - наименование - "+  ТЗдок.Название);
    стр_=0;кол_=0;
    //Если ТЗ.НайтиЗначение(ТЗдок.Товар,стр_,кол_)>0 тогда
    // Секция=кол_;
    // Секция2=прав("000"+строка(стр_),3);
    //ИначеЕсли ТЗ.НайтиЗначение(ТЗдок.Товар.Родитель,стр_,кол_)>0 тогда
    // Секция=кол_;
    // Секция2=прав("000"+строка(стр_),3);
    //ИначеЕсли ТЗ.НайтиЗначение(ТЗдок.Товар.Родитель.Родитель,стр_,кол_)>0 тогда
    // Секция=кол_;
    // Секция2=прав("000"+строка(стр_),3);
    //ИначеЕсли ТЗ.НайтиЗначение(ТЗдок.Товар.Родитель.Родитель.Родитель,стр_,кол_)>0 тогда
    // Секция=кол_;
    // Секция2=прав("000"+строка(стр_),3);
    //КонецЕсли;
    //ТЗдок.С=строка(Секция)+"- 000";
    //стр=0;
    //Если ТЗмал.НайтиЗначение(ТЗдок.Товар,стр,1)>0 тогда
    // ТЗдок.Н=ТЗмал.ПолучитьЗначение(стр,2);
    //КонецЕсли;
    
    
    //////////Изменил
    стр = 0; кол = 0;
    Если ПустоеЗначение(ТЗдок.Товар.Ячейка) = 0 Тогда
    Поз = Найти(ТЗдок.Товар.Ячейка, " ");
    КодвТаблице=СокрЛП(Лев(ТЗдок.Товар.Ячейка, поз));
    ТЗ.НайтиЗначение(КодВТаблице, стр, кол);
    КонецЕсли;
    Секция = кол;
    Секция2 = прав("000"+строка(стр),3);
    
    //Для к=1 по ТЗ.КоличествоКолонок() цикл
    // Для с=1 по ТЗ.КоличествоСтрок() цикл
    //  Если ТЗ.ПолучитьЗначение(с,к) <> "" Тогда
    //   Зн=ТЗ.ПолучитьЗначение(с,к);
    //   Если Найти(СокрЛП(ТЗДок.Товар.Ячейка), СокрЛП(Зн)) > 0 Тогда
    //    Секция=к;
    //    Секция2=прав("000"+строка(с),3);
    //    прервать;
    //   КонецЕсли;
    //  КонецЕсли;
    // КонецЦикла;	
    // Если Секция=к тогда
    //  прервать;
    // КонецЕсли;
    //КонецЦикла;	
    
    
    ТЗдок.С=Секция;
    стр=0;
    Если ТЗмал.НайтиЗначение(ТЗдок.Товар,стр,1)>0 тогда
    ТЗдок.Н=ТЗмал.ПолучитьЗначение(стр,2);
    КонецЕсли;
    
    
    //////////КонецИзменил
    
    Поз = Найти(ТЗдок.Товар.Ячейка, " ");
    ГруппаТовара=СокрЛП(Лев(ТЗдок.Товар.Ячейка, поз));
    
    Сек=0;стр=0;кол=0;
    
    Если ТЗ123.НайтиЗначение(ГруппаТовара,стр,кол)>0 тогда
    Сек=число(ТЗ123.ПолучитьЗначение(стр,2));
    КонецЕсли;
    //Если ГруппаТовара.Уровень()=1 тогда
    // прервать;
    //КонецЕсли; 
    
    СпрСек=СоздатьОбъект("Справочник.Секции");
    Если СпрСек.НайтиПоКоду(Сек,0)=0 тогда
    СпрСек.Новый();
    СпрСек.Код=Сек;
    СпрСек.Записать();
    КонецЕсли;  
    ТЗдок.Секции= СпрСек.ТекущийЭлемент();
    КонецЦикла;
    
    ТЗдок.Свернуть("Товар,Единица,Коэффициент,Цена,Секции,С,Н,Яряд,Ястеллаж,Название","Количество,Сумма");
    ТЗдок.Сортировать("С+,Яряд+,Ястеллаж+,Название+");
    ЗагрузитьТабличнуюЧасть(ТЗдок);
    КонецПроцедуры
    //******************************************************************************
    Процедура ОбработкаПроведения() // предопределенная процедура
    
    // проверка даты документа
    Если ДатаДок > ТекущаяДата() Тогда
    
    глНеПроводить(Контекст,"Нельзя проводить документ будущей датой!");
    Возврат;
    
    КонецЕсли;
    
    // проверка дублей строк
    Если глПроверкаДублейСтрок(Контекст)=1 Тогда
    
    глНеПроводить(Контекст,"В документе строки с одинаковым товаром!");
    Возврат;
    
    КонецЕсли;
    ВыбратьСтроки();
    Пока ПолучитьСтроку() > 0 Цикл
    
    Если Товар.Выбран() = 0 Тогда
    
    Сообщить("В документе " + Вид() + " № " + НомерДок + " от " +
    ДатаДок + "Не указан товар, который выписывается!");
    Продолжить;
    
    КонецЕсли;
    
    Если Товар.ВидТовара <> Перечисление.ВидыТоваров.Товар Тогда
    
    // услуги здесь в этих регистрах не учитываем
    Продолжить;
    
    КонецЕсли;
    
    Регистр.ОжидаемыеТовары.ПривязыватьСтроку(НомерСтроки);
    Регистр.ОжидаемыеТовары.ДвижениеПриход(
    Товар,	  // товар
    ТекущийДокумент(),   // заказ
    Количество * Коэффициент // количество товара в базовой единице
    );
    
    КонецЦикла;
    Сортировка();
    КонецПроцедуры // ОбработкаПроведения
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Код:
    ТЗдок.Свернуть("Товар,Единица,Коэффициент,Цена,Секции","Количество,Сумма");
    здесь у вас "всего" обнуляется
  5. TopicStarter Overlay
    slr116rus
    Offline

    slr116rus

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

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104

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