Имя: Пароль:
1C
1С v8
Помогите найти ошибку в коде
,
0 ivan3333567
 
05.02.14
11:09
В колонке количество пишет вместо 5шт -15. Помогите найти ошибку:

Строка   = Макет.ПолучитьОбласть("Строка");
    ПоследняяСтрока    = Макет.ПолучитьОбласть("ПоследняяСтрока");
    
    Для Каждого СтрокаТовар Из ВыборкаСтрокТовары Цикл
        
        НомерСтроки = НомерСтроки + 1;

        // Проверим, помещается ли строка с данными и последняя строка (или итоги) на странице.
        СтрокаТаблицы = Новый Массив;
        СтрокаТаблицы.Добавить(Строка);
        Если НЕ (НомерСтроки = ВыборкаСтрокТовары.Количество()) Тогда
            СтрокаТаблицы.Добавить(ПоследняяСтрока);
        Иначе
            СтрокаТаблицы.Добавить(Итого);
        КонецЕсли;
        
        Если НЕ ТабДокумент.ПроверитьВывод(СтрокаТаблицы) Тогда

            НомерСтраницы = НомерСтраницы + 1;
            
            ТабДокумент.Вывести(ПоследняяСтрока);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
            ТабДокумент.Вывести(ЗаголовокТаблицы);
            
        КонецЕсли;
        
        СчетДт = СтрокаТовар.СчетДт;
        //Поз = Найти(СчетДт, ".");
        //СчетДт = ?(Поз>0, Лев(СчетДт, Поз-1), СчетДт);
        
        СчетКт = СтрокаТовар.СчетКт;
        //Поз = Найти(СчетКт, ".");
        //СчетКт = ?(Поз>0, Лев(СчетКт, Поз-1), СчетКт);
        
        Строка.Параметры.Заполнить(СтрокаТовар);
        Строка.Параметры.ПричинаСписания = СокрЛП(СсылкаНаОбъект.Комментарий);
        Строка.Параметры.СчетДт = СчетДт;
        Строка.Параметры.СчетКт = СчетКт;
        
        ТабДокумент.Вывести(Строка);

        ИтогоКоличество  = ИтогоКоличество + Строка.Параметры.Количество;
        ИтогоСуммаПервоначальнойСтоимости = ИтогоСуммаПервоначальнойСтоимости + Строка.Параметры.СуммаПервоначальнойСтоимости;
        
    КонецЦикла;

    // Выводим итоги по документу
    Итого.Параметры.КоличествоПорядковыхНомеровЗаписейПрописью = ЧислоПрописью(ВыборкаСтрокТовары.Итог("Количество"), ,",,,,,,,,0");
    Итого.Параметры.ИтогоСуммаПервоначальнойСтоимости = Формат(ИтогоСуммаПервоначальнойСтоимости, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧРГ=' '");
    ТабДокумент.Вывести(Итого);
    
    // Проверим, помещается ли подвал
    Если НЕ ТабДокумент.ПроверитьВывод(Подвал) Тогда
        ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;



Функция ВыполнитьЗапросПоТЧ(Шапка)

    ЗапросПоТоварам = Новый Запрос();
    ЗапросПоТоварам.УстановитьПараметр("ТекущийДокумент",                                             СсылкаНаОбъект);
    ЗапросПоТоварам.УстановитьПараметр("ДатаДокумента",                                               Шапка.ДатаДокумента);
    ЗапросПоТоварам.УстановитьПараметр("СчетУчетаСпецодеждыЗабалансовый",                             ПланыСчетов.Хозрасчетный.СпецодеждаВЭксплуатацииВспомогательный);
    ЗапросПоТоварам.УстановитьПараметр("СчетУчетаСпецоснасткиЗабалансовый",                           ПланыСчетов.Хозрасчетный.СпецоснасткаВЭксплуатацииВспомогательный);
    ЗапросПоТоварам.УстановитьПараметр("СчетУчетаИнвентаряИХозяйственныхПринадлежностейЗабалансовый", ПланыСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежностиВЭксплуатации);
    
    ЗапросПоТоварам.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ТребованиеНакладнаяМатериалы.Номенклатура КАК Номенклатура,
    |    ТребованиеНакладнаяМатериалы.Номенклатура КАК ТоварНаименование,
    |    СУММА(ТребованиеНакладнаяМатериалы.Количество) КАК Количество,
    |    ТребованиеНакладнаяМатериалы.Себестоимость КАК Себестоимость,
    |    ТребованиеНакладнаяМатериалы.Номенклатура.Код КАК НоменклатурныйНомер,
    |    ТребованиеНакладнаяМатериалы.Номенклатура.БазоваяЕдиницаИзмерения.Код КАК ЕдиницаИзмеренияКод,
    |    ТребованиеНакладнаяМатериалы.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмеренияНаименование,
    |    СУММА(ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.Сумма, 0)) КАК СуммаПервоначальнойСтоимости,
    |    СУММА(ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.Сумма, 0)) / СУММА(ЕСТЬNULL(ТребованиеНакладнаяМатериалы.Количество, 0)) КАК Цена,
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетДт.Код, """") КАК СчетДт,
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетКт.Код, """") КАК СчетКт
    |ИЗ
    |    Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор = &ТекущийДокумент) КАК ХозрасчетныйДвиженияССубконто
    |        ПО ТребованиеНакладнаяМатериалы.Номенклатура = ХозрасчетныйДвиженияССубконто.СубконтоКт1
    |ГДЕ
    |    ТребованиеНакладнаяМатериалы.Ссылка = &ТекущийДокумент
    |    И ХозрасчетныйДвиженияССубконто.Регистратор = &ТекущийДокумент
    |
    |СГРУППИРОВАТЬ ПО
    |    ТребованиеНакладнаяМатериалы.Номенклатура,
    |    ТребованиеНакладнаяМатериалы.Себестоимость,
    |    ТребованиеНакладнаяМатериалы.Номенклатура.Код,
    |    ТребованиеНакладнаяМатериалы.Номенклатура.БазоваяЕдиницаИзмерения.Код,
    |    ТребованиеНакладнаяМатериалы.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетДт.Код, """"),
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетКт.Код, """"),
    |    ТребованиеНакладнаяМатериалы.Номенклатура
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура,
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура,
    |    СУММА(ТребованиеНакладнаяМатериалыЗаказчика.Количество),
    |    0,
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура.Код,
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура.БазоваяЕдиницаИзмерения.Код,
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,
    |    ХозрасчетныйДвиженияССубконто.Сумма,
    |    0,
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетДт.Код, """"),
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетКт.Код, """")
    |ИЗ
    |    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |        ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура КАК Номенклатура,
    |        ТребованиеНакладнаяМатериалыЗаказчика.Ссылка.ПодразделениеЗатрат КАК Подразделение,
    |        СУММА(ТребованиеНакладнаяМатериалыЗаказчика.Количество) КАК Количество
    |    ИЗ
    |        Документ.ТребованиеНакладная.МатериалыЗаказчика КАК ТребованиеНакладнаяМатериалыЗаказчика
    |    ГДЕ
    |        ТребованиеНакладнаяМатериалыЗаказчика.Ссылка = &ТекущийДокумент
    |    
    |    СГРУППИРОВАТЬ ПО
    |        ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура,
    |        ТребованиеНакладнаяМатериалыЗаказчика.Ссылка.ПодразделениеЗатрат) КАК ТребованиеНакладнаяМатериалыЗаказчика
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор = &ТекущийДокумент) КАК ХозрасчетныйДвиженияССубконто
    |        ПО ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура = ХозрасчетныйДвиженияССубконто.СубконтоКт1
    |
    |СГРУППИРОВАТЬ ПО
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура,
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура.Код,
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура.БазоваяЕдиницаИзмерения.Код,
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,
    |    ХозрасчетныйДвиженияССубконто.Сумма,
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетДт.Код, """"),
    |    ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.СчетКт.Код, """"),
    |    ТребованиеНакладнаяМатериалыЗаказчика.Номенклатура";
    
    ВыборкаСтрокТовары = ЗапросПоТоварам.Выполнить().Выгрузить();
    
    Возврат ВыборкаСтрокТовары;

КонецФункции // ВыполнитьЗапросПоТЧ()
1 1Сергей
 
05.02.14
11:11
Пригласите специалиста
2 Wobland
 
05.02.14
11:11
подели на три
3 Godofsin
 
05.02.14
11:12
жесть какая то
4 Rlogin
 
05.02.14
11:13
В таблице может 2 строчки одинаковые, поэтому 15
5 Ёпрст
 
05.02.14
11:13
(0) вот сколько проводок  - на столько и "задвоит", "затроит" твой запрос с твоим левым соединением
6 Ёпрст
 
05.02.14
11:14
+5
Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор = &ТекущийДокумент) КАК ХозрасчетныйДвиженияССубконто
    |        ПО ТребованиеНакладнаяМатериалы.Номенклатура = ХозрасчетныйДвиженияССубконто.СубконтоКт1

вот это, если че, не верно
7 ivan3333567
 
05.02.14
11:44
(6) А что именно нужно исправить, чтоб пофиг сколько раз провести выводило только то количество, которое записано ?
8 Wobland
 
05.02.14
11:51
(7) соединять по всем измерениям
9 ivan3333567
 
05.02.14
11:55
Если не сложно можно поподробней? (8)
Я что-то не понимаю
10 Wobland
 
05.02.14
12:04
вот тебе запросы
ВЫБРАТЬ
    спрНоменклатура.Ссылка,
    ОстаткиНоменклатурыОстатки.Склад,
    ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИЗ
    Справочник.Номенклатура КАК спрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
        ПО (ОстаткиНоменклатурыОстатки.Номенклатура = спрНоменклатура.Ссылка)
ГДЕ
    спрНоменклатура.Ссылка = &Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    спрНоменклатура.Ссылка,
    СУММА(ОстаткиНоменклатурыОстатки.КоличествоОстаток) КАК КоличествоОстаток
ИЗ
    Справочник.Номенклатура КАК спрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
        ПО (ОстаткиНоменклатурыОстатки.Номенклатура = спрНоменклатура.Ссылка)
ГДЕ
        спрНоменклатура.Ссылка = &Номенклатура

СГРУППИРОВАТЬ ПО
    спрНоменклатура.Ссылка
11 Ёпрст
 
05.02.14
12:05
(9) открой проводки по документу, подумай, сколько там проводок с субконто Номенклатура.. вот с каждой из них будет соединение по условию на Номенклатура.. Тебе точно оно надо ?
:)

Или мот данные нужны, только с одной какой-то конкретной проводки, например. Подумай.
12 Wobland
 
05.02.14
12:05
вот тебе результаты. думай
http://i.imgur.com/0b4xCav.png