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

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

  Все выпуски  

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


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

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

Выпуск № 488
от 03.05.2007, 21:05

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


Вопрос № 84543: Здравствуйте, уважаемые эксперты! В торговой конфигурации необходимо получить цену товара из последней приходной накладной. Я это делаю следующим образом: запросом выбираю все приходы, в которых был этот товар, сортирую по дате, и из последнего прихо...
Вопрос № 84604: Добрый день 1С 7.7 Необходимо чтоб в таблице которая идет на печать отображались сотые части чисел всегда (323.20). Пробывал менять типы не какого результата не дало. Отображает толко если они не нулевые. Тоесть 23.73 отображает нормально...

Вопрос № 84.543
Здравствуйте, уважаемые эксперты! В торговой конфигурации необходимо получить цену товара из последней приходной накладной. Я это делаю следующим образом: запросом выбираю все приходы, в которых был этот товар, сортирую по дате, и из последнего прихода получаю цену. Подскажите, пожалуйта, как ускорить этот поиск используя регистры, т.е. как из регистров получить последний приход товара.
Отправлен: 28.04.2007, 09:36
Вопрос задала: Tomi (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gorus
Здравствуйте, Alitam!
1. Устанавливем фильтр по нужному товару методом УстановитьФильтр()
2. Устанавливаем обратный порядок получения результатов ОбратныйПорядок()
3. Выбираем движения методом ВыбратьДвижения()
4. В цикле получаем движения - после первого прерываем цикл.

Хочу еще сказать что если последнюю цену нужно получать оперативно то лучше ввести дополнительный реквизит в справочник товаров и в нем хранить последнюю цену.
Ответ отправил: Gorus (статус: 5-ый класс)
Ответ отправлен: 28.04.2007, 09:57

Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Tomi!
1.Ну, если метод учета партионный, то можно из регистров узнать партии. Если у партий есть дата (например, партия типа документ или партия типа справочник с реквизитом дата) то разделив сумму на количество данной партии получим цену. Но не думайте, что Рег.РассчитатьРегистрыНа() будет работать быстрее, за исключением случая, когда нужно получить данные на ТА. Если партии списываются коряво, то может получиться так, что последняя партия уже списана, или имеет искаженную себестоимость (цену). Данным методом можно пользоваться только если правильно настроен механизм последовательностей, и последовательность более-менее не убитая.
2.Можно в карточке ТМЦ задать реквизит ПриходнаяЦена, с тем, чтобы приходный документ при записи записывал туда цену. Недостаток: в карточке будет записана цена последнего записанного документа, т.е. если повторно перезаписать старый позапрошлогодний документ, то цена в карточке станет старая позапрошлогодняя. Можно, конечно, сделать этот реквизит периодическим, или добавить реквизит ДатаПоследнейПриходнойЦены.
3.В данном случае у Вас запрос перебирает ВСЕ приходные документы, что тормознуто. Тупой перебор с методом Док.ОбратныйПорядок(1) будет перебирать не все документы, а с конца до последнего, содержащего данное ТМЦ, что может совершенно неожиданно оказаться гораздо быстрее, чем п.1.

Попробуйте все три метода и выберите наилучший для Вас.
В приложении вырезка из реально работающей программы.
ВремРегистры = СоздатьОбъект("Регистры");
Рег = ВремРегистры.УчетТоваров;
СписокТоваров = СоздатьОбъект("СписокЗначений");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
СписокТоваров.ДобавитьЗначение(ТМЦ);
КонецЦикла;
Рег.УстановитьЗначениеФильтра("Товар", СписокТоваров, 2);
Рег.УстановитьЗначениеФильтра("Фирма",Фирма, 1);
Рег.УстановитьЗначениеФильтра("ВидУчета",ВидУчета, 1);
Рег.УстановитьЗначениеФильтра("МестоХранения",Склад, 1);
Если ИтогиАктуальны() = 0 Тогда//Вот способ ускорения рассчета- не рассчитывать регистры вообще, получая их на ТА
Рег.ВременныйРасчет();
ВремРегистры.Актуальность(1);
ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());А мы рассчитываем. Тормознуто
КонецЕсли;
ТОстатков = СоздатьОбъект("ТаблицаЗначений");
Рег.ВыгрузитьИтоги(ТОстатков, 1, 1);
ТОстатков.Свернуть("Товар, Партия", "Количество, Себестоимость");
ТОстатков.Сортировать("Товар, -Партия", 1);
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Студент)
Ответ отправлен: 28.04.2007, 10:15

Отвечает: Ovr1970
Здравствуйте, Tomi!
Через регистры это обычно не делают.
Если это нужно для оперативных дел, проще в процедуре проведения приходного документа устанавливать реквизит справочника товары (цена). Если необходимо отслеживать историю изменений, то можно сделать цену периодической и устанавливать через оператор
УстановитьРеквизитСправочника
Ответ отправил: Ovr1970 (статус: Практикант)
Ответ отправлен: 28.04.2007, 15:51

Отвечает: BigHard
Здравствуйте, Alitam!
насчет регистров не скажу, а скажу, как делал сам: Создается справочник "цены", 2 колонки: товар и его цена, цена соответственно периодическая, при приходе товара и проведении документа если элемента нет то он вносится и его цена ставиться, а если есть, то устанавливается новая цена. Единственно, нужно сделать обработку удаления проведения документа, чтоб при удалении документа, его цена возвращялась на предыдущую

---------
Чем отличается чайник от программиста: У чайника в одном килобайте 1000 байт, а у программиста в одном километре 1024 метра
Ответ отправил: BigHard (статус: Студент)
Ответ отправлен: 30.04.2007, 07:25


Вопрос № 84.604
Добрый день 1С 7.7
Необходимо чтоб в таблице которая идет на печать отображались сотые части чисел всегда (323.20).
Пробывал менять типы не какого результата не дало. Отображает толко если они не нулевые.
Тоесть 23.73 отображает нормально а 23.20 отображает 23.2 и 23.00 просто 23
Подскажите как зделать чтоб всегда отображало 2 цифры после запятой.
Отправлен: 28.04.2007, 16:34
Вопрос задал: Pycuk (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Андрей Тимофеев
Здравствуйте, Pycuk!
Формат(<?>,)
Синтаксис:
Формат(<Параметр>,<Форматная_строка>)
Назначение:
Возвращает строку с результатом форматирования выражения по заданной форматной строке.
Параметры:
<Параметр> - форматируемое выражение,
<Форматная_строка> - форматная строка.
Форматная строка имеет вид:
для чисел - 'Nm.n<разделитель дробной><разделитель триад>' (в русском регистре вместо N - Ч);
для денежных величин - 'NSMH' (в русском регистре - 'ЧПДС');
для строк - 'Sn' (в русском регистре - 'Сn');
для дат - 'DПодстрокаФормата' (в русском регистре вместо D - Д), где
ПодстрокаФормата может быть вида:
DDMMYY (ДДММГГ), дата в виде - ДД.ММ.ГГ;
DDMMYYYY (ДДММГГГГ), дата в виде - ДД.ММ.ГГГГ;
DDMMMMYYYY (ДДММММГГГГ), дата в виде - ДД месяц прописью ГГГГ;
(0)DDMMMMYYYY ((0)ДДММММГГГГ) этот формат представляет собой вариант предыдущего формата с тем отличием, что число месяца всегда выводится двумя цифрами, т.е. для чисел меньших 10 спереди будет добавлен 0. Например: Формат('01.01.1999', ''Д (0)ДДММММГГГГ'') = 01 Января 1999 г.
MMMMYYYY (ММММГГГГ), дата в виде - месяц прописью ГГГГ;
MMMMYY (ММММГГ), дата в виде - месяц прописью ГГ;
QQQQYYYY (ККККГГГГ), дата в виде - N квартал ГГГГ;
QQQQYY (ККККГГ), дата в виде - N квартал ГГ;
YYYYMMDD (ГГГГММДД), дата в виде ГГГГММДД, то есть дата '10.11.1998' будет представлена как строка ''19981110'';
WWWW (НННН), выводит наименование дня недели, соответсвующее указанной дате. Наименования дней недели берутся из файла прописи.
Замечание:
Для чисел: наличие ''0'' перед длиной поля подавляет отображение нулевых значений (выводится пустая строка). Пример: ''Ч015.2'';
Символ ''-'' перед длиной поля означает, что нулевые значения при выводе будут отображаться прочерком. Пример: ''Ч-17.2''.;
Если форматная строка заканчивается символами >X, происходит сдвиг отображаемых разрядов на X позиций.
Если в форматной строке указано ''(0)'', то данная последовательность символов должна быть первой в формате и предшествовать всем прочим спецификациям. При задании такой спецификации все позиции в поле вывода числа, соответствующие незадействованным старшим разрядам, будут заполнены символами ''0''. Например: Формат(123.15, ''Ч (0)10.2'') = 0000123.15;
Подробнее см. в документации, глава 'Системные процедуры и функции'
Ответ отправил: Андрей Тимофеев (статус: 3-ий класс)
Ответ отправлен: 28.04.2007, 16:42

Отвечает: Николай Александрович
Здравствуйте, Pycuk!

Сделать это легко и просто: Формат(56.30,"Ч017.2, ") // Выдаст 56,30
Вобще команда "Формат" выдаёт и преобразовывает почти всё... смотрите синтаксис-помощник... Или аналог команды знак #: 56.30 #Ч017.2, // выдаст тоже самое
Ответ отправил: Николай Александрович (статус: 1-ый класс)
Ответ отправлен: 28.04.2007, 17:23

Отвечает: Elric
Здравствуйте, Pycuk!

Приведу пример.
Если в Таблице (печатной) в графе Формула Вы указали реквизит Цена, то чтобы она всегда показывалась с двумя знаками ее следует записать как:

Цена #Ч.2
либо
Формат(Цена,"Ч.2")

А если, скажем, нужно чтобы при нулевой цене выводилось не 0.00, а пустое поле, то формула будет выглядеть так:

Цена #Ч0.2
либо
Формат(Цена,"Ч0.2")

Про дополнительные возможности можно прочитать в описании системной функции Формат.
---------
Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Специалист)
Ответ отправлен: 28.04.2007, 17:24

Отвечает: Strawberry
Здравствуйте, Pycuk!
ХХХХ#N019.2
ХХХ - ваше число


---------
Мальчик-извращенец прочел деду Морозу с табуретки всего Пастернака!
Ответ отправил: Strawberry (статус: 7-ой класс)
Ответ отправлен: 28.04.2007, 18:13

Отвечает: BigHard
Здравствуйте, Pycuk!
Все очень просто:
ВашеЧисло#Ч-19.2
В данном примере:#Ч-указывает тип форматирования число,19 целых и два дробных значений
---------
Чем отличается чайник от программиста: У чайника в одном килобайте 1000 байт, а у программиста в одном километре 1024 метра
Ответ отправил: BigHard (статус: Студент)
Ответ отправлен: 30.04.2007, 07:25


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

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

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

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

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


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


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

В избранное