Имя: Пароль:
1C
 
Как собрать остатки по счету по таблице значений одного из субконто?
0 kalisto
 
11.08.14
01:31
Доброго времени суток.
Нужна помощь по бухгалтерии. Есть список номенклатуры, который выгружен из табл части документа. По каждой номенклатуре нужно проверить остатки на счете 41.01 по каждому складу и по каждой партии. Я пока еще плохо разбираюсь в восьмерке. Вот такой запрос нацарапала:

ТаблЧасть = УстановкаЦенНоменклатуры.Товары.Выгрузить(,"Номенклатура");

ЗапросОстатки = Новый Запрос();
ЗапросОстатки.Текст = "ВЫБРАТЬ
                        |    ХозрасчетныйОстатки.Счет,
                        |    ХозрасчетныйОстатки.Субконто1,
                        |    ХозрасчетныйОстатки.Субконто2,
                        |    ХозрасчетныйОстатки.Субконто3,
                        |    ХозрасчетныйОстатки.СуммаОстатокДт,
                        |    ХозрасчетныйОстатки.КоличествоОстатокДт
                        |ИЗ
                        |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , ) КАК ХозрасчетныйОстатки
                        |ГДЕ
                        |    ХозрасчетныйОстатки.Счет = &Счет
                        |    И ХозрасчетныйОстатки.Субконто1 = &Субконто1";
                        
ЗапросОстатки.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));
ЗапросОстатки.УстановитьПараметр("Субконто1",ТаблЧасть);
РезультатПоСчету = ЗапросОстатки.Выполнить().Выбрать();

Спецы, подскажите плиз, как сделать выбор остатков по списку номенклатуры? Этот запрос явно не правильный. Подскажите, где и что поправить надо. Или может хороший пример где найти.
1 zak555
 
11.08.14
01:54
надо проверять после проведения
2 Cube
 
11.08.14
04:57
(0) "как сделать выбор остатков по списку номенклатуры?"

Вместо

ХозрасчетныйОстатки.Субконто1 = &Субконто1

пиши

ХозрасчетныйОстатки.Субконто1 В (&Субконто1)
3 Cube
 
11.08.14
04:58
(0) А вообще, вот тебе готовый блок проверки остатков (правда, я его для УАТ писал, но, думаю, разберешься):

    ДанныеДокумента = Товары.Выгрузить(, "Номенклатура, Количество");
    ДанныеДокумента.Свернуть("Номенклатура", "Количество");
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    ДанныеДокумента.Номенклатура,
                          |    ДанныеДокумента.Количество
                          |ПОМЕСТИТЬ ДанныеДокумента
                          |ИЗ
                          |    &ДанныеДокумента КАК ДанныеДокумента
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          |    ДанныеДокумента.Номенклатура КАК Номенклатура,
                          |    ДанныеДокумента.Количество КАК Количество,
                          |    ЕСТЬNULL(УАТ_ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
                          |ИЗ
                          |    ДанныеДокумента КАК ДанныеДокумента
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УАТ_ТоварыНаСкладах.Остатки(
                          |                &Период,
                          |                Организация = &Организация
                          |                    И Склад = &Склад
                          |                    И Номенклатура В
                          |                        (ВЫБРАТЬ
                          |                            ДанныеДокумента.Номенклатура
                          |                        ИЗ
                          |                            ДанныеДокумента КАК ДанныеДокумента)) КАК УАТ_ТоварыНаСкладахОстатки
                          |        ПО ДанныеДокумента.Номенклатура = УАТ_ТоварыНаСкладахОстатки.Номенклатура
                          |
                          |УПОРЯДОЧИТЬ ПО
                          |    Номенклатура
                          |АВТОУПОРЯДОЧИВАНИЕ");
    Запрос.УстановитьПараметр("Период",                ?(Ссылка.Пустая(), КонецДня(Дата), МоментВремени()));
    Запрос.УстановитьПараметр("Организация",        Организация);
    Запрос.УстановитьПараметр("Склад",                Склад);
    Запрос.УстановитьПараметр("ДанныеДокумента",    ДанныеДокумента);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Если Выборка.Количество > Выборка.Остаток Тогда
            Сообщить("Недостаточно товара """ + Выборка.Номенклатура + """ на складе """ + Склад + """. Требуется: " + Формат(Выборка.Количество, "ЧДЦ=3; ЧН=") + ". Остаток: " + Формат(Выборка.Остаток, "ЧДЦ=3; ЧН=") + ".");
            Отказ = Истина;
        Иначе
            Движение = Движения.УАТ_ТоварыНаСкладах.ДобавитьРасход();
            Движение.Период            = Дата;
            Движение.Организация    = Организация;
            Движение.Склад            = Склад;
            Движение.Номенклатура    = Выборка.Номенклатура;
            Движение.Количество        = Выборка.Количество;
        КонецЕсли;
    КонецЦикла;
4 Cube
 
11.08.14
05:09
(0) Ещё недочеты:

За такое расстреливают:

ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")

пиши правильно - это предопределенный счет, у него есть имя (смотри в конфигураторе) и правильное написание будет что-то вроде:

ПланыСчетов.Хозрасчетный.ТоварыНаСкладах


Далее, вот ты пишешь:

ТаблЧасть = УстановкаЦенНоменклатуры.Товары.Выгрузить(,"Номенклатура");
...
ЗапросОстатки.Текст = "ВЫБРАТЬ
                        ...
                        |ГДЕ
                        ...
                        |    И ХозрасчетныйОстатки.Субконто1 = &Субконто1";
...
ЗапросОстатки.УстановитьПараметр("Субконто1",ТаблЧасть);

И что это? Метод Выгрузить() создает таблицу значений. А в конструкции запроса "ГДЕ" можно указать либо ссылку, либо список значений, заполненный ссылками. ТЗ нельзя...
5 kalisto
 
11.08.14
23:36
Огромное спасибо за ответы. Сейчас буду пробовать.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший