Большой Воронежский Форум
» Программирование>Программисты 1с выручайте
Andrei_ra 19:51 01.08.2009
Имеем процедуру ввида:
Процедура ДобавлениеВТаблицу()
Перем Запрос, ТекстЗапроса, аКоличествоСтрок,вв;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|ОбрабатыватьДокументы Проведенные;
|Номер = Документ.Заявка.НомерДок;
|ДатаПроводки = Документ.Заявка.ДатаПроводки;
|Получатель = Документ.Заявка.Контрагент;
|Наименование = Документ.Заявка.Наименование;
|ЕдИзм = Документ.Заявка.ЕдИзм.Наименование;
|Количество = Документ.Заявка.Количество;
|Группировка Номер;
|Группировка ДатаПроводки;
|Группировка Получатель;
|Группировка Наименование;
|Группировка ЕдИзм;
|Группировка Количество;
|Условие (Номер=ВыбЗаявка.НомерДок);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
аВремТЗ = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(аВремТЗ,0,0);
аКоличествоСтрок = ТаблицаЗаявки.КоличествоСтрок();
вв=аВремТЗ.КоличествоСтрок();
// Если вв<>0 Тогда
ТаблицаЗаявки.КоличествоСтрок(аКоличествоСтрок+аВр емТЗ.КоличествоСтрок());
ТаблицаЗаявки.Заполнить(аВремТЗ,аКоличествоСтрок+1 )
// КонецЕсли;


КонецПроцедуры
Вчера была проблема что добавляла только после того как добавлю записи другим запросом с отбором по дате.
Если в чистую таблицу один выборочный документ вылетала ошибка:
ТаблицаЗаявки.Заполнить(аВремТЗ,аКоличествоСтрок+1 )
{Отчет.новый1.Форма.Модуль(219)}: Номер за пределами значения!
Сегодня в любом случае ругается так, хоят ничего не менял насколько помню. Версия 7.7
Помогите уже всю голову сломал.
Кстати отладчки говорит что вв=0 всегда почему так стало не могу понять. [Ответ]
Sandy 21:15 01.08.2009
господи ну и бред... тебе вообще что получить то надо в итоге? [Ответ]
Andrei_ra 09:43 02.08.2009
Отредактировано мною, так как кому надо уже читал. [Ответ]
Sandy 11:24 02.08.2009
Andrei_ra, еще раз можешь ПО ЧЕЛОВЕЧЕСКИ сказать ЧТО ТЕБЕ НАДО В ИТОГЕ...
Если реестр документов заявок это одно.. если реестр заказанного товара это другое...
то что там выше в запросе написано не делает ни то ни то. [Ответ]
Andrei_ra 12:11 02.08.2009
В итоге реестр заявок, но с табличной частью заявки:
1 30.07.2009 Заявка мясо 100 кг
1 30.07.2009 Заявка ветчина 200 кг
2 01.08.2009 Заявка мясо 50 кг
3 ...
такая структура, поля могут быть совсем другие [Ответ]
Andrei_ra 12:12 02.08.2009
Есть запрос такого вида
Процедура ЗаполнениеТаблицыЗаявок()
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Номер = Документ.Заявка.НомерДок;
|ДатаПроводки = Документ.Заявка.ДатаПроводки;
|Получатель = Документ.Заявка.Контрагент;
|Наименование = Документ.Заявка.Наименование;
|ЕдИзм = Документ.Заявка.ЕдИзм.Наименование;
|Количество = Документ.Заявка.Количество;
|Группировка Номер;
|Группировка ДатаПроводки;
|Группировка Получатель;
|Группировка Наименование;
|Группировка ЕдИзм;
|Группировка Количество;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Запрос.Выгрузить(ТаблицаЗаявки,,0);
КонецПроцедуры
Он все это выгружает с шапкой и табличной частью заявок, но за период, а мне нужно к нему добавить выборочные документы в виде той же структуры [Ответ]
Andrei_ra 12:32 02.08.2009
Все разобрался надо было установить период выборки в запросе, только все равно не пойму, почему его нужно ставить, в мануале по языку куча примеров запросов без этого периода, да и не говорится о "Период" что он обязательный [Ответ]
дядя Дима 23:16 02.08.2009

Сообщение от Andrei_ra:
Имеем процедуру ввида:
Процедура ДобавлениеВТаблицу()
Перем Запрос, ТекстЗапроса, аКоличествоСтрок,вв;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|ОбрабатыватьДокументы Проведенные;
|Номер = Документ.Заявка.НомерДок;
|ДатаПроводки = Документ.Заявка.ДатаПроводки;
|Получатель = Документ.Заявка.Контрагент;
|Наименование = Документ.Заявка.Наименование;
|ЕдИзм = Документ.Заявка.ЕдИзм.Наименование;
|Количество = Документ.Заявка.Количество;
|Группировка Номер;
|Группировка ДатаПроводки;
|Группировка Получатель;
|Группировка Наименование;
|Группировка ЕдИзм;
|Группировка Количество;
|Условие (Номер=ВыбЗаявка.НомерДок);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
аВремТЗ = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(аВремТЗ,0,0);
аКоличествоСтрок = ТаблицаЗаявки.КоличествоСтрок();
вв=аВремТЗ.КоличествоСтрок();
// Если вв<>0 Тогда
ТаблицаЗаявки.КоличествоСтрок(аКоличествоСтрок+аВр емТЗ.КоличествоСтрок());
ТаблицаЗаявки.Заполнить(аВремТЗ,аКоличествоСтрок+1 )
// КонецЕсли;
КонецПроцедуры
Вчера была проблема что добавляла только после того как добавлю записи другим запросом с отбором по дате.
Если в чистую таблицу один выборочный документ вылетала ошибка:
ТаблицаЗаявки.Заполнить(аВремТЗ,аКоличествоСтрок+1 )
{Отчет.новый1.Форма.Модуль(219)}: Номер за пределами значения!
Сегодня в любом случае ругается так, хоят ничего не менял насколько помню. Версия 7.7
Помогите уже всю голову сломал.
Кстати отладчки говорит что вв=0 всегда почему так стало не могу понять.

если честно то это делается совсем не так.....
выкладывай уж полный код тогда, аКоличествоСтрок = ТаблицаЗаявки.КоличествоСтрок(); - не определена таблица.
ошибка возникает потому что в таблице аВремТЗ нет строки с номером аКоличествоСтрок+1 (строк меньше чем ты задал для этого параметры) на твоем наборе данных алгоритма.
смотри в отладчике - ставь точку останова на этой строке и смотри количество строк в первой таблице и аКоличествоСтрок [Ответ]
Sandy 07:51 03.08.2009
а не проще сделать что то типа тово
Док=СоздатьОбъект("Документ.Заявка");
Таб=СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Док.ВыбратьДокументы(ДатаНачала,ДатаКонца);
Пока Док.ПолучитьДокумент()=1 цикл
Док.Выбратьстроки();
Пока Док.ПолучитьСтроку()=1 цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
ну а в таблице прописать поля для вывода типа.Док.НомерДок Док.Контрагент Док.Наименование и те де. [Ответ]
дядя Дима 07:58 03.08.2009

Сообщение от Sandy:
а не проще сделать что то типа тово
Док=СоздатьОбъект("Документ.Заявка");
Таб=СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Док.ВыбратьДокументы(ДатаНачала,ДатаКонца);
Пока Док.ПолучитьДокумент()=1 цикл
Док.Выбратьстроки();
Пока Док.ПолучитьСтроку()=1 цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
ну а в таблице прописать поля для вывода типа.Док.НомерДок Док.Контрагент Док.Наименование и те де.

да и правильнее так чем через тз - зачем лишние переменные и перекид значений, вот только лучше запрос оставить - быстрее работать будет на большой выборке данных, и проще будет.
я бы так сделал -
запрос, группировки по нужным полям (например док и товар), условие.
потом обход группировки - на второй группировке вывод строки в которой естт док и товар + нужные суммы [Ответ]
Andrei_ra 08:16 03.08.2009
Все работает, как написал выше нужно было просто в запросе добавить выборку по дате, не знаю зачем она нужна, но факт, дату поставил с 1900 по 2999 год и без проблем. ТаблицаЗаявок находится на форме, поэтому и не определяю. аКоличествоСтрок+1 для того что бы записи вставлялись с новой строки а не затирали последнюю. А запросом сделано потому-что мне с ним гораздо удобнее, да и правильно что быстрее работать будет. Да еще в отчете потом часть полей с группировкой в 2 уровня выводится. Все ок все работает. [Ответ]
Andrei_ra 08:26 03.08.2009
Добавлю, что из моего пусть небольшого опыта не только в 1с, но и работы с другими средами разработки и БД, утвердилось мнение, что когда есть возможность использовать запрос, переборка циклом - кощунство. [Ответ]
Sandy 09:02 03.08.2009

Сообщение от Andrei_ra:
выборку по дате, не знаю зачем она нужна, но факт, дату поставил с 1900 по 2999 год и без проблем

ну вообще как бы документы ВСЕГДА выбираются с определенной даты по определенную дату иначе выборки не будет.
Это только справочники можно выбирать в запросе без дат

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

Хотя нам экзаменатор на сертификации и ругался что через запросы - это ХОРОШИЙ тон программирования...
[Ответ]
Andrei_ra 09:08 03.08.2009
с документами в принципе понятно что требуется дата, т.к нумерация же может быть периодической. Это теперь понятно, мануал гад сбил с толку, да и в нете начинаешь искать 1с блин одни конфигурации предлагают на продажу, да и все больше по 8 версии. [Ответ]
Sandy 09:16 03.08.2009
Andrei_ra, http://www.mista.ru/tutor_1c/ [Ответ]
Andrei_ra 09:31 03.08.2009
Спасибо большое самое в тему [Ответ]
дядя Дима 11:14 03.08.2009
работает тоона работает... но если ты программист то должен понимать что заведение лишний переменных и лишняя обработка данных.... лишнее явление , 1с тут не исключение. [Ответ]
Andrei_ra 11:28 03.08.2009
ну я в профи не набиваюсь, мне главное что-бы работало на данный момент. Тем более в форме есть и кнопка удалить запись в тз. мне в любом случае необходимо было что-бы документы с содерджимым выводились в таблицу и можно было этот набор менять как угодно. А Ваших вариантах они сразу выводятся на печать. [Ответ]
Andrei_ra 11:30 03.08.2009
Да плюс к тому у меня же выбираются документы не только по периоду, но и можно добавить любой выборочно, и в отчете все это потом группируется по наименованию и едизм. [Ответ]
дядя Дима 11:36 03.08.2009
запросом можно настроить сортировки и слить его результат в ТЗ. [Ответ]
Andrei_ra 11:52 03.08.2009
так у меня за период и есть отдельный запрос в посте №6 писал про него, а в каком споткнулся дает добавить к этой же таблице значений выборочную заявку с табличными значениями из-за нее и была проблема. [Ответ]
Andrei_ra 11:57 03.08.2009
переменную кстати вводил только для отладчика [Ответ]
Вверх