Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Получение остатка по конкретному товару из регистра бухгалтерии в 1С бухгалтерия 1.2

Доброго времени суток.

Столкнулся с проблемой: не могу получить текущий остаток на конкретный товар. Пример запроса ниже (товар указанный в параметре - тестовый, позже будет изменён)

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

    Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДата())); 
    Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладе); 
    Запрос.УстановитьПараметр("Номен", Справочники.Номенклатура.НайтиПоКоду("000000109"));

Сильно подозреваю, что я делаю что-то не так, только что - понять не могу. Буду благодарен за помощь. Спасибо.
Ответ: Финальная версия с получением результата по одной конкретной позиции:


Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОстатки.Счет,
                   |    ХозрасчетныйОстатки.Субконто1 КАК Товар,
                   |    ХозрасчетныйОстатки.КоличествоОстатокДт,
                   |    ХозрасчетныйОстатки.СуммаОстатокДт
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет В ИЕРАРХИИ (&ВыбСчет), &ВидыСубконто, Субконто1 = &Номен) КАК ХозрасчетныйОстатки";
 
    Запрос.УстановитьПараметр("ВыбСчет",ПланыСчетов.Хозрасчетный.НайтиПоКоду("28"));
    Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("Номен", Справочники.Номенклатура.НайтиПоКоду("000000110"));
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            Записи.Товар.Наименование +
            " Количество [" + Записи.КоличествоОстатокДт + " шт.]" +
            " Сумма [" + Записи.СуммаОстатокДт + " руб.]"
        );
 
    КонецЦикла;


Вопрос решён. Всем спасибо, кто пытался помочь. Отдельная благодарность catena (товар на остатке был, проблема была в запросе, а точней в настройке параметров виртуальной таблицы Остатки) ;)
Вопрос: Оптимизация запроса получения остатков на каждый день.

добрый день

прошу помощи по оптимизации запроса для получения остатков на каждый день.

вот запрос который получает остатки (количество )


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Движения.Номенклатура КАК Номенклатура,
    ДНИ.Период КАК Дата_,
    ВЫБОР
        КОГДА Движения.Период = &НачалоПериода
            ТОГДА Движения.КоличествоКонечныйОстаток
        ИНАЧЕ ВЫБОР
                КОГДА Движения.Период <= ДНИ.Период
                    ТОГДА Движения.КоличествоОборот
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК КоличествоОстаток,
    0 КАК ПересчитаннаяЦена,
    0 КАК Стоимость,
    Движения.Склад КАК Склад,
    ЕСТЬNULL(СкладыОрганизаций.Организация, ЗНАЧЕНИЕ(справочник.организации.пустаяссылка)) КАК ОрганизацияСкладов
ПОМЕСТИТЬ втБезЦены
ИЗ
    Дни КАК ДНИ,
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения
        ЛЕВОЕ СОЕДИНЕНИЕ СкладыОрганизаций КАК СкладыОрганизаций
        ПО Движения.Склад = СкладыОрганизаций.Склад

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад
;



вот запрос
Который получается для литража

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Движения.Номенклатура КАК Номенклатура,
    ДНИ.Период КАК Дата_,
    ВЫБОР
        КОГДА Движения.Период = &НачалоПериода
            ТОГДА Движения.КоличествоКонечныйОстаток
        ИНАЧЕ ВЫБОР
                КОГДА Движения.Период <= ДНИ.Период
                    ТОГДА Движения.КоличествоОборот
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ * Движения.Номенклатура.ЕдиницаХраненияОстатков.Литраж КАК КоличествоОстаток,
    0 КАК ПересчитаннаяЦена,
    0 КАК Стоимость,
    Движения.Склад КАК Склад,
    ЕСТЬNULL(СкладыОрганизаций.Организация, ЗНАЧЕНИЕ(справочник.организации.пустаяссылка)) КАК ОрганизацияСкладов
ПОМЕСТИТЬ втБезЦены
ИЗ
    Дни КАК ДНИ,
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения
        ЛЕВОЕ СОЕДИНЕНИЕ СкладыОрганизаций КАК СкладыОрганизаций
        ПО Движения.Склад = СкладыОрганизаций.Склад

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад

понятно что все получается через точку и это не есть хорошо.
Подскажите как можно оптимизировать?
Ответ: () С чего ты взял что тоже самое, я всё расписал. Прочти несколько раз до просветления
Вопрос: Получение остатков при проведении

Привет всем, с понедельником) 

вопрос такой: есть остатки в регистре, при проведении документа получаю эти самые остатки, как сделать. При копировании документа с такой же датой, получает такие же остатки, хотя должен получить с учетом предыдущего документа?

Знаю вопрос базового уровня, но все же...
Ответ: ЯННП.

P.S. Используй в качестве периода остатков момент времени документа.
Вопрос: 1C 7.7 Запрос на получение остатков по счетам

Добрый день!

Так получилось, что пути с семеркой пересеклись впервые. Пишу обработки для переноса данных в самописную конфигурацию. По запросам к справочникам и документам вопросов нет. Собственно нужен небольшой гайд по запросам к проводкам или операциям (сам уже не понимаю).
Например как по выбранному счету получить остатки в разрезе субконто? Может плохо искал, но гугл мало, чем помог, да и справка в программе скудная.

Заранее спасибо!

Добавлено через 1 час 10 минут
Разобрался. Есть для этого объект "БухгалтерскиеИтоги".
Ответ: Бухгалтерские Итоги\ВыполнитьЗапрос читай. Прям открывай ветку в помощнике и вперед.
Ну и гугол в помощь. Если по-конкретнее что нужно, обращайся.
Небольшой пример из моей программки
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  
    ПлСч=ПланыСчетов.ValueByIdentifier("НПС");
    Ит=СоздатьОбъект("БухгалтерскиеИтоги");
 
  //ПРОДАЖИ И НДС
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,СпСкл);
    Ит.ВключатьСубСчета(1,1);
    Ит.ВыполнитьЗапрос(НачДата,КонДата,"90.1,90.5,90.3","50.3,62.3,68.2",,2);
    Ит.ВыбратьСчета();
    while Ит.ПолучитьСчет()=1 do
        Счет=Ит.Счет;
        Ит.ВыбратьСубконто();
        while Ит.ПолучитьСубконто()=1 do 
            Тбл.NewLine();
            Тбл.Скл=ПолучитьЗаголовок(Ит.Субконто());
            Тбл.Ф=Ит.Субконто().Фирма;
            if Счет<>СчетПоКоду("90.3",ПлСч) then
                Тбл.Прод=Ит.КО();
            else    
                Тбл.НДС=Ит.ДО();
            endif;  
        enddo;  
    enddo;  
    //ИЗДЕРЖКИ
    Ит.ИспользоватьСубконто(ВидыСубконто.СтатьиИздержек);
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,СпСкл);
    Ит.ВключатьСубСчета(1,1);
    Ит.ВыполнитьЗапрос(НачДата,КонДата,"44,26",,,2); 
    Ит.ВыбратьСчета();
    while Ит.ПолучитьСчет()=1 do
        Ит.ВыбратьСубконто(1);
        while Ит.ПолучитьСубконто(1)=1 do 
            Статья=Ит.Субконто(1); 
            if Статья=Перечисление.СтатьиИздержек.Отчисления then continue endif;
            Ит.ВыбратьСубконто(2);
            while Ит.ПолучитьСубконто(2)=1 do
                Тбл.NewLine();
                Тбл.Скл=ПолучитьЗаголовок(Ит.Субконто(2));
                Тбл.Ф=Ит.Субконто(2).Фирма;
                if (Статья=Перечисление.СтатьиИздержек.АрендаПомещения)or(Статья=Перечисление.СтатьиИздержек.АрендаГосИмущества) then
                    Тбл.СумАренда=Ит.ДО();
                elsif Статья=Перечисление.СтатьиИздержек.ОплатаТруда then
                    Тбл.СумРасчеты=Ит.ДО()*(1-0.13); //13% НДФЛ 
                else
                    Тбл.СумПрочее=Ит.ДО();
                endif;
            enddo;  
        enddo; 
    enddo;  
Вопрос: Правильно ли я сравниваю остатки между виртуальной таблицей Остатков и Остатков и оборотов регистра?

На 17.01.2018 0:00:00 остатки


С 16.01.2018 0:00:00 по 16.01.2018 23:59:59 остатки и обороты



Пересчет итогов если что не помог
Ответ:
Тема закрыта. Затуп не реальный. Надо было просто указать в запросе по остаткам в остатках параметр дата
Вопрос: СКД Остатки номенклатуры на каждую дату УТ 11

Получаю данные о приходе или расходе номенклатуры из регистра СебестоимостьТоваров.ОстаткиИОбороты для регистраторов. Требуется для этих регистраторов получить начальный и конечный остаток. Если выбираю из регистра СебестоимостьТоваров.ОстаткиИОбороты начальный и конечный остаток - выводит некорректные данные. Решил брать из регистра ТоварыНаСкладах товары на складах данные о начальных остатках и прибавлять к ним обороты из регистра СебестоимостьТоваров.ОстаткиИОбороты. Связал их по периоду(пробовал и по периоду регистратора), по номенклатуре и характеристикам - выбираются какие-то левые данные. Я вспомнил что для решения подобной задачи есть получение остатков на каждую дату, но там используется СрезПоследних, в регистре накопления ТоварыНаСкладах нет виртуальной таблицы Срезпослдних(ибо регистр накопления). Все проверил что можно - у регистра выбирается начальный и конечный остаток, преиодичность - регистратор, все равно не помогло. Помогите, пожалуйста.
Ответ: Так, я внимательно прочитал зачем нужен срез последних на каждую дату - чтобы получить предпоследние значения. Мне нужны все значения. Они же должны просто получаться из регистра остатков на каждую дату. почему у меня не работает? (Так же я убедился в теории о том что ни кто не отвечает в теме после того как тема виит час, так что жду пока она потонет и пересоздаю)
Вопрос: Не вычитаются остатки

Добрый день, Есть два документа , поступление и отгрузка товара , регистр накопления - остатки и отчёт по остаткам, так вот при отгрузке товара в отчёте кол-во товара не уменьшается а наоборот складывается.

Поступление

Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Процедура ОбработкаПроведения(Отказ, Режим)    
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр Остатки Приход
    Движения.Остатки.Записывать = Истина;
    Для Каждого ТекСтрокаПоступ Из Поступ Цикл
        Движение = Движения.Остатки.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.ТипТовара = ТекСтрокаПоступ.ТипТовара;
        Движение.Контрагент = Получатель;
        Движение.Склад = Склад;
        Движение.Длина = ТекСтрокаПоступ.Длина;
        Движение.Ширина = ТекСтрокаПоступ.Ширина;
        Движение.Высота = ТекСтрокаПоступ.Высота;
        Движение.Количество = ТекСтрокаПоступ.КоличествоМест;
        Движение.Сумма = ТекСтрокаПоступ.СуммаПозиций;
    КонецЦикла;
 
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
 
 
Отгрузка
 
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр Остатки Расход
    Движения.Остатки.Записывать = Истина;
    Для Каждого ТекСтрокаОтгр Из Отгр Цикл
        Движение = Движения.Остатки.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.ТипТовара = ТекСтрокаОтгр.ТипТовара;
        Движение.Контрагент = Покупатель;
        Движение.Склад = Склад;
        Движение.Длина = ТекСтрокаОтгр.Длина;
        Движение.Ширина = ТекСтрокаОтгр.Ширина;
        Движение.Высота = ТекСтрокаОтгр.Высота;
        Движение.Количество = ТекСтрокаОтгр.КоличествоМест;
        Движение.Сумма = ТекСтрокаОтгр.СуммаПозиций;
    КонецЦикла;
 
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры



Отчёт
Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ВЫБРАТЬ
    Остатки.ТипТовара,
    Остатки.Контрагент,
    Остатки.Склад,
    СУММА(Остатки.Длина) КАК Длина,
    СУММА(Остатки.Ширина) КАК Ширина,
    СУММА(Остатки.Высота) КАК Высота,
    СУММА(Остатки.Количество) КАК Количество,
    СУММА(Остатки.Сумма) КАК Сумма
ИЗ
    РегистрНакопления.Остатки КАК Остатки
 
СГРУППИРОВАТЬ ПО
    Остатки.ТипТовара,
    Остатки.Контрагент,
    Остатки.Склад
Ответ: Надо брать виртуальную таблицу с остатками на дату:
РегистрНакопления.Остатки.Остатки(&Дата) КАК Остатки
Вопрос: v7: Получение остатков товара без нулевых

ТекстЗапроса = "
        |ПЕРИОД С ДатаОтчета По ДатаОтчета;
        |Склад     = Регистр.ОстаткиТоваров.Склад;
        |Товар     = Регистр.ОстаткиТоваров.Товар;
        |Кол     = Регистр.ОстаткиТоваров.ОстатокТовара;
        |Функция КонОстКол = КонОст(Кол)// 

        |Условие (КонОстКол>0);   
        |Условие (Товар в ВыбТовары);   
        |Условие (Склад в ВыбСклады);
        |Группировка Товар без групп все;";   

    ЗапросОстатки.Выполнить(ТекстЗапроса);  

Ругается: Условие (КонОстКол <<?>> >0); Запрос[7] : Ошибка в выражении 'КонОстКол'
Что не так?
Ответ: спасибо все взлетело
Вопрос: Получение остатков из регистра накопления

Есть регистр накопления с измерениями Заказчик, Груз, МестоПогрузки и ресурсом Вес. Если обратиться с запросом к таблице остатков этого регистра, то он выдаст результаты, сгруппировав все измерения и просуммировав все ресурсы. А как написать запрос к остаткам регистра, аналогичный следующему sql - ному

SELECT Груз, МестоПогрузки, SUM(Вес)
FROM МойРН
GROUP BY Груз, МестоПогрузки    

То есть из списка группирующих колонок мне надо исключить заказчика.
Ответ: () ошибаешься
Вопрос: Получение остатка на каждый день

Всем доброго дня появилась необходимость в получение следующих данных:
Необходимо получить количество дней за определенный период, в котором товара не было на складе. Пытался:

"ВЫБРАТЬ
    |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ (НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ))) КАК Период
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дат1, &Дат2, ДЕНЬ, , ) КАК ТоварыНаСкладахОстаткиИОбороты
    |ГДЕ
    |    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
        |ГДЕ ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Ссылка В ИЕРАРХИИ(&Ном)
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОстаткиИОбороты.Номенклатура"
Но к сожалению данный запрос выводит мне нудевой остаток только если совершился оборот по необходимой номенклатуре и остаток после этого оборота равен нулю. КАК ПОЛУЧИТЬ ДАННЫЕ ПО ВСЕМ ДНЯМ, В КОТОРЫХ ОСТАТОК ТОВАРА НА СКЛАДЕ БЫЛ РАВЕН НУЛЮ?
Ответ: () Согласен, но я всё же не понял, что выводит ваш вариант запроса.