Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 09:02

Расход\Приход 8.0

Автор warshadow, 24 фев 2011, 19:42

0 Пользователей и 1 гость просматривают эту тему.

warshadow

Добрый день! Начал не так давно программировать в 1С 8.0, наткнулся на такую трудность - у меня есть 2 документа (Приход Документа и Расход Документа), при проведении документов сведения добавляются в Регистр Накоплений и отображаются там, мне надо реализовать следующую вещь, например:
Пришло количество 8 книг
Списал 9 книг
Чтобы не давало списать большее количество, чем есть, т.е пришло 8, могу списать 123..8.
Регистр Накопления один для всех.
Попытался в модуле расхода документа добраться до прихода документа реквизита количество:
ТаблицаТоваровДокумента =Документы.ПоступлениеКнигОтИздательства.ПолучитьСсылку().ТаблПоступлКниг.Добавить().Количество;
и сделать такое условие:
Если ТекСтрокаТаблРеализКниКонтр.Количество <  ТаблицаТоваровДокумента Тогда
Сообщить("Списать не возможно, т.к недопустимое количество ",СтатусСообщения.Важное);
Отказ= Истина;
КонецЕсли;

Начал отлаживать, и оказалось, что выдает 0 в ТаблицаТоваровДокумента.
Далее попробывал по регистру накопления:
Движения=РегистрыНакопления.ПоступлениеРеализацияСписаниеКниг.ВыбратьПоРегистратору("ПоступлениеКнигОтИздательства).Количество;
Тут вообще не работает.
Подскажите мне пожалуйста, как это можно реализовать.

cska-fanat-kz

Остаток на время документа узнаешь запросом, например таким:

ВЫБРАТЬ
   ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИЗ
   РегистрНакопления.ОстаткиНоменклатуры.Остатки(&парамДата, Номенклатура = &парамНоменклатура) КАК ОстаткиНоменклатурыОстатки


Но если быть точным запрос гораздо сложнее.
Запрос к табличной части документа Расхода левым соединением соединяешь с виртуальной таблицей остатков регистра накопления...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

warshadow

ЦитироватьЗапрос к табличной части документа Расхода левым соединением соединяешь с виртуальной таблицей остатков регистра накопления...
А можно поподробнее как сделать левым соединением?

cska-fanat-kz

Примерно так (несколько упрощенно). На документ - ПриходнаяНакладная - не обращайте внимания ;) поменяйте на свое название

ВЫБРАТЬ
   ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
   ПриходнаяНакладнаяСписокНоменклатуры.Количество КАК КоличествоПоДокументу,
   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоНаСкладе
ИЗ
   Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
      ПО ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
ГДЕ
   ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

warshadow

Я так понимаю,что у меня будет так:

Запрос = Новый Запрос(
"ВЫБРАТЬ
  | ПоступлениеКнигОтИздательстваСписокНоменклатуры.Номенклатура,
  | ПоступлениеКнигОтИздательстваСписокНоменклатуры.Количество КАК КоличествоПоДокументу,
  | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоНаСкладе
  | ИЗ
  | Документ.ПоступлениеКнигОтИздательства.СписокНоменклатуры КАК ПоступлениеКнигОтИздательстваСписокНоменклатуры
  |    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПоступлениеРеализацияСписаниеКниг.Остатки КАК ОстаткиНоменклатурыОстатки
  |    ПО ПоступлениеКнигОтИздательстваСписокНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
  | ГДЕ
  | ПоступлениеКнигОтИздательстваСписокНоменклатуры.Ссылка = &Ссылка");

Если честно, я не очень в этом понимаю..
У меня нету номенклатуры и склада.
Документы: ПоступлениеКнигОтИздательства
РегистрНакполения: ПоступлениеРеализацияСписаниеКниг
Номенклатура: СписокКниг



cska-fanat-kz

Еще документа не хватает...
Который делает "РеализацияСписание".
А может даже и двух... ("Реализация" и "Списание")
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

warshadow

а, просто не дописал, извините (
Документы:
ПоступлениеКнигОтИздательства (приход)
РеализацияКнигКонтрагенту (расход)
СписаниеКниг (расход)

РегистрНакопления: ПоступлениеРеализацияСписаниеКниг (все 3 регистратора в нем)


cska-fanat-kz

Что-то вроде:
Справочник - Книги
Документы - ПоступлениеКнигОтИздательства, РеализацияКниг, СписаниеКниг
РегистрНакопления - ДвижениеКниг.

И вот в моем запросе мою ПриходнуюНакладную надо заменить на гипотетическую РеализациюКниг (читай - документ, выполняющий РАСХОД!)
А уж никак не на ПоступлениеКнигОтИздательства...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

warshadow

Вот что вышло, вроде я так понимаю:
Запрос = Новый Запрос(
    "ВЫБРАТЬ
  | РеализацияКнигКонтрагентуТаблРеализКниКонтр.НаименованиеКниги,
  | РеализацияКнигКонтрагентуТаблРеализКниКонтр.Количество КАК КоличествоПоДокументу,
  | ЕСТЬNULL(ТаблРеализКниКонтрОстатки.КоличествоОстаток, 0) КАК КоличествоНаСкладе
  |      ИЗ
  | Документ.РеализацияКнигКонтрагенту.ТаблРеализКниКонтр КАК РеализацияКнигКонтрагентуТаблРеализКниКонтр
  |    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПоступлениеРеализацияСписаниеКниг.Остатки КАК ТаблРеализКниКонтрОстатки
  |    ПО РеализацияКнигКонтрагентуТаблРеализКниКонтр.НаименованиеКниги = ТаблРеализКниКонтрОстатки.НаименованиеКниги
  |   ГДЕ
  | РеализацияКнигКонтрагентуТаблРеализКниКонтр.Ссылка = &Ссылка");
 
  Результат = Запрос.Выполнить();

Ругается на РеализацияКнигКонтрагентуТаблРеализКниКонтр.Ссылка = &Ссылка, на ссылку

cska-fanat-kz

Ну естественно параметр запроса должен быть задан )
Перед

Результат = Запрос.Выполнить();

пишем

Запрос.УстановитьПараметр("Ссылка",Ссылка);
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:
Рейтинг@Mail.ru

Поиск