Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
exclude

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


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

...

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

...


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

...



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

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

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

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

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

Image Removed

Можно использовать так же "Код группы" - в этом случае в прайсе у каждого товара в какой-то колонке должен быть указан код группы, совпадающей с кодом здесь:

...


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

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

...

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

...

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

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

...

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

...

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

...


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

...

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


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

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


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

...


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

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

...


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

...


3. Поставить птичку "Загружать дерево категорийДерево"Image Removed

...


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

...


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

...



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


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

...

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

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

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

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

...


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

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

...


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

...


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

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

...

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

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

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

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

...

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

...

Для загрузки групп, которые объединены в одной ячейке, понадобится макрос. Макрос, который приведен ниже, в том числе и объединяет группы, если они в нескольких колонках.

Expand
titleМакрос (разверните)

Code Block
languagevb
Dim idx_row, idx_group, j, k, idx_from, idx_to As Long
Dim group_full As String
Dim group_col As Integer

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

'строка с которой начинается прайс
START_ROW = 13
CLM_LAST = "ZZ" 'последняя колонка в прайсе, буквами

CLMS_LIST = Array(1) 'список индексов колонок, в каком порядке их нужно объединять, индексы колонок вводятся через запятую
'CLMS_LIST = Array(3, 4, 5) 'пример если несколько колонок групп

CHR_DELIMITER = " >> " 'разделитель между группами

CLM_GROUP_IDX = 2 'номер колонки с группой (в нее помещается объединенная группа)
CLM_GROUP_L = "B" 'буква колонки с группой (соответствует CLM_GROUP_IDX, только буква)
CLM_GROUP_LEVEL = 20 'номер колонки с уровнем группировки
CLM_PRICE = 9 'колонка, в которой указана цена товара

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

Set SHT = Sheets(SHEET_IDX)
SHT.Select
Cells.Select
Selection.ClearOutline
Selection.UnMerge

SHT.Cells(1, 1).Select

row_count = SHT.UsedRange.Rows.Count
prev_level = Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")

'формируем группы из нескольких колонок
For i = START_ROW To row_count
	group_text = ""
	If Sht.Cells(i, CLM_PRICE).Value <> "" Then
		For j = LBound(CLMS_LIST) To UBound(CLMS_LIST)
			clm_group = CLMS_LIST(j)
			
			If SHT.Cells(i, clm_group).Value <> "" Then
				If (group_text = "") Then
					group_text = Trim(SHT.Cells(i, clm_group).Value)
				Else
					group_text = group_text & CHR_DELIMITER & Trim(SHT.Cells(i, clm_group).Value)
				End If
			Else
			   Exit For
			End If
		Next j
				
		If group_text <> "" Then
			SHT.Cells(i, CLM_GROUP_IDX).Value = group_text
		Else
			SHT.Cells(i, CLM_GROUP_IDX).Value = "не распределено"
		End If
	Else
		Sht.Cells(i, CLM_GROUP_IDX).Value = ""
	End if
Next i


'сортировка по колонке с группой
Columns(CLM_GROUP_L & ":" & CLM_GROUP_L).Select
SHT.Sort.SortFields.Clear
SHT.Sort.SortFields.Add Key:=Range(CLM_GROUP_L & "1"), _
	SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With SHT.Sort
	.SetRange Range("A" & CStr(START_ROW) & ":" & CLM_LAST & CStr(row_count))
	.Header = xlNo
	.MatchCase = False
	.Orientation = xlTopToBottom
	.SortMethod = xlPinYin
	.Apply
End With


'Добавление строчек с группами
idx_row = START_ROW

Do While ActiveSheet.Cells(idx_row, CLM_GROUP_IDX).Value <> ""
	group_full = ActiveSheet.Cells(idx_row, CLM_GROUP_IDX).Value
	ActiveSheet.Cells(idx_row, CLM_GROUP_LEVEL).Value = ""
	
	'Разделитель
	group_part = Split(group_full, CHR_DELIMITER)
			
	For i = LBound(group_part) To UBound(group_part)
		If group_part(i) <> prev_level(i) Then
			Rows(CStr(idx_row) & ":" & CStr(idx_row)).Select
			Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
			
			ActiveSheet.Cells(idx_row, CLM_GROUP_LEVEL).Value = i + 1
			ActiveSheet.Cells(idx_row, CLM_GROUP_IDX).Value = group_part(i)
			prev_level(i) = group_part(i)
			
			idx_row = idx_row + 1
		End If
	Next i
	
	idx_row = idx_row + 1
Loop

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

Note

Перед копированием макроса из инструкции переключите раскладку клавиатуры на русский язык

Макрос добавляется в карточке прайса во вкладке “Макрос”

Image Added

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

Image Added

Пример прайса (группы в каждой строке в первых трех колонках):

Image Added

Пример настройки (результат помещается в колонку А):

Image Added

Note

Если прайс большой, то макрос может выполняться долго

После выполнения макроса в файле будет такой результат:

...

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

Для его загрузки указываются следующие настройки:

...

В Название группы и Название вышестоящей группы указывается колонка А, т.е. та колонка, в которую записывался результат макроса (CLM_GROUP_IDX )

Колонка 20 (CLM_GROUP_LEVEL из макроса) указывается как Код вышестоящей группы.

Устанавливаются птички Группа в отдельной строке и Дерево. Загрузка группы по наименованию.

В строку, с которой начинается загрузка прайса, указывается строка, в которой название первой группы.

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

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

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


Макрос
Code Block
languagevb
###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

 



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

View file
nameПроверка формата ячейки.xlsm

...

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

...


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

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

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

...


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

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

...


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

...


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

...

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


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

...


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

...


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

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

...


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

...

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

...

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

...

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

...


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

...


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

...


...


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

...


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

...



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

...


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

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

...


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

...

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

...


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

...


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

...


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

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

...