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

Изменение флажка с помощью структуры при скане штрихкода

Изменение флажка с помощью структуры при скане штрихкода
Я
   KoalaJustKoala
 
24.05.21 - 09:35
Имеется вот такое программное изменение флажка, когда он изменяется не ручным методом, но увы, флажок на истину не переделывается(
        ОтмеченнаяНаценка.Вставить(ЭтаФорма.ТекущийЭлемент.ТекущиеДанные, Истина);

Хелп(
 
 Партнерская программа EFSOL Oblako
   KoalaJustKoala
 
1 - 24.05.21 - 10:45
ап
   acht
 
2 - 24.05.21 - 11:01
Формулировка напомнила:
... на хромой блохе с того берега моря, которое зайцу не перелететь, орлу не перебежать, хоть море не море, а так, лужа посреди города, где тень от блохи на зайца упала и насмерть убила, а из шкуры зайца тулуп вышел и пошёл куда глаза глядят, а тут заяц ка-ак прыгнет!..
   fisher
 
3 - 24.05.21 - 11:07
(0) <vanga mode on> Если это твое художество, а "ОтмеченнаяНаценка" - это список значений с интерактивной пометкой, то открываешь в синтакс-помощнике справку по списку значений и его методам в разделе "Универсальные коллекции" и хлопаешь себя по лбу <vanga mode off>
   KoalaJustKoala
 
4 - 24.05.21 - 11:12
(3) Используются соответсвия 
ОтмеченныйПриход = Новый Соответствие;
ОтмеченныйВозврат = Новый Соответствие;
ОтмеченнаяНаценка = Новый Соответствие;
Перем ОтмеченныйПриход;
Перем ОтмеченныйВозврат;
Перем ОтмеченнаяНаценка;

Процедура ТабПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ОформлениеСтроки.Ячейки.ПроверкаПриход.ОтображатьФлажок = ИСТИНА;
    ОформлениеСтроки.Ячейки.ПроверкаВозврат.ОтображатьФлажок = ИСТИНА;
    ОформлениеСтроки.Ячейки.ПроверкаУценкаНаценка.ОтображатьФлажок = ИСТИНА;
    
    Если ЭлементыФормы.Таб.ТекущиеДанные.ПроверкаПриход = Неопределено Тогда
        ОформлениеСтроки.Ячейки.ПроверкаПриход.ЗначениеФлажка = Ложь;
    Иначе
        ОформлениеСтроки.Ячейки.ПроверкаПриход.ЗначениеФлажка = Истина;
    КонецЕсли;
    Если ЭлементыФормы.Таб.ТекущиеДанные.ПроверкаВозврат = Неопределено Тогда
        ОформлениеСтроки.Ячейки.ПроверкаВозврат.ЗначениеФлажка = Ложь;
    Иначе
        ОформлениеСтроки.Ячейки.ПроверкаВозврат.ЗначениеФлажка = Истина;
    КонецЕсли;
    Если ЭлементыФормы.Таб.ТекущиеДанные.ПроверкаУценкаНаценка = Неопределено Тогда
        ОформлениеСтроки.Ячейки.ПроверкаУценкаНаценка.ЗначениеФлажка = Ложь;
    Иначе
        ОформлениеСтроки.Ячейки.ПроверкаУценкаНаценка.ЗначениеФлажка = Истина;
    КонецЕсли;
КонецПроцедуры

Процедура ТабПриИзмененииФлажка(Элемент, Колонка)
    Если Колонка.Имя = "ПроверкаПриход" Тогда
        НайденныйЭлемент =  ОтмеченныеСтроки.НайтиПоЗначению(Элемент.ТекущаяСтрока);
        Если НайденныйЭлемент = Неопределено Тогда
            ОтмеченныйПриход.Вставить(Элемент.ТекущаяСтрока, Истина);
        Иначе
            ОтмеченныйПриход.Удалить(НайденныйЭлемент);
        КонецЕсли;
    ИначеЕсли Колонка.Имя = "ПроверкаВозврат" Тогда 
        НайденныйЭлемент =  ОтмеченныеСтроки.НайтиПоЗначению(Элемент.ТекущаяСтрока);
        Если НайденныйЭлемент = Неопределено Тогда
            ОтмеченныйВозврат.Вставить(Элемент.ТекущаяСтрока, Истина);
        Иначе
            ОтмеченныйВозврат.Удалить(НайденныйЭлемент);
        КонецЕсли;
    ИначеЕсли Колонка.Имя = "ПроверкаУценкаНаценка" Тогда 
        НайденныйЭлемент =  ОтмеченныеСтроки.НайтиПоЗначению(Элемент.ТекущаяСтрока);
        Если НайденныйЭлемент = Неопределено Тогда
            ОтмеченнаяНаценка.Вставить(Элемент.ТекущаяСтрока, Истина);
        Иначе
            ОтмеченнаяНаценка.Удалить(НайденныйЭлемент);
        КонецЕсли;
    КонецЕсли; 
КонецПроцедуры

Это все что происходит при нажатии или выводе, это работает
а вот, что должно работать при скане штрих кода :

Функция ВернутьДокументПоШтрихкоду(ШтрихкодД) Экспорт
    
    Табл = ЭлементыФормы.Таб;
    
    ШтрихКод = СокрЛП(ШтрихкодД);
    КодДокумента = Прав(Лев(ШтрихКод,5),2);
    Если КодДокумента = "02" Тогда
        ВидДок = "ПереоценкаТМЗ";
    ИначеЕсли КодДокумента = "01" Тогда   
        
        ВидДок = "ПеремещениеТоваров";
    Иначе 
        Возврат Неопределено;   
    КонецЕсли; 
    
    ДатаДок=Дата(Сред(ШтрихКод,6,4),Сред(ШтрихКод,10,2),Сред(ШтрихКод,12,2));
    КодСклада = Лев(ШтрихКод,3);
    Если КодСклада = "CNS" Тогда
        КодСклада = "ЦУО"; 
    КонецЕсли;
    НомерДок = КодСклада + Сред(ШтрихКод,14);
    
    ТекДокумент = Документы[ВидДок].НайтиПоНомеру(НомерДок,ДатаДок);
    
    Если ВидДок = "ПереоценкаТМЗ"  Тогда  //Переоценка

        Табл.ТекущаяСтрока = Таб.Найти(ТекДокумент.Разница);
        Табл.ТекущаяКолонка = Таб.Найти("Наценка Уценка");
        Табл.ТекущаяКолонка = Табл.Колонки["ПроверкаУценкаНаценка"];
        //Чистый тест снизу, а если, а вдруг?

        ТабПриИзмененииФлажка(ЭтаФорма.ТекущийЭлемент, Табл.ТекущаяКолонка)
        //ОтмеченнаяНаценка.Вставить(Табл.ТекущаяКолонка, Истина);

    ИначеЕсли НЕ Таб.Найти(ТекДокумент.Номер,"НомПрих") = Неопределено  Тогда 
        Табл.ТекущаяКолонка = Табл.Колонки["СуммаПрих"];
        Табл.ТекущаяСтрока = Таб.Найти(ТекДокумент.СуммаДокумента);
        Табл.ТекущаяКолонка = Табл.Колонки["ПроверкаПриход"];
        ОтмеченныйПриход.Вставить(ЭтаФорма.ТекущийЭлемент.ТекущиеДанные, Истина);
    ИначеЕсли НЕ Таб.Найти(ТекДокумент.Номер,"СуммаВозвр") = Неопределено  Тогда 
        Табл.ТекущаяКолонка = Табл.Колонки["СуммаВозвр"];
        Табл.ТекущаяСтрока = Таб.Найти(ТекДокумент.СуммаДокумента);
        Табл.ТекущаяКолонка = Табл.Колонки["ПроверкаВозврат"];
        ОтмеченныйВозврат.Вставить(ЭтаФорма.ТекущийЭлемент.ТекущиеДанные, Истина);
            Иначе
        Предупреждение("Неизвестный штрихкод!");
    КонецЕсли;
    
КонецФункции

и именно в этой функции у меня и должна ставится галочка при скане штрихкода
   fisher
 
5 - 24.05.21 - 11:31
Просто воткни в конце своей сканировки Табл.Обновить();
   fisher
 
6 - 24.05.21 - 11:33
Или ОбновитьСтроки(), как оно там в ОФ...
   fisher
 
7 - 24.05.21 - 11:42
А, не. Тебе еще кажись значение реквизита "ПроверкаУценкаНаценка" поменять надо.
Какого оно типа вообще?
   KoalaJustKoala
 
8 - 24.05.21 - 11:44
(7) Это колонка в таблице
   KoalaJustKoala
 
9 - 24.05.21 - 11:45
а у нее стоит булевое значение
   KoalaJustKoala
 
10 - 24.05.21 - 11:45
(6) Добавил сейчас обновление строк в конце функции
    Табл.ОбновитьСтроки();
Неа, реакции дальше не пошло
   fisher
 
11 - 24.05.21 - 11:49
Табл.ТекущиеДанные.ПроверкаУценкаНаценка = Истина;
   KoalaJustKoala
 
12 - 24.05.21 - 11:52
(11) https://prnt.sc/13ca43f гхм, это уже прогресс)
Попробую дальше отталкиваться от этого, спасибо)
   KoalaJustKoala
 
13 - 24.05.21 - 11:57
Но все таки интересно, а почему черезе соответсвие не хочет работать?
   KoalaJustKoala
 
14 - 24.05.21 - 11:58
Разве Элемент, который в процедуре ПриИзменениеФлажка - это не то же самое, что ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока /ТекущиеДанные(вроде так)
   fisher
 
15 - 24.05.21 - 12:12
У тебя в соответствиях только буферизация. Для удобства получения готового списка отмеченных. В "обратную сторону" они не работают.
Отображение флажка рисуется в ТабПриВыводеСтроки() на основании состояния реквизита ПроверкаУценкаНаценка.
А в ПриИзменениеФлажка у тебя просто инвертируется состояние соответствий. Логика - что раз типа "клацнули" флажок, то его значение поменялось на противоположное. При этом сам реквизит ПроверкаУценкаНаценка меняется автоматически, когда интерактивно "клацают" флажок.
   KoalaJustKoala
 
16 - 24.05.21 - 12:15
(15) Хм, а если сделать отдельную процедуру?
Ну скажем 

процедура ИзменениеФлажкаАвтомат(Элемент, Колонка){
    Если Колонка.Имя = "ПроверкаПриход" Тогда
        НайденныйЭлемент =  ОтмеченныеСтроки.НайтиПоЗначению(Элемент.ТекущаяСтрока);
        Если НайденныйЭлемент = Неопределено Тогда
            ОтмеченныйПриход.Вставить(Элемент.ТекущаяСтрока, Истина);
        Иначе
            ОтмеченныйПриход.Удалить(НайденныйЭлемент);
        КонецЕсли;
    ИначеЕсли Колонка.Имя = "ПроверкаВозврат" Тогда 
        НайденныйЭлемент =  ОтмеченныеСтроки.НайтиПоЗначению(Элемент.ТекущаяСтрока);
        Если НайденныйЭлемент = Неопределено Тогда
            ОтмеченныйВозврат.Вставить(Элемент.ТекущаяСтрока, Истина);
        Иначе
            ОтмеченныйВозврат.Удалить(НайденныйЭлемент);
        КонецЕсли;
    ИначеЕсли Колонка.Имя = "ПроверкаУценкаНаценка" Тогда 
        НайденныйЭлемент =  ОтмеченныеСтроки.НайтиПоЗначению(Элемент.ТекущаяСтрока);
        Если НайденныйЭлемент = Неопределено Тогда
            ОтмеченнаяНаценка.Вставить(Элемент.ТекущаяСтрока, Истина);
        Иначе
            ОтмеченнаяНаценка.Удалить(НайденныйЭлемент);
        КонецЕсли;
    КонецЕсли;
}

и ссылать на него?
или в таком случае, просто ссылаться на процедуру созданную самой 1с
   fisher
 
17 - 24.05.21 - 12:16
Хотя глядя на твой скриншот, я уже не уверен. Похоже, что значение флажка у тебя отвязано от значения реквизита. И тогда я не очень понимаю, как у тебя до этого все работало. Потому что в ПриВыводеСтроки у тебя анализируется именно значение реквизита.
   fisher
 
18 - 24.05.21 - 12:18
Если пометки в динамическом списке должны работать независимо от значений реквизитов, тогда и в ПриВыводеСтроки должны анализироваться соответствия. А у тебя винегрет какой-то.
   KoalaJustKoala
 
19 - 24.05.21 - 12:19
https://prnt.sc/13cbbjj
Гхм, вот настройки, для самой колонки
   KoalaJustKoala
 
20 - 24.05.21 - 12:19
(18) Да, я на момент времени написания этой обработки, знал гораздо меньше чем сейчас и там сильная мешанина, такое чувство, что переписать, сейчас быстрее и проще, чем починить
   fisher
 
21 - 24.05.21 - 12:24
(19) Я ОФ уже плохо помнить могу. Но ЕМНИП такие настройки нужны для того, чтобы флажок всегда отображался из значений реквизита "ФлагНаценка". Что не очень подходит для варианта, когда пользователь должен менять эти флажки без перезаписи элементов. Ведь именно это тебе нужно?
   KoalaJustKoala
 
22 - 24.05.21 - 12:27
(21) Вроде да, если правильно понял
у меня все это не передается никуда дальше, все хранится только в рамках данной обработки, именно все флажки что есть, максимум они дальше уходя в макет, но с макетом, работают на удивление спокойно
   fisher
 
23 - 24.05.21 - 12:29
(22) А начальное состояние флажков? Опирается на значение каких-то реквизитов или должно быть "пустое"?
   KoalaJustKoala
 
24 - 24.05.21 - 12:32
(23) Просто пустое, оно заполняется при скане штрихкодов
   KoalaJustKoala
 
25 - 24.05.21 - 12:33
либо в ручную меняется, если так будет нужно
   fisher
 
26 - 24.05.21 - 12:35
(24) Тогда, КМК, достаточно просто переписать ТабПриВыводеСтроки(), чтобы флажки выводились по данным из соответствий. Тогда программная установка у тебя сведется к изменению соответствий и ОбновитьСтроки().
   KoalaJustKoala
 
27 - 24.05.21 - 12:39
(26) Хм, сейчас попробую, перепишу как в итс
Процедура тпСотрудникиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.Отметка.ОтображатьФлажок = Истина;
         
Если ОтмеченныеСотрудники[ДанныеСтроки] = Неопределено Тогда
      ОформлениеСтроки.Ячейки.Отметка.Флажок = Ложь;
Иначе
     ОформлениеСтроки.Ячейки.Отметка.Флажок = Истина;
    КонецЕсли;
КонецПроцедуры
   fisher
 
28 - 24.05.21 - 12:42
Что такое у тебя "ОтмеченныеСтроки" и как они работают - я тоже не понял.
(27) Во. Как раз то что надо. Только можно чуть проще:
ОформлениеСтроки.Ячейки.Отметка.Флажок = ОтмеченныеСотрудники[ДанныеСтроки] <> Неопределено;
   KoalaJustKoala
 
29 - 24.05.21 - 12:49
(28) Хм, щас буду пробовать
ИТС это хорошая вещь)
Жаль не ко всему есть допуск(
   KoalaJustKoala
 
30 - 24.05.21 - 12:52
https://prnt.sc/13cctlu
ОформлениеСтроки.Ячейки.ПроверкаПриход.ОтображатьФлажок = Истина;
    ОформлениеСтроки.Ячейки.ПроверкаВозврат.ОтображатьФлажок = Истина;
    ОформлениеСтроки.Ячейки.ПроверкаУценкаНаценка.ОтображатьФлажок = Истина;
    
    
    Если ОтмеченныйПриход[ДанныеСтроки] = Неопределено Тогда
        ОформлениеСтроки.Ячейки.ПроверкаПриход.Флажок = Ложь;
    Иначе
        ОформлениеСтроки.Ячейки.ПроверкаПриход.Флажок = Истина;
    КонецЕсли;
    
    
    Если ОтмеченныйВозврат[ДанныеСтроки] = Неопределено Тогда
        ОформлениеСтроки.Ячейки.ПроверкаВозврат.Флажок = Ложь;
    Иначе
        ОформлениеСтроки.Ячейки.ПроверкаВозврат.Флажок = Истина;
    КонецЕсли;
    
    Если ОтмеченнаяНаценка[ДанныеСтроки] = Неопределено Тогда
        ОформлениеСтроки.Ячейки.ПроверкаУценкаНаценка.Флажок = Ложь;
    Иначе
        ОформлениеСтроки.Ячейки.ПроверкаУценкаНаценка.Флажок = Истина;
    КонецЕсли;
 
 
   KoalaJustKoala
 
31 - 24.05.21 - 12:53
Оно работает)

    Если ВидДок = "ПереоценкаТМЗ"  Тогда  //Переоценка

        Табл.ТекущаяСтрока = Таб.Найти(ТекДокумент.Разница);
        Табл.ТекущаяКолонка = Таб.Найти("Наценка Уценка");
        Табл.ТекущаяКолонка = Табл.Колонки["ПроверкаУценкаНаценка"];
        ТабПриИзмененииФлажка(ЭтаФорма.ТекущийЭлемент, Табл.ТекущаяКолонка);
    ИначеЕсли НЕ Таб.Найти(ТекДокумент.Номер,"НомПрих") = Неопределено  Тогда 
        Табл.ТекущаяКолонка = Табл.Колонки["СуммаПрих"];
        Табл.ТекущаяСтрока = Таб.Найти(ТекДокумент.СуммаДокумента);
        Табл.ТекущаяКолонка = Табл.Колонки["ПроверкаПриход"];
        ТабПриИзмененииФлажка(ЭтаФорма.ТекущийЭлемент, Табл.ТекущаяКолонка);
    ИначеЕсли НЕ Таб.Найти(ТекДокумент.Номер,"СуммаВозвр") = Неопределено  Тогда 
        Табл.ТекущаяКолонка = Табл.Колонки["СуммаВозвр"];
        Табл.ТекущаяСтрока = Таб.Найти(ТекДокумент.СуммаДокумента);
        Табл.ТекущаяКолонка = Табл.Колонки["ПроверкаВозврат"];
        ТабПриИзмененииФлажка(ЭтаФорма.ТекущийЭлемент, Табл.ТекущаяКолонка);
    Иначе
        Предупреждение("Неизвестный штрихкод!");
    КонецЕсли;

1 НО, я сделал отправку в изменение флажков)


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