Как получить по номенклатуре нулевые остатки в 8.1
|
|
#1 Вт Июн 09, 2009 12:04:52
|
|
|
Имеется (ниже) следующий код, здесь выбирается только номенклатура с не нулевыми остатками, как получить нулевой остаток по номенклатуре
Код: |
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
Запрос.Текст = "
|ВЫБРАТЬ
|*
|ИЗ
| РегистрБухгалтерии.Типовой.Остатки(&ДатаКон) КАК Выборка";
//*
ТабличнаяЧастьИнфо.Загрузить(Запрос.Выполнить().Выгрузить());
ТабДок=Новый ТабличныйДокумент;
ПоискСчета = Ложь;
Если РеквизитСчет.Код = "1300" Тогда
ПоискСчета = Истина;
КонецЕсли;
Для Каждого ПеремСтрока Из ТабличнаяЧастьИнфо Цикл
ЭлементНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ПеремСтрока.Субконто1);
МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас;
Если МинЗапас <> 0 Тогда
Если ПеремСтрока.Субконто2 = "Основной склад" Тогда
Если ПоискСчета Или (ПеремСтрока.Счет = РеквизитСчет.Код) Тогда
Если ПеремСтрока.КоличествоОстатокДт < МинЗапас Тогда
ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
ПеремСтрокаОтчет.Субконто1 = ПеремСтрока.Субконто1;
ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
ПеремСтрокаОтчет.Остатки = ПеремСтрока.КоличествоОстатокДт;
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас - ПеремСтрока.КоличествоОстатокДт;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
|
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#2 Вт Июн 09, 2009 13:35:10 Сказали Спасибо❤
|
|
|
Цитата: |
нулевой остаток по номенклатуре |
Это - та номенклатура, которой нет в результате запроса Запрос.Выполнить().Выгрузить().
ВыборкаНоменклатуры=Справочники.Номенклатура.Выбрать();
Пока ВыборкаНоменклатуры.Следующий() Цикл
Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;
МинЗапас = ВыборкаНоменклатуры.МинимальныйЗапас;
Если МинЗапас <> 0 Тогда
ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
ПеремСтрокаОтчет.Субконто1 = ВыборкаНоменклатуры.Наименование;
ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
ПеремСтрокаОтчет.Остатки = 0;
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас;
КонецЕсли;
КонецЦикла;
Добавлено спустя 1 минуту 40 секунд:
В смысле код, предложенный выше, продолжает имеющийся
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#3 Вт Июн 09, 2009 13:50:31
|
|
|
Raybek говорит: |
Цитата: |
нулевой остаток по номенклатуре |
Это - та номенклатура, которой нет в результате запроса Запрос.Выполнить().Выгрузить().
ВыборкаНоменклатуры=Справочники.Номенклатура.Выбрать();
Пока ВыборкаНоменклатуры.Следующий() Цикл
Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;
МинЗапас = ВыборкаНоменклатуры.МинимальныйЗапас;
Если МинЗапас <> 0 Тогда
ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
ПеремСтрокаОтчет.Субконто1 = ВыборкаНоменклатуры.Наименование;
ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
ПеремСтрокаОтчет.Остатки = 0;
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас;
КонецЕсли;
КонецЦикла;
Добавлено спустя 1 минуту 40 секунд:
В смысле код, предложенный выше, продолжает имеющийся |
Сработало частично, только почему то группы выбрались а не сами элементы номенклатуры, а в них МинЗап нет.
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#4 Вт Июн 09, 2009 13:57:55
|
|
|
Переделай
Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;
НА
Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено)ИЛИ(ВыборкаНоменклатуры.ЭтоГруппа) Тогда Продолжить КонецЕсли;
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#5 Вт Июн 09, 2009 14:10:06
|
|
|
Raybek говорит: |
Переделай
Если ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено Тогда Продолжить КонецЕсли;
НА
Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено)ИЛИ(ВыборкаНоменклатуры.ЭтоГруппа) Тогда Продолжить КонецЕсли; |
В принципе оно и с этим условием почему то не выбрало, но за идею спасибо буду думать
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#6 Вт Июн 09, 2009 15:29:07
|
|
|
RaybekЧто то у меня ничего не выходит, ступор поймала, помогите еще пожалуйста
Код: |
Если (ТабличнаяЧастьИнфо.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено) Тогда
Продолжить
КонецЕсли;
|
если делаю = неопределено выбирает все (группы я в начале решила исключить)
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#7 Вт Июн 09, 2009 15:43:56
|
|
|
В смысле, если "<>Неопределено" - вообще с нулевыми остаками номенклатура не выходит?
Добавлено спустя 1 минуту 14 секунд:
Или ошибку в коде выдает?
|
|
За помощь кликните ′Спасибо′ →
|
|
|
d.Fedor
Нерезидент Баланса
|
|
|
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#9 Вт Июн 09, 2009 15:50:16
|
|
|
d.Fedor
Стыдно признаваться, но запросами в 1С никогда не пользовался. Только неделю их изучаю.
d.Fedor
Можно поподробнее в виде кода с подробными коментариями?
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#10 Вт Июн 09, 2009 15:51:14
|
|
|
Raybek говорит: |
В смысле, если "<>Неопределено" - вообще с нулевыми остаками номенклатура не выходит?
Добавлено спустя 1 минуту 14 секунд:
Или ошибку в коде выдает? |
Вообще никакая номенклатура тогда не выводиться, если "<>Неопределено"
Добавлено спустя 2 минуты 19 секунд:
d.Fedor говорит: |
А не проще использовать сразу в запросе исключить группы и сравнить с ЕстьNUL через соеденение со справочником? |
Запарилась я с запросами вроде все правильно делаю (по книжки, по советам из форума), а там все не так работает как ты хочешь. Поэтому хоть так что то сдвинулось. Может Вы что нибудь посоветуйте
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#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), по сути они и есть нулевые..
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#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 говорит: |
как получить нулевой остаток по номенклатуре |
Что значит нулевой остаток - те, которые когда-то были и не стало?
Тогда нужно брать виртуальную таблицу ОстаткиИОбороты и по ней строить запрос. Причем придется брать два параметра, то есть еще и дату начала.
Просто по таблице остатков нулевые не вылезут, т.к. остатка нет и в таблице Остатки их не будет.
Если не важно, был оборот или нет по ТМЦ - то нужно делать ВНЕШНЕЕ СОЕДИНЕНИЕ в запросе: таблицу Справочник.Номенклатура и РегистрБухгалтерии.Типовой.Остатки
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#15 Вт Июн 09, 2009 16:14:45
|
|
|
KrEAtive говорит: |
BEN говорит: |
как получить нулевой остаток по номенклатуре |
Что значит нулевой остаток - те, которые когда-то были и не стало?
Тогда нужно брать виртуальную таблицу ОстаткиИОбороты и по ней строить запрос. Причем придется брать два параметра, то есть еще и дату начала.
Просто по таблице остатков нулевые не вылезут, т.к. остатка нет и в таблице Остатки их не будет.
Если не важно, был оборот или нет по ТМЦ - то нужно делать ВНЕШНЕЕ СОЕДИНЕНИЕ в запросе: таблицу Справочник.Номенклатура и РегистрБухгалтерии.Типовой.Остатки |
можно показать на конкретном примере моего кода, потомучто как писала выше уже все способы за 3 дня перепробывала и уже туплю
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#16 Вт Июн 09, 2009 16:17:00 Сказали Спасибо❤
|
|
|
Цитата: |
а как проверить что в Субконто1 |
Код: |
Для Каждого ТекСтрока Из ТабличнаяЧастьИнфо Цикл
Сообщить(ТипЗнч(ТекСтрока.Субконто1)); //Чтобы тип субконто1 узнать
Сообщить(ТекСтрока.Субконто1);
КонецЦикла; |
|
|
За помощь кликните ′Спасибо′ →
|
|
|
KrEAtive
Нерезидент Баланса
|
|
|
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#18 Вт Июн 09, 2009 16:23:11
|
|
|
KrEAtive говорит: |
ХозрасчетныйОстатки.Субконто3 зачем, или у Вас партионный учет? |
это не мое, я BEN, выше смотрите
|
|
За помощь кликните ′Спасибо′ →
|
|
|
KrEAtive
Нерезидент Баланса
|
|
|
|
#19 Вт Июн 09, 2009 16:30:29
|
Сообщить модератору
|
|
Тогда вот так:
ВЫБРАТЬ
ТиповойОстатки.Субконто2,
ТиповойОстатки.КоличествоОстатокДт,
Номенклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Типовой.Остатки(, , , ) КАК ТиповойОстатки
ПО (ТиповойОстатки.Субконто1 = Номенклатура.Ссылка)
ГДЕ
ТиповойОстатки.КоличествоОстатокДт ЕСТЬ NULL
Парамеры не ставил, можете поставить. Если нужны все (и нулевые и ненулевые), тогда уберите условие
Добавлено спустя 2 минуты 4 секунды:
А вообще, МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас - это корявенько.
Такие дела нужно в одном запросе выбирать
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#20 Вт Июн 09, 2009 16:36:50
|
|
|
KrEAtive говорит: |
Тогда вот так:
ВЫБРАТЬ
ТиповойОстатки.Субконто2,
ТиповойОстатки.КоличествоОстатокДт,
Номенклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Типовой.Остатки(, , , ) КАК ТиповойОстатки
ПО (ТиповойОстатки.Субконто1 = Номенклатура.Ссылка)
ГДЕ
ТиповойОстатки.КоличествоОстатокДт ЕСТЬ NULL
Парамеры не ставил, можете поставить. Если нужны все (и нулевые и ненулевые), тогда уберите условие
Добавлено спустя 2 минуты 4 секунды:
А вообще, МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас - это корявенько.
Такие дела нужно в одном запросе выбирать |
Сама понимаю корявенько, но я учусь. В 7.7 работала с 1998года там ночью подыми раскажу как писать, а здесь пока тяжеловато даже днем.
Добавлено спустя 1 минуту 59 секунд:
Мужики спасибо, раслабтесь, у меня все получилось. ОГРОМЕННОЕ СПАСИБО!!!!
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#21 Вт Июн 09, 2009 16:41:02
|
|
|
А как сделали?
Добавлено спустя 14 минут 22 секунды:
И еще может помочь разобраться с запросами в 8-ке. Щас сам изучаю .
Видеолекции по работе с запросами в 8-ке
[url]chistov.spb.ru[/url]
Онлайн упражнения по SQL
Добавлено спустя 30 секунд:
|
|
За помощь кликните ′Спасибо′ →
|
|
|
Darjal
Нерезидент Баланса
|
|
|
|
#22 Вт Июн 09, 2009 17:15:49
|
Сообщить модератору
|
|
Йоу! Шедеврально, ребят, чесслово:
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас - ПеремСтрока.КоличествоОстатокДт;
Не понял, запрос ВСЕ остатки берет, по всем счетам? Супер.
МинимальныйЗапас - слабо в запросе было получить, а?
Еще шедеврально:
ЭлементНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ПеремСтрока.Субконто1);
Наименование одинаковое, что делать бум тогда?
BEN, если есть желание - нормально схему эту реализовать - показать таблицу товаров, у которой остаток меньше минзапаса - welcome, начнем с самого начала? В каком доке, обработке, отчете "привязываете" сей функционал?
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|
#23 Вт Июн 09, 2009 17:20:19
|
|
|
Raybek говорит: |
А как сделали? |
В этом коде я выбираю данные и закидываю в другую виртуальную таблицу ТабличнаяЧастьОтчет
[/code] Для Каждого ПеремСтрока Из ТабличнаяЧастьИнфо Цикл
ЭлементНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ПеремСтрока.Субконто1);
МинЗапас = ЭлементНоменклатуры.МинимальныйЗапас;
Если МинЗапас <> 0 Тогда
Если ПеремСтрока.Субконто2 = "Основной склад" Тогда
Если ПоискСчета Или (ПеремСтрока.Счет = РеквизитСчет.Код) Тогда
Если ПеремСтрока.КоличествоОстатокДт < МинЗапас Тогда
ЭлементыФормы.ТабличноеПолеОтчет.ДобавитьСтроку();
ПеремСтрокаОтчет = ЭлементыФормы.ТабличноеПолеОтчет.ТекущаяСтрока;
ПеремСтрокаОтчет.Субконто1 = ПеремСтрока.Субконто1;
ПеремСтрокаОтчет.МинимальныйЗапас = МинЗапас;
ПеремСтрокаОтчет.Остатки = ПеремСтрока.КоличествоОстатокДт ;
ПеремСтрокаОтчет.ПланЗакупа = МинЗапас - ПеремСтрока.КоличествоОстатокДт;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
[/code]
Поэтому сделала дальше так:
Код: |
Если (ТабличнаяЧастьОтчет.Найти(ВыборкаНоменклатуры.Наименование, "Субконто1")<>Неопределено) Тогда
Продолжить
КонецЕсли;
|
|
|
За помощь кликните ′Спасибо′ →
|
|
|
|