Имя: Пароль:
1C
1С v8
Как исключить повторное создание на основании того же документа
,
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
ну и где здесь документ основание? Пошел за очками.
Независимо от того, куда вы едете — это в гору и против ветра!