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

Автор Тема: резервирование товаров  (Прочитано 1138 раз)

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

Оффлайн gaara2046

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-09-06
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день помогите разобраться с задачей: Прописать проведение документа "ПродажаТоваров" по регистру "РезервыНоменклатуры". Необходимо списывать с набора измерений "Номенклатура", "Склад" и "ПоСчету" указанное в табличной части "Товары" количество товара. Кроме того, предусмотрите случаи:
1. когда документ "ПродажаТоваров" вводиться вообще без счет в основании;
2. когда пользователь в документе "ПродажаТоваров" поставил количество большее, чем в счете.
Нельзя при этом списывать с резерва больше, чем зарезервировали под наш документ!
Интересует пункт 2. Пытался написать запрос вот что получилось:
Движения.ОстаткиНоменклатуры.Записывать = Истина;
    //Движения.СвободныеОстатки.Записывать = Истина;
    Движения.РезервыНоменклатуры.Записывать = Истина;
   
    Для Каждого ТекСтрокаТовары Из Товары Цикл     
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |   РезервыНоменклатурыОстатки.Номенклатура,
        |   РезервыНоменклатурыОстатки.РезервОстаток
        |ИЗ
        |   РегистрНакопления.РезервыНоменклатуры.Остатки(&МоментВремени, Номенклатура = &Номенклатура) КАК РезервыНоменклатурыОстатки";
        Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
        Запрос.УстановитьПараметр("Номенклатура", ТекСтрокаТовары.Номенклатура);
       
        Результат = Запрос.Выполнить().Выбрать();   
        Пока Результат.Следующий()Цикл
            Если ТекСтрокаТовары.Количество > Результат.РезервОстаток Тогда
             Сообщить ("Вы берете слишком много");
            Отказ=Истина;
            КонецЕсли;
            КонецЦикла;
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр ОстаткиНоменклатуры Расход
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Склад = Склад;
        Движение.Количество = ТекСтрокаТовары.Количество;
        Движение.Сумма = ТекСтрокаТовары.Сумма;
    КонецЦикла;
 
    // регистр Продажи
    Движения.Продажи.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Контрагент = Контрагент;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Количество = ТекСтрокаТовары.Количество;
        Движение.Сумма = ТекСтрокаТовары.Сумма;
    КонецЦикла;
 
    // регистр РезервыНоменклатуры Расход
    Движения.РезервыНоменклатуры.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.РезервыНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Склад = Склад;
        Движение.ПоСчету = Счет;
        Движение.Резерв = ТекСтрокаТовары.Количество;
    КонецЦикла;
    КонецЦикла;
 
 
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
Документ не проводится во всех случаях.Версия 1С 8.2


Оффлайн Artem6237

  • *
  • Сообщений: 21
  • РЕПУТАЦИЯ: 1
  • КПД: 5%
  • Регистрация: 2015-08-15
  • Сайт: 
  • Профессия: Программист 1С
Возможно у вас нет остатков по нужной позиции номенклатуры. Т.к. виртуальная таблица остатки не хранит нулевых остатков, то и результат запроса может быть пустой и выборка не обходится. Попробуйте сделать условие на пустоту результата, а вообще запрос  в цикле - не самое производительное решение.

Оффлайн gaara2046

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-09-06
  • Сайт: 
  • Профессия: Ученик 1С
Возможно у вас нет остатков по нужной позиции номенклатуры. Т.к. виртуальная таблица остатки не хранит нулевых остатков, то и результат запроса может быть пустой и выборка не обходится.
Значит надо в запросе еще и виртуальную таблицу создавать?У меня не было создана она

Оффлайн Artem6237

  • *
  • Сообщений: 21
  • РЕПУТАЦИЯ: 1
  • КПД: 5%
  • Регистрация: 2015-08-15
  • Сайт: 
  • Профессия: Программист 1С
Как вариант, попробуйте получить всю номенклатуру по табличной части и левым соединением присоединить остатки. NULL привести к нулю.  И далее уже в обходе выборки делать условие на достаточность товара.

Оффлайн gaara2046

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-09-06
  • Сайт: 
  • Профессия: Ученик 1С
Как вариант, попробуйте получить всю номенклатуру по табличной части и левым соединением присоединить остатки. NULL привести к нулю.  И далее уже в обходе выборки делать условие на достаточность товара.
А я прошу прощения,а можно как то либо на примере,либо я вам вышлю свою базу и там покажите?Я в 1С ниже любителя))

Оффлайн Artem6237

  • *
  • Сообщений: 21
  • РЕПУТАЦИЯ: 1
  • КПД: 5%
  • Регистрация: 2015-08-15
  • Сайт: 
  • Профессия: Программист 1С
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяТовары.Номенклатура,
| СУММА(РасходнаяТовары.Количество) КАК Количество
|ПОМЕСТИТЬ ДокТЧ
|ИЗ
| Документ.Расходная.Товары КАК РасходнаяТовары
|ГДЕ
| РасходнаяТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДокТЧ.Номенклатура,
| ДокТЧ.Количество,
| ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток,0) КАК Остаток
|ИЗ
| ДокТЧ КАК ДокТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
| , 
|  Номенклатура В
| (ВЫБРАТЬ
| ДокТЧ.Номенклатура
| ИЗ
| ДокТЧ КАК ДокТЧ)) КАК ОстаткиТоваровОстатки
| ПО ДокТЧ.Номенклатура = ОстаткиТоваровОстатки.Номенклатура";

Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();

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

Оффлайн gaara2046

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-09-06
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо буду пробовать))
Добавлено: 06 Сен 2015, 20:30

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

Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();

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

Последний раз редактировалось: gaara2046; 06 Сен 2015, 20:30. Причина: Объединение сообщений


Теги:
 

Не заполняются колонки "Цена" и "Сумма" в отчете "Остатки товаров принятых на комиссию". УТ11

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

Ответов: 0
Просмотров: 477
Последний ответ 18 Янв 2017, 11:42
от VladimirMelnychenko
Перенос товаров из д-та "Поступление Т и У" в "Отчет о розничных продажах"

Автор Игорь ПолищукРаздел Пользователям "1С - Предприятие 8"

Ответов: 3
Просмотров: 5171
Последний ответ 01 Июн 2011, 16:31
от Eugeneer
Как добавить столбец "Номенклатура" в таблицу "Реализация товаров и услуг"

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

Ответов: 9
Просмотров: 9897
Последний ответ 19 Ноя 2012, 11:12
от Gunner
Не заполняется поле "Цена" при формировании документа "Пересчет товаров"

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

Ответов: 4
Просмотров: 1095
Последний ответ 29 Дек 2016, 09:54
от Innakecha
Отличие документа Поступление товаров и услуг от документа Поступление доп. расходов (УПП 1.2, версия программы 8.2)

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

Ответов: 0
Просмотров: 245
Последний ответ 12 Авг 2017, 21:32
от Prosto_Denis

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

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

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


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

* Реклама

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

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

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

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal