7.7 Как передать в форму Excel параметры для функции Проверка данных

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем 4ndr3j, 18 мар 2016.

  1. TopicStarter Overlay
    4ndr3j
    Offline

    4ndr3j Новичок в 1С

    Регистрация:
    1 фев 2012
    Сообщения:
    13
    Симпатии:
    1
    Баллы:
    4
    Делается что то вроде бланка заказа где клиент будет заполнять колонку количество, нужно проверить что бы при заполнении ячейки excel проверял кратность значения размеру упаковки.
    Пробую подставить такую формулу с " и ' :
    Формула=" '=IF(MOD(E"+row+";I"+row+")=0;E"+row+"; )' ";
    Эксель.Cells(row,5).Validation.Add(7,1,1,Формула);
    Но что то никак не выходит правильно передеть, как правильно их расставить?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Row > 1000 может быть?
  3. TopicStarter Overlay
    4ndr3j
    Offline

    4ndr3j Новичок в 1С

    Регистрация:
    1 фев 2012
    Сообщения:
    13
    Симпатии:
    1
    Баллы:
    4
    Может
    Но если есть варианты, то с радостью выслушаю)
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    В таком случае, как минимум Формат(Row, "ЧГ=0") необходимо делать.
    Пока не понятно, к чему все эти сложности с Validation.Add().

    Если yеобходимо в ячейку забить формулу, то можно сделать просто:

    Формула=" '=IF(MOD(E"+row+";I"+row+")=0;E"+row+"; )' ";
    Эксель.Cells(row,5).Formula = Формула);
  5. TopicStarter Overlay
    4ndr3j
    Offline

    4ndr3j Новичок в 1С

    Регистрация:
    1 фев 2012
    Сообщения:
    13
    Симпатии:
    1
    Баллы:
    4
    Validation.Add(7,1,1,) э
    Validation.Add(7,1,1,) не формулу подставляет а использует функцию excel проверка данных (что то типа фильтра, когда можно делать выбор значений в ячейке ), насколько я понял она не использует .Formula совсем.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Символы апострофов и возможно "=" уберите в строке формулы
  7. TopicStarter Overlay
    4ndr3j
    Offline

    4ndr3j Новичок в 1С

    Регистрация:
    1 фев 2012
    Сообщения:
    13
    Симпатии:
    1
    Баллы:
    4
    Без "=" он не переносит его в формулу и выдает ошибку при попытке заполнения ячейки в Excel.
    А если делать с ним, но без апострафов то
    Эксель.Cells(row,5).Validation.Add(7,1,1,Формула);
    {C:\USERS\USER\DESKTOP\ЗАКАЗВ1.ERT(580)}: :
  8. TopicStarter Overlay
    4ndr3j
    Offline

    4ndr3j Новичок в 1С

    Регистрация:
    1 фев 2012
    Сообщения:
    13
    Симпатии:
    1
    Баллы:
    4
    Может кому пригодится.
    Из 1С напрямую проверку поставить так и не удалось.
    Поэтому в Excel разрешаем запуск макросов и через OLE создаем в нем макрос который после запуска ставит проверку данных по условию:


    Код:
        Проект   =Книга.VBProject;
        Модуль=Проект.VBComponents.Add(1);
        Модуль.CodeModule.InsertLines(1,"Sub SetCheck()");
        Модуль.CodeModule.InsertLines(2,"Dim lLastRow As Long");
        Модуль.CodeModule.InsertLines(3,"Dim FRM As String");   
        Модуль.CodeModule.InsertLines(4,"Dim IM As String");   
        Модуль.CodeModule.InsertLines(5,"Dim EM As String");   
        Модуль.CodeModule.InsertLines(6,"lLastRow = Cells.SpecialCells(xlLastCell).row");   
        Модуль.CodeModule.InsertLines(7,"lLastRow = lLastRow - 1");   
        Модуль.CodeModule.InsertLines(8,"For i = 4 To lLastRow");   
        Модуль.CodeModule.InsertLines(9,"Cells(i, 5).Select");   
        Модуль.CodeModule.InsertLines(10,"FRM = ""=If(MOD(E"" & i & "",I"" & i & "")=0,E"" & i & "",)");   
        Модуль.CodeModule.InsertLines(11,"IM = ""Введите количество кратное количеству в упаковке "" & Cells(i, 9).Value");   
        Модуль.CodeModule.InsertLines(12,"EM = ""Введенное значение не кратно количеству в упаковке, для выхода введите пустое значение, иначе введите количество кратное количеству в упаковке "" & Cells(i, 9).Value");   
        Модуль.CodeModule.InsertLines(13,"If Cells(i, 9).Value > 1 Then");   
        Модуль.CodeModule.InsertLines(14,"With Selection.Validation");   
        Модуль.CodeModule.InsertLines(15,".Delete");   
        Модуль.CodeModule.InsertLines(16,".Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _");   
        Модуль.CodeModule.InsertLines(17,"xlBetween, Formula1:=FRM");   
        Модуль.CodeModule.InsertLines(18,".IgnoreBlank = False");   
        Модуль.CodeModule.InsertLines(19,".InCellDropdown = False");   
        Модуль.CodeModule.InsertLines(20,".InputTitle = ""Предупреждение""");   
        Модуль.CodeModule.InsertLines(21,".ErrorTitle = ""Ошибка""");   
        Модуль.CodeModule.InsertLines(22,".InputMessage = IM");   
        Модуль.CodeModule.InsertLines(23,".ErrorMessage = EM");   
        Модуль.CodeModule.InsertLines(24,".ShowInput = True");   
        Модуль.CodeModule.InsertLines(25,".ShowError = True");   
        Модуль.CodeModule.InsertLines(26,"End With");   
        Модуль.CodeModule.InsertLines(27,"End If");   
        Модуль.CodeModule.InsertLines(28,"Next i");   
        Модуль.CodeModule.InsertLines(29,"End Sub");
        Эксель.Run("SetCheck");

Поделиться этой страницей