|
Как исключить повторное создание на основании того же документа | ☑ | ||
---|---|---|---|---|
0
VGKVSR
15.03.12
✎
13:10
|
Подскажите, пожалуйста, как исключить повторное создание на основании того же документа?
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда // Заполнение шапки Контрагент = ДанныеЗаполнения.Контрагент; Организация = ДанныеЗаполнения.Организация; Склад = ДанныеЗаполнения.Склад; Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Товары.Добавить(); НоваяСтрока.Количество = ТекСтрокаТовары.Количество; НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура; НоваяСтрока.Стоимость = ТекСтрокаТовары.Стоимость; НоваяСтрока.Цена = ТекСтрокаТовары.Цена; КонецЦикла; КонецЕсли; КонецПроцедуры Процедура ОбработкаПроведения(Отказ, Режим) // регистр ОстаткиТоваров Расход Движения.ОстаткиТоваров.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ОстаткиТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Организация = Организация; Движение.Склад = Склад; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; Движение.Стоимость = ТекСтрокаТовары.Стоимость; КонецЦикла; КонецПроцедуры |
|||
1
Лирик
15.03.12
✎
13:12
|
Как минимум хранить ссылку на основание
|
|||
2
Лирик
15.03.12
✎
13:13
|
И проверять наличие документов с ссылкой на основание равной ссылке того документа на основании которого хотим ввести.
|
|||
3
Grusswelle
15.03.12
✎
13:15
|
Дооо, регистр сведений вполне подойдёт для этого!
|
|||
4
VGKVSR
15.03.12
✎
15:20
|
Всем спасибо! Вот что получилось.
Универсальная обработка заполнения с контролем остатков. Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда // Заполнение шапки Контрагент = ДанныеЗаполнения.Контрагент; Организация = ДанныеЗаполнения.Организация; Склад = ДанныеЗаполнения.Склад; //Проверка остатков Отбор = Новый Структура; Отбор.Вставить("Склад",Склад); Отбор.Вставить("Организация",Организация); Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл Номенклатура = ТекСтрокаТовары.Номенклатура; Если Отбор.Свойство("Номенклатура") Тогда Отбор.Удалить("Номенклатура"); КонецЕсли; Отбор.Вставить("Номенклатура",Номенклатура); ТабЗнРег = РегистрыНакопления.ОстаткиТоваров.Остатки(,Отбор); Если ТабЗнРег.Количество() >0 Тогда КоличествоОстаток = ТабЗнРег[0].Количество; Иначе Продолжить; КонецЕсли; Если КоличествоОстаток >0 Тогда НоваяСтрока = Товары.Добавить(); КоличествоВСтроке = ТекСтрокаТовары.Количество; Если КоличествоВСтроке >КоличествоОстаток Тогда НоваяСтрока.Количество = КоличествоОстаток; Иначе НоваяСтрока.Количество = КоличествоВСтроке; КонецЕсли; НоваяСтрока.Номенклатура = Номенклатура; НоваяСтрока.Стоимость = ТекСтрокаТовары.Стоимость; НоваяСтрока.Цена = ТекСтрокаТовары.Цена; Иначе Продолжить; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
5
Fish
15.03.12
✎
15:24
|
Если Отбор.Свойство("Номенклатура") Тогда
Отбор.Удалить("Номенклатура"); КонецЕсли; Отбор.Вставить("Номенклатура",Номенклатура); Это пять :))) |
|||
6
Maxus43
15.03.12
✎
15:26
|
(5) ^)
|
|||
7
Maxus43
15.03.12
✎
15:26
|
:)
|
|||
8
VGKVSR
15.03.12
✎
17:10
|
То же самое запросом.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда Если ДанныеЗаполнения.Товары.Количество() =0 Тогда Сообщение = Новый СообщениеПользователю(); Текст = "Не заполнена табличная часть!"; Сообщение.Сообщить(); Иначе // Заполнение шапки Контрагент = ДанныеЗаполнения.Контрагент; Организация = ДанныеЗаполнения.Организация; Склад = ДанныеЗаполнения.Склад; Запрос = Новый Запрос("ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток КАК Остаток |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки( | , | Склад = &Склад | И Организация = &Организация | И Номенклатура В (&Номенклатура)) КАК ОстаткиТоваровОстатки"); Запрос.Установитьпараметр("Склад",Склад); Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("Номенклатура",ДанныеЗаполнения.Товары.ВыгрузитьКолонку("Номенклатура")); Результат = Запрос.Выполнить().Выгрузить(); Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл Номенклатура = ТекСтрокаТовары.Номенклатура; Если Результат.Количество() >0 Тогда СтрокаТаблицы = Результат.Найти(Номенклатура,"Номенклатура"); Если СтрокаТаблицы = неопределено Тогда Продолжить; КонецЕсли; КоличествоОстаток = СтрокаТаблицы.Остаток; Иначе Продолжить; КонецЕсли; Если КоличествоОстаток >0 Тогда НоваяСтрока = Товары.Добавить(); КоличествоВСтроке = ТекСтрокаТовары.Количество; Если КоличествоВСтроке >КоличествоОстаток Тогда НоваяСтрока.Количество = КоличествоОстаток; Иначе НоваяСтрока.Количество = КоличествоВСтроке; КонецЕсли; НоваяСтрока.Номенклатура = Номенклатура; НоваяСтрока.Стоимость = ТекСтрокаТовары.Стоимость; НоваяСтрока.Цена = ТекСтрокаТовары.Цена; Иначе Продолжить; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
9
ILM
гуру
15.03.12
✎
21:02
|
Прикалывает молодежь на форуме )))
Сама спрашивает, сама отвечает. Неправильно правда, но это же не важно. В 8.2 другой механизм контроля остатков. А то что у вас, это простите затыки при работе нескольких пользователей одновременно. |
|||
10
hhhh
15.03.12
✎
22:19
|
ну и где здесь документ основание? Пошел за очками.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |