Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: 1С для программиста

  Все выпуски  

RusFAQ.ru: 1С для программиста


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / 1С для программиста

Выпуск № 454
от 28.03.2007, 02:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 352, Экспертов: 55
В номере:Вопросов: 3, Ответов: 9


Вопрос № 79367: Здравствуйте! У меня еще один вопрос к предыдущему. А возможно в журнале сделать выборку сразу по двух реквизитам документа. Один как бы постоянный, он не меняется пользователем, например, ВидДокумента, а второй могут выбирать пользователи, например ...
Вопрос № 79412: Уважаемые эксперты нужен Ваш совет по 1С в7.7. Конфигурация самописная. Нужно устроить проверку при нажатии кнопки "Закрыть". Если на вопрос "сохранить изменения?" Ответ "Нет", то понятно просто закрыть. А ес...
Вопрос № 79421: Здравствуйте Уважаемые эксперты! Нужен ваш совет. Написал простенький отчет, почти все готово, но не получается вывести в отчет итоговые данные по столбцам. В переменную ИтогоНаНачало получилось, а в переменные ИтогоПриход и ИтогоРасход выводит н...

Вопрос № 79.367
Здравствуйте! У меня еще один вопрос к предыдущему. А возможно в журнале сделать выборку сразу по двух реквизитам документа. Один как бы постоянный, он не меняется пользователем, например, ВидДокумента, а второй могут выбирать пользователи, например Контрагент. Заранее благодарю
P.S. 1с Бухгалтерия 7.7, 25 релиз
Отправлен: 22.03.2007, 15:35
Вопрос задала: MaShI (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна Ласовская
Здравствуйте, MaShI!
Да, можно - путем некоторых ухищрений. Например, в одной методических конфигураций 1С предлагала такой путь:
1. Нужно создать общий реквизит документов типа "Строка", размер строки равен максимальной длине строкового представления реквизитов, по которым нужно делать отбор. В вашем случае - это длина Наименования справочника "Контрагенты" плюс еще 100 или 150 для вида документа.
2. Прописать в каждом документе заполнение этого общего реквизита.
3. Прописать обработкой значение общего реквизита у уже созданных документов.
4. Использовать общий реквизит документов для отбора, предварительно подготовив нужную строку, состоящую в вашем случае из вида документа и контрагента.
Используя эту технологию можно делать отборы по любому количеству реквизитов.
Ответ отправила: Татьяна Ласовская (статус: 4-ый класс)
Ответ отправлен: 22.03.2007, 18:36


Вопрос № 79.412
Уважаемые эксперты нужен Ваш совет по 1С в7.7.
Конфигурация самописная.
Нужно устроить проверку при нажатии кнопки "Закрыть".
Если на вопрос "сохранить изменения?" Ответ "Нет", то понятно просто закрыть. А если ответ "Да", то нужно проверить - открывался ранее созданный документ или текущий документ только что создали, т.е. документ "новый".
Отправлен: 22.03.2007, 20:09
Вопрос задал: Ramzes (статус: 1-ый класс)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна Ласовская
Здравствуйте, Ramzes!
Используйте предопределенную процедуру ПриЗаписи()
Кратко алгоритм:
В модуле формы документа определяете переменную, например НовыйДокумент. В предопределенной процедуре ВводНового (или ВводНаОсновании, или в обеих - это зависит от способа создания нового документа) переменной НовыйДокумент присваиваете значение 1. Затем в процедуре ПриЗаписи() проверяете с помощью функции ПустоеЗначение(НовыйДокумент), присвоено ли переменной НовыйДокумент какое-либо значение (фактически, выполнялась ли процедура ВводНового или ВводНаОсновании).
Ответ отправила: Татьяна Ласовская (статус: 4-ый класс)
Ответ отправлен: 22.03.2007, 20:30
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Именно то что нужно.

Отвечает: Palkin
Здравствуйте, Ramzes!
Можно сделать ещё проще. Проверяется методом Выбран(). Соответственно, если новый - Выбран() = 0, если нет - Выбран() = 1
Ответ отправил: Palkin (статус: 4-ый класс)
Ответ отправлен: 23.03.2007, 06:21
Оценка за ответ: 4
Комментарий оценки:
Спасибо.

Отвечает: ATan
Здравствуйте, Ramzes!
Провека на то создан документ возможна также следующим условием
Если ПустоеЗначение(ТекущийДокумент()) = 1 Тогда
//Тогда документ новый
КонецЕсли;
Или еще одним способом
Если СравнитьТА() = -2 Тогда
//Тогда документ новый
КонецЕсли;
Удачи.
Ответ отправил: ATan (статус: 3-ий класс)
Ответ отправлен: 23.03.2007, 09:36
Оценка за ответ: 4
Комментарий оценки:
Спасибо. Я решил воспользоваться процедурой ВводНового().

Отвечает: Vlad Skorochod
Здравствуйте, Ramzes!
Проверку на новый документ можно выполнять стандартной функцией
Если Выбран()=0 Тогда
Сообщить("Это новый документ !!!");
КонецЕсли;
Ответ отправил: Vlad Skorochod (статус: 2-ой класс)
Ответ отправлен: 23.03.2007, 10:12
Оценка за ответ: 4
Комментарий оценки:
Мне больше понравился вариант с ВводНового(). Но все равно спасибо.

Отвечает: Strawberry
Здравствуйте, Ramzes!
Как вариант
При создании документа в процедуре ВводНового() присваивать некоторой переменной значение 1
В процедуре приЗаписи() проверять это значение. если 1 то новый документ если нет то ранее созданный
---------
Мальчик-извращенец прочел деду Морозу с табуретки всего Пастернака!
Ответ отправил: Strawberry (статус: 5-ый класс)
Ответ отправлен: 23.03.2007, 10:16
Оценка за ответ: 4
Комментарий оценки:
Именно так я и сделал по предыдущему совету. Спасибо.

Отвечает: Ovr1970
Здравствуйте, Ramzes!
Проверить документ на новый он или нет можно с помощью метода Выбран()
Управлять поведением документа можно несколькими способами, наиболее продвинутый такой:
Вы на кнопку вешаете процедуру.
В теле процедуры проверяете необходимость задания вопросов и действий в зависимости от состояния документа и прав пользователя.
Допустим принято решение, что данный документ нужно записать и закрыть, а о его проведении нужно спросить пользователя интерактивно.
Тогда в конце процедуры присваиваете:

СтрокаДействийФормы="# Записать Провести? Закрыть"

Если записать и провести автоматом, а спросить о закрытии, то

СтрокаДействийФормы="# Записать Провести Закрыть?"
Ответ отправил: Ovr1970 (статус: Студент)
Ответ отправлен: 23.03.2007, 12:04


Вопрос № 79.421
Здравствуйте Уважаемые эксперты!
Нужен ваш совет. Написал простенький отчет, почти все готово, но не получается вывести в отчет итоговые данные по столбцам. В переменную ИтогоНаНачало получилось, а в переменные ИтогоПриход и ИтогоРасход выводит нуль.
Подскажите может, что-то делаю не правильно?
Заранее благодарен!!!

Приложение:

Отправлен: 22.03.2007, 21:02
Вопрос задал: V lad (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Palkin
Здравствуйте, V lad!
Предполагаю, что общая сумма по 2-му запросу не подсчитывается из-за позиционирования на строке запроса. Задайте переменные и подсчитывайте их во время обхода группировки запроса
Ответ отправил: Palkin (статус: 4-ый класс)
Ответ отправлен: 23.03.2007, 08:25

Отвечает: svsrus
Здравствуйте, V lad!

Видимо Вы не до конца разобрались с запросом. Если есть книга Описание встроенного языка, советую еще раз внимательно перечитать, так как в запросах много подводных камней. Несколько замечаний на будущее:

1) Если есть 2 объекта Запрос и Запрос2, необязательно писать в тексте запроса Товар2 и т.д. Во-первых это может привести к дополнительной путанице и доп.ошибкам, во-вторых это Ваше потраченное время, т.к. текст второго запроса можно было ввести копированием текста первого запроса, а изменить только нужные тебе даты.
2) Строка в запросе
|Товар = Документ.ПрихНакл.Товар, Документ.РасхНакл.Товар, Справочник.Товары.ТекущийЭлемент;
верная, но не рациональная. "Правильней" будет так:
|Товар = Документ.ПрихНакл.Товар, Документ.РасхНакл.Товар;
Почему? Потому что тебе нужно количество товара. Запрос перебирает все документы и подсчитывает кол-во товара для каждого товара, на который были накладные. Все равно по товарам из справочника, для которых не было накладных запрос не вернет никаких результатов. Т.е. 1Ска будет выполнять лишнюю и совершенно ненужную работу. Например если, теоретически, у тебя в справочник занесено миллион товаров, а по накладным отпускается всего 2-3 товара, представляешь какую лишнюю работу будет выполнять запрос, естественно это скажется на времени выполнения запроса.
3)Судя по документам в запросе, у тебя конфигурация Торговля и Склад, из чего следует, что использование запросов по документам НЕЦЕЛЕСООБРАЗНО. Нужно сделать запрос по регистрам. Я несилен в ТиС и соответственно в регистрах. Если бы я это делал в Бухгалтерии, то тут запрос совсем не нужен. Есть Бухгалтерский Запрос. И весь твой огромный запрос(Запрос) для нахождения остатка (НаНачало=Запрос.КоличПрихСумма-Запрос.КоличРасхСумма;) свелся бы всего к одной строчке - нахождения сальдо на конец периода. А весь код твоего отчета превратился бы в 2-5 строчек. То же самое я думаю можно сделать и в ТиС. Посмотри в литературе работу с регистрами, регистрами остатков.

Теперь по сути вопроса.
Пока Запрос.Группировка(1) = 1 Цикл
НаНачало=Запрос.КоличПрихСумма-Запрос.КоличРасхСумма;
....
КонецЦикла
Цикл открывает выборки по Запросу. Пусть первый Товар = Арбуз. Тогда первая выборка будет не что иное как Таблица Значений с 3 колонками: Товар=Арбуз, КоличПрих, КоличРасх. А Функция КоличПрихСумма = Сумма(КоличПрих); возвращает тебе сумму по колонке "КоличПрих". Код работает. Все правильно.

Смотрим дальше...
Если Запрос2.Получить(Запрос.Товар)=1 Тогда
Читаем справку по методу Получить.
Назначение:
Прямое позиционирование на запись в выборке по конкретным значениям группировок.

ВО!!! "Позиционирование на запись в выборке"!!! А где у нас выборка? А нет у нас никакой выборки, т.к. выборка открывается строкой Запрос.Группировка()!!! Поэтому функция ничего и не считает... А 0 возвращает потому, что функции в запросе имеют Тип Число. А пустое значение типа число = 0.

Вообщем тебе нужно открыть выборку. В твоем случае надо выполнять запрос2 в запросе с Условие (Товар=ЗапросТовар);. Но это, как я уже писал выше не очень рационально. Дерзай.

Удачи!
Ответ отправил: svsrus (статус: 4-ый класс)
Ответ отправлен: 24.03.2007, 08:19
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо, ЗА РАЗЪЯСНЕНИЯ, за грамотный и развернутый ответ! Действительно открыв выборку я получил, то что мне надо. Еще раз спасибо!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: support@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное