|
Ошибка запроса | ☑ | ||
---|---|---|---|---|
0
Альбатрос
07.05.13
✎
10:09
|
Уважаемые, задача такая: перебрать за определенный период номенклатуру в документах прихода в НТТ, посмотреть по этой номенклатуре остатки в регистре ТоварыНТТ и заполнить переоценку.
Мой вариант: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслугВНТТТовары.Номенклатура, | ПоступлениеТоваровУслугВНТТТовары.ЦенаВРознице, | ПоступлениеТоваровУслугВНТТТовары.Ссылка.Склад КАК Склад, | ПоступлениеТоваровУслугВНТТТовары.Ссылка.Дата КАК ДатаПрихода, | ПоступлениеТоваровУслугВНТТТовары.Ссылка.Организация КАК Организация, | ТоварыВНТТОстатки.ЦенаВРознице КАК ЦенаВРегистре, | ТоварыВНТТОстатки.КоличествоОстаток КАК Количество |ИЗ | Документ.ПоступлениеТоваровУслугВНТТ.Товары КАК ПоступлениеТоваровУслугВНТТТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВНТТ.Остатки КАК ТоварыВНТТОстатки | ПО ПоступлениеТоваровУслугВНТТТовары.Ссылка.Склад = ТоварыВНТТОстатки.Склад | И ПоступлениеТоваровУслугВНТТТовары.Номенклатура = ТоварыВНТТОстатки.Номенклатура |ГДЕ | ПоступлениеТоваровУслугВНТТТовары.Ссылка.Дата МЕЖДУ &НачДата И &КонДата | И НЕ ПоступлениеТоваровУслугВНТТТовары.Ссылка.ПометкаУдаления | И ПоступлениеТоваровУслугВНТТТовары.Ссылка.Проведен |ИТОГИ ПО | Склад"; Запрос.УстановитьПараметр("НачДата", НачДата); Запрос.УстановитьПараметр("КонДата", КонецДня(КонДата)); Результат = Запрос.Выполнить(); Если Результат.Пустой() тогда Сообщить("Создание переоценки: ошибка обработки!!! Не верно передан период!"); Возврат; КонецЕсли; Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() цикл Склад = Выборка.Склад; Записи = Выборка.Выбрать(); Пока Записи.Следующий() цикл ДатаПрихода = Записи.ДатаПрихода; Организация = Записи.Организация; ДокПереоценки = Документы.ПереоценкаТоваровВРознице.СоздатьДокумент(); ДокПереоценки.Дата = ДатаПрихода+60; ДокПереоценки.ВидОперации = Перечисления.ВидыОперацийПереоценкаТоваровВРознице.ПереоценкаВНТТ; ДокПереоценки.Организация = Организация; ДокПереоценки.Склад = Склад; ДокПереоценки.Комментарий = "Создан автоматически"; СтрокаПереоценки = ДокПереоценки.Товары.Добавить(); СтрокаПереоценки.Номенклатура = Записи.Номенклатура; СтрокаПереоценки.Количество = Записи.Количество; СтрокаПереоценки.ЦенаВРозницеСтарая = Записи.ЦенаВРегистре; СтрокаПереоценки.ЦенаВРознице = Записи.ЦенаВРознице; КонецЦикла; ДокПереоценки.Записать(); КонецЦикла; Некорректно работает, создается документ переоценки только с одной строчкой, а документов прихода за обрабатываемый период куча. Где я ошибся? |
|||
1
braynt
07.05.13
✎
10:11
|
а итоги зачем?
|
|||
2
Альбатрос
07.05.13
✎
10:11
|
Все, сообразил =) Сам дурак )))
|
|||
3
kosts
07.05.13
✎
10:11
|
Перенеси в первый цикл
ДокПереоценки = Документы.ПереоценкаТоваровВРознице.СоздатьДокумент(); |
|||
4
Альбатрос
07.05.13
✎
10:12
|
(3) ага )
|
|||
5
Альбатрос
07.05.13
✎
10:12
|
(1) Я так понял, выборка по группировкам работать так не будет, не?
|
|||
6
Альбатрос
13.05.13
✎
11:56
|
Задача изменилась. Нужно создать документ переоценки на конец дня, когда был приход. При этом включит в один документ переоценки позиции со всех док-ов поступления в разрезе склада.
Переработал запрос. Работает неправильно: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслугВНТТТовары.Номенклатура, | ПоступлениеТоваровУслугВНТТТовары.ЦенаВРознице, | ПоступлениеТоваровУслугВНТТТовары.Ссылка.Склад КАК Склад, | КОНЕЦПЕРИОДА(ПоступлениеТоваровУслугВНТТТовары.Ссылка.Дата, ДЕНЬ) КАК ДатаПрихода, | ПоступлениеТоваровУслугВНТТТовары.Ссылка.Организация КАК Организация, | ТоварыВНТТОстатки.ЦенаВРознице КАК ЦенаВРегистре, | ТоварыВНТТОстатки.КоличествоОстаток КАК Количество, | ПоступлениеТоваровУслугВНТТТовары.Ссылка КАК Ссылка |ИЗ | Документ.ПоступлениеТоваровУслугВНТТ.Товары КАК ПоступлениеТоваровУслугВНТТТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВНТТ.Остатки(КОНЕЦПЕРИОДА(&КонДата, ДЕНЬ), ) КАК ТоварыВНТТОстатки | ПО ПоступлениеТоваровУслугВНТТТовары.Ссылка.Склад = ТоварыВНТТОстатки.Склад | И ПоступлениеТоваровУслугВНТТТовары.Номенклатура = ТоварыВНТТОстатки.Номенклатура |ГДЕ | ПоступлениеТоваровУслугВНТТТовары.Ссылка.Дата МЕЖДУ &НачДата И &КонДата | И ПоступлениеТоваровУслугВНТТТовары.Ссылка.Проведен | И ПоступлениеТоваровУслугВНТТТовары.Ссылка.Переоценить |ИТОГИ ПО | Склад, | ДатаПрихода"; Запрос.УстановитьПараметр("НачДата", НачДата); Запрос.УстановитьПараметр("КонДата", КонецДня(КонДата)); Результат = Запрос.Выполнить(); Если Результат.Пустой() тогда Сообщить("Создание переоценки: ошибка обработки!!! Не верно передан период!"); Возврат; КонецЕсли; Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Склад"); Пока Выборка.Следующий() цикл Склад = Выборка.Склад; ЗаписиПоДате = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ДатаПрихода"); Пока ЗаписиПоДате.Следующий() цикл ДокПереоценки = Документы.ПереоценкаТоваровВРознице.СоздатьДокумент(); Записи = ЗаписиПоДате.Выбрать(); Пока Записи.Следующий() цикл //Если Записи.Ссылка.Переоценить тогда // Объект = Записи.Ссылка.ПолучитьОбъект(); // Объект.Переоценить = Ложь; // Объект.Записать(); //КонецЕсли; Если Не ЗначениеЗаполнено(Записи.Количество) тогда Продолжить; КонецеСЛИ; Если Записи.ЦенаВРегистре = Записи.ЦенаВРознице тогда Продолжить; КонецЕсли; ДатаПрихода = Записи.ДатаПрихода; Организация = Записи.Организация; ДокПереоценки.Дата = ДатаПрихода; ДокПереоценки.ВидОперации = Перечисления.ВидыОперацийПереоценкаТоваровВРознице.ПереоценкаВНТТ; ДокПереоценки.Организация = Организация; ДокПереоценки.Склад = Склад; ДокПереоценки.Комментарий = "Создан автоматически"; СтрокаПереоценки = ДокПереоценки.Товары.Добавить(); СтрокаПереоценки.Номенклатура = Записи.Номенклатура; СтрокаПереоценки.Количество = Записи.Количество; СтрокаПереоценки.ЦенаВРозницеСтарая = Записи.ЦенаВРегистре; СтрокаПереоценки.ЦенаВРознице = Записи.ЦенаВРознице; КонецЦикла; Если ДокПереоценки.Товары.Количество() >0 тогда ДокПереоценки.Записать(); КонецЕсли; КонецЦикла; КонецЦикла; В результате за период выборки создаются документы только по одному складу. Как сделать обход группировок,т чтоб создавались для всех? |
|||
7
sttt
13.05.13
✎
12:07
|
Склад = Выборка.Склад;
ЗаписиПоДате = Склад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ДатаПрихода"); |
|||
8
Альбатрос
13.05.13
✎
12:15
|
(7) не идет, метод "выбрать" не обнаружен.
Тип значения "Склад" = СправочникСсылка.Склад |
|||
9
sttt
13.05.13
✎
12:20
|
ошибся))
|
|||
10
Альбатрос
13.05.13
✎
12:23
|
(9) а жаль )))
|
|||
11
Альбатрос
13.05.13
✎
12:26
|
Вообщем, хочу получить такое:
-Склад1 ---Дата1 ------ДетальныеЗаписи ---Дата2 ------ДетальныеЗаписи -Склад2 ---Дата1 ------ДетальныеЗаписи ---Дата3 ------ДетальныеЗаписи Ну и так же обходить. То есть получить первый склад, получить первую дату, получить список номенклатуры на эту дату, получить вторую дату и т.д и т.п. Надеюсь, доступно объяснил =) |
|||
12
zak555
13.05.13
✎
12:29
|
зачем ты перебираешь документы поступлений ?
|
|||
13
Ёпрст
13.05.13
✎
12:29
|
(6)
записывать документ в конце вестимо |
|||
14
Альбатрос
13.05.13
✎
12:32
|
(12) Потому что в док-ах есть реквизит "Переоценять", на основе которого обработка понимает, что его нужно переоценить
|
|||
15
zladenuw
13.05.13
✎
12:33
|
в запросе сортировку. по склад, ДатаПрихода
|
|||
16
Альбатрос
13.05.13
✎
12:35
|
(13) Запись док-та стоит в правильном месте, после перебора товара за дату.
|
|||
17
Альбатрос
13.05.13
✎
12:36
|
(15) Хм... не вижу связи, но щас попробую
|
|||
18
Ёпрст
13.05.13
✎
12:38
|
(16) а чего не устраивает тогда ?
Новый документ где хоть создаешь ? Надеюсь, в обходе первой группировке по складу ? |
|||
19
Ёпрст
13.05.13
✎
12:38
|
или по дате (хз, где тебе именно надо - по складам или датам доки лепить)
|
|||
20
Альбатрос
13.05.13
✎
12:39
|
(18) В обходе по дате. Он и создает по дате, только почему-то только на один склад
|
|||
21
Альбатрос
13.05.13
✎
12:40
|
(15) Сортировка не помогла
|
|||
22
sttt
13.05.13
✎
12:45
|
(20) в отладчике посмотри, есть ли у тебя несколько складов...
|
|||
23
Альбатрос
13.05.13
✎
12:50
|
Мля, может я хренова объяснил?
Допустим: 1янв - поступление1 - склад Основной 1янв - поступление2 - склад Основной 1янв - поступление3 - склад Вторичный 2янв - поступление4 - склад Основной 2янв - поступление5 - склад Вторичный 2янв - поступление6 - склад Вторичный Я хочу, чтоб создалось: На 1янв Переоценка1 по складу основной с товаром из пост-ния 1 и 2 Переоценка2 по складу Вторичный с товаром из пост-ния 3 На 2янв Переоценка3 по складу основной с товаром из пост-ния 4 Переоценка4 по складу Вторичный с товаром из пост-ния 5 и 6 А у меня получаются только переоценка 1 и 3 |
|||
24
Альбатрос
13.05.13
✎
12:53
|
(22) В отладчике на выборке 2 строки всего
В том и дело, если убрать итоги по ДатаПрихода и соответственно обход по ним, то получаю корректировки по каждому складу. С обходом по датам корректировки только по одному =( |
|||
25
sttt
13.05.13
✎
12:55
|
в тз выгрузи
|
|||
26
Альбатрос
13.05.13
✎
12:58
|
(24) Не, наврал: 5 разных складов в "выборка". Странно...
|
|||
27
Альбатрос
13.05.13
✎
13:05
|
Мужики, прошу прощения за отнятое время!
Всему виной вот эти 2 условия: Если Записи.ЦенаВРегистре = Записи.ЦенаВРознице тогда Продолжить; КонецЕсли; Если ДокПереоценки.Товары.Количество() >0 тогда ДокПереоценки.Записать(); КонецЕсли; Спасибо большое за помощь!!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |