• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Отчет о закупках

  • Автор темы Dzo
  • Дата начала
P

puh14

Шрифт белый-белый ;-)

посмотри - у тебя в процедуре печати что-то типа Цвет попадается?
 
D

Dzo

Не в шрифте дело, потому что если все выделить, а потом снять выделение, то все остается.
 
P

puh14

Тогда это в чистом виде глюк системы. На других машинах так-же?
 
D

Dzo

Пока не пробовали, все работает в тестовом режиме, но на днях скинем в общую базу и тогда посмотрим.
 
U

unknown181538

По-моему выводя через метод область у меня такое вот получалось.
А у вас Показать() идет после вывода секций?
 
D

Dzo

Проблема с выводом отступила на второй план. (

После того как перекинул свой отчетик из тестовой базы в рабочую начала выдаваться неверная информация о количестве.
Текст модуля не менялся, как в общем и все остальное. Есть одна мысль связанная с тем, что рабочая база стоит на SQL сервере, а тестовая просто.

Прилагаю текст модуля, чтобы была возможность вычислить ошибку если таковая имеется.

Всем заранее спасибо, очень прошу помощи.

Перем Расшифровка;

Процедура Сформировать()

Если ВыбТМЦ.ЭтоГруппа()=1 Тогда
Предупреждение ("Нельзя выбирать группу");
Возврат;
КонецЕсли;

Если ВыбТМЦ.Выбран()=0 Тогда
Предупреждение ("Выберите ТМЦ");
Возврат;
КонецЕсли;

Если НачДата > ПолучитьДатуТА() Тогда
Предупреждение ("Нельзя устанавливать Дату больше даты ТА.
| Дата автоматически станет равной дате ТА");
НачДата=ПолучитьДатуТА();
Возврат;
КонецЕсли;

Если КонДата > ПолучитьДатуТА() Тогда
Предупреждение ("Нельзя устанавливать Дату больше даты ТА.
| Дата автоматически станет равной дате ТА");
КонДата=ПолучитьДатуТА();
Возврат;
КонецЕсли;

Таб=СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0, 0, 0, 0);
Таб.ПовторятьПриПечатиСтроки( 15, 15 );
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(2,,,,,,,,,1,,);
Таб.Показать("Аналитика Закупок","");
Ед=ВыбТМЦ.БазоваяЕдиница;
ТипЦен=СоздатьОбъект("Справочник.ТипыЦен");
ТипЦен.НайтиПоНаименованию("Закупочные");
Закуп=ТипЦен.ТекущийЭлемент();
Цен=СоздатьОбъект("Справочник.Цены");
Цен.ИспользоватьВладельца(ВыбТМЦ);
Цен.НайтиПоРеквизиту("ТипЦен", Закуп, 0);
НайденнаяЦена=Цен.ТекущийЭлемент();
Вал=НайденнаяЦена.Валюта;
Таб.ВывестиСекцию("ШапкаТаб");

Рег=СоздатьОбъект("Регистр.ПартииНаличие");
Запрос=СоздатьОбъект("Запрос");

ТекстЗапроса=
"//ЗАПРОС{{(Заказы)
|ПЕРИОД с НачДата по КонДата;
|Товар=Регистр.ПартииНаличие.Номенклатура;
|Статус=Регистр.ПартииНаличие.СтатусПартии;
|Дата=Регистр.ПартииНаличие.ДатаПартии;
|Поставщик=Регистр.ПартииНаличие.Партия.Поставщик;
|Колич=Регистр.ПартииНаличие.Количество;
|ЦенаЗ=Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|Докум=Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
|Функция Кол=Приход(Колич);
|Условие (Товар в ВыбТМЦ);
|Группировка Дата;
|"//}}ЗАПРОС
;


Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Предупреждение ("Запрос не выполнен", 60);
КонецЕсли;

Пока Запрос.Группировка("Дата")=1 Цикл
Расшифровка=Запрос.Докум.ТекущийДокумент();
Таб.ВывестиСекцию("Строка");
КонецЦикла;

КонецПроцедуры

Процедура ПриОткрытии()

НачДата=НачМесяца(РабочаяДата());
КонДата=РабочаяДата();
Если глФлагРасшифровки=1 Тогда
Обновить=глОбновить;
ВыбТМЦ=глРасшифровка.Получить("ВыбТМЦ");
КонецЕсли;

КонецПроцедуры

Процедура ОбработкаЯчейкиТаблицы(Расшифровка,Флаг,Таб,Адрес)

ОткрытьФормуМодально(Расшифровка,,1);

КонецПроцедуры
 
P

puh14

Эээ - а тебе точно нужен приход товара а не конченый остаток?

|Функция Кол=КонОст(Колич);

плюс у тебя все партии по товару скидываются по датам прихода - плевать, один документ или туча.
Ещё если ты и там и там выдал дату после ТА тогда у тебя будет отображаться приход за один день.
Кстати - дата партии всегда совпадает с датой документа?

Как вариант для проверки - сделай группировку по всем полям, выведи в таблицу и проверь где косячит.
Ошибок в модуле не вижу.


Поподробнее расскажи что неправильного - а то непонятно.
 
D

Dzo

Неправильно отображается количество в реальной базе, которая стоит на SQL сервере.

Грубо говоря должно быть так, например:

21 мая пришло 15 штука товара по цене 250 рублей от такого поставщик по документу поступление ТМЦ№такойто
22 мая пришло 10 штук товара по цене 0 рублей от ... по документу Оприходование ТМЦ№секойто

дата| колчиество | цена | Поставщик | документ
21/05 15 250 Такойто Поступление ТМЦ№такойто
22.05 10 0 Оприходование ТМЦ№секойто

и т.д.

Суть проблемы в том, что после переноса отчета из тестовой базы в реальную, стало некорректно отображаться поле количество.

причем не везде, а в некоторых позициях номенклатуры, их немало. Это обнаружилось, после того как после вывода отчета открыли соответсвенный документ, и цифра в графе количество в документе не соответствует цифре собственно в отчете. Причем вообще не понятно откуда эта цифра взялась. Например, поступило судя по документу 50 шт. продано 21 шт. а в отчете отображается 8 или 1 итд...
 
P

puh14

Движения документа посмотри - походу в проведении документа проблема.

по поводу продано - оно у тебя вообще не отображается. Только приход и никаких остатков.
добавь например в отчет следующее

ТекстЗапроса=
"//ЗАПРОС{{(Заказы)
|ПЕРИОД с НачДата по КонДата;
|Товар=Регистр.ПартииНаличие.Номенклатура;
|Статус=Регистр.ПартииНаличие.СтатусПартии;
|Дата=Регистр.ПартииНаличие.ДатаПартии;
|Поставщик=Регистр.ПартииНаличие.Партия.Поставщик;
|Колич=Регистр.ПартииНаличие.Количество;
|ЦенаЗ=Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|Докум=Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
|Регистратор=Регистр.ПартииНаличие.ТекущийДокумент;
|Функция Кол=Приход(Колич);
|Условие (Товар в ВыбТМЦ);
|Группировка Дата;
|Группировка Регистратор;
|"//}}ЗАПРОС

Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Предупреждение ("Запрос не выполнен", 60);
КонецЕсли;

Запрос.Выгрузить(ТЗ); //Где ТЗ - таблица значений на форме там и увидишь из каких документов у тебя что складывается.

Более чем уверен - движения окажутся правильными - просто твой параметр ДатаПартии может запросто не совпадать с датами документов-регистраторов.
 
D

Dzo

Посмотрел движения документов и структуры подчиненности разных документов по приходу.


Вот что у нас получается. Есть на складе товар. в количестве 50 штук. Этот товар покупался за всю историю фирмы только 1 раз. Ничего из того что куплено по этому товару продано не было.
Есть только три документа касающихся данного товара. Это "заказ поставщику", "РКО" и "постуление ТМЦ" Все. Почему в сторке колчисетво по приходу выводится число 1?

С чем тут может не совпадать ДатаПартии?
 
P

puh14

Вот что у нас получается. Есть на складе товар. в количестве 50 штук. Этот товар покупался за всю историю фирмы только 1 раз. Ничего из того что куплено по этому товару продано не было.
Есть только три документа касающихся данного товара. Это "заказ поставщику", "РКО" и "постуление ТМЦ" Все. Почему в сторке колчисетво по приходу выводится число 1?
То есть в движении документа у тебя стоит приход 50. Или нет?

а дата партии - например при проведении документа я буду её заполнять текущей датой, это-же относится и к Партия.ПриходныйДокумент - запихать туда можно всё что угодно (напрмер зайдя руками в справочник партии и поправив). Единственное от чего ты не отвертишся никак это
|Регистратор=Регистр.ПартииНаличие.ТекущийДокумент. Это регистратор записи движения по регистрам - именно по нему удаляются записи при перепроведении. Именно его дата отсеивается в первой строке запроса (период с по). Лучше вместо

|Докум=Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
поставь
|Докум=Регистр.ПартииНаличие.ТекущийДокумент;

или как я раньше показал найди где глючит - косяки штука неприятная, лучше их сразу отлавливать.
 
D

Dzo

Это точно, спасибо заранее за помощь, через часок подъеду на работу еще поковыряю с учетом замечаний!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!