Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
19 Дек 2017, 01:28
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: 1С 8.2: Как сделать контроль остатков?  (Прочитано 15975 раз)

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

Оффлайн Logos300

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-31
  • Сайт: 
  • Профессия: Ученик 1С
Всем привет! Сразу говорю, я полный новичок в 1С !
Ситуация следующая...
Пишу конфигурацию на 1С 8.2.
Есть там документ "ПриходнаяНакладная", в нем табличная часть "Товары" с реквизитами: Товар и Количество.
Планируется, что юзер будет вводить ПриходныеНакладные с приходом партий товаров из номенклатуры, то есть фактически - начальные остатки товаров. Также есть документ "ОплатаВКассу", регистрирующий продажу товаров через регистр накопления (статья "Расход").
Вопрос: как сделать так, чтобы нельзя было продать больше того количества товаров из номенклатуры, которое в данный момент есть на складе?
Ответьте, пожалуйста, как можно развёрнутее... Потому что я ну полнейший новичок :)))


Оффлайн Besart

  • *****
  • Сообщений: 678
  • РЕПУТАЦИЯ: 142
  • КПД: 21%
  • Регистрация: 2012-12-10
    • Skype: artfa.a
  • Компания: Фрилансер
  • Профессия: Программист 8.1
суть в том что вы должны запросом саравнить остатки с количеством из документа в котором спысываете товар, в процедуре обработка проведения
Движения.РегистрБухгалтерии1.Очистить();
Движения.РегистрБухгалтерии1.Записать();
Запрос= Новый Запрос ( "ВЫБРАТЬ
                       | Товары.Количество КАК КолДок,
                       | Товары.Сумма КАК СуммаДок,
                       | Товары.НомерСтроки,
                       | Товары.Номенклатура,
                       | ЕСТЬNULL(РегистрБухгалтерии1Остатки.СуммаОстатокДт, 0) КАК СуммаДт,
                       | ЕСТЬNULL(РегистрБухгалтерии1Остатки.КоличествоОстатокДт, 0) КАК КолДт
                       |ИЗ
                       | (ВЫБРАТЬ
                       | СУММА(РасходнаяТовары.Количество) КАК Количество,
                       | СУММА(РасходнаяТовары.Сумма) КАК Сумма,
                       | МАКСИМУМ(РасходнаяТовары.НомерСтроки) КАК НомерСтроки,
                       | РасходнаяТовары.Номенклатура КАК Номенклатура
                       | ИЗ
                       | Документ.Расходная.Товары КАК РасходнаяТовары
                       | ГДЕ
                       | РасходнаяТовары.Ссылка = &Ссылка
                       |
                       | СГРУППИРОВАТЬ ПО
                       | РасходнаяТовары.Номенклатура) КАК Товары
                       | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.РегистрБухгалтерии1.Остатки(
                       | &Момент,
                       | Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСЧетов1.Товары),
                       | ,
                       | Субконто1 В
                       | (ВЫБРАТЬ РАЗЛИЧНЫЕ
                       | РасходнаяТовары.Номенклатура
                       | ИЗ
                       | Документ.Расходная.Товары КАК РасходнаяТовары
                       | ГДЕ
                       | РасходнаяТовары.Ссылка = &Ссылка)
                       | И Организация = &Организация) КАК РегистрБухгалтерии1Остатки
                       | ПО Товары.Номенклатура = РегистрБухгалтерии1Остатки.Субконто1" );
   
Запрос.УстановитьПараметр("Момент", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Организация", Организация);


Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

Нехватка = Выборка.КолДок - Выборка.КолДт;
Если Нехватка>0 Тогда

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товара "+Выборка.Номенклатура+" недостаточно в количестве" +Нехватка;
Сообщение.Поле = "Товары["+(Выборка.НомерСтроки-1)+"].Количество";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ=Истина;

КонецЕсли;

Если Отказ Тогда

Продолжить;

КонецЕсли;
Движение = Движения.РегистрБухгалтерии1.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов1.Себестоимость;
Движение.СчетКт = ПланыСчетов.ПланСчетов1.Товары;
Движение.Период = Дата;
Движение.Организация=Организация;
        Движение.КоличествоКт = Выборка.КолДок;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Товары] = Выборка.Номенклатура;
Если Выборка.КолДт<>0 Тогда
Движение.Сумма = Выборка.КолДок * Выборка.СуммаДт/Выборка.КолДТ;

Иначе
Движение.Сумма=0;

КонецЕсли;
Если НЕ Отказ Тогда

Движения.РегистрБухгалтерии1.Записывать=Истина;

Движение = Движения.РегистрБухгалтерии1.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов1.Покупатели;
Движение.СчетКт = ПланыСчетов.ПланСчетов1.Выручка;
Движение.Период = Дата;
Движение.Организация=Организация;
Движение.Сумма = Товары.Итог("Сумма");
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;

КонецЕсли;


КонецЦикла;


указанный код сложнее чем вам нужно, так как остатки сранвиваются по регистру бухгалтерии

Оффлайн Logos300

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-31
  • Сайт: 
  • Профессия: Ученик 1С
Можно я конкретизирую? :)))

1.Есть документ "ПриходнаяНакладная" (Отражает поступление товаров).
У него есть реквизит "Склад".
Также у документа есть табличная часть "Товары" с реквизитами:
"Товар", "Количество".

2.Есть документ "ОплатаВКассу" (отражает продажу, расход, товаров).
У документа есть реквизиты: "Склад", "Кассир".
Также есть табличная часть "ПереченьНоменклатуры" с реквизитами:
"Номенклатура", "Количество", "Цена", "Сумма".

3. Есть регистр накопления "ТоварыНаСкладе" (В нем отражается приход и расход товаров). У этого регистра есть измерения "Товар", "Склад" и ресурс "Количество".

Исходя из ЭТОЙ информации, какой код мне нужно набить?
Повторюсь: Я полнейший новичок.

Оффлайн Besart

  • *****
  • Сообщений: 678
  • РЕПУТАЦИЯ: 142
  • КПД: 21%
  • Регистрация: 2012-12-10
    • Skype: artfa.a
  • Компания: Фрилансер
  • Профессия: Программист 8.1
запросом выбираете товар из документа "Оплата в кассу" и количество из регистра накопления  "ТоварыНаСкладе", а потом сравниваете их количество, в случае нехватки товара запрещаете проведение документа "Оплата в кассу", елси это непонятно то вам необходимо изучить запросы и проведение документов

Оффлайн Logos300

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-31
  • Сайт: 
  • Профессия: Ученик 1С
Вот я кое-что набросал в процедуре проведения документа "ОплатаВКассу", но при проверке никаких сообщений не выдается и записей в регистр не делается:

&Клиент
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   

//Контроль остатков

   Движения.ТоварыНаСкладе.Записывать=Истина;
   Движения.РеализацияУслуг.Записывать=Истина;


Запрос=Новый Запрос;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

Запрос.УстановитьПараметр("Количество", Количество);

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
Сообщение=Новый СообщениеПользователю();
Сообщение.Текст=Строка(-ВыборкаДетальныеЗаписи.Количество)+
" товара """+ВыборкаДетальныеЗаписи.Номенклатура+""" не хватает на складе!";
Сообщение.Сообщить();
Отказ=Истина;

// регистр ТоварыНаСкладе Расход
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Товар
Тогда

Движение = Движения.ТоварыНаСкладе.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
Движения.Записать();

КонецЕсли;
КонецЦикла;

// регистр РеализацияУслуг Расход
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Услуга
Тогда

Движение = Движения.РеализацияУслуг.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Кассир=Кассир;
Движение.Услуга=ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Сумма;
                            Движения.Записать();

КонецЕсли;
КонецЦикла;

КонецЦикла;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


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

Можете помочь? :)))


Теги:
 

Отчеты "Ведомость ОС, НМА" и "Ведомость остатков материалов"

Автор OlegatorOGРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 2612
Последний ответ 04 Апр 2015, 06:15
от OlegatorOG
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2058
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Добрый день Необходимо на основании типовой конфигурации бухгалтерии сделать обработку, которая будет переносить остатки со счета расчетов 62.01 с одной организации в документ ввода начальных

Автор ZSSРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 228
Последний ответ 18 Авг 2017, 11:57
от ZSS
Как "Наименование" сделать числом

Автор zedikusРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 1747
Последний ответ 24 Авг 2015, 06:26
от cska-fanat-kz
Добрый вечер! Прошу помочь, кто знает, подскажите пож. В счете не выводит грузоотправителя и грузополучаетля. Куда их внести ? Как сделать что бы выводило ? У меня 1с 8.3 редакция 11.1 управление торговлей Спасибо!

Автор Farid GasimliРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 1985
Последний ответ 07 Фев 2016, 14:34
от pavl_vs

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
133 Сообщений
AIFrame
73 Сообщений
alex0402
52 Сообщений
ilyay ilyay
51 Сообщений
andron81_81
44 Сообщений
oleg-x
35 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

  • Точка Гостей: 220
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal