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

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

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

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

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

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

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

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

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

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