Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Кн.Заполнить стирает табличную часть

v7: Кн.Заполнить стирает табличную часть
Я
   Rononoa
 
27.05.20 - 04:19
Есть форма, где по кнопке Заполнить первым делом срабатывает функция из глобального модуля
Функция глОчиститьТабличнуюЧасть(Конт) Экспорт  
    ФлагВозврата=0;
    Если Конт.КоличествоСтрок() = 0 Тогда
        ФлагВозврата=1;
    ИначеЕсли Вопрос("Таблица будет очищена, а существующие строки удалены.
                    |Продолжить?","Да+Нет") = "Да" Тогда
        Конт.УдалитьСтроки();
        ФлагВозврата=1;
    КонецЕсли;
    Возврат(ФлагВозврата)
КонецФункции

У меня же этот документ теперь вводится на основании другого и часть полей табличной части заполняется из документа основания и сейчас это стирание табличной части мне не нужно, а нужно, чтобы пустые ячейки были дозаполнены (они по кнопке заполнить и так заполняются в итоге, но перед этим все стирается). Так как я новичок в этом, то примерно даже не знаю в какую сторону копать
   Bigbro
 
1 - 27.05.20 - 04:21
ну так не нажимай кнопку заполнить, или вымарай в ней вызов этой глобалки или сделай отдельную кнопку или проверь ДокументОснование у текущего.
   Aleksey
 
2 - 27.05.20 - 04:40
Ждем сообщение от новенького про сайт где ему очень помогли?
   AAA
 
3 - 27.05.20 - 04:44
Я бы не советовал менять типовую логику заполнения. Документ не дозаполняется, а заполняется данными из другого документа
По поводу стирания в приведенном куске текста все прозрачно.

ИначеЕсли Вопрос("Таблица будет очищена, а существующие строки удалены.
                    |Продолжить?","Да+Нет") = "Да" Тогда
   Rononoa
 
4 - 27.05.20 - 06:59
Просто на форме уже есть кнопка Очистить, которая выполняет схожую функцию
   Злопчинский
 
5 - 27.05.20 - 14:31
(0) это капец как можно извртить в мутный код многоэтажных если линейную последовательность.

Если Конт.КоличествоСтрок()=0 Тогда Возврат 1; КонецЕсли;

Если Вопрос("Таблица будет очищена, а существующие строки удалены.
     |Продолжить?","Да+Нет") = "Да" Тогда
    Конт.УдалитьСтроки();
    Возврат 1;
КонецЕсли;

Возврат 0;
КонецФункции
   victuan1
 
6 - 28.05.20 - 04:54
(5) В (0) лучше ;)
У меня бы так было бы:

Функция глОчиститьТабличнуюЧасть(Конт) Экспорт   
    Если Конт.КоличествоСтрок() = 0 Тогда 
        Возврат 1 
    ИначеЕсли Вопрос("Таблица будет очищена, а существующие строки удалены. 
                    |Продолжить?","Да+Нет") = "Да" Тогда 
        Конт.УдалитьСтроки(); 
        Возврат 1 
    КонецЕсли; 
    Возврат 0 
КонецФункции
   Kigo_Kigo
 
7 - 28.05.20 - 09:18
А что мешает в процедуру
Заполнить()
Добавить вопрос
Если Вопрос("Дозаполнить таблицу?","Да+Нет") = "Да" Тогда 
 Тут перебираем строки и дозаполняем строки докумена
Иначе
Идем в стандартную процедуру
   Rononoa
 
8 - 28.05.20 - 11:17
А как тогда понять какая конкретная ячейка заполнена, а какая нет, у меня просто документ на основании создается и часть данных с другого документа переходит (по идее должно через регистры, но чего-то через регистры не идет)
   vova1122
 
9 - 28.05.20 - 11:48
(8) Неправильно понимаешь. В Табличной части в данном случае не проверяется на заполнение ячеек, а просто удаляются все данные в этой табличной части, или вообще ничего не удаляется, а новые строки добавляются ниже уже созданных (если выбрать не удалять табличную часть)
   Rononoa
 
10 - 28.05.20 - 11:57
И как тогда быть, есть документ основание, есть этот документ, где по кнопке заполнить должно производиться дозаполнение таблицы из других справочников и также проводиться расчет
   vova1122
 
11 - 28.05.20 - 12:03
(10) Или постановка задачи некорректна, или вы чего-то не понимаете/не договариваете.
Итак предположим:
в табличной части есть такие данные
Товар1 , цена1, количество1, Сума1
Товар2 , цена2, количество2, Сума2
Товар3 , цена3, количество3, Сума3

В документе основание такие данные
Товар1 , цена4, количество4, Сума4
Товар5 , цена5, количество5, Сума5
Товар6 , цена3, количество2, Сума6

Что в итоге по этим данным должно быть?
   Rononoa
 
12 - 28.05.20 - 12:28
У меня первый док - указываются вещи, выданные, наименование, количество, цена и сумма
Во втором документе они должны по идее перенестись как уже выданные человеку и в случае увольнения программа их не должна считать как компенсацию, при этом сравнивая показания сколько выдано вещей и сколько должны выдать. Разницу при увольнении выплачивают деньгами. Сейчас же у нас переход на электронный учет планируется и все что выдавалось, потом будет заноситься задним числом, нужно чтобы и расчет на основании выданного/невыданного считала программа
   Bigbro
 
13 - 28.05.20 - 12:32
ну так убери этот вызов глОчистить или нажимай нет в ответ на вопрос. и жми дальше заполнить.
в чем проблема?
   vova1122
 
14 - 28.05.20 - 12:35
(12) тогда при чем тут документ основание? Остаток по выданным/невыданным вещам нужно тянуть не з докОснование, а з регистров (если они правильно спроэктированны).  Темболее выдавать вещи человеку будете не одним документом, а по мере необходимости в разные даты, и на каждую дату будет свой документ выдачи
   Rononoa
 
15 - 29.05.20 - 03:52
Вот именно, что из регистров почему-то не подтягиваются, хотя у документа-основания движение есть
Вот в модуле документа код, который и был по умолчанию. Я на первый взгляд думал, что код меняли, но нет, никаких правок не было

Процедура ПолучитьОстатки(СписОбмундирования, ОбмундированиеВыданное_)
    
    ВремРегистры                 = СоздатьОбъект("Регистры");
    
    ОбмундированиеВыданное       = ВремРегистры.ОбмундированиеВыданное;
    ОбмундированиеВыданное.УстановитьЗначениеФильтра("Учреждение", ВыбраннаяФирма,     1);
    ОбмундированиеВыданное.УстановитьЗначениеФильтра("Сотрудник",  Сотрудник,          1); 
    ОбмундированиеВыданное.УстановитьЗначениеФильтра("Статус",     Перечисление.СтатусыПартий.ВЛичномИспользовании,  0); 
    
    Если ПустоеЗначение(СписОбмундирования) = 0 Тогда
        ОбмундированиеВыданное.УстановитьЗначениеФильтра("Обмундирование",  СписОбмундирования, 2);
    КонецЕсли;
    Если СравнитьТА() < 1 Тогда
        //Позиция не больше ТА.

        ОбмундированиеВыданное.ВременныйРасчет();
        ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
    КонецЕсли;
    
    ОбмундированиеВыданное_    = СоздатьОбъект("ТаблицаЗначений");
    ОбмундированиеВыданное.ВыгрузитьИтоги(ОбмундированиеВыданное_, 1, 1);
    
КонецПроцедуры// ПолучитьОстатки() 


//******************************************************************************

//
Процедура ПолучитьНаличиеУСотрудника(ОбмундированиеВыданное, Обмундирование, КоличествоИспользуемое, КоличествоПодлежитСписанию,ДатаНачала_,ДатаОкончания_)  
    
    КоличествоИспользуемое      = 0;
    КоличествоПодлежитСписанию  = 0;  
    
    ОбмундированиеВыданное.ВыбратьСтроки();
    Пока ОбмундированиеВыданное.ПолучитьСтроку()>0 Цикл
        Если ОбмундированиеВыданное.Обмундирование<>Обмундирование Тогда  
            Продолжить;    
        КонецЕсли;
        Если (ОбмундированиеВыданное.ОкончаниеСрока>ДатаНачала_) и (ОбмундированиеВыданное.ОкончаниеСрока<ДатаОкончания_) Тогда  
            КоличествоИспользуемое     = КоличествоИспользуемое    +ОбмундированиеВыданное.Количество;    
        Иначе 
            КоличествоПодлежитСписанию = КоличествоПодлежитСписанию+ОбмундированиеВыданное.Количество;    
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
   Rononoa
 
16 - 29.05.20 - 03:54
Причем такой же код стоит почему-то и в форме документа, хотя он вроде, как и процедура проведения должен стоять в модуле

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.