Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как должно проходить списание?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Vofka
Привет!

В расходной накладной в шапке документа укаывается партия (приходный документ), списание проходит по FIFO или LIFO (в данном случае не суть важно). Сначала товар должен списыватьсь с партии которая указана в шапке (если по ней есть остаток) и если в партии товара меньше, чем требуется списать - списываем по установленному методу.

Как должно проходить списание? Вопрос именно с точки зрения программирования. Как построить запрос? Как это организовать 2 запросами я представляю: сначала сделать запрос по партии, которая указана в шапке и если в ней не достаточно товара, то делаем второй запрос по всем партиям (ведь всеравно по партии которая указана в шапке - остаток будет 0). Можно как-то это сделать одним запросом? Ведь 1 запрос - это лучше чем 2 smile.gif ?
zetovich
1 запрос со всеми партиями....(сортированный по нужному методу)
потом найти нужную (в Результате выполненого запроса) (методом "Найти"),
если нету..то списуем то что есть.
вродь 1 запрос.
Zaval
Построй запрос так, чтобы явно указанная партия была первой. Или перемести ее на первое место в выборке после выполнения запроса.
Дальше - простое "размазывание".
Один запрос - это интерес академический?

Не получится ли, что в дальнейшем пользователи захотят светить в шапке не одну, а список партий? Наиболее универсальным мне представляется именно 2 запроса:
- по списку явно указанных партий в порядке их указания
если не хватило
- по установленному методу за исключением списка
Vofka
Цитата
потом найти нужную (в Результате выполненого запроса) (методом "Найти")

Цитата
Построй запрос так, чтобы явно указанная партия была первой. Или перемести ее на первое место в выборке после выполнения запроса.


А можно на пальцах? smile.gif

Цитата
Один запрос - это интерес академический?


Просто слышал, что один сложный запрос - это лучше двух простых. Или это не так?

Цитата
Не получится ли, что в дальнейшем пользователи захотят светить в шапке не одну, а список партий?


Не знаю. Я по сборнику задач все делаю. Может в дальнейшем так и будет, но я до того ещё не дошёл smile.gif
Fynjy
Что то мудришь ... Если указан документ возврата - берешь данные из него, если не указан, берешь первую отгрузку с таким товаром, данные из нее. Не хватило - следующую.
Один запрос лучше чем 2, вопрос только как он написан ...
Vofka
Цитата
Что то мудришь ... Если указан документ возврата - берешь данные из него, если не указан, берешь первую отгрузку с таким товаром, данные из нее. Не хватило - следующую.


У меня не возврат, а расход (не знаю имеет ли это значение).

Как мне сделать: если в результат запроса попала нужная запись найти её и поставить на первое место?
Vofka
Вот условие:


Вот текст запроса:


ВЫБРАТЬ
РасходнаяНакладнаяРасход.Номенклатура КАК Номенклатура,
СУММА(ЕСТЬNULL(РасходнаяНакладнаяРасход.Количество, 0)) КАК КоличествоРасход,
СУММА(ЕСТЬNULL(РасходнаяНакладнаяРасход.Цена, 0)) КАК ЦенаРасход,
СУММА(ЕСТЬNULL(РасходнаяНакладнаяРасход.Сумма, 0)) КАК СуммаРасход,
СУММА(ЕСТЬNULL(ОстаткиОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток,
ОстаткиОстатки.Партия КАК Партия,
СУММА(ЕСТЬNULL(ОстаткиОстатки.СуммаОстаток,0)) КАК СуммаОстаток
ИЗ
Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки(
&МоментВремени,
Номенклатура В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
РасходнаяНакладнаяРасход.Номенклатура
ИЗ
Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
ГДЕ
РасходнаяНакладнаяРасход.Ссылка = &Ссылка)) КАК ОстаткиОстатки
ПО РасходнаяНакладнаяРасход.Номенклатура = ОстаткиОстатки.Номенклатура
СГРУППИРОВАТЬ ПО
РасходнаяНакладнаяРасход.Номенклатура,
ОстаткиОстатки.Партия
УПОРЯДОЧИТЬ ПО
Номенклатура,
Партия
ИТОГИ
СРЕДНЕЕ(КоличествоРасход),
СРЕДНЕЕ(СуммаРасход),
СУММА(КоличествоОстаток)
ПО
Номенклатура


Вот результат запроса:


Что дальше и правильно ли?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.