Quad.Wiki

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 23 Next »

Где в программе увидеть группы из прайса?


Группы в прайсах нужны для удобного сопоставления товаров, например, чтобы можно было выбрать какую-то одну группу товаров и связывать ее + нужны для автоматического добавления товаров в свой прайс, по соответствию между вашими группами и группами поставщиков. Если ни одно ни второе вам не нужно, то не стоит тратить время на настройку групп из прайсов поставщиков, если там не какой-то простой вариант.


1. Перейти во вкладку Прайсы и выбрать слева прайс, справа над таблицей товаров должно быть установлено "1 выбранный"


2. В левом нижнем углу перейти во вкладку Группы



Как настраиваются группы?

Для настройки групп можно указать 2 колонки:

"Название группы" - это колонка, в которой находится название группы товара

"Название вышестоящей группы" - это колонка, в которой находится вышестоящая (родительская) группа.

Если и то и то в прайсе находится в одной колонке, то загрузить целиком структуру групп можно только если в прайсе они сгруппированы средствами эксель или с помощью макроса, который разрабатывается специально под каждый прайс за дополнительную плату (т.е. нет одинакового макроса для всех прайсов).


Товары Основного прайса (вашего каталога товаров, который загружается во вкладку Продукция) можно распределить по группам так же по какому-то ИД группы, который указан в прайсе. В этом случае прайс может быть без Названия группы.

Чтобы товары распределились, нужно заполнить в группах основного прайса поле Код группы, которое будет соответствовать этому ИД из прайса. Заполнить поле можно или вручную или через Импорт групп.

Колонка, в которой указан ИД/Код группы указывается так:

Код группы можно загружать так же, если в прайсе указаны и код группы и название группы. В этом случае можно указать загрузку групп по Коду и они не будут дублироваться, в случае, если в прайсе меняется название какой-то группы.

Для управления загрузкой групп в настройках прайса есть пункт 6. Группы.

Здесь выбирается по какому полю загружаются группы, возможные варианты:

"Не загружать группы" - из прайса не будут загружаться группы вообще, а товар попадет в группу "Без группы"

"Загружать по коду" - можно выбирать, если в прайсе присутствует код группы и поставщик его не меняет.

"Загружать по наименованию" - используется для большинства прайсов, в этом случае при загрузке группа будет проверяться по названию, есть такая в базе или еще нет.

Птичка "Группа в отдельной строке" используется для указания программе места расположения групп в прайсе.

Если установить птичку, то программа будет в прайсе искать строки в которых есть текст в колонке "Название группы" и нет текста в колонке "Цена" или "Рекомендованная цена", если в прайсе есть только РРЦ.


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

Т.е. в строках всех товаров указано название группы.


Птичка “Дерево” - устанавливается, если прайс сгруппирован стандартными средствами Excel.

Группы в прайсе сформированы стандартной группировкой Excel


Пример прайса:


1. Нужно указать поля "Название группы" и "Название вышестоящей группы".

Обычно в таких прайсах они в одной колонке, на скриншете выше это колонка B


2. Поставить птичку "Группа в отдельной строке"


3. Поставить птичку "Дерево"


4. Загружать прайс нужно начиная со строки, в которой идет первая группа


В результате вы получите группы 1 в 1 как они идут в прайсе



Группы в прайсе указаны в виде 2-х колонок, в одной группа, во второй - вышестоящая группа.


Пример прайса

в поле "Название группы" можно указать колонку С

в поле "Название вышестоящей группы" - колонку B или A, или, так как в этом прайсе 3 колонки, то можно название вышестоящей группы объединить из двух колонок A+B

Загрузить дерево групп из 3х уровней при такой структуре прайса нельзя, только группа и вышестоящая группа. Или делать специальный макрос, который из 3х колонок сделает две.

При настройке этого прайса нужно убрать так же птичку "Группа в отдельной строке", так как группы в этом прайсе указаны в каждой строке.


Группа в прайсе указана в отдельной строке, без группировки средствами Excel

пример прайса:


Как видно из примера - это такой же прайс как в первом пункте этой инструкции, только он не сгруппирован в экселе.


Из такого прайса можно загрузить только самую нижнюю группу. Вышестоящую группу не получится загрузить, так как нельзя определить к какому уровню группировки относится строка с группой.

Здесь указывается просто поле "Название группы" с колонкой B. Вот такие группы будут у товаров в программе:

Нужно так же установить птичку "Группа в отдельной строке".

В колонке B в данном прайсе находится и название группы в отдельных строках и название товара - нужно одну и ту же колонку указывать и в поле "Название группы" и "Название", т.е. ничего страшного, программа определит где группа, а где товар, по колонке цены. Там где цены нет (пусто в колонке) - будет считаться группа, где есть цена - товар.

Группа в одной ячейке в виде полного пути, с разделителем

Данный способ подойдет в случае, когда полный путь группы (группа и все вышестоящие группы) указаны в одной ячейке, через какой-то разделитель, для каждой строчки с товаром в прайсе.

Или если в прайсе есть больше 2х колонок групп, и с помощью макроса их можно объединить в одну (так же для каждой строки с товаром).

 Как объединить группы из нескольких колонок в одну? (разверните)

В прайс нужно добавить следующий макрос и в нем поменять настройки:

'индекс листа
SHEET_IDX = 1

'строка с которой начинается прайс
START_ROW = 13

'колонки
CLMS_LIST = Array(1, 2, 3) 'список индексов колонок, в каком порядке их нужно объединять
CLM_RESULT = 1 'колонка в которую будут записываться объединенные группы
CLM_PRICE = 9 'колонка с ценой товара (должна быть заполнена у каждого товара)
CHR_DELIMITER = ">" 'разделитель между группами (не должен встречаться в названиях групп)


Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False

Set Sht = Sheets(SHEET_IDX)

For i = START_ROW To Sht.UsedRange.Rows.Count

    If Sht.Cells(i, CLM_PRICE).Value <> "" Then
        s_res = ""
        For j = LBound(CLMS_LIST) To UBound(CLMS_LIST)
            clm_group = CLMS_LIST(j)
            
            If Sht.Cells(i, clm_group).Value <> "" Then
                If (s_res = "") Then
                    s_res = Sht.Cells(i, CLMS_LIST(j)).Value
                Else
                    s_res = s_res & CHR_DELIMITER & Sht.Cells(i, clm_group).Value
                End If
                
                Sht.Cells(i, clm_group).Value = ""
            End If
        Next j
        
        Sht.Cells(i, CLM_RESULT).Value = s_res
    Else
        Sht.Cells(i, CLM_RESULT).Value = ""
    End If
Next i

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

Определение группировки по форматированию

Часто в прайсах указывают группы, которые не сгруппированы средствами Excel, но текст в каждом уровне имеет разное форматирование (разный шрифт, или цвет шрифта, или цвет ячейки, или разные отступы от начала ячейки). В этом случае группы можно загрузить, но для этого нужно составить макрос:

 Развернуть текст макроса


Макрос
###DECLARE###  
    Public Type GroupLevel
        ColIndex As Integer 'номер колонки, в которой указано название группы
        InterColor As Long 'цвет ячейки
        IsBold As Integer '1 - жирный 0 - нет
        IsItalic As Integer '1 - курсив 0 - нет
        FontName As String 'название шрифта
        FontColor As Long 'цвет шрифта
        FontSize As Long 'размер шрифта
        Indent As Integer 'отступ
		IsUnderline As Integer 'подчеркнут
    End Type  
###DECLARE###      
    'Укажите после "To" количество уровней группировки,
    '3 (три) означет что у группы есть подгруппы и у подгруппы есть еще вложенные подгруппы
    Const lvlCount = 3
	
    Dim i, j, clmnPriceIndex, clmnOutIndex, rowFirstData As Integer
    
    'Укажите номер колонки, в которой указана цена товара
    clmnPriceIndex = 0
    
    'Укажите номер колонки, в которую будет помещен результат
    clmnOutIndex = 0
    
    'Укажите номер первой строки с данными
    rowFirstData = 0
    
    Dim GroupLevels(1 To lvlCount) As GroupLevel

    'Укажите настройки для каждого уровня, пример:
GroupLevels(1).ColIndex = 2
GroupLevels(1).InterColor = 11842740
GroupLevels(1).IsBold = 1
GroupLevels(1).IsItalic = 1
GroupLevels(1).IsUnderline = -4142
GroupLevels(1).FontName = "Arial"
GroupLevels(1).FontColor = 0
GroupLevels(1).FontSize = 9
GroupLevels(1).Indent = 0

GroupLevels(2).ColIndex = 2
GroupLevels(2).InterColor = 12829635
GroupLevels(2).IsBold = 1
GroupLevels(2).IsItalic = 1
GroupLevels(2).IsUnderline = -4142
GroupLevels(2).FontName = "Arial"
GroupLevels(2).FontColor = 0
GroupLevels(2).FontSize = 9
GroupLevels(2).Indent = 0
    

    
    For i = rowFirstData To ActiveSheet.UsedRange.Rows.Count
        If ActiveSheet.Cells(i, clmnPriceIndex).Value = "" Then
            For j = 1 To lvlCount
                Set cel = ActiveSheet.Cells(i, GroupLevels(j).ColIndex)
                
                If (cel.Interior.Color = GroupLevels(j).InterColor) And _
                    ((-1) * CInt(cel.Font.Bold) = GroupLevels(j).IsBold) And _
                    ((-1) * CInt(cel.Font.Italic) = GroupLevels(j).IsItalic) And _
                    (cel.Font.Name = GroupLevels(j).FontName) And _
                    (cel.Font.Color = GroupLevels(j).FontColor) And _
                    (cel.Font.Size = GroupLevels(j).FontSize) And _                    
                    (cel.IndentLevel = GroupLevels(j).Indent) Then
                        
                       ActiveSheet.Cells(i, clmnOutIndex).Value = j
                       Exit For
                End If
            Next j
        End If
    Next i

 



Вам так же понадобится этот файл, для определения форматирования в ячейках, скачайте его себе:

При открытии этого файла нужно разрешить ему работу с макросами


Что нужно делать:

1. Скопируйте текст макроса в блокнот, можете использовать для этого программу-блокнот с подсветкой синтаксиса, например Notepad++ (качайте самую последнюю версию)

Установите в нем синтаксис Visual Basic


В макросе укажите:

Количество уровней групп, которые собираетесь загружать из прайса


Номер колонки в которой цена товара


Номер колонки, в которую будет помещен код уровня группировки:

Здесь нужно указать какую-то пустую колонку, после всех колонок прайса. Указывайте с запасом, на случай, если поставщик добавит в прайс колонки, чтобы не переделывать макрос. Обычно указывается 20-ая колонка, если в прайсе колонок меньше.


Укажите номер строки, с которой начинается прайс (первая строка после шапки)


Дальше нужно для каждого уровня группировки указать блок, описывающий форматирование этого уровня в прайсе. То, что указано для примера ниже, нужно удалить и вставить в это место блоки, подготовленные через файл "Проверка формата ячейки".


2. Откройте файл "Проверка формата ячейки"

В этом файле нужно получить код для каждого уровня группировки. Пример прайса, в котором каждый уровень группировки обозначен с помощью различного цвета ячейки:


Копируем ячейку с названием первого уровня групп (если в экселе для названия группы объединено несколько ячеек, то их нужно разъединить)

после этого скопировать

и вставить в файл с макросом проверки, ввести номер уровня группы и нажать "Проверить"

в результате получим код, который нужно скопировать в макрос для прайса:


Копируем код вместо того, который был в макросе:


Аналогично делаем для второго и третьего уровней.



Для каждого уровня указываем номер колонки, в которой указано название группы этого уровня (в примере это колонка B, указывается номер 2)


Вот здесь должен быть указан уровень, разный в каждом блоке



Полученный результат копируется в настройку прайса


3. В настройке прайса указываются колонки "Название группы" и "Название выш. гр." - в моем примере одна и та же колонка B, в которой находятся группы в прайсе.

Указываем так же поле "Код вышестоящей группы" - это та колонка, в которую в макросе указали помещать номер уровня группы (20-ая колонка)


Устанавливаем птичку "Дерево"

Загружать группу по наименованию + птичка Группа в отдельной строке


Сохраняем настройки и пробуем загрузить. В моем примере получились такие настройки:


Если у вас сгруппировалось после этого только часть групп, то скорее всего есть группы, у которых форматирование отличается от того, которое задали в настройках, либо в прайсе есть еще дополнительный уровень групп, который вы не описали в макросе - такие группы станут первым уровнем. Если прайс делается вручную и каждый уровень групп выделяется цветом вручную, то скорее всего даже не стоит пытаться загрузить группы из такого прайса, потому что вручную могли наверняка использовать разные оттенки какого-то цвета для выделения группы и все их учесть невозможно.


Удаление всех групп из прайса

Если что-то загрузилось с группами не так, можно удалить только группы прайса, при этом оставить товар, чтобы не пропали привязки. Для этого во вкладке Прайсы выберите слева нужный прайс и нажмите эту кнопку:





  • No labels