Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 ноя 2024, 02:12

1С 8.3: Контроль остатков без регистра накопления

Автор ivangrant, 15 фев 2019, 08:55

0 Пользователей и 1 гость просматривают эту тему.

ivangrant

Есть Документы ПриходнаяНакладная и РасходнаяНакладная.
Задача: настроить контроль остатков без регистра напопления.
Я так пониманию, что нужно через Запрос делать.
Но не могу сообразить схему. С чего начать?
___
Заранее благодарю.

ivangrant

Пока сложил только такой запрос:
____________


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

Vit1501

В целом Вам нужно получить сначала остатки на дату каждого документа, а потом связать эту табличку с таблицей документов по дате. Запрос будет не тривиальный и я думаю работать будет относительно долго. Может все же подумать по поводу создания регистра?

ivangrant

Цитата: Vit1501 от 15 фев 2019, 09:09
В целом Вам нужно получить сначала остатки на дату каждого документа, а потом связать эту табличку с таблицей документов по дате. Запрос будет не тривиальный и я думаю работать будет относительно долго. Может все же подумать по поводу создания регистра?
Регистр использовать нельзя. В этом вся соль задачки.
Остатки на дату каждго докмента можно получить через запрос в Документе ПриходнаяНакладная ?
И правильно я понял, что связывать две таблички нужно будет через менеджер виртаульных таблиц ?

Vit1501

В целом ваш подход тоже рабочий. Единственное только вам нужно выбрать не только расходы, но и приходы, и сгруппировать по номенклатуре остатки

DmitriyF

Цитата: ivangrant от 15 фев 2019, 08:55
Есть Документы ПриходнаяНакладная и РасходнаяНакладная.
Задача: настроить контроль остатков без регистра напопления.
Я так пониманию, что нужно через Запрос делать.
Но не могу сообразить схему. С чего начать?
___
Заранее благодарю.
Не скромный вопрос, а для чего такой финт ушами делать?

ivangrant

Цитата: DmitriyF от 15 фев 2019, 12:47
Цитата: ivangrant от 15 фев 2019, 08:55
Есть Документы ПриходнаяНакладная и РасходнаяНакладная.
Задача: настроить контроль остатков без регистра напопления.
Я так пониманию, что нужно через Запрос делать.
Но не могу сообразить схему. С чего начать?
___
Заранее благодарю.
Не скромный вопрос, а для чего такой финт ушами делать?

Я стажер. Соответственно для моего тестирования моделируют разные "нестандартные" ситуации. Мне важно разбираться в подобных "частных" случаях.

DmitriyF

Цитата: ivangrant от 15 фев 2019, 13:54
Цитата: DmitriyF от 15 фев 2019, 12:47
Цитата: ivangrant от 15 фев 2019, 08:55
Есть Документы ПриходнаяНакладная и РасходнаяНакладная.
Задача: настроить контроль остатков без регистра напопления.
Я так пониманию, что нужно через Запрос делать.
Но не могу сообразить схему. С чего начать?
___
Заранее благодарю.
Не скромный вопрос, а для чего такой финт ушами делать?

Я стажер. Соответственно для моего тестирования моделируют разные "нестандартные" ситуации. Мне важно разбираться в подобных "частных" случаях.
Это не "нестандартная" ситуация, а нестандартный дебилизм. Как вы проконтролируете остатки если одновременно будут списывать 2 пользователя?

ivangrant

Цитата: DmitriyF от 15 фев 2019, 18:53
Цитата: ivangrant от 15 фев 2019, 13:54
Цитата: DmitriyF от 15 фев 2019, 12:47
Цитата: ivangrant от 15 фев 2019, 08:55
Есть Документы ПриходнаяНакладная и РасходнаяНакладная.
Задача: настроить контроль остатков без регистра напопления.
Я так пониманию, что нужно через Запрос делать.
Но не могу сообразить схему. С чего начать?
___
Заранее благодарю.
Не скромный вопрос, а для чего такой финт ушами делать?

Я стажер. Соответственно для моего тестирования моделируют разные "нестандартные" ситуации. Мне важно разбираться в подобных "частных" случаях.
Это не "нестандартная" ситуация, а нестандартный дебилизм. Как вы проконтролируете остатки если одновременно будут списывать 2 пользователя?
Не будет никаких списаний с двух пользователей. Нужно разработать код в рамках простой конфигурации. Понимаю, что для человека с опытом - эта задачка нетривиальная. Но для меня пока сложно понять. Поэтому и спросил, какие варинты решения могут быть.
Спасибо, что откликнулись.

LexaK

ЦитироватьПонимаю, что для человека с опытом - эта задачка нетривиальная.
ну насмешили, не смог удержаться, отвечаю: - Как раз для программиста с опытом это самая тривиальная задача, один запрос, даже без временных таблиц, всего строчек 20, ну это как 2 + 2
Добавлено: 19 фев 2019, 10:27


вот пример, (не проверял, возможны синтаксические ошибки)

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

Добавлено: 19 фев 2019, 10:39


блин копи паст подвел

  |//включить если нужно считать остатки в разрезе Склада
    |//    по ДокПриход.Склад = ДокРасход.Склад

правильно
  |//включить если нужно считать остатки в разрезе Склада
    |//    и ДокПриход.Ссылка.Склад = ДокРасход.Ссылка.Склад
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск