|
Как перебрать выборку | ☑ | ||
---|---|---|---|---|
0
Tolstiy Beremenniy
24.12.18
✎
05:18
|
Как перебрать выборку, что бы по номенклатуре смотреть общий
итог, и далее списывать по партиям? Процедура ОбработкаПроведения(Отказ, Режим) Движения.ПродуктыНаСкладах.Записывать = Истина; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, | ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия |ПОМЕСТИТЬ ВТ_ДокТч |ИЗ | Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры |ГДЕ | ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровСписокНоменклатуры.Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ПродуктыНаСкладахОстатки.Партия КАК Партия |ПОМЕСТИТЬ ВТ_ОстаткиПартий |ИЗ | РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Момент, | Номенклатура В | (ВЫБРАТЬ | ВТ_ДокТч.Номенклатура | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ОстаткиПартий.Номенклатура КАК НоменклатураОстатков, | ВТ_ОстаткиПартий.Партия КАК ПартияОстатков, | ВТ_ДокТч.Количество КАК КоличествоИзДокумента, | ВТ_ОстаткиПартий.КоличествоОстаток КАК КоличествоОстаток, | ВЫБОР | КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия | ТОГДА 1 | ИНАЧЕ 2 | КОНЕЦ КАК ПорядокСписания |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий | ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура | |УПОРЯДОЧИТЬ ПО | ВТ_ОстаткиПартий.Номенклатура.Наименование, | ПорядокСписания, | ВТ_ОстаткиПартий.Партия.МоментВремени |ИТОГИ | СУММА(КоличествоИзДокумента), | СУММА(КоличествоОстаток) |ПО | НоменклатураОстатков"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Момент", Дата); Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НоменклатураОстатков"); Пока ВыборкаНоменклатура.Следующий() Цикл Если ЗначениеЗаполнено(ВыборкаНоменклатура.ПартияОстатков) Тогда // Вставить обработку выборки ВыборкаНоменклатура Стоимость = 0; Если ВыборкаНоменклатура.КоличествоИзДокумента > ВыборкаНоменклатура.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара " + ВыборкаНоменклатура.НоменклатураОстатков + " с количеством " + ВыборкаНоменклатура.КоличествоИзДокумента + " недостаточно. На остатке :" + ВыборкаНоменклатура.КоличествоОстаток; Сообщение.Сообщить(); Отказ = Истина; Продолжить; КонецЕсли; ВыборкаПартия = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ОсталосьСписать = ВыборкаНоменклатура.ДокументКоличество; Пока ВыборкаПартия.Следующий() и ОсталосьСписать >0 Цикл // КонецЦикла; КонецЕсли; КонецЦикла; Я в цикле по ВыборкаНоменклатура не вижу количество документа, итог по номенклатуре остатка из регистра вроде есть. Что бы в этом цикле получить количество документа, что нужно поправит? Запрос? КАК? |
|||
1
seevkik
24.12.18
✎
05:20
|
Ты решил обходить запрос по группировкам, а потом спрашиваешь почему не показываются остальные поля?
|
|||
2
Tolstiy Beremenniy
24.12.18
✎
05:27
|
(1) Подскажите не понимаю, моя задача посмотреть общий итог по номенклатуре, а потом идти списывать по партиям.
Я смотрел примеры, там везде идет обход по группировкам. |
|||
3
Tolstiy Beremenniy
24.12.18
✎
05:31
|
(1) А если я буду обходить без группировок, как я тогда
буду смотреть итог по номенклатуре текущей которая идет в выборке? Хочу просветить себя этими темными моментами. Подскажите пожалуйста? Задача такова. Есть табличная часть документа. Там указывается или не указывается партия. Если партия указывается то списание сначала идет с неё. Если нет то по FIFO. Но что бы начать списывать, нужно же вначале итог общий по номенклатуре посмотреть. Так же, что бы понять можно ли списывать такое количество со строки документа. Если есть потом уже списывать по партиям, по документам партий. И если с партии которая выбрана в строке нельзя списать, то тоже не давать провести документ. |
|||
4
Tolstiy Beremenniy
24.12.18
✎
05:53
|
никто не подсказывает (((((
Вроде написал что не понятно мне!!!! |
|||
5
Tolstiy Beremenniy
24.12.18
✎
05:55
|
Как мне получать итог по количеству, и сравнивать с количеством из документа что бы потом списывать по партиям?
|
|||
6
Tolstiy Beremenniy
24.12.18
✎
06:17
|
Что никто не поддержит что ли?????
|
|||
7
Tolstiy Beremenniy
24.12.18
✎
06:34
|
Срочно нужна подсказка, как в переборе выборки
сравнивать значение количества из строки документа с итоговым количеством по номенклатуре??????? |
|||
8
Михаил Иванович
24.12.18
✎
06:55
|
(7) Сколько?
|
|||
9
Tolstiy Beremenniy
24.12.18
✎
07:01
|
(8) пять!
|
|||
10
Мелифаро
24.12.18
✎
07:03
|
Это какой-то ад, треш и угар.
|
|||
11
Tolstiy Beremenniy
24.12.18
✎
07:07
|
Пять (10) Да разобрался я. пришло понимание!
|
|||
12
Михаил Иванович
24.12.18
✎
07:22
|
(11) Это иллюзия. Тебе кажется.
|
|||
13
Tolstiy Beremenniy
24.12.18
✎
08:16
|
(12) И есть предложения?
|
|||
14
Tolstiy Beremenniy
24.12.18
✎
08:20
|
Вот этот запрос как я вижу должен выдавать остатки
но он выдает количество документов. Можете поправить меня? Что я не так понимаю? он же должен выдавать остатки по регистру. А показывает значения строк документов. ВЫБРАТЬ ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия ПОМЕСТИТЬ ВТ_ДокТч ИЗ Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры ГДЕ ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка СГРУППИРОВАТЬ ПО ПеремещениеТоваровСписокНоменклатуры.Номенклатура, ПеремещениеТоваровСписокНоменклатуры.Партия ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, ПродуктыНаСкладахОстатки.Партия КАК Партия, ПродуктыНаСкладахОстатки.Партия.МоментВремени КАК ПартияМоментВремени ИЗ РегистрНакопления.ПродуктыНаСкладах.Остатки( &Момент, Номенклатура В (ВЫБРАТЬ ВТ_ДокТч.Номенклатура ИЗ ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки УПОРЯДОЧИТЬ ПО ПродуктыНаСкладахОстатки.Номенклатура.Наименование |
|||
15
Лодырь
24.12.18
✎
08:21
|
(12) Ты был прав )
|
|||
16
Tolstiy Beremenniy
24.12.18
✎
08:21
|
Каша в голове. нужно разбираться детально.
Что я и делаю. |
|||
17
Tolstiy Beremenniy
24.12.18
✎
08:22
|
(15) Все нормально у меня!
|
|||
18
Михаил Иванович
24.12.18
✎
08:48
|
(17) Каша. Пригоревшая.
|
|||
19
Tolstiy Beremenniy
24.12.18
✎
09:08
|
Сейчас вот тут проблема. Списалось все с одной партии
а всего партий 5. Списалось по документу все, но переходит к следующей строке этой же номенклатуры. А нужно по идее перейти к следующей номенклатуре, так как эта списалась. Как быть в таких случаях. Как поступить правильно? Запрос.Текст = " |ВЫБРАТЬ | ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, | ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия |ПОМЕСТИТЬ ВТ_ДокТч |ИЗ | Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры |ГДЕ | ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровСписокНоменклатуры.Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ПродуктыНаСкладахОстатки.Партия КАК Партия, | ПродуктыНаСкладахОстатки.Партия.МоментВремени КАК МоментВремени |ПОМЕСТИТЬ ВТ_ОстаткиПартий |ИЗ | РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Момент, | Номенклатура В | (ВЫБРАТЬ | ВТ_ДокТч.Номенклатура | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ДокТч.Номенклатура КАК Номенклатура, | ВТ_ОстаткиПартий.Партия КАК Партия, | ВТ_ДокТч.Количество КАК КоличествоИзДокумента, | ВТ_ОстаткиПартий.КоличествоОстаток КАК КоличествоОстаток, | ВЫБОР | КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия | ТОГДА 1 | ИНАЧЕ 2 | КОНЕЦ КАК ПорядокСписания |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий | ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура | |УПОРЯДОЧИТЬ ПО | ВТ_ОстаткиПартий.Номенклатура.Наименование, | ПорядокСписания, | ВТ_ДокТч.Партия.МоментВремени |ИТОГИ | МАКСИМУМ(КоличествоИзДокумента), | СУММА(КоличествоОстаток) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Момент", Дата); Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Если ВыборкаНоменклатура.КоличествоИзДокумента > ВыборкаНоменклатура.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара " + ВыборкаНоменклатура.Номенклатура + " с количеством " + ВыборкаНоменклатура.КоличествоИзДокумента + " недостаточно. На остатке :" + ВыборкаНоменклатура.КоличествоОстаток; Сообщение.Сообщить(); Отказ = Истина; Продолжить; КонецЕсли; // ОсталосьСписать = ВыборкаНоменклатура.КоличествоИзДокумента; // ВыборкаПартия = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПартия.Следующий() и ОсталосьСписать > 0 Цикл // Движение = Движения.ПродуктыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаПартия.Номенклатура; Движение.Партия = ВыборкаПартия.Партия; Движение.Количество = МИН(ВыборкаПартия.КоличествоОстаток, ОсталосьСписать); //Движение.Цена = ОсталосьСписать = ОсталосьСписать - Движение.Количество; КонецЦикла; КонецЦикла; |
|||
20
Tolstiy Beremenniy
24.12.18
✎
09:12
|
(19) Если вышло с ВыборкаПартия, то ВыборкаНоменклатура
должна же перейти на следующую номенклатуру? не должна же прокручивать партии дальше по этой же номенклатуре? Или это из за того что в запросе что то не так? |
|||
21
novichok79
24.12.18
✎
09:19
|
где связь по партии в запросе?
| ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий | ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура если партия будет не одна, то ты оxуеешь |
|||
22
novichok79
24.12.18
✎
09:20
|
обращение к полям через точку надо запретить имхо
|УПОРЯДОЧИТЬ ПО | ВТ_ОстаткиПартий.Номенклатура.Наименование, | ПорядокСписания, | ВТ_ДокТч.Партия.МоментВремени |
|||
23
novichok79
24.12.18
✎
09:22
|
(20) если есть сомнения воспользуйся конструктором запроса с обходом по группировкам. но, на первый взгляд, обход вроде норм сделан. надо данные смотреть, а помогать бесплатно я не буду.
|
|||
24
novichok79
24.12.18
✎
09:24
|
(21) ты оxуеешь = декартово произведение в джойне. у меня из-за забытой связи в джойне в базе на продакшне размером под пару ТБ, файлы sql server'а увеличились на 600 гигов внезапно, а потом был out of memory error. это был как пел лепс - "самый лучший день".
|
|||
25
novichok79
24.12.18
✎
09:29
|
да и вообще - делай как в типовых - сначала пишешь движухи в регистр, а потом проверяешь результат, зашло ли за минус.
|
|||
26
Tolstiy Beremenniy
24.12.18
✎
09:32
|
Сейчас такая проблема. (20) Поправил.
В запросе стоит что |УПОРЯДОЧИТЬ ПО | ВТ_ОстаткиПартий.Номенклатура.Наименование, | ПорядокСписания, | ВТ_ДокТч.Партия.МоментВремени Но по одному списанию, партия что должна быть самой первой, так как 1 вперед 2. а она в середине партий. Почему не отсортировалось по ней? По ней должно произойти списание в первую очередь, так как она из табличной части документа. |ПО | Номенклатура, | Партия"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Момент", Дата); Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Если ВыборкаНоменклатура.КоличествоИзДокумента > ВыборкаНоменклатура.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара " + ВыборкаНоменклатура.Номенклатура + " с количеством " + ВыборкаНоменклатура.КоличествоИзДокумента + " недостаточно. На остатке :" + ВыборкаНоменклатура.КоличествоОстаток; Сообщение.Сообщить(); Отказ = Истина; Продолжить; КонецЕсли; // ОсталосьСписать = ВыборкаНоменклатура.КоличествоИзДокумента; // ВыборкаПартия = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПартия.Следующий() и ОсталосьСписать > 0 Цикл // Движение = Движения.ПродуктыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаПартия.Номенклатура; Движение.Партия = ВыборкаПартия.Партия; Движение.Количество = МИН(ВыборкаПартия.КоличествоОстаток, ОсталосьСписать); //Движение.Цена = ОсталосьСписать = ОсталосьСписать - Движение.Количество; КонецЦикла; КонецЦикла; // |
|||
27
novichok79
24.12.18
✎
09:35
|
потому что сначала порядок списания, потом по ссылке номенклатуры, а потом уже по партии. и если сортируешь по ссылке делай автоупорядочивание.
|
|||
28
Tolstiy Beremenniy
24.12.18
✎
09:36
|
||||
29
Tolstiy Beremenniy
24.12.18
✎
09:37
|
(27) Сначала по наименованию номенклатуры сортировка.
Потом по порядку спивания!!!!!! А вот эту партию с 1 почему то не отсортировало!!!!! |УПОРЯДОЧИТЬ ПО | ВТ_ОстаткиПартий.Номенклатура.Наименование, | ПорядокСписания, | ВТ_ДокТч.Партия.МоментВремени |
|||
30
Tolstiy Beremenniy
24.12.18
✎
09:38
|
(27) где я сортирую по ссылке?
Я сортирую по наименованию номенклатуры. что бы она была рядом, потом по порядку списания 1 или 2. так в чем дело? |
|||
31
novichok79
24.12.18
✎
09:39
|
(29) чувак, осади. разбирайся сам.
у тебя в итогах сортировка не работает, потому что если нет агрегации, то в поле будет null, проверь - выгрузи твой запрос в ТЗ и посмотри что у тебя в группировках по которым ты сортируешь. |
|||
32
Михаил Иванович
24.12.18
✎
09:43
|
(29) Вот и уселся на шею)))
|
|||
33
Tolstiy Beremenniy
24.12.18
✎
09:44
|
(31) В тз и выгружаю.
Вообще достаточно в консоле запрос запустить и увидеть что там тоже самое. Не сортирует по Порядку списания, единица в середине партий. а должна быть в начале!!!! то есть говорите сортировка не работает в финальном запросе потому что он с итогами? И что тут делать тогда, когда именно от этого и зависит решение задачи! Важно списывать первой партию что в строке табличной части документа и имеет порядок списания 1. |
|||
34
hhhh
24.12.18
✎
09:45
|
(30) ну, по моменту времени это же по ссылке ты сортируещь. момент времени это значит ссылка + дата.
|
|||
35
novichok79
24.12.18
✎
09:45
|
(32) да, я тож офигеваю от школоты. ни, спасибо, ни пожалуйста за бесплатный опыт и знания.
|
|||
36
novichok79
24.12.18
✎
09:47
|
(33) это все можно сократить до "кококо".
слабо написать в итогах МИНИМУМ(Порядок)? |
|||
37
Tolstiy Beremenniy
24.12.18
✎
09:48
|
(34) ну ясно!!!!!
Вот поставил автоупорядочивание, результата нет. ВЫБРАТЬ ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия ПОМЕСТИТЬ ВТ_ДокТч ИЗ Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры ГДЕ ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка СГРУППИРОВАТЬ ПО ПеремещениеТоваровСписокНоменклатуры.Номенклатура, ПеремещениеТоваровСписокНоменклатуры.Партия ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, ПродуктыНаСкладахОстатки.Партия КАК Партия, ПродуктыНаСкладахОстатки.Партия.МоментВремени КАК МоментВремени ПОМЕСТИТЬ ВТ_ОстаткиПартий ИЗ РегистрНакопления.ПродуктыНаСкладах.Остатки( &Момент, Номенклатура В (ВЫБРАТЬ ВТ_ДокТч.Номенклатура ИЗ ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ДокТч.Номенклатура КАК Номенклатура, ВТ_ОстаткиПартий.Партия КАК Партия, ВТ_ДокТч.Количество КАК КоличествоИзДокумента, ВТ_ОстаткиПартий.КоличествоОстаток КАК КоличествоОстаток, ВЫБОР КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия ТОГДА 1 ИНАЧЕ 2 КОНЕЦ КАК ПорядокСписания ИЗ ВТ_ДокТч КАК ВТ_ДокТч ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура УПОРЯДОЧИТЬ ПО ПорядокСписания, ВТ_ДокТч.Партия.МоментВремени ИТОГИ МАКСИМУМ(КоличествоИзДокумента), СУММА(КоличествоОстаток) ПО Номенклатура, Партия АВТОУПОРЯДОЧИВАНИЕ |
|||
38
Михаил Иванович
24.12.18
✎
09:49
|
(37) Ну, читай литературу, думай, пробуй. Потом приходи как чего надумаешь.
|
|||
39
Tolstiy Beremenniy
24.12.18
✎
09:50
|
(36) То есть ПорядокСписания в итогах в нижнюю часть и
установить ему Минимум? |
|||
40
novichok79
24.12.18
✎
09:54
|
(39) я написал 1 раз - выгрузи в ТЗ чтобы увидеть что у тебя в строках ТЗ, где идет группировка ПорядокСписания = Null, ты не понял. я тебе говорю 2-й раз - агрегации нету, ты не понял. вот 3-й раз написал - МАКСИМУМ(ПорядокСписания) в ИТОГИ, ты не понял. ты не читаешь сообщения до конца.
|
|||
41
Tolstiy Beremenniy
24.12.18
✎
09:54
|
И что. вот это верный запрос?
ВЫБРАТЬ ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия ПОМЕСТИТЬ ВТ_ДокТч ИЗ Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры ГДЕ ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка СГРУППИРОВАТЬ ПО ПеремещениеТоваровСписокНоменклатуры.Номенклатура, ПеремещениеТоваровСписокНоменклатуры.Партия ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, ПродуктыНаСкладахОстатки.Партия КАК Партия, ПродуктыНаСкладахОстатки.Партия.МоментВремени КАК МоментВремени ПОМЕСТИТЬ ВТ_ОстаткиПартий ИЗ РегистрНакопления.ПродуктыНаСкладах.Остатки( &Момент, Номенклатура В (ВЫБРАТЬ ВТ_ДокТч.Номенклатура ИЗ ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ДокТч.Номенклатура КАК Номенклатура, ВТ_ОстаткиПартий.Партия КАК Партия, ВТ_ДокТч.Количество КАК КоличествоИзДокумента, ВТ_ОстаткиПартий.КоличествоОстаток КАК КоличествоОстаток, ВЫБОР КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия ТОГДА 1 ИНАЧЕ 2 КОНЕЦ КАК ПорядокСписания ИЗ ВТ_ДокТч КАК ВТ_ДокТч ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура УПОРЯДОЧИТЬ ПО ПорядокСписания, ВТ_ДокТч.Партия.МоментВремени ИТОГИ МАКСИМУМ(КоличествоИзДокумента), СУММА(КоличествоОстаток), МИНИМУМ(ПорядокСписания) ПО Номенклатура, Партия АВТОУПОРЯДОЧИВАНИЕ |
|||
42
Мимохожий Однако
24.12.18
✎
09:54
|
(38) ОФФ: Некоторые умеют думать только проговорив вслух. Ну, это как начинающий читать по слогам проговаривает вслух. У некоторых подобная привычка остаётся на всю жизнь. Но бывает ситуация из передачи Поле чудес - угадал все буквы, но не смог назвать слово.
|
|||
43
Tolstiy Beremenniy
24.12.18
✎
09:57
|
(40) В финальном запросе этого пакетного запроса
нужно связать ещё по партиям? |
|||
44
Tolstiy Beremenniy
24.12.18
✎
10:10
|
То есть, вот это финальный запрос получается.
И финальный его перебор. То есть контроль остатков и партионное списание, где в первую очередь списывается партия из табличной части документа? Запрос.Текст = " |ВЫБРАТЬ | ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, | ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия |ПОМЕСТИТЬ ВТ_ДокТч |ИЗ | Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры |ГДЕ | ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровСписокНоменклатуры.Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ПродуктыНаСкладахОстатки.Партия КАК Партия, | ПродуктыНаСкладахОстатки.Партия.МоментВремени КАК МоментВремени |ПОМЕСТИТЬ ВТ_ОстаткиПартий |ИЗ | РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Момент, | Номенклатура В | (ВЫБРАТЬ | ВТ_ДокТч.Номенклатура | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ДокТч.Номенклатура КАК Номенклатура, | ВТ_ОстаткиПартий.Партия КАК Партия, | ВТ_ДокТч.Количество КАК КоличествоИзДокумента, | ВТ_ОстаткиПартий.КоличествоОстаток КАК КоличествоОстаток, | ВЫБОР | КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия | ТОГДА 1 | ИНАЧЕ 2 | КОНЕЦ КАК ПорядокСписания |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий | ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура | |УПОРЯДОЧИТЬ ПО | ВТ_ДокТч.Номенклатура.Наименование, | ПорядокСписания, | ВТ_ДокТч.Партия.МоментВремени |ИТОГИ | МАКСИМУМ(КоличествоИзДокумента), | СУММА(КоличествоОстаток), | МИНИМУМ(ПорядокСписания) |ПО | Номенклатура, | Партия |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Момент", Дата); Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Если ВыборкаНоменклатура.КоличествоИзДокумента > ВыборкаНоменклатура.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара " + ВыборкаНоменклатура.Номенклатура + " с количеством " + ВыборкаНоменклатура.КоличествоИзДокумента + " недостаточно. На остатке :" + ВыборкаНоменклатура.КоличествоОстаток; Сообщение.Сообщить(); Отказ = Истина; Продолжить; КонецЕсли; // ОсталосьСписать = ВыборкаНоменклатура.КоличествоИзДокумента; // ВыборкаПартия = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПартия.Следующий() и ОсталосьСписать > 0 Цикл // Движение = Движения.ПродуктыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаПартия.Номенклатура; Движение.Партия = ВыборкаПартия.Партия; Движение.Количество = МИН(ВыборкаПартия.КоличествоОстаток, ОсталосьСписать); //Движение.Цена = ОсталосьСписать = ОсталосьСписать - Движение.Количество; КонецЦикла; КонецЦикла; |
|||
45
Михаил Иванович
24.12.18
✎
10:20
|
(42) Т.е. он это тут просто сам с собой разговаривает?
|
|||
46
Мелифаро
24.12.18
✎
10:24
|
(45) Да, в присутствии зрителей.
Как в том анекдоте про онаниста со свечкой и стулом. |
|||
47
FIXXXL
24.12.18
✎
10:36
|
||||
48
Tolstiy Beremenniy
24.12.18
✎
11:00
|
Вот с ценами, ->
// Процедура ОбработкаПроведения(Отказ, Режим) Движения.ПродуктыНаСкладах.Записывать = Истина; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, | ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия, | МАКСИМУМ(ПеремещениеТоваровСписокНоменклатуры.Цена) КАК Цена |ПОМЕСТИТЬ ВТ_ДокТч |ИЗ | Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры |ГДЕ | ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровСписокНоменклатуры.Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ПродуктыНаСкладахОстатки.Партия КАК Партия, | ПродуктыНаСкладахОстатки.Партия.МоментВремени КАК МоментВремени |ПОМЕСТИТЬ ВТ_ОстаткиПартий |ИЗ | РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Момент, | Номенклатура В | (ВЫБРАТЬ | ВТ_ДокТч.Номенклатура | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ДокТч.Номенклатура КАК Номенклатура, | ВТ_ОстаткиПартий.Партия КАК Партия, | ВТ_ДокТч.Количество КАК КоличествоИзДокумента, | ВТ_ОстаткиПартий.КоличествоОстаток КАК КоличествоОстаток, | ВЫБОР | КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия | ТОГДА 1 | ИНАЧЕ 2 | КОНЕЦ КАК ПорядокСписания, | ВТ_ДокТч.Цена КАК ЦенаИзДокумента |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий | ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура | |УПОРЯДОЧИТЬ ПО | ВТ_ДокТч.Номенклатура.Наименование, | ПорядокСписания, | ВТ_ДокТч.Партия.МоментВремени |ИТОГИ | МАКСИМУМ(КоличествоИзДокумента), | СУММА(КоличествоОстаток), | МИНИМУМ(ПорядокСписания), | МАКСИМУМ(Цена) |ПО | Номенклатура, | Партия |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Момент", Дата); Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Если ВыборкаНоменклатура.КоличествоИзДокумента > ВыборкаНоменклатура.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара " + ВыборкаНоменклатура.Номенклатура + " с количеством " + ВыборкаНоменклатура.КоличествоИзДокумента + " недостаточно. На остатке :" + ВыборкаНоменклатура.КоличествоОстаток; Сообщение.Сообщить(); Отказ = Истина; Продолжить; КонецЕсли; // ОсталосьСписать = ВыборкаНоменклатура.КоличествоИзДокумента; // ВыборкаПартия = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПартия.Следующий() и ОсталосьСписать > 0 Цикл Если ВыборкаПартия.КоличествоОстаток < 0 Тогда Продолжить; КонецЕсли; // Движение = Движения.ПродуктыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаПартия.Номенклатура; Движение.Партия = ВыборкаПартия.Партия; // КоличествоРасходПриход = МИН(ВыборкаПартия.КоличествоОстаток, ОсталосьСписать); // Движение.Количество = КоличествоРасходПриход; Движение.Цена = ВыборкаПартия.ЦенаИзДокумента; ОсталосьСписать = ОсталосьСписать - Движение.Количество; //// Движение = Движения.ПродуктыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаПартия.Номенклатура; Движение.Партия = ВыборкаПартия.Партия; Движение.Количество = КоличествоРасходПриход; Движение.Цена = ВыборкаПартия.ЦенаИзДокумента; КонецЦикла; КонецЦикла; // КонецПроцедуры // |
|||
49
novichok79
24.12.18
✎
11:08
|
(48) отлично, а соединение с партией где? ты реально не читаешь.
|
|||
50
Tolstiy Beremenniy
24.12.18
✎
11:26
|
(49) Читаю.
В (43) я хотел уточнить. Данных тестовых не много. на тех которые есть и так отработало. А как делать связь с партией???? Я вот попробовал, смотрю в консоле, там совсем не то что нужно. ВЫБРАТЬ ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия, МАКСИМУМ(ПеремещениеТоваровСписокНоменклатуры.Цена) КАК Цена ПОМЕСТИТЬ ВТ_ДокТч ИЗ Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры ГДЕ ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка СГРУППИРОВАТЬ ПО ПеремещениеТоваровСписокНоменклатуры.Номенклатура, ПеремещениеТоваровСписокНоменклатуры.Партия ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродуктыНаСкладахОстатки.Номенклатура КАК Номенклатура, ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, ПродуктыНаСкладахОстатки.Партия КАК Партия, ПродуктыНаСкладахОстатки.Партия.МоментВремени КАК МоментВремени ПОМЕСТИТЬ ВТ_ОстаткиПартий ИЗ РегистрНакопления.ПродуктыНаСкладах.Остатки( &Момент, Номенклатура В (ВЫБРАТЬ ВТ_ДокТч.Номенклатура ИЗ ВТ_ДокТч КАК ВТ_ДокТч)) КАК ПродуктыНаСкладахОстатки ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ДокТч.Номенклатура КАК Номенклатура, ВТ_ОстаткиПартий.Партия КАК Партия, ВТ_ДокТч.Количество КАК КоличествоИзДокумента, ВТ_ОстаткиПартий.КоличествоОстаток КАК КоличествоОстаток, ВЫБОР КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия ТОГДА 1 ИНАЧЕ 2 КОНЕЦ КАК ПорядокСписания, ВТ_ДокТч.Цена КАК ЦенаИзДокумента ИЗ ВТ_ДокТч КАК ВТ_ДокТч ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура И ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия УПОРЯДОЧИТЬ ПО ВТ_ДокТч.Номенклатура.Наименование, ПорядокСписания, ВТ_ДокТч.Партия.МоментВремени ИТОГИ МАКСИМУМ(КоличествоИзДокумента), СУММА(КоличествоОстаток), МИНИМУМ(ПорядокСписания), МАКСИМУМ(ЦенаИзДокумента) ПО Номенклатура, Партия АВТОУПОРЯДОЧИВАНИЕ |
|||
51
Tolstiy Beremenniy
24.12.18
✎
11:27
|
(49) Подскажите пожалуйста, как делать соединение с партией правильно?!
|
|||
52
Михаил Иванович
24.12.18
✎
11:32
|
(50) Кто такая "консоле"?
|
|||
53
novichok79
24.12.18
✎
12:02
|
ИЗ
ВТ_ДокТч КАК ВТ_ДокТч ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура И ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия сейчас в (50) правильно, связь с партией есть. не совсем то, что нужно, то данные - говно. УПОРЯДОЧИТЬ ПО ВТ_ДокТч.Номенклатура.Наименование, ПорядокСписания, ВТ_ДокТч.Партия.МоментВремени если у тебя автоупорядочивание, то можно так написать УПОРЯДОЧИТЬ ПО ВТ_ДокТч.Номенклатура, ПорядокСписания, ВТ_ДокТч.Партия |
|||
54
Tolstiy Beremenniy
24.12.18
✎
12:10
|
(52) КонсольЗапросов_Такси.epf
(53) Ясно про автоупорядочивание. Но наверное и как сейчас не критично. А вот по данным. Да. Совсем ерунда выдана запросом. Без этой связи же нормально идет все как нужно. Я убрал эту связь. Так как там вообще чушь. Данные набивал сам для тестирования. Что бы отладить разрабатываемый бизнес процесс. |
|||
55
novichok79
24.12.18
✎
12:38
|
(54) ахуеть логика конечно. я тебе говорю "у тебя рассогласование в данных", а ты - "тяп-ляп, и так сойдет".
|
|||
56
Михаил Иванович
24.12.18
✎
12:41
|
(55) да он издевается...
|
|||
57
Tolstiy Beremenniy
24.12.18
✎
13:03
|
(55) Ну завтра мне нужно значит выявить что за рассогласование!!!! Пока мне не понятно что это значит!!!!
Я набил 5 поступлений, с пятью номенклатурами и различными числовыми данными и делаю перемещение. Где произвожу контроль остатков по FIFO, списывая в первую очередь партию, если она выбрана в строке табличной части. (56) Ничего такого я и думать не мог. Сегодня только разобрался с контролем остатков для перемещения. не знаю на сколько верно. Завтра буду продолжать доводить до ума этот бизнес процесс. |
|||
58
Tolstiy Beremenniy
25.12.18
✎
11:20
|
(55) А как это рассогласование? Каким образом?
Как выявляется? Как сам так ничего подобного не вижу. Но данные запросом (50) выдаются кривые. |
|||
59
Tolstiy Beremenniy
26.12.18
✎
08:55
|
(55) Каким образом выявить это рассогласование данных?
были пустые партии, я перепровел, сейчас их нет. Но запрос где установлена связь по партиям выбирает кривые данные!!!! Как выявить почему, если вы говорите что запрос верный? |
|||
60
Михаил Иванович
26.12.18
✎
09:04
|
(59) Мдя... Продолжайте.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |