Имя: Пароль:
1C
 
как проверить товар, на выводимые сообщения при проведении документа
0 falselight
 
27.07.16
15:11
Конфигурация Розница.

При проведении поступления товаров выходят сообщения, на товар в табличной части:

Инвентарный товар (563) уже присутствует на складе ООО 40б. Повторное оприходование невозможно.

При проведении документа отчет о розничных продажах выходят сообщения, типа:

Номенклатура IM
Превышен сводный остаток на складе ООО ,  на 1 шт.

При проведении данных документов в обработке, как можно получая номенклатуру узнавать

- Присутствует ли она на складе, если да что бы удалить из табличной части документа. Что бы это не мешало проведению?
- И превышает ли она свободный остаток, что бы её оприходовать заранее, для корректного проведения документа?

Эти сообщения выводятся при проведении. Но получая номенклатуру из тч, как это определить? Есть специальные функции?
1 Поросенок Петр
 
27.07.16
15:25
А откуда взялись документы с лишними товарами в тч?
2 arccos6pi
 
27.07.16
15:34
(0) нужно просто поставить учет нормально
3 FIXXXL
 
27.07.16
17:11
(0) ну глянь как проверяется номенклатура при проведении, откуда сообщения сыпятся
4 falselight
 
28.07.16
08:12
(3) а где вероятнее всего это может быть?

Начал смотреть обработку проведения в модуле документа.
5 Горогуля
 
28.07.16
08:15
откуда запятая взялась в заголовке? ну нельзя же их ставить рандомно, я верю в людей
6 falselight
 
28.07.16
08:24
по тексту сообщения нащел в одном модуле эту процедуру, которая формирует сообщения
7 Горогуля
 
28.07.16
08:26
(6) уже поздравлять?
8 Горогуля
 
28.07.16
08:26
>При проведении данных документов в обработке, как можно получая номенклатуру узнавать
извини меня, но русский язык - это не твоё
9 falselight
 
28.07.16
09:02
Как у проведенного документа может быть, проведение=Истина???
Пробую на одном документе. Он не проведет. При проведении
заходит в процедуру где формируются эти сообщения. Но там проверяются Источник.Движения.ТоварыНаСкладах. От куда у него движения если он не проведен в тч. Хотя по свойствам проведен.
Когда программно провлжу документ, он то точно не проведет. И движений нет, по этому как его можно проверить?????
От куда движения у этого не проведеного документа?
10 falselight
 
28.07.16
09:02
(9) Как у НЕ проведенного документа может быть, проведение=Истина???
11 Горогуля
 
28.07.16
09:03
(10) проведён - это такая галка в БД
(9) это просто чудо
12 vicof
 
28.07.16
09:09
(11) Это не чудо, это @Livingstar
13 falselight
 
28.07.16
09:18
почему то именно в этой процедуре можно передать параметром
в запрос движения документа, и он значится как проведенный
но на самом деле он не проведен, и когда я вызываю эту процедуру из обработки, так же ничего не выбирается

Процедура ВыполнитьКонтрольОстатковИнвентарныхТоваров(Источник, Отказ, РежимПроведения) Экспорт
    
    // Формируем шаблон сообщения об ошибке
    ШаблонСообщения = НСтр("ru = 'Инвентарный товар %1 уже присутствует на складе %2. Повторное оприходование невозможно.'");
    
    // При оприходывании инвентарного товара на склад необходимо проверить, а не имеется ли он уже на складе
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    ДвиженияТоварыНаСкладах.ВидДвижения,
    |    ДвиженияТоварыНаСкладах.Склад,
    |    ВЫРАЗИТЬ(ДвиженияТоварыНаСкладах.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
    |    ВЫРАЗИТЬ(ДвиженияТоварыНаСкладах.Характеристика КАК Справочник.ХарактеристикиНоменклатуры) КАК Характеристика,
    |    ДвиженияТоварыНаСкладах.Количество
    |ПОМЕСТИТЬ ДвиженияТоварыНаСкладах
    |ИЗ
    |    &ТоварыНаСкладах КАК ДвиженияТоварыНаСкладах
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ДвиженияТоварыНаСкладах.Номенклатура,
    |    ДвиженияТоварыНаСкладах.Характеристика
    |ПОМЕСТИТЬ ТаблицаПоТоварам
    |ИЗ
    |    ДвиженияТоварыНаСкладах КАК ДвиженияТоварыНаСкладах
    |ГДЕ
    |    ДвиженияТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    |    И ДвиженияТоварыНаСкладах.Номенклатура.ВидНоменклатуры.ор_ИнвентарныйУчет
    |    И НЕ ДвиженияТоварыНаСкладах.Характеристика = Значение(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ДвиженияТоварыНаСкладах.ВидДвижения,
    |    ДвиженияТоварыНаСкладах.Склад,
    |    ДвиженияТоварыНаСкладах.Номенклатура,
    |    ДвиженияТоварыНаСкладах.Характеристика,
    |    ДвиженияТоварыНаСкладах.Количество
    |ИЗ
    |    ДвиженияТоварыНаСкладах КАК ДвиженияТоварыНаСкладах
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТаблицаПоТоварам.Номенклатура,
    |    ТаблицаПоТоварам.Характеристика
    |ИЗ
    |    ТаблицаПоТоварам КАК ТаблицаПоТоварам
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Склад,
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ТоварыНаСкладахОстатки.Характеристика,
    |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    |    ТаблицаПоТоварам КАК ТаблицаПоТоварам
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
    |                ,
    |                (Номенклатура, Характеристика) В
    |                    (ВЫБРАТЬ
    |                        ТаблицаПоТоварам.Номенклатура,
    |                        ТаблицаПоТоварам.Характеристика
    |                    ИЗ
    |                        ТаблицаПоТоварам КАК ТаблицаПоТоварам)) КАК ТоварыНаСкладахОстатки
    |        ПО ТаблицаПоТоварам.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    |            И ТаблицаПоТоварам.Характеристика = ТоварыНаСкладахОстатки.Характеристика
    |ГДЕ
    |    ТоварыНаСкладахОстатки.КоличествоОстаток > 1";
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("ТоварыНаСкладах", Источник.Движения.ТоварыНаСкладах);
    
    // Выполняем запрос и информируем пользователя о найденных ошибках
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            ШаблонСообщения,
            ФормированиеПечатныхФормСервер.ПолучитьПредставлениеНоменклатурыДляПечати(Выборка.Номенклатура, Выборка.Характеристика),
            Строка(Выборка.Склад)
        );
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Источник,,, Отказ);
        
    КонецЦикла;
    
КонецПроцедуры // ВыполнитьКонтрольОстатковИнвентарныхТоваров()
14 falselight
 
28.07.16
09:20
(13+)  это можно сделать только при записи документа
вызывая это из обработки у документа нет никаких движений
15 Горогуля
 
28.07.16
09:22
(12) опять? да сколько ж можно?
16 mehfk
 
28.07.16
09:22
(12) Если это действительно Livingstar, то за время, пока его не было на мисте он значительно деградировал.
17 Горогуля
 
28.07.16
09:22
18 falselight
 
28.07.16
09:26
вызывается эта процедура (13) подпиской на событие обработка проведения, и там есть движения документа, как это можно использовать из обработки?
19 Lexey_
 
28.07.16
09:29
(16) да, это он. "за время, пока его не было" он был:  1cstudy
20 mehfk
 
28.07.16
09:30
(19) В курсе. Но его уже тоже относительно давно забанили.
21 mehfk
 
28.07.16
09:32
Может он как проколотое колесо? Если его не подкачивать, то сдувается до нуля :)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан