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

Новичок!!!! Товары на складе

Автор MevMix, 21 фев 2011, 22:39

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

MevMix

Добрый день
В 1С программирую совсем недавно.
Хотел спросить Вас
хочу создать простейшую конфигурация "Товар на складе"
Справочники : Клиент, Склад, Номенклатура
Документы: РеализаяТоваров, ПоступлениеТоваров

Регистры, вот тут сложновато
Какие надо регистры создать, для отображения товара на складе и учет его продаж,
ну если пришло 10, то и продать 10, а не 11
Хотелось бы так же чтоб количество отображалось в справочнике Номенклатура

Может у кого есть примерчик поделиться или подсказать как решить вопрос?

Всем буду очень признателен и благодарен

cska-fanat-kz

Регистр остатков ТоварыНаСкладе
Измерения: Номенклатура, Склад
Ресурсы: Количество, Сумма

Регистр оборотов Продажи
Измерения: Номенклатура, Клиент
Ресурсы: Количество, Сумма

Проверка остатка: в процедуре ОбработкаПроведения документа РеализацияТовара.

Для добавления колонки КоличествоНаСкладе надо настраивать ФормуСписка справочника Номенклатура.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Sinsinmin

Есть книженция Радченко "Практическое руководство разработчика". Очень отлично подходит для новичка.

cska-fanat-kz

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

MevMix

Сделал оба регистра, делал по примеру книги Радченко, но что то не работает, документы проводит, но приход -10 расход 15 и все оК
даже не ругнеться!!!
Вот прилагаю код



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

   ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
   
   Пока ВыборкаРезультатаЗапроса.Следующий() Цикл
       Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        Остаток = ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0, ВыборкаРезультатаЗапроса.КоличествоОстаток);
          Если Остаток < ВыборкаРезультатаЗапроса.Количество Тогда
            Сообщить("Материала " + СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура)
               + " имеется только " + Остаток);
             Отказ = Истина;
             Возврат;
          КонецЕсли;
       КонецЕсли;
      
// Сформировать движения.
      Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда
   
          // Регистр ОстаткиМатериалов Расход.
       Движение             = Движения.ОстаткиМатериалов.Добавить();
       Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
       Движение.Период      = Дата;
       Движение.Материал    = ВыборкаРезультатаЗапроса.Номенклатура;
       Движение.Склад       = Склад;
       Движение.Количество  = ВыборкаРезультатаЗапроса.Количество;
        
      // Регистр Продажи.
      Движение              = Движения.Продажи.Добавить();
      Движение.Период       = Дата;
      Движение.Номенклатура = ВыборкаРезультатаЗапроса.Номенклатура;
      Движение.Клиент       = Клиент;
      Движение.Количество   = ВыборкаРезультатаЗапроса.Количество;
            
      КонецЕсли;
         
  КонецЦикла;
  Движения.ОстаткиМатериалов.Записать();
  Движения.Продажи.Записать();

Klyacksa

Ну как минимум, перед строчкой
ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
надо поставить
КонецЕсли;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

Точку останова вот сюда
"Если Остаток < ВыборкаРезультатаЗапроса.Количество Тогда"
и проверяйте себе чему у вас Остаток и ВыборкаРезультатаЗапроса.Количество равны.

Плюс еще режим проведения проверьте.

Вот эти строки рекомендуется убрать
"Движения.ОстаткиМатериалов.Записать();
Движения.Продажи.Записать();"

Вопрос на засыпку, над которым сам как-то сломал голову ;)
Что будет если в табличной части будет НЕСКОЛЬКО строк одной и той же номенклатуры?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Еще вопрос:
зачем Вам вот это
"|      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
                   |            &МоментВремени,
                   |            Номенклатура В (&СписокНоменклатурыДокумента)
                   |               И Склад = &СкладВДокументе) КАК ОстаткиМатериаловОстаткиНаСкладе
                   |      ПО РеализацияТоваровПереченьНоменклатуры.Номенклатура = ОстаткиМатериаловОстаткиНаСкладе.Номенклатура"

если Вы этим не пользуетесь?
Хотя по логике этой таблицей и надо пользоваться.
То есть таблицей остатка по конкретному складу...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Sinsinmin

Лучший способ проведения простых документов это добавить на форму табличную часть которой присвоить типзначения РегистрПроведенияДокумента. В документе поставить запрет проведения и по позициирегистратора в пределах года. И вуаля. Вы будете добавлять данные сразу в регистр. Обычно если два или один регистр, то так и делаю.

cska-fanat-kz

Ага. Взять удалить все документы. Создать один - РучноеРедактированиеРегистра.
И заполнять только его. И вуаля.

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск