```1c
    Текст = Новый ЗаписьТекста(ЭтотОбъект.КассаККМ.ПутьКФайлу + "\goods.txt", КодировкаТекста.UTF8);

    Текст.ЗаписатьСтроку("##@@&&");
    Текст.ЗаписатьСтроку("#");
    Текст.ЗаписатьСтроку("$$$DELETEALLWARES");
    Текст.ЗаписатьСтроку("$$$DELETEALLBARCODES");
    Текст.ЗаписатьСтроку("$$$DELETEALLASPECTREMAINS");
    Текст.ЗаписатьСтроку("$$$ADDQUANTITY");

    Тип1 = Перечисления.ТипыНоменклатурыБухгалтерии.Продукция;
    Тип2 = Перечисления.ТипыНоменклатурыБухгалтерии.Товары;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка,
    | Номенклатура.Наименование,
    | Номенклатура.Код,
    | Номенклатура.атпАлкоголь,
    | Номенклатура.ТипНоменклатурыБухгалтерии,
    | Номенклатура.атпВидАлкогольнойПродукции,
    | Номенклатура.атпВидАлкогольнойПродукции.Маркируемый КАК Маркируемый,
    | Номенклатура.атпКрепость
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.ЭтоГруппа = ЛОЖЬ
    | И (Номенклатура.ТипНоменклатурыБухгалтерии = &Тип1
    | ИЛИ Номенклатура.ТипНоменклатурыБухгалтерии = &Тип2)";

    Запрос.УстановитьПараметр("Тип1", Тип1);
    Запрос.УстановитьПараметр("Тип2", Тип2);

    //Запрос.УстановитьПараметр("Родитель", Справочники.Номенклатура.НайтиПоНаименованию("Пиво/Джин"));

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    //формируем строку ШК
    Штрихкоды =";
    Запрос2 = Новый Запрос;
    Запрос2.Текст =
    "ВЫБРАТЬ
    | атпШтрихкоды.Штрихкод
    |ИЗ
    | РегистрСведений.атпШтрихкоды КАК атпШтрихкоды
    |ГДЕ
    | атпШтрихкоды.Владелец = &Владелец";

    Запрос2.УстановитьПараметр("Владелец", ВыборкаДетальныеЗаписи.Ссылка);
    РезультатЗапроса2 = Запрос2.Выполнить();
    ВыборкаДетальныеЗаписи2 = РезультатЗапроса2.Выбрать();
    Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
    Штрихкоды = Штрихкоды + ВыборкаДетальныеЗаписи2.Штрихкод + ",";
    КонецЦикла;

    Цена = ";
    Запрос3 = Новый Запрос;
    Запрос3.Текст =
    "ВЫБРАТЬ
    | ЦеныНоменклатуры.Цена
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    |ГДЕ
    | ЦеныНоменклатуры.Номенклатура = &Номенклатура
    | И ЦеныНоменклатуры.ТипЦен = &ТипЦены";

    Запрос3.УстановитьПараметр("Номенклатура", ВыборкаДетальныеЗаписи.Ссылка);
    Запрос3.УстановитьПараметр("ТипЦены", ЭтотОбъект.ТипЦены);
    РезультатЗапроса3 = Запрос3.Выполнить();
    ВыборкаДетальныеЗаписи3 = РезультатЗапроса3.Выбрать();
    Пока ВыборкаДетальныеЗаписи3.Следующий() Цикл
    Цена = ВыборкаДетальныеЗаписи3.Цена;
    КонецЦикла;

    Поле1 = СтрЗаменить(Строка(ВыборкаДетальныеЗаписи.Код), " ", ") + ";";
    Поле2 = Штрихкоды + ";";
    Поле3 = СтрЗаменить(Строка(ВыборкаДетальныеЗаписи.Наименование), ";", ") + ";";
    Поле4 = СтрЗаменить(Строка(ВыборкаДетальныеЗаписи.Наименование), ";", ") + ";";
    Поле5 = СтрЗаменить(Цена,Символы.НПП,") + ";";
    Поле6 = ";";
    Поле7 = ";";
    Поле8 = "0,1,1,0,0,0,0,1,,,,;";
    Поле9 = ";";
    Поле10 = ";";
    Поле11 = ";";
    Поле12 = "0;";
    Поле13 = ";";
    Поле14 = "1;";
    Поле15 = ";";
    Поле16 = ";";
    Поле17 = "1;";
    Поле18 = ";";
    Поле19 = ";";
    Поле20 = ";";
    Поле21 = ";";
    Поле22 = ";";
    Поле23 = ";";
    Поле24 = ";";
    Поле25 = ";";
    Поле26 = СтрЗаменить(Строка(ВыборкаДетальныеЗаписи.Код)," ",") + ";";
    Поле27 = ";";
    Поле28 = ";";
    Поле29 = ";";
    Поле30 = ";";
    Поле31 = ";";
    Поле32 = ";";
    Поле33 = ";";
    Поле34 = ";";
    Поле35 = ";";
    Поле36 = ";";
    Поле37 = ";";
    Поле38 = ";";
    Поле39 = "1;";
    Поле40 = "1;";
    Поле41 = ";";
    Поле42 = ";";
    Поле43 = ";";
    Поле44 = ";";
    Поле45 = ";";
    Поле46 = ";";
    Поле47 = ";";
    Поле48 = ";";
    Поле49 = ";";
    Поле50 = ";";
    Поле51 = ";";
    Поле52 = ";";
    Поле53 = ";";
    Поле54 = ";";

    Если ВыборкаДетальныеЗаписи.атпАлкоголь Тогда
    Поле55 = "1;";
    Иначе
    Поле55 = ";";
    КонецЕсли;

    Если ВыборкаДетальныеЗаписи.атпВидАлкогольнойПродукции.Код <> 0 Тогда
    Если ВыборкаДетальныеЗаписи.Маркируемый Тогда
    Поле56 = "0;";
    Иначе
    Поле56 = "1;";
    КонецЕсли;
    Иначе
    Поле56 = ";";
    КонецЕсли;

    Если Строка(ВыборкаДетальныеЗаписи.атпКрепость) = "0" Тогда
    Поле57 = ";";
    Иначе
    Поле57 = Строка(ВыборкаДетальныеЗаписи.атпКрепость) + ";";
    КонецЕсли;

    Текст.ЗаписатьСтроку(Поле1 + Поле2 + Поле3 + Поле4 + Поле5 + Поле6 + Поле7 + Поле8 + Поле9 + Поле10 + Поле11 + Поле12 + Поле13 + Поле14 + Поле15 + Поле16 + Поле17 + Поле18 + Поле19 + Поле20 + Поле21 + Поле22 + Поле23 + Поле24 + Поле25 + Поле26 + Поле27 + Поле28 + Поле29 + Поле30 + Поле31 + Поле32 + Поле33 + Поле34 + Поле35 + Поле36 + Поле37 + Поле38 + Поле39 + Поле40 + Поле41 + Поле42 + Поле43 + Поле44 + Поле45 + Поле46 + Поле47 + Поле48 + Поле49 + Поле50 + Поле51 + Поле52 + Поле53 + Поле54 + Поле55 + Поле56 + Поле57);

    КонецЦикла;

    Текст.Закрыть();

    Текст = Новый ЗаписьТекста(ЭтотОбъект.КассаККМ.ПутьКФайлу + "\goods.flg", КодировкаТекста.UTF8);
    Текст.Закрыть();

    Сообщить("Выгрузка выполнена успешно!");
```

Есть кусок кода. Прикручиваю обмен с Frontol к рукописной конфигурации на обычных формах.

На файловой базе он выполняется за 12 сек, на серверной - 20 мин.

На файловой наибольшее время занимают выполнение запросов Запрос2 (Поиск ШК) и Запрос3 (Поиск цены).

На серверной не запускается расчет производительности.

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

Буду рад любым идеям.
---
- Не выполняйте запросы в цикле.
- Подозреваю, что регистр ЦеныНоменклатуры - периодический. Используйте виртуальную таблицу СрезПоследних.
Эти 2 пункта уже дадут колоссальный прирост.

Теперь по мелочам:
- Замените

```1c
    Поле1 = СтрЗаменить(Строка(ВыборкаДетальныеЗаписи.Код), " ", ") + ";";
```

на

```1c
    Поле1 = Формат(ВыборкаДетальныеЗаписи.Код,"ЧГ=")+";";
```

- Добавьте в основной запрос Номенклатура.атпВидАлкогольнойПродукции.Код КАК КодВидаАлкогольнойПродукциии
И замените код
```1c
    Если ВыборкаДетальныеЗаписи.атпВидАлкогольнойПродукции.Код <> 0 Тогда
```

на
```1c
    Если ВыборкаДетальныеЗаписи.КодВидаАлкогольнойПродукциии <> 0 Тогда
```

- Замените

```1c
    Если Строка(ВыборкаДетальныеЗаписи.атпКрепость) = "0" Тогда
    Поле57 = ";";
    Иначе
    Поле57 = Строка(ВыборкаДетальныеЗаписи.атпКрепость) + ";";
    КонецЕсли;
```

 на

```1c
    Поле57 = Формат(ВыборкаДетальныеЗаписи.атпКрепость, "ЧН=") + ";";
```

- А лучше всего все поля вынести в основной запрос и вычислять там на лету при помощи оператора "Выбор" и не париться с вычислениями в выборке.

- Ну и совсем в качестве тонкого тюнинга - это заменить условиев запросе по ИЛИ на объединение двух запросов. Это нужно проверять экпериментально, должно помочь, если по полю ТипНоменклатурыБухгалтерии в номенклатуре есть индексирование.

| И (Номенклатура.ТипНоменклатурыБухгалтерии = &Тип1
| ИЛИ Номенклатура.ТипНоменклатурыБухгалтерии = &Тип2)

Уверен, что при использовании этих рекомендаций время сократится до секунд!

Удачи!
---
Запросы в цикле это печально. Надо написать один запрос с соединениями и в одной выборке всё записать.
---
Дело прям говорит! Для начала переделай код в один запрос.
После чего проверь, почему у тебя расчёт производительности не запускается; отладь, и посмотри где у тебя "узкие" места. Только так....
---
(3) Боюсь не осилю.. Не напишите кратенько алгоритм, как объединить?
---
- Не выполняйте запросы в цикле.
- Подозреваю, что регистр ЦеныНоменклатуры - периодический. Используйте виртуальную таблицу СрезПоследних.
Эти 2 пункта уже дадут колоссальный прирост.

Теперь по мелочам:
- Замените

```1c
    Поле1 = СтрЗаменить(Строка(ВыборкаДетальныеЗаписи.Код), " ", ") + ";";
```

на

```1c
    Поле1 = Формат(ВыборкаДетальныеЗаписи.Код,"ЧГ=")+";";
```

- Добавьте в основной запрос Номенклатура.атпВидАлкогольнойПродукции.Код КАК КодВидаАлкогольнойПродукциии
И замените код
```1c
    Если ВыборкаДетальныеЗаписи.атпВидАлкогольнойПродукции.Код <> 0 Тогда
```

на
```1c
    Если ВыборкаДетальныеЗаписи.КодВидаАлкогольнойПродукциии <> 0 Тогда
```

- Замените

```1c
    Если Строка(ВыборкаДетальныеЗаписи.атпКрепость) = "0" Тогда
    Поле57 = ";";
    Иначе
    Поле57 = Строка(ВыборкаДетальныеЗаписи.атпКрепость) + ";";
    КонецЕсли;
```

 на

```1c
    Поле57 = Формат(ВыборкаДетальныеЗаписи.атпКрепость, "ЧН=") + ";";
```

- А лучше всего все поля вынести в основной запрос и вычислять там на лету при помощи оператора "Выбор" и не париться с вычислениями в выборке.

- Ну и совсем в качестве тонкого тюнинга - это заменить условиев запросе по ИЛИ на объединение двух запросов. Это нужно проверять экпериментально, должно помочь, если по полю ТипНоменклатурыБухгалтерии в номенклатуре есть индексирование.

| И (Номенклатура.ТипНоменклатурыБухгалтерии = &Тип1
| ИЛИ Номенклатура.ТипНоменклатурыБухгалтерии = &Тип2)

Уверен, что при использовании этих рекомендаций время сократится до секунд!

Удачи!
---
```1c
    "ВЫБРАТЬ
    | атпШтрихкоды.Номенклатура
    | атпШтрихкоды.Штрихкод
    |ИЗ
    | РегистрСведений.атпШтрихкоды КАК атпШтрихкоды
    |ГДЕ
    | атпШтрихкоды.Владелец В (&Владелец)";
```

В параметр владелец передавайте массив ссылок из первого запроса.
И левым соединением присоедините цены.