|
v7: отчет по залежавшемуся товару | ☑ | ||
---|---|---|---|---|
0
sanekdark
09.06.18
✎
07:00
|
при формирование отчета без склада формирует нормально
если формирую со складом выбираю склад. то выдает ошибку "Если ВыбДата>Д Тогда " Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата) вчем проблема может быть |
|||
1
sanekdark
09.06.18
✎
07:00
|
сам код вот
//******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; ТекстЗапроса = ""; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = ТекстЗапроса + "//{{ЗАПРОС(Сформировать) |Товар = Регистр.ОстаткиТоваров.Товар; |Склад = Регистр.ОстаткиТоваров.Склад; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Розн_Цена = Регистр.ОстаткиТоваров.Товар.Розн_Цена; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Товар; |Условие(Товар в ВыбТовар); |Условие(Склад в ВыбСклад); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; СуммаИтог=0; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); СпрТов=СоздатьОбъект("Справочник.Товары"); Пер=СоздатьОбъект("Периодический"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Товар Сумма=Запрос.ОстатокТовараКонОст*Запрос.Розн_Цена; Если Запрос.Товар.Этогруппа()=1 тогда Таб.ВывестиСекцию("Группа"); Иначе Тов=Запрос.Товар; СпрТов.НайтиЭлемент(Тов); Тов=СпрТов.ТекущийЭлемент(); Пер.ИспользоватьОбъект("Прих_Цена",Тов); Пер.ВыбратьЗначения(); Пока Пер.ПолучитьЗначение()=1 Цикл Д=Пер.ДатаЗнач; КонецЦикла; Если ВыбДата>Д Тогда Таб.ВывестиСекцию("Товар") ; СуммаИтог=СуммаИтог+Сумма; КонецЕсли; КонецЕсли; КонецЦикла; // Заполнение полей "Итого" Если (НазваниеНабораПрав()="Администратор") Тогда Таб.ВывестиСекцию("Итого"); Иначе КонецЕсли; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры // ДатаОтчета = РабочаяДата(); Если ДатаОтчета >= ПолучитьДатуТА() Тогда ДатаОтчета = ПолучитьДатуТА(); КонецЕсли; ДатаОтч=ДатаОтчета; |
|||
2
aka AMIGO
09.06.18
✎
07:54
|
Зайди в отладчик, поставь точку останова на строку
Если ВыбДата>Д Тогда запусти свой отчет потом открой табло, введи пару строк ВыбДата Д И посмотри, чему они равны |
|||
3
Сияющий в темноте
09.06.18
✎
07:55
|
Проверь Д через значение заполнено
|
|||
4
sanekdark
09.06.18
✎
08:47
|
Если ВыбДата>Д Тогда = Ошибка в выражении!
вот в табле что показывает |
|||
5
aka AMIGO
09.06.18
✎
08:49
|
(4) Ну, тогда еще раз:
введи пару строк ВыбДата Д ЗЫ. отладчик в табло показывает значения только одиночных переменных |
|||
6
sanekdark
09.06.18
✎
08:57
|
ВыбДата = '01.04.18'
Д = вот Д не выводит нечегоа выболр дату дата попала равно дате выбора |
|||
7
aka AMIGO
09.06.18
✎
08:59
|
(6) Д у тебя вычисляется из шагов по периодике.
стало быть - есть ошибка. |
|||
8
sanekdark
09.06.18
✎
09:00
|
а если делаю без скалада не выбираю склад то формируеться но тогда вот эти даные в отладчики равны
ВыбДата = '31.03.18' Д = '10.05.18' |
|||
9
sanekdark
09.06.18
✎
09:00
|
как понять в каком месте ошибка у меня не подскажешь? может совет дашь какойнить
|
|||
10
НЕА123
09.06.18
✎
09:06
|
Пер.ВыбратьЗначения();
Д=ПустаяДата; // вставить перед циклом сие Пока Пер.ПолучитьЗначение()=1 Цикл Д=Пер.ДатаЗнач; КонецЦикла; |
|||
11
aka AMIGO
09.06.18
✎
09:07
|
(9) тимвьювер у тебя есть? ИД и пароль можешь послать мне на почту?
(10) это 7-ка. |
|||
12
НЕА123
09.06.18
✎
09:09
|
да. (10) сторно.
|
|||
13
sanekdark
09.06.18
✎
09:51
|
aka AMIGO да есть щас пришлю кинь почту
|
|||
14
sanekdark
09.06.18
✎
09:51
|
щас кину увидел почту
|
|||
15
sanekdark
09.06.18
✎
10:04
|
ребят спасибо разобрался понял вчем проблема была)))
НЕА123 спасибо тебе с твоей подсказкой разобрался))) вообщем дело вчем базу резал я и товар просто переносил остаток без приходников даты прихода товара нету поэтому некторых товаров. добавил в код ПустаяДата=ПолучитьПустоеЗначение("Дата"); Д=ПустаяДата; // это все заработало в итоге получилось так //******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; ТекстЗапроса = ""; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = ТекстЗапроса + "//{{ЗАПРОС(Сформировать) |Товар = Регистр.ОстаткиТоваров.Товар; |Склад = Регистр.ОстаткиТоваров.Склад; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Розн_Цена = Регистр.ОстаткиТоваров.Товар.Розн_Цена; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Товар; |Условие(Товар в ВыбТовар); |Условие(Склад в ВыбСклад); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; СуммаИтог=0; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); СпрТов=СоздатьОбъект("Справочник.Товары"); Пер=СоздатьОбъект("Периодический"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Товар Сумма=Запрос.ОстатокТовараКонОст*Запрос.Розн_Цена; Если Запрос.Товар.Этогруппа()=1 тогда Таб.ВывестиСекцию("Группа"); Иначе Тов=Запрос.Товар; СпрТов.НайтиЭлемент(Тов); Тов=СпрТов.ТекущийЭлемент(); Пер.ИспользоватьОбъект("Прих_Цена",Тов); Пер.ВыбратьЗначения(); ПустаяДата=ПолучитьПустоеЗначение("Дата"); Д=ПустаяДата; // Пока Пер.ПолучитьЗначение()=1 Цикл Д=Пер.ДатаЗнач; КонецЦикла; ДатаОтчета= РабочаяДата(); КоличествоДней = (ДатаОтчета -Д ) ; Если ВыбДата>Д Тогда Таб.ВывестиСекцию("Товар") ; СуммаИтог=СуммаИтог+Сумма; КонецЕсли; КонецЕсли; КонецЦикла; // Заполнение полей "Итого" Если (НазваниеНабораПрав()="Администратор") Тогда Таб.ВывестиСекцию("Итого"); Иначе КонецЕсли; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры // ДатаОтчета = РабочаяДата(); Если ДатаОтчета >= ПолучитьДатуТА() Тогда ДатаОтчета = ПолучитьДатуТА(); КонецЕсли; ДатаОтч=ДатаОтчета; |
|||
16
aka AMIGO
09.06.18
✎
10:19
|
Поздравляю :)
Ну, и для ясности, скажи, пожалуйста, зачем этот цикл? Пока Пер.ПолучитьЗначение()=1 Цикл Д=Пер.ДатаЗнач; КонецЦикла; Для того, чтобы выбрать самую первую дату? Тогда есть метод ОбратныйПорядок().. И такой, (возможно, Г)код: Пер.ПолучитьЗначение(); Д=Пер.ДатаЗнач; |
|||
17
aka AMIGO
09.06.18
✎
10:20
|
+16 возможно, я чего не понял, отвлекался..
|
|||
18
Волшебник
09.06.18
✎
10:22
|
(15) пишется "В общем"
|
|||
19
aka AMIGO
09.06.18
✎
10:27
|
+16 И, если нужна последняя дата, тогда "ОбратныйПорядок" не применять.
ЗЫ. всё - ИМХО :) |
|||
20
sanekdark
09.06.18
✎
10:28
|
ок понял по пробую по другому еще этот код писал до этого программист я ток изучаю вникаю стараюсь разобраться) спасибо за помощь
|
|||
21
aka AMIGO
09.06.18
✎
10:28
|
Наврал, кажется, я в своём ИХО.. да ладно, кому надо - разберётся :)
|
|||
22
aka AMIGO
09.06.18
✎
10:29
|
(20) Не за что.. сам ведь решил проблему
|
|||
23
sanekdark
09.06.18
✎
10:30
|
щас для себя попробую с обратным порядком сделать думаю до думкаю)) как)))
|
|||
24
aka AMIGO
09.06.18
✎
10:31
|
(23) Обязательно смотри по отладчику, что получишь :)
|
|||
25
sanekdark
09.06.18
✎
10:31
|
ок спасибо
|
|||
26
Эльниньо
09.06.18
✎
10:46
|
(18) А говорится "вопчем"
|
|||
27
Злопчинский
09.06.18
✎
11:22
|
(26) правильно говорится =- "ваще"
|
|||
28
Эльниньо
09.06.18
✎
12:51
|
(27) Неа. "ващще"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |