» Казахстанский Бухгалтерский форум www.balans.kz

Как получить по номенклатуре нулевые остатки в 8.1

 
Показать сообщения:
Начиная со старых .::. Начиная с новых


Автор: BEN
Добавлено: #1  Вт Июн 09, 2009 12:04:52
Заголовок сообщения: Как получить по номенклатуре нулевые остатки в 8.1

Имеется (ниже) следующий код, здесь выбирается только номенклатура с не нулевыми остатками, как получить нулевой остаток по номенклатуре
Код:
   Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаКон",  КонецДня(ДатаКон));
   
    Запрос.Текст = "
    |ВЫБРАТЬ
    |*
    |ИЗ
    |    РегистрБухгалтерии.Типовой.Остатки(&ДатаКон) КАК Выборка";
    //*
   
    ТабличнаяЧастьИнфо.Загрузить(Запрос.Выполнить().Выгрузить());
    ТабДок=Новый ТабличныйДокумент;

    ПоискСчета = Ложь;
   
    Если РеквизитСчет.Код = "1300" Тогда
        ПоискСчета = Истина;
    КонецЕсли;
   
    Для Каждого ПеремСтрока Из ТабличнаяЧастьИнфо Цикл
        ЭлементНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ПеремСтрока.Субконто1);
        МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас;
        Если МинЗапас <> 0 Тогда
            Если ПеремСтрока.Субконто2 = "Основной склад" Тогда
               
                Если ПоискСчета Или (ПеремСтрока.Счет = РеквизитСчет.Код) Тогда   
                    Если ПеремСтрока.КоличествоОстатокДт < МинЗапас Тогда
                        ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
                        ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
                        ПеремСтрокаОтчет.Субконто1 = ПеремСтрока.Субконто1;
                        ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
                        ПеремСтрокаОтчет.Остатки = ПеремСтрока.КоличествоОстатокДт;
                        ПеремСтрокаОтчет.ПланЗакупа = МинЗапас - ПеремСтрока.КоличествоОстатокДт;
                    КонецЕсли;   
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;



Автор: Raybek
Добавлено: #2  Вт Июн 09, 2009 13:35:10
Заголовок сообщения:

Цитата:
нулевой остаток по номенклатуре

Это - та номенклатура, которой нет в результате запроса Запрос.Выполнить().Выгрузить().

ВыборкаНоменклатуры=Справочники.Номенклатура.Выбрать();
Пока ВыборкаНоменклатуры.Следующий() Цикл
Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;

МинЗапас = ВыборкаНоменклатуры.МинимальныйЗапас;
Если МинЗапас <> 0 Тогда
ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
ПеремСтрокаОтчет.Субконто1 = ВыборкаНоменклатуры.Наименование;
ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
ПеремСтрокаОтчет.Остатки = 0;
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас;
КонецЕсли;
КонецЦикла;

Добавлено спустя 1 минуту 40 секунд:

В смысле код, предложенный выше, продолжает имеющийся



Автор: BEN
Добавлено: #3  Вт Июн 09, 2009 13:50:31
Заголовок сообщения:

Raybek говорит:
Цитата:
нулевой остаток по номенклатуре

Это - та номенклатура, которой нет в результате запроса Запрос.Выполнить().Выгрузить().

ВыборкаНоменклатуры=Справочники.Номенклатура.Выбрать();
Пока ВыборкаНоменклатуры.Следующий() Цикл
Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;

МинЗапас = ВыборкаНоменклатуры.МинимальныйЗапас;
Если МинЗапас <> 0 Тогда
ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
ПеремСтрокаОтчет.Субконто1 = ВыборкаНоменклатуры.Наименование;
ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
ПеремСтрокаОтчет.Остатки = 0;
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас;
КонецЕсли;
КонецЦикла;

Добавлено спустя 1 минуту 40 секунд:

В смысле код, предложенный выше, продолжает имеющийся

Сработало частично, только почему то группы выбрались а не сами элементы номенклатуры, а в них МинЗап нет.



Автор: Raybek
Добавлено: #4  Вт Июн 09, 2009 13:57:55
Заголовок сообщения:

Переделай

Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;

НА

Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено)ИЛИ(ВыборкаНоменклатуры.ЭтоГруппа) Тогда Продолжить КонецЕсли;



Автор: BEN
Добавлено: #5  Вт Июн 09, 2009 14:10:06
Заголовок сообщения:

Raybek говорит:
Переделай

Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;

НА

Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено)ИЛИ(ВыборкаНоменклатуры.ЭтоГруппа) Тогда Продолжить КонецЕсли;

В принципе оно и с этим условием почему то не выбрало, но за идею спасибо буду думать



Автор: BEN
Добавлено: #6  Вт Июн 09, 2009 15:29:07
Заголовок сообщения:

RaybekЧто то у меня ничего не выходит, ступор поймала, помогите еще пожалуйста
Код:
Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено) Тогда
Продолжить
КонецЕсли; 

если делаю = неопределено выбирает все (группы я в начале решила исключить)



Автор: Raybek
Добавлено: #7  Вт Июн 09, 2009 15:43:56
Заголовок сообщения:

В смысле, если "<>Неопределено" - вообще с нулевыми остаками номенклатура не выходит?

Добавлено спустя 1 минуту 14 секунд:

Или ошибку в коде выдает?



Автор: d.Fedor
Добавлено: #8  Вт Июн 09, 2009 15:45:26
Заголовок сообщения:

А не проще использовать сразу в запросе исключить группы и сравнить с ЕстьNUL через соеденение со справочником?


Автор: Raybek
Добавлено: #9  Вт Июн 09, 2009 15:50:16
Заголовок сообщения:

d.Fedor
Стыдно признаваться, но запросами в 1С никогда не пользовался. Только неделю их изучаю.
d.Fedor
Можно поподробнее в виде кода с подробными коментариями?



Автор: BEN
Добавлено: #10  Вт Июн 09, 2009 15:51:14
Заголовок сообщения:

Raybek говорит:
В смысле, если "<>Неопределено" - вообще с нулевыми остаками номенклатура не выходит?

Добавлено спустя 1 минуту 14 секунд:

Или ошибку в коде выдает?

Вообще никакая номенклатура тогда не выводиться, если "<>Неопределено"

Добавлено спустя 2 минуты 19 секунд:

d.Fedor говорит:
А не проще использовать сразу в запросе исключить группы и сравнить с ЕстьNUL через соеденение со справочником?

Запарилась я с запросами вроде все правильно делаю (по книжки, по советам из форума), а там все не так работает как ты хочешь. Поэтому хоть так что то сдвинулось. Может Вы что нибудь посоветуйте



Автор: Raybek
Добавлено: #11  Вт Июн 09, 2009 15:56:33
Заголовок сообщения:

Лишние пробелы? Если тип колонки "Субконто1" - строка

Тогда попробовать

Код:
Если (ТабличнаяЧастьИнфо.Найти(СокрЛП(ВыборкаНоменклатуры.Наименование), "Субконто1")<>Неопределено) Тогда
Продолжить
КонецЕсли;


Или может все дело в тип колонки "Субконто1" - вообще "СправочникСсылка.Номенклатура"?
Тогда попробуйте

Код:
Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Ссылка, "Субконто1")<>Неопределено) Тогда
Продолжить
КонецЕсли;



Автор: d.Fedor
Добавлено: #12  Вт Июн 09, 2009 16:00:45
Заголовок сообщения:

Ну например типа такого (я по российской конфигурации делал), думаю суть ухватите

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

То есть смысл таков, выбираем из справочника только те что отсутствуют в регистре (то есть NULL), по сути они и есть нулевые..



Автор: BEN
Добавлено: #13  Вт Июн 09, 2009 16:01:05
Заголовок сообщения:

Raybek говорит:
Лишние пробелы? Если тип колонки "Субконто1" - строка

Тогда попробовать

Код:
Если (ТабличнаяЧастьИнфо.Найти(СокрЛП(ВыборкаНоменклатуры.Наименование), "Субконто1")<>Неопределено) Тогда
Продолжить
КонецЕсли;


Или может все дело в тип колонки "Субконто1" - вообще "СправочникСсылка.Номенклатура"?
Тогда попробуйте

Код:
Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Ссылка, "Субконто1")<>Неопределено) Тогда
Продолжить
КонецЕсли;

В первом случае невыходит ничего во втором все даже что и не должно.

Добавлено спустя 3 минуты 9 секунд:

d.Fedor говорит:
Ну например типа такого (я по российской конфигурации делал), думаю суть ухватите

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

То есть смысл таков, выбираем из справочника только те что отсутствуют в регистре (то есть NULL), по сути они и есть нулевые..

аналогичное я это делала, когда идет
ТабличнаяЧастьИнфо.Загрузить(Запрос.Выполнить().Выгрузить())почему то требует имя таблицы

Добавлено спустя 3 минуты 57 секунд:

Raybek
загвозка наверное в "Субконто1" потомучто когда в сообщение делаю вывести ВыборкаНоменклатуры.Наименование она правильно выводит, а как проверить что в Субконто1



Автор: KrEAtive
Добавлено: #14  Вт Июн 09, 2009 16:09:26
Заголовок сообщения:

BEN говорит:
как получить нулевой остаток по номенклатуре

Что значит нулевой остаток - те, которые когда-то были и не стало?
Тогда нужно брать виртуальную таблицу ОстаткиИОбороты и по ней строить запрос. Причем придется брать два параметра, то есть еще и дату начала.
Просто по таблице остатков нулевые не вылезут, т.к. остатка нет и в таблице Остатки их не будет.

Если не важно, был оборот или нет по ТМЦ - то нужно делать ВНЕШНЕЕ СОЕДИНЕНИЕ в запросе: таблицу Справочник.Номенклатура и РегистрБухгалтерии.Типовой.Остатки



Автор: BEN
Добавлено: #15  Вт Июн 09, 2009 16:14:45
Заголовок сообщения:

KrEAtive говорит:
BEN говорит:
как получить нулевой остаток по номенклатуре

Что значит нулевой остаток - те, которые когда-то были и не стало?
Тогда нужно брать виртуальную таблицу ОстаткиИОбороты и по ней строить запрос. Причем придется брать два параметра, то есть еще и дату начала.
Просто по таблице остатков нулевые не вылезут, т.к. остатка нет и в таблице Остатки их не будет.

Если не важно, был оборот или нет по ТМЦ - то нужно делать ВНЕШНЕЕ СОЕДИНЕНИЕ в запросе: таблицу Справочник.Номенклатура и РегистрБухгалтерии.Типовой.Остатки

можно показать на конкретном примере моего кода, потомучто как писала выше уже все способы за 3 дня перепробывала и уже туплю



Автор: Raybek
Добавлено: #16  Вт Июн 09, 2009 16:17:00
Заголовок сообщения:

Цитата:
а как проверить что в Субконто1

Код:

Для Каждого ТекСтрока Из ТабличнаяЧастьИнфо Цикл
       Сообщить(ТипЗнч(ТекСтрока.Субконто1)); //Чтобы тип субконто1 узнать
       Сообщить(ТекСтрока.Субконто1);
КонецЦикла;



Автор: KrEAtive
Добавлено: #17  Вт Июн 09, 2009 16:19:26
Заголовок сообщения:

ХозрасчетныйОстатки.Субконто3 зачем, или у Вас партионный учет?


Автор: BEN
Добавлено: #18  Вт Июн 09, 2009 16:23:11
Заголовок сообщения:

KrEAtive говорит:
ХозрасчетныйОстатки.Субконто3 зачем, или у Вас партионный учет?

это не мое, я BEN, выше смотрите



Автор: KrEAtive
Добавлено: #19  Вт Июн 09, 2009 16:30:29
Заголовок сообщения:

Тогда вот так:

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

Парамеры не ставил, можете поставить. Если нужны все (и нулевые и ненулевые), тогда уберите условие

Добавлено спустя 2 минуты 4 секунды:

А вообще, МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас - это корявенько.
Такие дела нужно в одном запросе выбирать



Автор: BEN
Добавлено: #20  Вт Июн 09, 2009 16:36:50
Заголовок сообщения:

KrEAtive говорит:
Тогда вот так:

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

Парамеры не ставил, можете поставить. Если нужны все (и нулевые и ненулевые), тогда уберите условие

Добавлено спустя 2 минуты 4 секунды:

А вообще, МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас - это корявенько.
Такие дела нужно в одном запросе выбирать

Сама понимаю корявенько, но я учусь. В 7.7 работала с 1998года там ночью подыми раскажу как писать, а здесь пока тяжеловато даже днем.

Добавлено спустя 1 минуту 59 секунд:

Мужики спасибо, раслабтесь, у меня все получилось. ОГРОМЕННОЕ СПАСИБО!!!! :) :Rose: :kez_07:



Автор: Raybek
Добавлено: #21  Вт Июн 09, 2009 16:41:02
Заголовок сообщения:

А как сделали?

Добавлено спустя 14 минут 22 секунды:

И еще может помочь разобраться с запросами в 8-ке. Щас сам изучаю :D .

Видеолекции по работе с запросами в 8-ке
[url]chistov.spb.ru[/url]

Онлайн упражнения по SQL


Добавлено спустя 30 секунд:




Автор: Darjal
Добавлено: #22  Вт Июн 09, 2009 17:15:49
Заголовок сообщения:

Йоу! Шедеврально, ребят, чесслово:

ПеремСтрокаОтчет.ПланЗакупа = МинЗапас - ПеремСтрока.КоличествоОстатокДт;

Не понял, запрос ВСЕ остатки берет, по всем счетам? Супер.
МинимальныйЗапас - слабо в запросе было получить, а?

Еще шедеврально:

ЭлементНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ПеремСтрока.Субконто1);

Наименование одинаковое, что делать бум тогда?
BEN, если есть желание - нормально схему эту реализовать - показать таблицу товаров, у которой остаток меньше минзапаса - welcome, начнем с самого начала? В каком доке, обработке, отчете "привязываете" сей функционал?



Автор: BEN
Добавлено: #23  Вт Июн 09, 2009 17:20:19
Заголовок сообщения:

Raybek говорит:
А как сделали?

В этом коде я выбираю данные и закидываю в другую виртуальную таблицу ТабличнаяЧастьОтчет
[/code] Для Каждого ПеремСтрока Из ТабличнаяЧастьИнфо Цикл
ЭлементНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ПеремСтрока.Субконто1);
МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас;
Если МинЗапас <> 0 Тогда
Если ПеремСтрока.Субконто2 = "Основной склад" Тогда
Если ПоискСчета Или (ПеремСтрока.Счет = РеквизитСчет.Код) Тогда
Если ПеремСтрока.КоличествоОстатокДт < МинЗапас Тогда
ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
ПеремСтрокаОтчет.Субконто1 = ПеремСтрока.Субконто1;
ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
ПеремСтрокаОтчет.Остатки = ПеремСтрока.КоличествоОстатокДт ;
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас - ПеремСтрока.КоличествоОстатокДт;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
[/code]

Поэтому сделала дальше так:
Код:
      Если (ТабличнаяЧастьОтчет.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено) Тогда
         Продолжить
      КонецЕсли; 



  

Служба поддержки WWW.BALANS.KZ