Последний приход (документ)

  1. 9 г. назад

    Есть отчет... Выводит номенклатуру... В отчете есть "флажок" - только с остатками: выводится номенклатуры, имеющая остаток. Остаток тупо берется из регистра "ПартииНаличие":

    	ОстатокСебестоим = СоздатьОбъект("СписокЗначений");
    	
    	Себестоим 	= 0;
    	РегОстатки 	= СоздатьОбъект("Регистр.ПартииНаличие");
    	
    	КолвоОстаток	= РегОстатки.СводныйОстаток(,,ВыбЗнач,,,,,"Количество");
    	КолвоСумма 		= РегОстатки.СводныйОстаток(,,ВыбЗнач,,,,,"СуммаРуб");
    	Если (КолвоОстаток > 0) и (КолвоСумма > 0)  Тогда
    		Себестоим 	= Окр(КолвоСумма/КолвоОстаток, 2, 1);
    	КонецЕсли;
    
    	ОстатокСебестоим.ДобавитьЗначение(Себестоим);
    	ОстатокСебестоим.ДобавитьЗначение(КолвоОстаток);
    	
    	Возврат ОстатокСебестоим;
    

    А таким же простым способом возможно получить последний док-т прихода?

    Ответы: (5) (11) (40)
  2. остаток не сводный используй , выгрузит таблицу по партиям , по документу отсортируй и первую строчку выбери

  3. выгрузить в таблицу значений....

    Ответы: (3)
  4. (2) да, еще скажи связать виртуальную таблицу остатков с таблицей регистра по ключевым полям)

    Ответы: (4)
  5. (3) это 7.7

    Ответы: (6)
  6. (0) Запрос, максимум по документу

  7. (4)епты, а я думал, это 6.0

  8. Рег = СоздатьОбъект("Регистры");
    РегХ = Рег.ххх;
    РегХ.УстановитьЗначениеФильтра(.........);
    Рег.РАссчитатьРЕгистрыНа(.....);
    РегХ.ВЫгрузитьИтоги(...........)

    Ответы: (45)
  9. а можно запрос сделать....смотря какие цели...просто получить остатки и манипулировать таблицей значений, или актуальность поддерживать....

  10. ещё можно из справочника партий взять

    Ответы: (10)
  11. (9) а разве мы можем узнать из справочника партий реальные остатки по партиям?

    Ответы: (11)
  12. (10) нет, это был буквальный ответ на

    Масянька А таким же простым способом возможно получить последний док-т прихода?

  13. Кароче... Ничё лучше запроса не придумала...

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

    Для одного элемента - работает.
    Если обрабатывать папку - хрень какая-то... Берет тупо последний приход...

    Ответы: (13) (18)
  14. +(12) Из папки - выбор элементов работает.

  15. А чего вы все меня бросили? [smile=;_;]

  16. Чую - проблема в запросе...

  17. Я бы советовал показать (.)(.)

    Ответы: (17)
  18. (16) Запросу?!

  19. (12) а почему нет группировки по номенклатуре?

    Ответы: (19)
  20. (18) А надо?
    Воткнула после "Группировка Документ"...
    Та же фигня... Только дольше...
    bu.gif

    Ответы: (20)
  21. (19) воткни до

    Ответы: (22)
  22. Когда одна номенклатура - всё норм.
    Как только задаю папку... Только последнее поступление... А последнее поступление - материалы ваще...

  23. (20) Вроде пошло...
    Только долго... Ужас...
    И почему-то выгружает в таблицу до фигища строк (больше тысячи). А реально - около 10-20 приходов.

    Ответы: (23)
  24. +(22) И кстати, выгружает в таблицу всегда одинаковое количество строк...
    Номенклатура разная, а количество выгруженных строк одинаковое...

  25. andrewks
    Накорябала прямой запрос:

    RS = СоздатьОбъект("ODBCRecordset");
    RS.УстБД1С();
    	ТекстЗапроса = "//{{ЗАПРОС()
    |SELECT
    |    Рег.IDDoc as [Док $Документ],
    |    $Рег.Номенклатура as [Товар $Справочник.Номенклатура],
    |	$Рег.КодОперации as [КодОперации $Перечисление.КодыОпераций]
    |FROM
    |    $Регистр.ПартииНаличие as Рег
    |WHERE
    |    Рег.Товар = :ВыбЗнач,
    |	Рег.КодОперации = $Перечисление.КодыОпераций.Закупка OR Рег.КодОперации = $Перечисление.КодыОпераций.ВводОстатков";
    
    RS.УстановитьТекстовыйПараметр("ВыбЗнач", ВыбЗнач);
    	//ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
    RS.Отладка(1);
    ТабЗнач = RS.ВыполнитьИнструкцию(ТекстЗапроса);
    //Сообщить("1 - "+ ВыбЗнач + ", " + ПоследнийДок);	
    	
    	КолВоСтрок = ТабЗнач.КоличествоСтрок();
    

    Ругается на КоличествоСтрок. А что выгружает не в таблицу?

  26. RS.УстановитьТекстовыйПараметр("ВыбЗнач", ВыбЗнач);
    ВыбЗнач - текст?

  27. ВыполнитьИнструкцию(<?>,<?>,<?>)
    Синтаксис:
    ExecuteStatement(strTextSQL, obVT, bEraseVT)
    Назначение:
    Выполняет SQL запрос, при ошибке парсинга или при ошибке на ODBC драйвере формируется исключение. Если запрос возвращает набор строк, метод возвращает объект с результатом запроса, если запрос не возвращает набор строк (не select, а DML или прочий), возвращается количество обработанных строк. Если запрос содержит несколько SQL инструкций (multistatement batch), результаты возвращаются только от первой инструкции. Однако, на драйвер уходит весь текст запроса (По спецификации ODBC, будут ли выполнены остальные инструкции в пакете зависит от драйвера. Для драйвера SQL Server они выполняются), остальные результаты игнорируются. Если запрос возвращает набор данных, и в наборе данных нет ни одной строки, это не является ошибкой. Если запрос не параметризированный - метод гарантированно закрывает курсор.
    Возвращает: объект с результатом запроса (ТаблицаЗначений или наследник), или число - количество обработанных строк.
    Параметры:
    - strTextSQL (Строка): текст запроса, если пустая строка запрос считается параметризированным. По умолчанию пустая строка.
    - obVT (объект): ТаблицаЗначений или наследник от нее для приема результатов запроса, именно этот объект и будет возвращаемым значением. Это должен быть именно ТаблицаЗначений или наследник, а не объект реализующий ее интерфейс. Если тип объекта - пустое значение, создается объект типа ТаблицаЗначений. По умолчанию: пустое значение.
    - bEraseVT (Число): 1 - очистить таблицу и создать колонки. 0 - не создавать. По умолчанию - 1.

  28. Кароче...
    Вот что написала:

    Процедура Сформировать()
    	Перем тз; //:ТаблицаЗначений
    
    БД = СоздатьОбъект("ODBCDataBase");
    БД.Соединение("DRIVER=Microsoft Visual FoxPro Driver;Deleted=Yes;Null=Yes;
    |Collate=RUSSIAN;BackgroundFetch=Yes;Exclusive=No;SourceType=DBF;SourceDB=" + СокрЛП(КаталогИБ()));
    
    	рс = СоздатьОбъект("ODBCRecordset");
    	рс.УстБД(БД);
    	//Данный фрагмент построен конструктором.
    	//При повторном использовании конструктора внесенные вручную изменения будут потеряны!!!
    	ТекстЗапроса = "
    |select top 1 from $регистр.ПартииНаличие Партии (nolock)
    |left join _1sjourn Журнал (nolock)
    |on Партии.iddoc = Журнал.iddoc
    |where ($Партии.КодОперации IN ($Перечисление.КодыОпераций.ВводОстатков OR $Перечисление.КодыОпераций.Закупка))
    |	AND ($Партии.Номенклатура = :ВыбЗнач)
    |order by Журнал.date_time_iddoc desc
    |";
    	
    	
    	
    	рс.УстановитьТекстовыйПараметр("ВыбЗнач", ВыбЗнач);
    	рс.ВыполнитьИнструкцию(ТекстЗапроса, тз);
    	Сообщить("1 - " + ТипЗначенияСтр(тз));
    	//тз.ВыбратьСтроку();
    КонецПроцедуры
    

    Сообщить - пусто...
    Да чего же я не так-то делаю?! [smile=;_;]

  29. не знаю ваших структур, в Украине регистр партии содержит документ прихода - его дата и нужна

    Ответы: (29)
  30. (28) Аналогично. Есть ДатаПартии. Есть и Документ.
    Не могу вытащить! [smile=>:(] [smile=;_;]

    Ответы: (35)
  31. 22.10.2014 18:29:33 отредактировано Bekas
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса = "//{{ЗАПРОС()
        |Период с ПериодФорм;
        |Номенклатура 	= Регистр.ПартииНаличие.Номенклатура;
        |КодОперации 	= Регистр.ПартииНаличие.КодОперации;
        |мКоличество	= Регистр.ПартииНаличие.Количество;
    // вот здесь
        |ДатаПрихода = Регистр.ПартииНаличие.ДокументПрихода.ДатаДок;
    //
        |Условие (Номенклатура В ВыбЗнач);
        |Условие (КодОперации В ПрихЗнач);
        |Группировка Документ;
        |Функция ПриходКоличество = Приход(мКоличество);
        |Функция РасходКоличество = Расход(мКоличество);";
    
    Ответы: (31) (34)
  32. (30) Я завтра попробую... И... Кароч, если не получится...bu.gif

  33. смайл неверный. надо такой: -image-

    Ответы: (33)
  34. (32) Чтобы заработать такой смайлик - нужно помогать, а не трындеть.
    За смайлик - спасибо.

  35. (30) Тебе - спасибо. Так тоже не работает, но натолкнул на мысль.

  36. (29) Регистр.ПартииНаличие.ТекущийДокумент

    Ответы: (36)
  37. (35) Учитесь, спецы [smile=^_^]

    	ПартииНаличие = СоздатьОбъект("Регистр.ПартииНаличие");
    	ТаблОстатков = СоздатьОбъект("ТаблицаЗначений");
    	
    	ПартииНаличие.УстановитьЗначениеФильтра("Номенклатура", ВыбЗнач, 1);           
    	ПартииНаличие.ВыгрузитьИтоги(ТаблОстатков,1,1);
    	
    	ТаблОстатков.Свернуть("Партия","Количество,СуммаУпр"); 
    
    	ТаблОстатков.Сортировать("Партия+");
    	
    	КолВоСтрок = ТаблОстатков.КоличествоСтрок();
    	ТаблОстатков.ВыбратьСтроки();
        Если КолВоСтрок <> 0 Тогда
    		ТаблОстатков.ПолучитьСтрокуПоНомеру(КолВоСтрок);
    		Док = ТаблОстатков.Партия.ПриходныйДокумент;
    	Иначе
    		Док = "";
    	КонецЕсли;
    
    	Возврат Док;
    

    Работает (досконально еще не проверила - не проверила доки) и при выборе одного, и при выборе папки.

    PS Сисек не будет. Никому. [smile=:P]

    Ответы: (37) (39) (42) (43) (45)
  38. (36) а что такое папка?

    Ответы: (38)
  39. (37) группа

    Ответы: (39)
  40. (38) ааа, ну тады в (36) не рабочий вариант. Если, канеш не нужен самый последний док на один элемент из группы. По которому есть остатки партии. И если ВыбЗнач это группа - то не 1, а 2 последний параметр в фильтре.

    Ответы: (40)
  41. (39) Внимательно читай (0). [smile=:P]

    PS А про нерабочий вариант - в институте было. Лаба по БД. Сначала полчаса лаборант разглядывал и выступал, что "оно не может работать". Потом препода позвал. Препод через пару минут выдал "Не рабочий вариант"... Короче, я попросилась уйти (40 минут однако). Пятерку поставили [smile=:P]

    Ответы: (41)
  42. 23.10.2014 12:13:33 отредактировано Идун

    (40) партии автоматически списываете по фифо, или партию можно ручками выбирать?
    Не рабочий - томушто если группа, то и партии и последний док, для элементов в группе, могут быть разные. Или я не понял что таки нужно. И зачем.

  43. (36) почему же ... Будут ...
    -image-

  44. (36) я это тебе еще в посте №1 предложил

    Ответы: (44)
  45. (43) Не понятно предложил :)

  46. (36) а чем отличается от (7)? кроме того, у вас нет указания, на какую дату рассчитывать итоги...вообще, судя по задаче, у вас довольно низкая квалификация как алгоритмиста, так и кодировщика, нет ни знаний 7.7, ни 8.х....

    Ответы: (46)
  47. (45) Судя по постам на данном форуме и отзывах бывалых, вы отличаетесь умом и сообразительностью... Умом и сообразительностью...

    На рабочем месте занимайся квалификацией.

    Ответы: (47)
  48. (46) отзывы бывалых...вообще ни с кем никогда не имел дел и не сотрудничал...есть только оскорбления, которые обычно в глаза сказать не решаться...потому, милочка, за базар отвечать придется...а так да...

    Ответы: (48)
  49. (47) Отвечай.

    Ответы: (49)
  50. (48) так я вас не оскорблял...я никого не называю дебилом, свиньей, не говорю, что кто-то несет бред...а сказал лишь о том, что задача решается за 5 минут безо всякого флуда...

или зарегистрируйтесь чтобы ответить!