|
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
|
Причем такой же код стоит почему-то и в форме документа, хотя он вроде, как и процедура проведения должен стоять в модуле
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |