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

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

  Все выпуски  

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


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

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

Выпуск № 601
от 15.09.2007, 08:05

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


Вопрос № 101475: Здравствуйте! Я выгружаю из файла такого содержания данные в файл: //---------------------------------------------------------------------------------------- Сбор данных,ШК+БД,4607001290742,,30 Сбор данных,ШК+БД,4607001290032,МАСЛО ЗО...

Вопрос № 101.475
Здравствуйте!
Я выгружаю из файла такого содержания данные в файл:
//----------------------------------------------------------------------------------------
Сбор данных,ШК+БД,4607001290742,,30
Сбор данных,ШК+БД,4607001290032,МАСЛО ЗОЛОТАЯ СЕМЕЧКА,9
Сбор данных,ШК+БД,4607001290018,vМАСЛО ПОДСОЛН. ЗОЛОТА,32
Сбор данных,ШК+БД,0718122031207,МАСЛО ОЛИВКОВКОВОЕ EV,1
Сбор данных,ШК+БД,4607086490457,МАСЛО ОЛИВКОВОЕ SOFOS,2
Сбор данных,ШК+БД,4607086490426,МАСЛО ОЛИВКОВОЕ SOFOS,7
Сбор данных,ШК+БД,4820043010042,МАСЛО ГРЕЦКОГО ОРЕХА 0,2
Сбор данных,ШК+БД,4820043010417,МАСЛО ТЫКВЕННОЕ 100%,2
Сбор данных,ШК+БД,4607049240037,МАСЛО ГОРЧИЧНОЕ ГОРЛИН,4
//----------------------------------------------------------------------------------------

На самом деле из этого файла берутся только штрих-код и количество, соответственно в строку табличной части устанавливается количество факт, рознечная цена и сумма, фактическая и учетная:
//----------------------------------------------------------------------------------------
Пока ВремЦена.ПолучитьЭлемент() = 1 Цикл
Если ВремЦена.ТипЦен.Наименование = "Закупочные" Тогда
ВремДок.Цена = ВремЦена.Цена.Получить(ВремДок.ДатаДок);
Прервать;
КонецЕсли;
КонецЦикла;
ВремДок.СуммаУчет = ВремДок.Цена * ВремДок.КоличествоУчет;
ВремДок.Сумма = ВремДок.Цена * ВремДок.Количество;
//----------------------------------------------------------------------------------------

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

//----------------------------------------------------------------------------------------
........
Товар = ВремТовар.ТекущийЭлемент();
ВремДок.КоличествоУчет = ОстаткиТоваров(Товар);
........
........
Функция ОстаткиТоваров(знач Товар)
Перем УстСтр, УстСтл;
Рег = СоздатьОбъект("Регистр.ОстаткиТМЦ");
ТабОст = СоздатьОбъект("ТаблицаЗначений");
Рег.ВыгрузитьИтоги(ТабОст, 1, 1);
ТабОст.Свернуть("Номенклатура","Количество");
Если ТабОст.НайтиЗначение(Товар,УстСтр,УстСтл) = 1 Тогда
ТабОст.ПолучитьЗначение(УстСтр,УстСтл);
Возврат ТабОст.ПолучитьЗначение(УстСтр,"Количество");
Сообщить("Товар "+ТабОст.ПолучитьЗначение(УстСтр,УстСтл)+" Остаток="+ТабОст.ПолучитьЗначение(УстСтр,"Количество"));
Иначе
Возврат 0;
КонецЕсли;

КонецФункции
........
//----------------------------------------------------------------------------------------

ТабОст, мне сказали свернуть, т.к. в ней могут дублироваться элементы справочников, что-то связано с партиями, я бы хотел, чтобы вы это мне объяснили .....

Какой мне лучше применить способ для получения реального остатка товара, для занисения в колонку "КоличествоУчет" табличной части документа Инвентаризации (по складу)?
Отправлен: 10.09.2007, 07:46
Вопрос задал: _Alexey_ (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 10)

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

Во-первых, Вам правильно объяснили -- у регистра ОстаткиТМЦ есть и другие измерения, кроме "Номенклатура", поэтому один и тот же ТМЦ может фигурировать несколько раз в таблице ТабОст, следовательно ее надо свернуть, как Вы и сделали абсолютно правильно.

Во-вторых, Ваша функция ОстаткиТоваров() работает абсолютно правильно, хоть и не оптимизирована (есть лишние и неработающие строки, но ничего критичного).

В-третьих, эту функцию лучше всего было бы написать так, как у меня в Приложении -- получать сразу нужное значение из регистра, не выгружая весь регистр в таблицу значений. Параметры в примененном у меня методе СводныйОстаток проставьте в соответствии со структурой Вашего регистра ОстаткиТМЦ (см. также Синтакс-Помощник).

Если будут вопросы, задавайте в мини-форуме.
Удачи!

Приложение:

---------
В творчестве рождается истина

Ответ отправил: Elric (статус: Специалист)
Ответ отправлен: 10.09.2007, 11:14
Оценка за ответ: 5
Комментарий оценки:
Да, вы правы, у меня все работает, но не очень оптимизированно ....
У нас проводится инвентаризация по двум складам .... т.е. в БД есть два склада, следовательно мне будет нужен остаток по определенному складу!
На форме обработки, я разместил текстовое поле, которое будет хранить ссылку на склад, т.е. пользователь перед созданием документа должен будет выбрать склад и соответственно обработка должна выводить остаток по этому складу...


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.58 от 10.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное