Приветствую Вас ГостьЧетверг, 16.01.2025, 05:01

Каталог статей


Документ "Ручная операция"

Документ "Ручная операция" - это документ, который позволяет напрямую вносить изменения в регистры.

Создавая подобный документ надо учитывать некоторые особенности.

1. Удаление документа ручной корректировки не влечет за собой удаление движения в регистрах. Это надо учитывать и позаботиться об очистке данных регистра при удалении документа.

2. Свойство "Проведение" у документа надо установить равным "Запретить"

3. Не все реквизиты регистров могут быть выведены на форму. Например "Период" - о его заполнении надо позаботиться самостоятельно. Это можно сделать следующими способами:

а) заполнить при записи документа или при записи в форме

Например:

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

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

б) заполнить период м модуле набора записей регистра. При том подходе период будет заполнен в любом случае, в том числе и тогда, когда документ "Ручная корректировка" заполнен программно. Например:

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

 

4. При копировании документа движения не копируются. В методе "При копировании" надо добавить код по заполнению движения. Например:

Процедура ПриКопировании(ОбъектКопирования)

   // Перебрать движения  документа-источника
   ДвиженияОбъектаКопирования = РегистрыНакопления.ТоварыНаСкладах.ВыбратьПоРегистратору(ОбъектКопирования.Ссылка);
   Пока ДвиженияОбъектаКопирования.Следующий() Цикл

      // Создать новую запись в движениях текущего документа
      НовоеДвижение = Движения.ТоварыНаСкладах.Добавить();

      // Заполнить поля новой записи регистра
         НовоеДвижение.ВидДвижения = ДвиженияОбъектаКопирования.ВидДвижения;
      НовоеДвижение.Период = ДвиженияОбъектаКопирования.Период;
      НовоеДвижение.Номенклатура = ДвиженияОбъектаКопирования.Номенклатура;
      НовоеДвижение.Склад = ДвиженияОбъектаКопирования.Склад;
      НовоеДвижение.Количество = ДвиженияОбъектаКопирования.Количество;

   КонецЦикла;       

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

5. Чтобы на форме можно было разместить данные движения документа, надо в свойствах документа на вкладке "Движения" указать необходимые регистры. Если документ может вносить изменения по нескольким регистрам, то мало вероятно, что один документ будет вносить изменения по всем им. В этом случае надо на форму добавить возможность указывать только нужные регистры  и заполнять форму программно или через видимость элементов. Для определения списка нужных регистров можно заполнить список значений (таблицу значений) с нужными регистрами и добавить процедуру заполнения на форме страниц с таблицами регистров.

Например, ТаблицаРегистровНакопления содержит список нужных регистров:

&НаСервере
Процедура НастроитьСоставСтраниц()

    ДокументОбъект         = РеквизитФормыВЗначение("Объект");
    ТаблицаРегистров     =  ТаблицаРегистровНакопления.Выгрузить();    
    
    СписокОчищаемыхРегистров = Новый СписокЗначений();
    
    ГруппаСтраницыДинамически = Элементы.ГруппаСтраницыДинамически; //Группа типа Страницы, в которую будем добавлять страницы по нужным регистрам
    
    Для каждого Страница из ТаблицаРегистров Цикл
        
        ИмяСтраницы = "СтраницаДинамическиГруппаСтраница" + Страница.Имя;
        Если Элементы.Найти(ИмяСтраницы) <> Неопределено Тогда
            Продолжить;
        КонецЕсли;    
        
        // Создаем страницу
        НоваяСтраница = Элементы.Добавить(ИмяСтраницы, Тип("ГруппаФормы"), ГруппаСтраницыДинамически);
        НоваяСтраница.Вид = ВидГруппыФормы.Страница;
        НоваяСтраница.Заголовок = Страница.Представление;
        
        // Создаем таблицу формы
        ТаблицаРегистра = Элементы.Добавить("Движения" + Страница.Имя, Тип("ТаблицаФормы"), НоваяСтраница);   
        ТаблицаРегистра.ПутьКДанным         = "Объект.Движения." + Страница.Имя;
        НоваяСтраница.ПутьКДаннымЗаголовка     = ТаблицаРегистра.ПутьКДанным + ".КоличествоСтрок";
        
        // Создаем колонки
        ТЗНабораЗаписей = ДокументОбъект.Движения[Страница.Имя].ВыгрузитьКолонки();
        Для Каждого ТекКолонка Из ТЗНабораЗаписей.Колонки Цикл
            
            Если ТекКолонка.Имя = "Регистратор" Или  ТекКолонка.Имя = "Активность" Или ТекКолонка.Имя = "ИсходныйНомерСтроки" или ТекКолонка.Имя = "МоментВремени" Тогда
                Продолжить;
            КонецЕсли;    
            
            НоваяКолонка = Элементы.Добавить("Движения" + Страница.Имя + ТекКолонка.Имя, Тип("ПолеФормы"), ТаблицаРегистра);
            НоваяКолонка.ПутьКДанным = "Объект.Движения." + Страница.Имя + "." + ТекКолонка.Имя;
            НоваяКолонка.Вид         = ВидПоляФормы.ПолеВвода;
            
        КонецЦикла;
        
    КонецЦикла;
        
    // Удаляем страницы и помещаем в список значений имя набора, который будет очещен при записи
    Для каждого Страница из Элементы.ГруппаСтраницыДинамически.ПодчиненныеЭлементы Цикл
        
        ИмяДляПоиска = Прав(Страница.Имя,СтрДлина(Страница.Имя) - 33);  
        
        Если ТаблицаРегистров.Найти(ИмяДляПоиска, "Имя") = Неопределено Тогда
            СписокОчищаемыхРегистров.Добавить(ИмяДляПоиска);
            Элементы.Удалить(Страница);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

 


 

Категория: Программирование | Добавил: leshic (30.08.2022)
Просмотров: 330 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [50]
Регистры [7]
Формы [47]
Администрирование [41]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [41]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0