Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Загрузка больших объемов данных

Всем счастья. Задача такая. Есть у меня файл аксес. В нем хранится перечень номенклатур. Их много. Порядка 600000. Необходимо написать загрузку этих номенклатур в базу. Причем не одноразовую, в чтобы выполнять ее раз в месяц. Если есть новые добавить, если нет, то обновить старые при необходимости. Загрузку написал. Но она во-первых, достаточно медленная. Во-вторых, комп осиляет только первые 80000 штук. Как быть, что делать? Какие советы? Прошу помощи? И дай бог всем здоровья.
Ответ:
Ну там на самом деле в теории не так грустно. Т.е. база хранится в одном файле и в одной файловой группе. Создается еще группа и туда переносятся те таблицы SQL что нас интересуют... т.е. храниться будет в разных файлах, которые можно физически разнести.
Вопрос: Как сделать выборку, не заносит данные в макет после запроса

Здравствуйте! необходимо чтобы формировался список численности по подразделениям.
Создаю внешний отчет. 1С8.3
Подскажите что делаю не так, если не заносятся данные в макет после выборки из запроса. в тз после запроса все правильно считается вроде.
Код:
ТабДок=Новый ТабличныйДокумент();
 
Макет = Отчет.РеквизитМакет;
 
ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Подразделение");
    ТЗ.Колонки.Добавить("РШ");
    ТЗ.Колонки.Добавить("РФ");
    ТЗ.Колонки.Добавить("РП");
    ТЗ.Колонки.Добавить("РС");
    ТЗ.Колонки.Добавить("РВР");
    ТЗ.Колонки.Добавить("РВД");
 
    ТЗ.Колонки.Добавить("СпШ");
    ТЗ.Колонки.Добавить("СпФ");
    ТЗ.Колонки.Добавить("СпП");
    ТЗ.Колонки.Добавить("СпС");
    ТЗ.Колонки.Добавить("СпВР");
    ТЗ.Колонки.Добавить("СпВД");
 
    Запрос1=Новый Запрос;
    Запрос1.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ТекущиеКадровые.ТекущееПодразделение КАК ТекущееПодразделение,
    |    ДопРеквизитыСрезПоследних.Категория КАК Категория,
    |    СУММА(ВЫБОР
    |            КОГДА СостоянияСотрудниковСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Факт)
    |                ТОГДА 1
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК ФАКТ,
    |    СУММА(ВЫБОР
    |            КОГДА СостоянияСотрудниковСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ОтпускПоУходуЗаРебенком)
    |                ТОГДА 1
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК ВД,
    |    СУММА(ВЫБОР
    |            КОГДА ДопРеквизитыСрезПоследних.ХарактерРаботы = ЗНАЧЕНИЕ(Перечисление.ХарактерРаботы.РаботающийНаВременнойРаботе)
    |                ТОГДА 1
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК ВР,
    |    СУММА(ВЫБОР
    |            КОГДА ИсторияСотрСрезПоследних.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.Совместительство)
    |                    ИЛИ ИсторияСотрСрезПоследних.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ВнутреннееСовместительство)
    |                ТОГДА 1
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК Сов,
    |    СУММА(ВЫБОР
    |            КОГДА ДопРеквизитыСрезПоследних.ХарактерРаботы = ЗНАЧЕНИЕ(Перечисление.ХарактерРаботы.РаботающийНаПостояннойРаботе)
    |                    И СостоянияСотрудниковСрезПоследних.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ОтпускПоУходуЗаРебенком)
    |                    И ИсторияСотрСрезПоследних.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.Совместительство)
    |                    И ИсторияСотрСрезПоследних.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ВнутреннееСовместительство)
    |                ТОГДА 1
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК Пост
    |ИЗ
    |    РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровые КАК ТекущиеКадровые
    |        ПО СостоянияСотрудниковСрезПоследних.Сотрудник = ТекущиеКадровые.Сотрудник
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопРеквизиты.СрезПоследних КАК ДопРеквизитыСрезПоследних
    |        ПО СостоянияСотрудниковСрезПоследних.Сотрудник = ДопРеквизитыСрезПоследних.Сотрудник
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияСотр.СрезПоследних КАК ИсторияСотрСрезПоследних
    |        ПО СостоянияСотрудниковСрезПоследних.Сотрудник = ИсторияСотрСрезПоследних.Сотрудник
    |ГДЕ
    |    ТекущиеКадровые.ТекущееПодразделение В ИЕРАРХИИ(&ТекущееПодразделение)
    |
    |СГРУППИРОВАТЬ ПО
    |    ТекущиеКадровые.ТекущееПодразделение,
    |    ДопРеквизитыСрезПоследних.Категория
    |
    |УПОРЯДОЧИТЬ ПО
    |    ТекущееПодразделение
    |ИТОГИ
    |    СУММА(ФАКТ),
    |    СУММА(ВД),
    |    СУММА(ВР),
    |    СУММА(Сов),
    |    СУММА(Пост)
    |ПО
    |    ТекущееПодразделение ТОЛЬКО ИЕРАРХИЯ";
 
    Запрос1.УстановитьПараметр("ТекущееПодразделение",Подразделение);
    РезультатЗапроса = Запрос1.Выполнить(); 
    ТабДок.Очистить();
  
    Шапка=Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Подразделение=Подразделение; 
    ТабДок.Вывести(Шапка);
 
    ОснБлок=Макет.ПолучитьОбласть("ОснБлок");
    
    Выборка = РезультатЗапроса.Выбрать(); 
 
    Пока Выборка.Следующий() цикл
     
        Стр = ТЗ.Добавить();
     
        Стр.Подразделение=Выборка.ТекущееПодразделение;
        ОснБлок.Параметры.Подразделение = Стр.Подразделение;
     
        ОснБлок.Параметры.Заполнить(Выборка);
        Если Выборка.Категория= Справочники.КВ_КатегорииСотрудников.НайтиПоКоду("000000001") Тогда    //специалисты
            Стр.СпФ=Выборка.Факт;
            Стр.СпП=Выборка.Пост;
            Стр.СпС= Выборка.Сов;
            Стр.СпВР= Выборка.ВР;
            Стр.СпВД= Выборка.ВД;
        ИначеЕсли  Выборка.Категория= Справочники.КВ_КатегорииСотрудников.НайтиПоКоду("000000002") Тогда  //руковод
            Стр.РФ=Выборка.Факт;
            Стр.РП=Выборка.Пост;
            Стр.РС= Выборка.Сов;
            Стр.РВР= Выборка.ВР;
            Стр.РВД= Выборка.ВД;
        КонецЕсли;
         
        ТабДок.Вывести(ОснБлок);
     
    КонецЦикла;
               
    тз.ВыбратьСтроку(); 
 
ПС.:очень мало опыта.
Ответ:
Спасибо! Уже мне помогли.
Код:
 Если Выборка.Категория= Справочники.КВ_КатегорииСотрудников.НайтиПоКоду("000000001") Тогда    //специалисты
            ОснБлок.Параметры.СпФ   =Выборка.Факт;
            ОснБлок.Параметры.СпП   =Выборка.Пост;
            ОснБлок.Параметры.СпС   = Выборка.Сов;
            ОснБлок.Параметры.СпВР = Выборка.ВР;
            ОснБлок.Параметры.СпВД = Выборка.ВД;
        ИначеЕсли  Выборка.Категория= Справочники.КВ_КатегорииСотрудников.НайтиПоКоду("000000002") Тогда  //руковод
            ОснБлок.Параметры.РФ   = Выборка.Факт;
            ОснБлок.Параметры.РП   = Выборка.Пост;
            ОснБлок.Параметры.РС   = Выборка.Сов;
            ОснБлок.Параметры.РВР = Выборка.ВР;
            ОснБлок.Параметры.РВД = Выборка.ВД;
        КонецЕсли;
Вопрос: Работа с большим объемом информации в 1С УТ11 клиент-сервер

Есть база УТ 11.1, подключена по технологии Клиент-сервер
В ней большой справочник "Партнеры" - порядка 200000 записей.
Есть выгруженная из внешнего источника данных таблица телефонных звонков с графами
"Длительность звонка" и "Телефонный номер", количество строк может быть любым.
Требуется по телефонному номеру найти партнеров для всех строк из этой таблицы.
Я написал процедуру примерно такого вида:

&НаСервере
Процедура СопоставитьПартнеров()

//Операторы загрузки данных из внешней таблицы в таблицу значений ВнешТЗ
...

//Попытка найти партнеров по номеру телефона
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ *
|ПОМЕСТИТЬ ВнешТЗ
|ИЗ &ВнешТЗ КАК ВнешТЗ
|;
|ВнешТЗ.ДлительностьЗвонка КАК Длительность,
|ВнешТЗ.ТелефонныйНомер КАК ТелефонныйНомер,
|ПартнерыКИ.Ссылка КАК Партнер
|ИЗ
|ВнешТЗ КАК ВнешТЗ
|ЛЕВОЕ СОЕДИНЕНИЕ
|Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКИ
|ПО ВнешТЗ.ТелефонныйНомер ПОДОБНО (""%"" + ПартнерыКИ.НомерТелефона)";

Запрос.Параметры.Вставить("ВнешТЗ", ВнешТЗ);
Рез = Запрос.Выполнить();

//Дальнейшая обработка результата запроса
...
КонецПроцедуры


Проблема такая:
Если во внешней таблицы записей немного (в пределах 1000), то запрос отрабатывает нормально.
Но если их передано очень много (порядка 100000), то на выполнении запроса 1С мертво подвисает на
несколько часов, и вместе с ней подвисает и сервер, на котором она установлена, т.е. не могут работать
и другие пользователи этой базы, и даже пользователи других программ, установленных на этом сервере.
Подскажите, пожалуйста, как грамотно получить данные из справочника партнеров, чтобы запрос выполнялся быстрее, или хотя бы чтобы он не подвешивал сервер.
Заранее благодарен

Модератор: Тема перенесена из форума "Microsoft SQL Server".
Ответ:
Ярошенко Павел
Zerro, к сожалению, отказаться от ПОДОБНО нельзя, поскольку в базе Номера телефонов могут начинаться то с +7, то с 8, а могут и вообще не содержать в начале префикса

храни правильно..приводи к нужному виду.
Делай сперва запрос с отбором по подобное а потом соединяй с другими таблицами
Вопрос: запрос: пропадают данные при группировке

вот такой запрос:

ВЫБРАТЬ
    ИнвентаризацияПоСкладуМатериалы.Номенклатура,
    СУММА(ИнвентаризацияПоСкладуМатериалы.Количество) КАК Количество
ПОМЕСТИТЬ Таблица
ИЗ
    Документ.ИнвентаризацияПоСкладу КАК ИнвентаризацияПоСкладу
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИнвентаризацияПоСкладу.Материалы КАК ИнвентаризацияПоСкладуМатериалы
        ПО (ИнвентаризацияПоСкладуМатериалы.Ссылка = ИнвентаризацияПоСкладу.Ссылка)
ГДЕ
    ИнвентаризацияПоСкладу.Текущая = ИСТИНА

СГРУППИРОВАТЬ ПО
    ИнвентаризацияПоСкладуМатериалы.Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ХозрасчетныйОстатки.Номенклатура,
    СУММА(ХозрасчетныйОстатки.КоличествоОстаток)
ИЗ
    РегистрНакопления.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таблица.Номенклатура КАК НаименованиеНоменклатуры,
    СУММА(Таблица.Количество) КАК КоличествоОст
ИЗ
    Таблица КАК Таблица

СГРУППИРОВАТЬ ПО
    Таблица.Номенклатура

почему-то, если помещаю во временную таблицу с послед.выборкой с группировкой, данных получаю 0 строк. Если оставляю просто секцию ВЫБРАТЬ - ОБЪЕДИНИТЬ ВСЕ - ВЫБРАТЬ  данные есть только несгруппированные. Ночью крутил-вертел, сейчас  ... вроде простейший запрос -- где я туплю?
Ответ: по ходу вопрос: обращение через точку смущает - ИнвентаризацияПоСкладуМатериалы.Ссылка.Текущая , вроде как везде говорят что это плохо , или я что-то не правильно переварил?
() понял
Вопрос: Долго проводится документ

Документ "Сдельный Наряд" очень долго проводится
Сделал замер производительности
31%
Код:

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

и
43%
Код:

Процедура ЗарегистрироватьПерерасчетыПоФактическойВыработке()
   
    Запрос = Новый Запрос(
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Основные.ФизЛицо,
    |    Основные.Регистратор КАК Регистратор,
    |    Основные.Организация,
    |    Основные.Сотрудник
    |ИЗ
    |    РегистрНакопления.ФактическаяВыработкаРаботниковОрганизаций КАК ФактическаяВыработка
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Основные
    |        ПО ФактическаяВыработка.Период >= Основные.ПериодДействияНачало
    |            И ФактическаяВыработка.Период <= Основные.ПериодДействияКонец
    |            И (Основные.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок))
    |            И ФактическаяВыработка.Сотрудник = Основные.Сотрудник
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ПерерасчетОсновныхНачислений КАК Перерасчеты
    |        ПО (Перерасчеты.ОбъектПерерасчета = Основные.Регистратор)
    |            И (Перерасчеты.ФизЛицо = Основные.ФизЛицо)
    |            И (Перерасчеты.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка))
    |ГДЕ
    |    ФактическаяВыработка.Регистратор = &Регистратор
    |    И Перерасчеты.ФизЛицо ЕСТЬ NULL 
    |    И Основные.Регистратор ЕСТЬ НЕ NULL 
    |
    |УПОРЯДОЧИТЬ ПО
    |    Регистратор");
   
    Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);
   
    Выборка = Запрос.Выполнить().Выбрать();
    ПроведениеРасчетов.ДописатьПерерасчетыОсновныхНачислений(Выборка);
   
КонецПроцедуры

УПП 1.3
8.3
клиент-сервер
по времени занимал раньше примерно 20 мин максимум ,после перехода с 8.2 на 8.3 проведение доков с большим объемом данных может длиться часами
может можно как то оптимизировать?
Ответ:
Ну пусть тогда почитает для чего вот эта колонка

Вложения:

  • Размер файла:
    73,2 КБ
    Просмотров:
    6
Вопрос: 8.3 Упр.прил.: Параметры на сервер через временное хранилище или через структуру ?

Слышал где-то, что большие объемы данных с клиента на сервер лучше посылать через временное хранилище, но вот попробовал и возник вопрос: на клиенте собираются данные в кучу массивов- все вместе где-то 20 тыс. элементов общим объемом примерно 0,7 Мб. Если посылаю их через врем.хран. на сервер, то уходит 4,2 Мб, а если просто структуру, то 3,9 Мб. В скорости разницы особой не заметил (не мерил поэтому). Так чем же врем.хран. лучше ? Я уж даже не спрашиваю, с чего так объем данных растет...
Ответ: Ну в данном случае думаю лучше просто передавать структуру т.е. вариант 2
Вопрос: Перенос данных по com соединению

Всем здравствуйте. Задача такая: Имеется 2 идентичные базы УПП. Необходимо перенести движения с Р.С.Работники организаций в Р.С.Работники (данный регистр не заполнялся, он пустой). Без создания документов. Есть аналогичная обработка, с переносом аналитики вроде.
Выгрузить набор регистраторов с базы источника вроде получилось. Загвоздка в том, чтоб загрузить теперь данные в приемник. Т.к. в данных регистрах есть такие реквизиты, как подразделения и должности. в которых используются 2 разных справочника: в первом Подразделения организаций и Должности организаций, во втором Подразделения и Должности. Данные справочники можно сравнить по коду и наименованию. Эти данные у них одинаковые. Только как можно это сделать???
Процедура по выгрузке регистраторов из исочника:
1C
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
Процедура ЗагрузитьДанныеВТаблицы(Кнопка)     
    ТаблицаРегистраторовКОМ.Очистить();//загрузка наборов движений РСРаботникиОрганизации
    ИндексТаблицаРегистраторовКОМ = 0;
    
    База = Неопределено;
    Соединение = Неопределено;
    
    Если Не ПроверкаПодключения(База, Соединение) Тогда
        Возврат;
    КонецЕсли;
    
    Попытка
        ЗапросКОМ = Соединение.NewObject("Запрос");
        ЗапросКОМ.Текст = 
        "ВЫБРАТЬ
        |   РаботникиОрганизаций.Регистратор.Ссылка КАК Регистратор,
        |   РаботникиОрганизаций.Регистратор.Представление КАК Представление
        |ИЗ
        |   РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
        |ГДЕ
        |   РаботникиОрганизаций.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
        |
        |УПОРЯДОЧИТЬ ПО
        |   РаботникиОрганизаций.Регистратор.Дата
        |АВТОУПОРЯДОЧИВАНИЕ";
    
    ЗапросКОМ.УстановитьПараметр("ДатаНачала", ДатаНачало);
    ЗапросКОМ.УстановитьПараметр("ДатаОкончания", ДатаОкончание);
    
    ВыборкаКОМ = ЗапросКОМ.Выполнить().выбрать(); 
 
        Пока ВыборкаКОМ.Следующий() Цикл
            НовыйРегистратор = ТаблицаРегистраторовКОМ.Добавить();
            НовыйРегистратор.Ссылка = ВыборкаКОМ.Регистратор;
        КонецЦикла;
        
    Исключение
        ТекстОшибки = СформироватьТекстСообщения(ОписаниеОшибки());
        Сообщить (ТекстОшибки);
        Предупреждение (ТекстОшибки);
        Отказ = Истина;
        Возврат
    КонецПопытки;   
    Если ТаблицаРегистраторовКОМ.Количество() > 0 Тогда
        
        СравнитьИсточникПриемник();
        ЭлементыФормы.Пропустить.Доступность    = Истина;
        ЭлементыФормы.Записать.Доступность      = Истина;
    Иначе
        Предупреждение ("Не обнаружено объектов для записи!");
        ЭлементыФормы.Пропустить.Доступность    = Ложь;
        ЭлементыФормы.Записать.Доступность      = Ложь;
    КонецЕсли;
    
КонецПроцедуры
Остальные процедуры взяты из похожей обработки, они не изменены, если необходимы просто для примера и ознакомления:
1C
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
Процедура СравнитьИсточникПриемник()  
    
    Регистратор = ТаблицаРегистраторовКОМ[ИндексТаблицаРегистраторовКОМ].Ссылка;        
    Представление = ТаблицаРегистраторовКОМ[ИндексТаблицаРегистраторовКОМ].Представление;
    Набор = Регистратор.Получитьобъект().Движения.Налоговый;
    Набор.Прочитать();
    
    ЭлементыФормы.ТаблицаДвиженийКОМ.Значение=ЗначениеИЗСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Набор.Выгрузить())); 
    ЭлементыФормы.ТаблицаДвиженийКОМ.СоздатьКолонки();
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |   НалоговыйДвиженияССубконто.СчетДт,
    |   НалоговыйДвиженияССубконто.СчетКт,
    |   НалоговыйДвиженияССубконто.Регистратор.Ссылка КАК Регистратор
    |ИЗ
    |   РегистрБухгалтерии.Налоговый.ДвиженияССубконто(&нПериода, &кПериода, Регистратор = &РегистраторКОМ, , ) КАК НалоговыйДвиженияССубконто";
    
    Запрос.УстановитьПараметр("кПериода", ДатаОкончание);
    Запрос.УстановитьПараметр("нПериода", ДатаНачало);
    Запрос.УстановитьПараметр("РегистраторКОМ", ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Регистратор)));
    
    Выборка= Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        мДокумент=Выборка.Регистратор;
        мДокументКОМ=  ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Представление));
        ДокументКОМ= ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Представление));
        Сообщить(  Выборка.Регистратор);
        Сообщить( "в удален.базе"+мДокументКОМ)  ;
        Набор =  Выборка.Регистратор.Получитьобъект().Движения.Налоговый;       
        Набор.Прочитать();
        ЭлементыФормы.ТаблицаДвижений.Значение=Набор.Выгрузить();
        ЭлементыФормы.ТаблицаДвижений.СоздатьКолонки();     
    КонецЦикла; 
    
    ВизуальноеСравнение ();
    
КонецПроцедурЫ
Процедура загружает данные в приемник
1C
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
58
59
60
61
62
Процедура  ЗагрузитьВсеНажатие(Элемент)
    
    Сообщить("Обработка запущена: "+ТекущаяДата()+", пожалуйста, дождитесь окончания. " );
                
    
    ТаблицаРегистраторовКОМ.Очистить();
    ИндексТаблицаРегистраторовКОМ = 0;
    
    База = Неопределено;
    Соединение = Неопределено;
    
    Если Не ПроверкаПодключения(База, Соединение) Тогда
        Возврат;
    КонецЕсли;
    
    Попытка
        ЗапросКОМ = Соединение.NewObject("Запрос");
        ЗапросКОМ.Текст = 
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |   НалоговыйДвиженияССубконто.Регистратор.Ссылка КАК Регистратор
        |ИЗ
        |   РегистрБухгалтерии.Налоговый.ДвиженияССубконто(
        |           &нПериода,
        |           &кПериода,
        |           СчетДт.Ссылка = &СчетОтбора
        |               ИЛИ СчетКт.Ссылка = &СчетОтбора,
        |           ,
        |           ) КАК НалоговыйДвиженияССубконто
        |
        |УПОРЯДОЧИТЬ ПО
        |   НалоговыйДвиженияССубконто.Регистратор.Дата";
        
        ЗапросКОМ.УстановитьПараметр("СчетОтбора",Соединение.ПланыСчетов.Налоговый.НайтиПоКоду(Счет.Код));
        ЗапросКОМ.УстановитьПараметр("нПериода", ДатаНачало);
        ЗапросКОМ.УстановитьПараметр("кПериода",ДатаОкончание);  
        
        ВыборкаКОМ = ЗапросКОМ.Выполнить().выбрать();       
        
        Пока ВыборкаКОМ.Следующий() Цикл
            НовыйРегистратор = ТаблицаРегистраторовКОМ.Добавить();
            НовыйРегистратор.Ссылка = ВыборкаКОМ.Регистратор;
        КонецЦикла;
        
    Исключение
        ТекстОшибки = СформироватьТекстСообщения(ОписаниеОшибки());
        Сообщить (ТекстОшибки);
        Предупреждение (ТекстОшибки);
        Отказ = Истина;
        Возврат
    КонецПопытки;   
    
    //если регистраторов больше 0
    Если ТаблицаРегистраторовКОМ.Количество() > 0 Тогда
        
        СравнитьИсточникПриемникТЗ();
    Иначе
        Сообщить("Не обнаружено объектов для записи!");
    КонецЕсли;
    Сообщить("Обработка завершена:  "+ТекущаяДата());   
    
    
КонецПроцедуры
Ответ:
Сообщение от Nenaviju1C
Конвертация данных тебе в помощь.
причем и делается достаточно быстро
Вопрос: Выборка по совпадениям

Код выборки:
Кликните здесь для просмотра всего текста
1C
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
58
59
60
61
62
63
64
65
66
ЗапросШт = новый Запрос;
    ЗапросШт.Текст = "ВЫБРАТЬ
                     |  ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Наименование КАК Подразделение,
                     |  ШтатноеРасписаниеОрганизаций.Должность.Наименование КАК Должность,
                     |  ШтатноеРасписаниеОрганизаций.а_ПроцентВредность,
                     |  ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Код КАК кодПодр,
                     |  ШтатноеРасписаниеОрганизаций.Должность.Код КАК кодДолжн
                     |ИЗ
                     |  РегистрСведений.ШтатноеРасписаниеОрганизаций КАК ШтатноеРасписаниеОрганизаций
                     |
                     |СГРУППИРОВАТЬ ПО
                     |  ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Наименование,
                     |  ШтатноеРасписаниеОрганизаций.Должность.Наименование,
                     |  ШтатноеРасписаниеОрганизаций.а_ПроцентВредность,
                     |  ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Код,
                     |  ШтатноеРасписаниеОрганизаций.Должность.Код
                     |
                     |УПОРЯДОЧИТЬ ПО
                     |  Подразделение,
                     |  ШтатноеРасписаниеОрганизаций.Должность.Код";        
    
    Выборка = ЗапросШт.Выполнить().Выбрать(ОбходРезультатаЗапроса.Прямой);
     Podr=выборка.Подразделение;
 
    Пока Выборка.Следующий() Цикл
        
          ЗаполнитьЗначенияСвойств(ОбластьПодразделение.Параметры,Выборка); 
                    
        ЗапросСотр = новый Запрос;
        ЗапросСотр.Текст = "ВЫБРАТЬ
                           |    СотрудникиОрганизаций.Наименование КАК ФИО,
                           |    СотрудникиОрганизаций.ТарифныйРазряд.Наименование,
                           |    СотрудникиОрганизаций.ДатаУвольнения КАК дата,
                           |    СотрудникиОрганизаций.Должность.Код как Дкод,
                           |    СотрудникиОрганизаций.ПодразделениеОрганизации.Код как Пкод
                           |ИЗ
                           |    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
                           |ГДЕ
                           |    СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код = &кодПодразд
                           |    И СотрудникиОрганизаций.ТекущаяДолжностьОрганизации.Код = &кодДолжност
                           |
                           |СГРУППИРОВАТЬ ПО
                           |    СотрудникиОрганизаций.Наименование,
                           |    СотрудникиОрганизаций.ТарифныйРазряд.Наименование,
                           |    СотрудникиОрганизаций.ДатаУвольнения,
                           |    СотрудникиОрганизаций.Должность.Код,
                           |    СотрудникиОрганизаций.ПодразделениеОрганизации.Код";
             ЗапросСотр.УстановитьПараметр("кодДолжност",выборка.кодДолжн);            
             ЗапросСотр.УстановитьПараметр("кодПодразд",выборка.кодПодр);
        
               ЗаполнитьЗначенияСвойств(Областьданные.Параметры,Выборка);
 
             ВыборкаСотр = ЗапросСотр.Выполнить().Выбрать(ОбходРезультатаЗапроса.Прямой);
 
             Пока  ВыборкаСотр.Следующий() Цикл
                    
                       ЗаполнитьЗначенияСвойств(Областьданные.Параметры,ВыборкаСотр); 
                
                  конеццикла;
                    если  Podr<>выборка.Подразделение тогда 
            ТабДок.Вывести(ОбластьПодразделение,1);
            podr=выборка.Подразделение      конецЕсли;
        
        ТабДок.Вывести(ОбластьДанные,1);     
        
    КонецЦикла;


Коды должностей и подразделений должны совпадать:
3=6 столбцу 4=7,
а они не совпадают
Ответ: нашел в чем косяк


если второй запрос пустой, то подставляется предыдущая запись


грубо говоря если во втором запросе по данным критериям записей нет, то подставляется запись, которая была найдена до этого
Вопрос: Загрузка данных из Excel в 1с

Всем привет! Ребята подскажите пож-та есть обработка по загрузке из эксель в 1с., при загрузке он обходит каждую строку в эксель и записывает , в итоге получается он перезаписывает один и тот же объект, в справочнике должно быть около 1000 моделей авто в итоге только одна запись, самая последняя строка которая в экселе

Попытка
        ExcelApplication = Новый COMObject("Excel.Application");
        ExcelApplication.WorkBooks.Open(Объект.ВыборФайла);
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    //Открываем необходимый лист

    ExcelApplication.Sheets(1).Select();
    //Получим количество строк и колонок.

    //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel

    Версия = Лев(ExcelApplication.Version,Найти(ExcelApplication.Version,".")-1);
    Если Версия = "8" тогда
        ВсегоСтрок = ExcelApplication.Cells.CurrentRegion.Rows.Count;
        ВсегоСтолбцов = Макс(ExcelApplication.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ВсегоСтрок = ExcelApplication.Cells(1,1).SpecialCells(11).Row;
        ВсегоСтолбцов = ExcelApplication.Cells(1,1).SpecialCells(11).Column;
    Конецесли;

    //считываем первую строку и генерируем колонки в таблице Значений

    ТЗКонтрагентов = Новый ТаблицаЗначений;
        Сч = 1;
    Пока ЗначениеЗаполнено(ExcelApplication.Cells(1, Сч).Text) Цикл
        ИмяКолонки = ExcelApplication.Cells(1, Сч).Text;
        ИмяКолонки = СтрЗаменить(ИмяКолонки," ","");// убираем из имени колонок пробелы

        ИмяКолонки = СтрЗаменить(ИмяКолонки,"/","");// убираем слеш

        ИмяКолонки = СтрЗаменить(ИмяКолонки,".","");// убираем точки

        ИмяКолонки = СтрЗаменить(ИмяКолонки,"-","");// убираем точки

        ТЗКонтрагентов.Колонки.Добавить(ИмяКолонки);
        Сч = Сч + 1;
    КонецЦикла;
    // Добавляем значения строк начиная со второй

  Для СтрСЧ = 2 по ВсегоСтрок Цикл 
      НоваяСтрока = ТЗКонтрагентов.Добавить();
      Для НомерКолонки = 1 по ТЗКонтрагентов.Колонки.Количество() Цикл
          Если ЗначениеЗаполнено(ExcelApplication.Cells(СтрСЧ,1).Text) = Истина Тогда//До первой пустой строки

          //заполняем строку значениями

          ТекущееЗначение = ExcelApplication.Cells(СтрСЧ, НомерКолонки).Text;
          ИмяКолонки = ТЗКонтрагентов.Колонки[НомерКолонки-1].Имя;
          НоваяСтрока[ИмяКолонки] = ТекущееЗначение;
          КонецЕсли;
      КонецЦикла;
  КонецЦикла;
ExcelApplication.Quit();
КонтрГр = Справочники.Контрагенты.ПустаяСсылка();
Для Каждого Стр ИЗ ТЗКонтрагентов Цикл
            Запрос = Новый Запрос;
            Запрос.Текст="ВЫБРАТЬ
                         |    асМодели.Наименование,
                         |    асМодели.НаименованиеПолное,
                         |    асВариантыКомплектации.Наименование КАК НаименованиеКомпл,
                         |    асВариантыКомплектации.НаименованиеПолное КАК НаименованиеПолноеКомпл,
                         |    асВариантыКомплектации.Ссылка КАК комплек,
                         |    асМодели.Ссылка КАК модель,
                         |    асВариантыКомплектации.Владелец
                         |ИЗ
                         |    Справочник.асВариантыКомплектации КАК асВариантыКомплектации
                         |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.асМодели КАК асМодели
                         |        ПО асВариантыКомплектации.Владелец = асМодели.Ссылка";
            
            
            Выборка = Запрос.Выполнить().Выбрать();
            Пока Выборка.Следующий() Цикл
                 МодельАвто = Выборка.модель.ПолучитьОбъект();
                 МодельАвто.НаименованиеПолное = Стр.Марка + " " + Стр.Модель + " " + Стр.Поколение + " " + "(" + Стр.Годот + "-" + Стр.ГодДо+ ")";
                 МодельАвто.Наименование = Стр.Марка + " " + Стр.Модель + " " + Стр.Поколение;
                 МодельАвто.Записать();
                 
                 КомплекАвто = Выборка.комплек.ПолучитьОбъект();
                 КомплекАвто.Наименование =  Стр.Модификация + " " + "кузов" + " " + Стр.Серия;
                 КомплекАвто.НаименованиеПолное =  Стр.Модификация + " " + "(" + Стр.Годот + "-" + Стр.ГодДо+ ")"+" " + "кузов" + " " + Стр.Серия;
                 КомплекАвто.Владелец = МодельАвто.Ссылка; 
                 КомплекАвто.Записать();
                 
            КонецЦикла;     
           
КонецЦикла;
Ответ: сегодня только писал обработку по загрузке данных из файла
Вопрос: Выборка данных из номенклатуры по бренду

Помогите пожалуйста, создал отчет в конфигураторе 1С:Предприятие 8.3, учебная версия (8.3.5.1383), не могу получить даже сообщение о начале цикла. Эта конфа установлена на домашнем локальном пк.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&НаСервере
Процедура Команда1(Команда)
    // Вставить содержимое обработчика.
    //Таб = Новый ТаблицаЗначений;
    //Таб.Колонки.Добавить("Код");
    //Таб.Колонки.Добавить("Товар");
Спр = Справочники.Номенклатура; 
Выборка = Спр.Выбрать();
Сообщить("начало цикла");   
Пока Выборка.Следующий() = 1 Цикл // начало перебора элементов справочника в цикле
//действия с очередным элементом ...
 
    Если Спр.Бренд="БИГПЕН" Тогда 
        Сообщить("БИГПЕН");
    КонецЕсли;
КонецЦикла;
КонецПроцедуры
Ответ:
Сообщение от barracuda1991
Почему он ругается на переменную, если на клиенте ??
Потому что менеджеры доступны только на сервере.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&НаКлиенте
Процедура Команда1(Команда)
    Команда1НаСервере();
КонецПроцедуры
 
&НаСервере
Процедура Команда1НаСервере()
    // Вставить содержимое обработчика.
    //Таб = Новый ТаблицаЗначений;
    //Таб.Колонки.Добавить("Код");
    //Таб.Колонки.Добавить("Товар");
Спр = Справочники.Номенклатура; 
Выборка = Спр.Выбрать();
Сообщить("начало цикла");   
Пока Выборка.Следующий() = 1 Цикл // начало перебора элементов справочника в цикле
//действия с очередным элементом ...
 
    Если Спр.Бренд="БИГПЕН" Тогда 
        Сообщить("БИГПЕН");
    КонецЕсли;
КонецЦикла;
КонецПроцедуры