Имя: Пароль:
1C
1С v8
как получить остатки по номенклатуре в бухгалтерии 8.
,
0 nikolas2605
 
06.06.13
22:46
Здравствуйте. Подскажите, пож-ста, как можно вытащить остатки по номенклатуре? Дорабатываю "Бухгалтерию", там написан док с табличной частью, для номенклатуры из этой табличной части и нужны остатки. Делаю запрос с левым соединением таблицы дока (беру номенклатуру) и регистра хозрасчётный (беру Субконто 1, номенклатура). Пока остатки не выводит запрос. Может, кто сталкивался с этим в 1С?
1 dimqa
 
06.06.13
22:58
Счет точно верный указываешь?
2 shuhard
 
06.06.13
22:59
(1)[Может, кто сталкивался с этим в 1С]
1С тут точно не причем
3 zak555
 
06.06.13
23:00
> Дорабатываю "Бухгалтерию"

с этого момента по-подробнее
4 Nenaviwu1c20
 
06.06.13
23:03
Это зависит от того на каком счете ты держишь номенклатуру(обычно 41).А дальше что-то вроде
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    СпрСклады.Ссылка КАК Склад,
   |    СпрСклады.Представление,
   |    СпрНоменклатура.Ссылка КАК Номенклатура,
   |    СпрНоменклатура.НаименованиеПолное КАК Наименование,
   |    СпрНоменклатура.Представление КАК Представление1,
   |    СУММА(ХозрасчетныйОстатки.КоличествоОстатокДт) КАК КоличествоОстатокДт,
   |    СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаОстатокДт,
   |    ЕСТЬNULL(СУММА(ХозрасчетныйОстатки.КоличествоОстатокДт),0)+ЕСТЬNULL(РезервированиеТоваровОстатки.КоличествоЗарезервированноОстаток, 0) КАК КоличествоСвободно,
   |    СУММА(-РезервированиеТоваровОстатки.КоличествоЗарезервированноОстаток)  Как КоличествоЗарезервированно
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ВыбКонПериода, , , ) КАК ХозрасчетныйОстатки
   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК СпрСклады
   |        ПО ХозрасчетныйОстатки.Субконто2 = СпрСклады.Ссылка
   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
   |        ПО ХозрасчетныйОстатки.Субконто1 = СпрНоменклатура.Ссылка
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РезервированиеТоваров.Остатки(&ВыбКонПериода,ДатаОкончания >= &ВыбКонПериода ) КАК РезервированиеТоваровОстатки
   |        ПО (ХозрасчетныйОстатки.Субконто2 = РезервированиеТоваровОстатки.Склад
   |                И ХозрасчетныйОстатки.Субконто1 = РезервированиеТоваровОстатки.Номенклатура)
   |ГДЕ
   |    ХозрасчетныйОстатки.Счет В ИЕРАРХИИ(&ВыбСчета)";
5 Nenaviwu1c20
 
06.06.13
23:06
и условие где перенеси в условие таблицы
6 nikolas2605
 
06.06.13
23:07
(1), (3) Вроде сам дошёл. Там трудно под их специфику переработать реализацию товаров и услуг, поэтому под них сделан документ на списание материалов. Код пока такой сделал, в отладчике остаток  получил (извините, не знаю, как тут код вставить правильно.
   МенеджерВТ = Новый МенеджерВременныхТаблиц;

   Запрос = Новый Запрос;
   //укажем, какой менеджер временных таблиц использует этот запрос
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   
   Запрос.Текст =
       "ВЫБРАТЬ
       |    НакладнаяНаСписаниеМатериалы.Наименование,
       |    НакладнаяНаСписаниеМатериалы.Количество,
       |    НакладнаяНаСписаниеМатериалы.ОбщаяПлощадь,
       |    НакладнаяНаСписаниеМатериалы.Цена,
       |    НакладнаяНаСписаниеМатериалы.Сумма,
       |    НакладнаяНаСписаниеМатериалы.ЕдИзм,
       |    НакладнаяНаСписаниеМатериалы.Ссылка
       |ПОМЕСТИТЬ НоменклатураДокумента
       |ИЗ
       |    Документ.НакладнаяНаСписание.Материалы КАК НакладнаяНаСписаниеМатериалы
       |ГДЕ
       |    НакладнаяНаСписаниеМатериалы.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);

   Результат = Запрос.Выполнить();
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
        Запрос2.Текст = "ВЫБРАТЬ
                        |    НоменклатураДокумента.Наименование,
                        |    НоменклатураДокумента.Количество,
                        |    НоменклатураДокумента.ОбщаяПлощадь,
                        |    НоменклатураДокумента.Сумма,
                        |    ЦеныНоменклатуры.ТипЦен,
                        |    ЦеныНоменклатуры.Номенклатура,
                        |    ЦеныНоменклатуры.Цена,
                        |    НоменклатураДокумента.Ссылка,
                        |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстаток, 0) КАК ОстатокПоСумме,
                        |    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК ОстатокПоКоличеству,
                        |    ХозрасчетныйОстатки.Субконто1
                        |ИЗ
                        |    НоменклатураДокумента КАК НоменклатураДокумента
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                        |        ПО НоменклатураДокумента.Наименование = ЦеныНоменклатуры.Номенклатура
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
                        |        ПО НоменклатураДокумента.Наименование = ХозрасчетныйОстатки.Субконто1.Ссылка
                        |ГДЕ
                        |    ЦеныНоменклатуры.ТипЦен = &ТипЦен
                        |    И НоменклатураДокумента.Ссылка = &Ссылка";
                    Запрос2.УстановитьПараметр("ТипЦен", ЗакупочнаяЦена);
                    Запрос2.УстановитьПараметр("Ссылка", Ссылка);
                    Результат = Запрос2.Выполнить();
   ВыборкаДетальныеЗаписи = Результат.Выбрать();
7 Живой Ископаемый
 
06.06.13
23:09
нельзя это сделать в в8, это еще сырой продукт, там половина функций не рабтает
8 Nenaviwu1c20
 
06.06.13
23:10
|ИЗ
                         |    НоменклатураДокумента КАК НоменклатураДокумента
                         |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                         |        ПО НоменклатураДокумента.Наименование = ЦеныНоменклатуры.Номенклатура
                         |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
                         |        ПО НоменклатураДокумента.Наименование = ХозрасчетныйОстатки.Субконто1.Ссылка
??????????????????????????????????????????????????????
Ты как наименование со ссылкой связываешь?
9 nikolas2605
 
06.06.13
23:14
(8) Да временную таблицу сделал, так как кроме остатков ещё данные нужно получить. Кодить, можно сказать, только начинаю, Радченко передо мной, вот и тренируюсь.
А как вы предлагаете? (4)?
10 Nenaviwu1c20
 
06.06.13
23:14
(7) Все отлично
работает)
11 nikolas2605
 
06.06.13
23:16
Ещё текущий вопрос - как в запросе для остатков период установить?
12 Живой Ископаемый
 
06.06.13
23:18
2(10) Все отлично врут
13 hhhh
 
06.06.13
23:23
(11) ну возьми типовой документ списания и скопируй оттуда.
14 Nenaviwu1c20
 
06.06.13
23:23
Ты на каком счете остатки проверяешь и какие  него субконто?
15 nikolas2605
 
06.06.13
23:25
(13, 14) Сейчас посмотрю типовую реализацию. Счет 10.01 Материалы
16 hhhh
 
06.06.13
23:27
за выражение

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

надо не только руки поотрубать, но и ноги.
17 nikolas2605
 
06.06.13
23:28
(16)Может быть. Не спорю.
18 Nenaviwu1c20
 
06.06.13
23:28
МенеджерВТ = Новый МенеджерВременныхТаблиц;

   Запрос = Новый Запрос;
   //укажем, какой менеджер временных таблиц использует этот запрос

   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   
   Запрос.Текст =
       "ВЫБРАТЬ
       |    НакладнаяНаСписаниеМатериалы.Номенклатура,
       |    НакладнаяНаСписаниеМатериалы.Количество,
       |    НакладнаяНаСписаниеМатериалы.ОбщаяПлощадь,
       |    НакладнаяНаСписаниеМатериалы.Цена,
       |    НакладнаяНаСписаниеМатериалы.Сумма,
       |    НакладнаяНаСписаниеМатериалы.ЕдИзм,
       |    НакладнаяНаСписаниеМатериалы.Ссылка
       |ПОМЕСТИТЬ НоменклатураДокумента
       |ИЗ
       |    Документ.НакладнаяНаСписание.Материалы КАК НакладнаяНаСписаниеМатериалы
       |ГДЕ
       |    НакладнаяНаСписаниеМатериалы.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);

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


    Результат = Запрос2.Выполнить();
   ВыборкаДетальныеЗаписи = Результат.Выбрать();
19 Nenaviwu1c20
 
06.06.13
23:29
и то я сам как попало написал.но взлететь должно
20 Nenaviwu1c20
 
06.06.13
23:31
(16) Человек же сам сказал Учится)))
21 Nenaviwu1c20
 
06.06.13
23:38
а вот пример процедуры общей проверки(написана ручками)
//Проверяет остаток на складе с учетом резервации  ЗМ
Функция  ПроверитьОстатокНаСкладе(отказ,Ссылка,ДокументОбъект)Экспорт
   ИмяДокумента = ДокументОбъект.метаданные().Имя;
   ТипЗначения = ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПеремещениеТоваров");
   Запрос = новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстатокДт, 0) + ЕСТЬNULL(РезервированиеТоваровОстатки.КоличествоЗарезервированноОстаток, 0) КАК КоличествоОстатокДт,
   |    ДокументТовары.Номенклатура КАК Субконто1
   |ИЗ
   |    Документ."+ИмяДокумента+".Товары КАК ДокументТовары
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстатки
   |        ПО ДокументТовары.Номенклатура = ХозрасчетныйОстатки.Субконто1
   |            И ДокументТовары.Ссылка."+?(ТипЗначения = Истина ,"СкладОтправитель","Склад")+" = ХозрасчетныйОстатки.Субконто2
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РезервированиеТоваров.Остатки(&ДатаКон, ДатаОкончания >= &ДатаКон) КАК РезервированиеТоваровОстатки
   |        ПО ДокументТовары.Номенклатура = РезервированиеТоваровОстатки.Номенклатура
   |            И ДокументТовары.Ссылка."+?(ТипЗначения = Истина ,"СкладОтправитель","Склад")+" = РезервированиеТоваровОстатки.Склад
   |ГДЕ
   |    ДокументТовары.Ссылка = &Ссылка
   |    И ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстатокДт, 0) + ЕСТЬNULL(РезервированиеТоваровОстатки.КоличествоЗарезервированноОстаток, 0) < ДокументТовары.Количество" ;
   Запрос.УстановитьПараметр("Ссылка" ,Ссылка);
   Запрос.УстановитьПараметр("ДатаКон" ,Ссылка.Дата);
   Запрос.УстановитьПараметр("Счет" ,ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);
   
   Выборка = Запрос.Выполнить().Выбрать();
   пока Выборка.Следующий() цикл
       отказ =Истина;
       Сообщить("Остаток на складе номенклатуры "+Выборка.Субконто1+" равен "+Выборка.КоличествоОстатокДт+" .Проведение документа невозможно");
   КонецЦикла;
   Возврат отказ;
КонецФункции
22 nikolas2605
 
06.06.13
23:41
(20)спасибо большое. Там цель вся в том, чтобы списать товар по средней стоимости. А так как это не реализация, а дорабатываемый по специфике организации документ, то и проводки по хозрасчётному регистру прописываю для него вручную.
23 Nenaviwu1c20
 
06.06.13
23:43
НЗ удачи (22)
24 Nenaviwu1c20
 
06.06.13
23:43
кстати получилось все у тебя?
25 nikolas2605
 
06.06.13
23:48
(24) сижу проверяю. Пока, правда, без периода, на оперативном проведении.
26 Nenaviwu1c20
 
06.06.13
23:50
Если что я тут пиши попробуем решить задачку
27 nikolas2605
 
06.06.13
23:54
хорошо
28 nikolas2605
 
07.06.13
00:01
пока нормально считает
29 Nenaviwu1c20
 
07.06.13
00:03
гудненько)
Независимо от того, куда вы едете — это в гору и против ветра!