02.12.15 — 14:36
тзДанные77 = Новый ТаблицаЗначений;
мт = Новый Массив;
мт.Добавить(Тип(«Строка»));
мт.Добавить(Тип(«Дата»));
мт.Добавить(Тип(«Число»));
отСтрока = Новый ОписаниеТипов(мт,,,
Новый КвалификаторыЧисла(9,2,ДопустимыйЗнак.Любой),
Новый КвалификаторыСтроки(25,ДопустимаяДлина.Переменная),
Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя),);
стрКолонки = Новый Структура(«Документ,Период,Организация,ОрганизацияКлюч,»
+»Склад,СкладКлюч,Контрагент,КонтрагентКлюч,Сумма»);
Для каждого киз Из стрКолонки Цикл
тзДанные77.Колонки.Добавить(киз.Ключ,отСтрока);
КонецЦикла;
Пока РН77.ПолучитьДокумент()=1 Цикл
Если РН77.Проведен()=1 Тогда
стз = тзДанные77.Добавить();
стз.Документ = РН77.НомерДок;
стз.Период = РН77.ДатаДок;
стз.Организация = РН77.Фирма.Наименование;
стз.ОрганизацияКлюч = РН77.Фирма.Код;
стз.Склад = РН77.МестоХранения.Наименование;
стз.СкладКлюч = РН77.МестоХранения.Код;
стз.Контрагент = РН77.Контрагент.Наименование;
стз.КонтрагентКлюч = РН77.Контрагент.Код;
стз.Сумма = РН77.Итог(«СуммаСНДС»);
КонецЕсли;
//Сообщить(«Документ <«+РН77.НомерДок
// +»> от <«+РН77.ДатаДок
// +»>Фирма <«+РН77.Фирма.Наименование
// +»> Контрагент <«+РН77.Контрагент.Наименование
// +»> Сумма <«+РН77.Итог(«СуммаСНДС»)
// +»> Проведен <«+РН77.Проведен()
// +»>»);
КонецЦикла;
З = Новый Запрос;
мвт = Новый МенеджерВременныхТаблиц;
З.МенеджерВременныхТаблиц = мвт;
З.УстановитьПараметр(«тзДанные77»,тзДанные77);
З.Текст = »
|ВЫБРАТЬ
| тзДанные77.Организация,
| тзДанные77.ОрганизацияКлюч,
| тзДанные77.Склад,
| тзДанные77.СкладКлюч,
| тзДанные77.Контрагент,
| тзДанные77.КонтрагентКлюч,
| тзДанные77.Документ,
| тзДанные77.Период,
| тзДанные77.Сумма
|ПОМЕСТИТЬ Данные77
|ИЗ
| &тзДанные77 КАК тзДанные77
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Данные77.Организация,
| Данные77.ОрганизацияКлюч КАК Ключ,
| МАКСИМУМ(Организации.Ссылка) КАК Ссылка
|ИЗ
| Данные77 КАК Данные77
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
| ПО Данные77.ОрганизацияКлюч = Организации.Ключ
|
|СГРУППИРОВАТЬ ПО
| Данные77.Организация,
| Данные77.ОрганизацияКлюч
|
|ИМЕЮЩИЕ
| МАКСИМУМ(Организации.Ссылка) ЕСТЬ NULL «;
рз = З.Выполнить();
11 — 02.12.15 — 14:45
(8), (9) так понятнее?
Попытка
v77 = Новый COMОбъект(«V77.Application»);
Dir = стрПар.Каталог;
Usr = стрПар.Пользователь;
Pwd = стрПар.Пароль;
ConnStr = «/D»»»+Dir+»»»»
+» /N»»»+Usr+»»»»+
?(StrLen(TrimAll(Pwd))<>0,» /P»»»+Pwd+»»» «,»»);
// Сообщить(«Подключаюcь как <«+Usr+»> к <«+Dir+»>»);
Если v77.Initialize(v77.RMTrade,TrimAll(ConnStr),»NO_SPLASH_SHOW») = 0 Тогда
ВызватьИсключение(«Сбой подключения к <«+Dir+»>»);
КонецЕсли;
// Сообщить(«Успешно подключена база <«+Dir+»>»);
Период = стрПар.Период;
РН77 = v77.CreateObject(«Документ.РасходнаяНакладная»);
Если РН77.ВыбратьДокументы(Период.ДатаНачала,Период.ДатаОкончания) = 1 Тогда
тзДанные77 = Новый ТаблицаЗначений;
мт = Новый Массив;
мт.Добавить(Тип(«Строка»));
мт.Добавить(Тип(«Дата»));
мт.Добавить(Тип(«Число»));
отТипы = Новый ОписаниеТипов(мт,,,
Новый КвалификаторыЧисла(9,2,ДопустимыйЗнак.Любой),
Новый КвалификаторыСтроки(25,ДопустимаяДлина.Переменная),
Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя),);
стрКолонки = Новый Структура(«Документ,Период,Организация,ОрганизацияКлюч,»
+»Склад,СкладКлюч,Контрагент,КонтрагентКлюч,Сумма»);
Для каждого киз Из стрКолонки Цикл
тзДанные77.Колонки.Добавить(киз.Ключ,отТипы);
КонецЦикла;
Пока РН77.ПолучитьДокумент()=1 Цикл
Если РН77.Проведен()=1 Тогда
стз = тзДанные77.Добавить();
стз.Документ = РН77.НомерДок;
стз.Период = РН77.ДатаДок;
стз.Организация = РН77.Фирма.Наименование;
стз.ОрганизацияКлюч = РН77.Фирма.Код;
стз.Склад = РН77.МестоХранения.Наименование;
стз.СкладКлюч = РН77.МестоХранения.Код;
стз.Контрагент = РН77.Контрагент.Наименование;
стз.КонтрагентКлюч = РН77.Контрагент.Код;
стз.Сумма = РН77.Итог(«СуммаСНДС»);
КонецЕсли;
//Сообщить(«Документ <«+РН77.НомерДок
// +»> от <«+РН77.ДатаДок
// +»>Фирма <«+РН77.Фирма.Наименование
// +»> Контрагент <«+РН77.Контрагент.Наименование
// +»> Сумма <«+РН77.Итог(«СуммаСНДС»)
// +»> Проведен <«+РН77.Проведен()
// +»>»);
КонецЦикла;
З = Новый Запрос;
мвт = Новый МенеджерВременныхТаблиц;
З.МенеджерВременныхТаблиц = мвт;
З.УстановитьПараметр(«тзДанные77»,тзДанные77);
З.Текст = »
|ВЫБРАТЬ
| тзДанные77.Организация,
| тзДанные77.ОрганизацияКлюч,
| тзДанные77.Склад,
| тзДанные77.СкладКлюч,
| тзДанные77.Контрагент,
| тзДанные77.КонтрагентКлюч,
| тзДанные77.Документ,
| тзДанные77.Период,
| тзДанные77.Сумма
|ПОМЕСТИТЬ Данные77
|ИЗ
| &тзДанные77 КАК тзДанные77
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Данные77.Организация,
| Данные77.ОрганизацияКлюч КАК Ключ,
| МАКСИМУМ(Организации.Ссылка) КАК Ссылка
|ИЗ
| Данные77 КАК Данные77
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
| ПО Данные77.ОрганизацияКлюч = Организации.Ключ
|
|СГРУППИРОВАТЬ ПО
| Данные77.Организация,
| Данные77.ОрганизацияКлюч
|
|ИМЕЮЩИЕ
| МАКСИМУМ(Организации.Ссылка) ЕСТЬ NULL «;
рз = З.Выполнить();
Если НЕ рз.Пустой() Тогда
//ЗначениеВР З.Выполнить().Выгрузить(),ДанныеФормыВЗначение(
тзОрганизации = З.Выполнить().Выгрузить();
стрРезультат.Значения.Вставить(«Организации»,тзОрганизации);
КонецЕсли;
//Склады
З.Текст = »
|ВЫБРАТЬ
| Данные77.Склад,
| Данные77.СкладКлюч КАК Ключ,
| МАКСИМУМ(Склады.Ссылка) КАК Ссылка
|ИЗ
| Данные77 КАК Данные77
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО Данные77.СкладКлюч = Склады.Ключ
|
|СГРУППИРОВАТЬ ПО
| Данные77.Склад,
| Данные77.СкладКлюч
|
|ИМЕЮЩИЕ
| МАКСИМУМ(Склады.Ссылка) ЕСТЬ NULL «;
рз = З.Выполнить().Выгрузить();
Если НЕ рз.Пустой() Тогда
тзСклады = рз.Выгрузить();
стрРезультат.Значения.Вставить(«Склады»,тзСклады);
КонецЕсли;
//Контрагенты
З.Текст = »
|ВЫБРАТЬ
| Данные77.Контрагент,
| Данные77.КонтрагентКлюч КАК Ключ,
| МАКСИМУМ(Контрагенты.Ссылка) КАК Ссылка
|ИЗ
| Данные77 КАК Данные77
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО Данные77.КонтрагентКлюч = Контрагент.Ключ
|
|СГРУППИРОВАТЬ ПО
| Данные77.Контрагент,
| Данные77.КонтрагентКлюч
|
|ИМЕЮЩИЕ
| МАКСИМУМ(Контрагенты.Ссылка) ЕСТЬ NULL «;
Если НЕ рз.Пустой() Тогда
тзКонтрагенты = рз.Выгрузить();
стрРезультат.Значения.Вставить(«Контрагенты»,тзКонтрагенты);
КонецЕсли;
//Продажи
З.Текст = »
|ВЫБРАТЬ
| Данные77.ОрганизацияКлюч,
| Данные77.СкладКлюч,
| Данные77.КонтрагентКлюч,
| Данные77.Документ,
| Данные77.Период,
| Данные77.Сумма
|ИЗ Данные77″;
Если НЕ рз.Пустой() Тогда
тзПродажи = рз.Выгрузить();
стрРезультат.Значения.Вставить(«Продажи»,тзПродажи);
КонецЕсли;
мвт.Закрыть();
стрРезультат.Результат = Истина;
Иначе
Сообщить(«У подключенной базы в выбранном периоде нет документов!»);
КонецЕсли;
v77 = Неопределено;
Исключение
Сообщить(ОписаниеОшибки());
Если мвт<>Неопределено Тогда
мвт.Закрыть();
КонецЕсли;
v77 = Неопределено;
КонецПопытки;
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Labels
ошибка ИР
Несоответствие поведения программы задуманному
проблема
Неожиданное или неудобное поведение программы
{Обработка.Импорт.Форма.Форма.Форма}: Ошибка при вызове метода контекста (Выполнить): {(12, 11)}: Временная таблица уже существует «Данные77» ПОМЕСТИТЬ <<?>>Данные77
второй раз вызываешь без обнуления переменных…
Отладкой делаешь З.Выполнить, смотришь результат. А как оно само доходит до этой строчки, то падает.
тоесть нет =) С первого раза выскакивает. А менеджер в исключении закрывается
не понял, чем будет отличаться отладка от рантайма в данном случае
тем, что в рантайм не будет повторного создания ВТ
(8,9) где вы видите повторное создание. С ПЕРВОГО раза выскакивает, говорю вам. и Менеджер временных таблиц закрывается каждый раз при исключении. Т.е. временные таблицы после каждого исключения уничтожаются.
Дайте пепла, я одел рубище Закрыто
З.МенеджерВременныхТаблиц = мвт; Удаляй это нафиг
,, Слово ЗАКРЫТО означает что проблема решена. Тема Закрыта.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
|
2.92 Объекты для отладки. Временная таблица уже существует |
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
|
|
Временные таблицы — хранятся на сервере и позволяют писать более простые запросы.
Временные таблицы хранятся в объекте типа МенеджерВременныхТаблиц. Когда этот объект уничтожается, уничтожаются и временные таблицы.
Чтобы создать временную таблицу, используется ключевое слово «ПОМЕСТИТЬ В«, например:
Код 1C v 8.х
|ВЫБРАТЬ * ИЗ Справочник.Номенклатура ПОМЕСТИТЬ В ВТТовары
Временная таблица создается при выполнении запроса, если повторно выполнить запрос, то выдастся ошибка, что таблица уже существует.
Описания временных таблиц хранятся в свойстве запроса МенеджерВременныхТаблиц. К сожалению, нельзя получить список временных таблиц, которые хранятся в запросе.
Пример 1: Как можно выгрузить временную таблицу в таблицу значений и как использовать менеджер временных таблиц:
Код 1C v 8.х
Запрос=Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Номенклатура ПОМЕСТИТЬ В ВТТовары");
Запрос.Выполнить(); //Создалась таблица ВТТовары
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТовары");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц; //Копируем ссылку на временные таблицы
ТЗ=ЗапросТМП.Выполнить().Выгрузить(); //Получаем временную таблицу в таблице значений
Готовую таблицу значений из памяти можно выгружать в менеджер временных таблиц запроса. Единственное условие - колонки таблицы значений должны быть типизированными, т.е. иметь тип. Вот пример, демонстрирующий это:
ТЗ=Новый ТаблицаЗначений();
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));
//Заполняем таблицу данными
Стр=ТЗ.Добавить();
Стр.А="А";
Стр.Б="Б";
Стр=ТЗ.Добавить();
Стр.А="А1";
Стр.Б="Б1";
//Загружаем таблицу значений в менеджер временных таблиц запроса
Запрос=Новый Запрос("Выбрать Т.А, Т.Б ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
//Вариант: Запрос=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",ТЗ);
Запрос.Выполнить();
//Получаем таблицу из менеджера временных таблиц запроса
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТаб");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;
ТЗ1=ЗапросТМП.Выполнить().Выгрузить();
ТЗ1.ВыбратьСтроку(); //Показываем полученную таблицу
Вместо перечисления списка полей можно использовать «ВЫБРАТЬ * «.
Если есть ТЗ, в каждой колонке которой значения всего одного типа, для типизации колонок, можно воспользоваться функцией:
Код 1C v 8.х
Процедура ТипизацияТЗ(ТЗ) Экспорт
РезультатТЗ = новый ТаблицаЗначений;
Для Каждого Колонка из ТЗ.Колонки Цикл
Имя = Колонка.Имя;
МассивТипов = новый Массив(1);
МассивТипов[0] = ТипЗнч(ТЗ[0][Имя]);
Описатель = новый ОписаниеТипов(МассивТипов);
РезультатТЗ.Колонки.Добавить(Имя, Описатель);
КонецЦикла;
Для каждого Строка из ТЗ Цикл
СтрокаРез = РезультатТЗ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРез, Строка);
КонецЦикла;
ТЗ = РезультатТЗ.Скопировать();
КонецПроцедуры
Пример 2: Нужно в отчете СКД Связать Данные из Регистра Накопления ВзаиморасчетыСРаботниками и Табличной Части Документа ЗарплатаКВыплате по Ссылке на Документ и ФизЛицу! И вывести полученные данные за указанный Период(с ДатаН по ДатаК) — Запрос будет такой:
Код 1C v 8.х
ВЫБРАТЬ
ВзаиморасчетыСРаботникамиОрганизаций.Период,
ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов,
ВзаиморасчетыСРаботникамиОрганизаций.Организация,
ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
ВзаиморасчетыСРаботникамиОрганизаций.Регистратор
ПОМЕСТИТЬ РегВзаимРасч
ИЗ
РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
ГДЕ
ВзаиморасчетыСРаботникамиОрганизаций.Период МЕЖДУ &ДатаН И &ДатаК
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо,
ЗарплатаКВыплатеОрганизацийЗарплата.Сумма,
ЗарплатаКВыплатеОрганизацийЗарплата.ВыплаченностьЗарплаты,
ЗарплатаКВыплатеОрганизацийЗарплата.КомпенсацияЗаЗадержкуЗарплаты,
ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка
ПОМЕСТИТЬ ДокумЗарплКВыпл
ИЗ
Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
ГДЕ
ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РегВзаимРасч.Период,
РегВзаимРасч.Физлицо,
РегВзаимРасч.СуммаВзаиморасчетов,
ДокумЗарплКВыпл.Сумма,
ДокумЗарплКВыпл.ВыплаченностьЗарплаты,
ДокумЗарплКВыпл.КомпенсацияЗаЗадержкуЗарплаты
ИЗ
РегВзаимРасч КАК РегВзаимРасч
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокумЗарплКВыпл КАК ДокумЗарплКВыпл
ПО РегВзаимРасч.Регистратор = ДокумЗарплКВыпл.Ссылка
И РегВзаимРасч.Физлицо = ДокумЗарплКВыпл.Физлицо
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ РегВзаимРасч
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ДокумЗарплКВыпл



