8.х Простейшая конфигурация "Товары на складе"

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем MevMix, 21 фев 2011.

  1. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

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

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

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

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

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Практическое пособие разработчика (Радченко) не подойдет?
  3. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Пробовал по ней создать пример, но что то не получается сделать

    1. Отображения количества товара в справочнике номенклатура
    2. С регистром трабла, достаточно ли одного, допустим ОстаткиТоваров
    3. Ну и трабла с Запросом проведения РеализацияТоваров, неоперативное и опретивное
  4. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Это там не реализовано.
    Тут все зависит от того, что вы хотите получить в итоге.
    Не понятно что не получается.

    P.S. Вы начните делать, а с то, что конкретно не получается, спросите. А то слишком уж общий вопрос.
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    А зачем отображать количества товара в справочнике номенклатура?
  6. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Не получается
    1. Отобразить количество товара в с правочнике НОМЕНКЛАТУРА, форму списка создал добавил поле Количество, в книге радченко есть процедура
    Код:
    Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    // Для элементов отобразим цену,
    Если Не ДанныеСтроки.ЭтоГруппа тогда
    ОтборНоменклатуры = Новый Структура;
    ОтборНоменклатуры.Вставить("Номенклатура", ДанныеСтроки.Ссылка);
    ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
    АктуальнаяЦена = РегистрыСведений.Цены.ПолучитьПоследнее( , ОтборНоменклатуры).Цена;
    ОформлениеСтроки.Ячейки.Цена.Текст = АктуальнаяЦена;
    
    
    // низкие цены выделим другим цветом,
    Если АктуальнаяЦена<500 тогда
    ОформлениеСтроки.Ячейки.Цена.ЦветТекста = WEBЦвета.Васильковый;
    КонецЕсли;
    
    // и раздвинем строку если длинное наименование.
    Если СтрДлина(СокрЛП(ДанныеСтроки.Наименование))>30 Тогда
    ОформлениеСтроки.Ячейки.Наименование.АвтоВысотаЯчейки = Истина;
    ОформлениеСтроки.Ячейки.Наименование.ВысотаЯчейки     = 3;
    КонецЕсли;  
    КонецЕсли;	
    КонецПроцедуры
    
    
    
    Как тут отобразить количество????


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

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Код:
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
    Остаток = ? (ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0,
    ВыборкаРезультатаЗапроса.КоличествоОстаток);
    Если Остаток < ВыборкаРезультатаЗапроса.Количество Тогда
    Сообщить("Материала " + СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура) + " имеется только " 
    + Остаток);
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    Как раз это и должо отслеживать количество товара при оперативном проведении.
    Время на которое отслеживается задается параметром:
    Код:
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); // момент времени когда проводим
    
    Возможно, вас не устраивает проверка наличия на складе при неоперативном проведении.
    Тогда, как мне кажется, можно сделать аналогичную проверку, но задать параметр как-то так:
    Код:
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); // момент времени когда проводим
    Иначе
    Запрос.УстановитьПараметр("МоментВремени", Ссылка.Дата); // момент времени когда проводим
    
    
  8. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Не рекомендуется использовать справочник для хранения остатков, при проведении документа придётся блокировать всю номенклатуру для перезаписи, а если позиция открыта другим пользователем, то документ провести не удастся. Для хранения необходимо завести регистр накопления "Остатки номенклатуры". Регистр остатков будет фиксировать остаток товара на складе и при проведении формируем дасход по регистру.
  9. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Да в справочнике и хранить не хочу, просто хочу увидеть количество товара на складе
  10. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    С проведением документов разобрался, не там стоял один из КонецЕсли;

    Но вопрос с отображением количества товара в справочнике НОМЕНКЛАТУРЫ

    как сделать

    Код:
     Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    // Для элементов отобразим цену,
    Если Не ДанныеСтроки.ЭтоГруппа тогда
    ОтборНоменклатуры = Новый Структура;
    ОтборНоменклатуры.Вставить("Номенклатура", ДанныеСтроки.Ссылка);
    ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
    АктуальнаяЦена = РегистрыСведений.Цены.ПолучитьПоследнее( , ОтборНоменклатуры).Цена;
    ОформлениеСтроки.Ячейки.Цена.Текст = АктуальнаяЦена;
    
    
    // низкие цены выделим другим цветом,
    Если АктуальнаяЦена<500 тогда
    ОформлениеСтроки.Ячейки.Цена.ЦветТекста = WEBЦвета.Васильковый;
    КонецЕсли;
    
    // и раздвинем строку если длинное наименование.
    Если СтрДлина(СокрЛП(ДанныеСтроки.Наименование))>30 Тогда
    ОформлениеСтроки.Ячейки.Наименование.АвтоВысотаЯчейки = Истина;
    ОформлениеСтроки.Ячейки.Наименование.ВысотаЯчейки     = 3;
    КонецЕсли;  
    КонецЕсли;	
    КонецПроцедуры
    
    что в ней добавить или изменить для отображения количества на складе

Поделиться этой страницей