Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 ноя 2021, 10:53

Поле переключателя на форме обработки загрузки CSV-файла и разделение кода

Автор Дмитрий357, 29 окт 2021, 16:44

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий357

Добрый день! Подскажите пжл как сделать правильно. Необходимо чтобы на форме обработке, осуществляющей загрузку файла CSV, содержащий наименование товара, его количество, цену и стоимость, располагался переключатель: создать документ поступления товаров или реализации товаров. Создал переключатель на форме с реквизитом "Создание документа" и добавил его на форму  в виде тумблера. Код по созданию одного из двух документов располагается в общем модуле:
Процедура ЗагрузитьНаСервере(ПутьКФайлу, Контрагент, Валюта) Экспорт
// Вставить содержимое обработчика.
Док = Новый ТекстовыйДокумент ();
Док.Прочитать(ПутьКФайлу);
НовыйДокПоступления=Документы.ПоступлениеТоваров.СоздатьДокумент();
НовыйДокПоступления.Дата=ТекущаяДата ();
НовыйДокПоступления.Поставщик=Контрагент;
НовыйДокПоступления.Валюта=Валюта;
НовыйДокРеализация=Документы.РеализацияТоваров.СоздатьДокумент();
НовыйДокРеализация.Дата=ТекущаяДата ();
НовыйДокРеализация.Покупатель=Контрагент;
НовыйДокРеализация.Валюта=Валюта;
Для А=1 По Док.КоличествоСтрок() Цикл
Строка = Док.ПолучитьСтроку(А);
Массив = СтрРазделить (Строка, ";");
Наименование = Массив [0];
Количество = Массив [1];
Цена = Массив [2];
Стоимость = Массив [3];
НоваяСтрокаТЧ=НовыйДокПоступления.Товары.Добавить();
НоваяСтрокаТЧ=НовыйДокРеализация.Товары.Добавить();
НоваяСтрокаТЧ.Номенклатура=Наименование;
    НоваяСтрокаТЧ.Количество=Количество;
Если НовыйДокПоступления.Валюта=Справочники.Валюты.РоссийскийРубль Тогда
НоваяСтрокаТЧ.Цена=Цена;
    НоваяСтрокаТЧ.Стоимость=Стоимость;
Иначе
НоваяСтрокаТЧ.Цена=Цена*ЗначениеКурсаВалютКлиентСервер.РассчитатьПоКурсу(НовыйДокПоступления.Валюта, НовыйДокПоступления.Дата);
НоваяСтрокаТЧ.Стоимость=Стоимость*ЗначениеКурсаВалютКлиентСервер.РассчитатьПоКурсу(НовыйДокПоступления.Валюта, НовыйДокПоступления.Дата);
КонецЕсли;
КонецЦикла;
НовыйДокПоступления.Записать ();
НовыйДокРеализация.Записать();
КонецПроцедуры


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

LexaK

@Дмитрий357, посмотрите, может подойдет

Процедура ЗагрузитьНаСервере(ПутьКФайлу, Контрагент, Валюта, ТипДокумента) Экспорт
    // Вставить содержимое обработчика.
    Док = Новый ТекстовыйДокумент ();
    Док.Прочитать(ПутьКФайлу);

Если ТипДокумента = "Поступление" Тогда
    НовыйДок = Документы.ПоступлениеТоваров.СоздатьДокумент();
    НовыйДок.Поставщик = Контрагент;
ИначеЕсли ТипДокумента = "Реализация" Тогда
    НовыйДок = Документы.РеализацияТоваров.СоздатьДокумент();
    НовыйДок.Покупатель = Контрагент;
Иначе
Сообщить("Не обрабатываемый тип: " + ТипДокумента);
Возврат;
КонецЕсли;

    НовыйДок.Дата   = ТекущаяДата ();
    НовыйДок.Валюта = Валюта;

    Для А=1 По Док.КоличествоСтрок() Цикл
        Строка = Док.ПолучитьСтроку(А);
        Массив = СтрРазделить (Строка, ";");
        Наименование = Массив [0];
        Количество = Массив [1];
        Цена = Массив [2];
        Стоимость = Массив [3];
        НоваяСтрокаТЧ = НовыйДок.Товары.Добавить();
        НоваяСтрокаТЧ.Номенклатура = Наименование;//будет ПУСТО, нужна ссылка
        НоваяСтрокаТЧ.Количество = Количество;
        Если НовыйДок.Валюта=Справочники.Валюты.РоссийскийРубль Тогда
                НоваяСтрокаТЧ.Цена=Цена;
                НоваяСтрокаТЧ.Стоимость=Стоимость;
        Иначе
                НоваяСтрокаТЧ.Цена=Цена*ЗначениеКурсаВалютКлиентСервер.РассчитатьПоКурсу(НовыйДокПоступления.Валюта, НовыйДокПоступления.Дата);
                НоваяСтрокаТЧ.Стоимость=Стоимость*ЗначениеКурсаВалютКлиентСервер.РассчитатьПоКурсу(НовыйДокПоступления.Валюта, НовыйДокПоступления.Дата);
        КонецЕсли;
    КонецЦикла;
    НовыйДок.Записать ();

КонецПроцедуры


ответ Понравился? (в смысле пригодился?)

Дмитрий357

@LexaK, Да спасибо огромное помогло, все работает! А что по второму вопросу? стоит ли организовывать проверку на остатки товаров, если создается документ реализация товаров и при этом работает код по оперативному учету, т.е. документ не проводится, если на складе нет достаточного количества товара. Т.е. как сделать грамотно. Мы же все равно должны сначала загрузить товары из файла и потом пройдет проверка или ее делать во время загрузки?

LexaK

Цитата: Дмитрий357 от 29 окт 2021, 18:17@LexaK, Да спасибо огромное помогло, все работает! А что по второму вопросу? стоит ли организовывать проверку на остатки товаров, если создается документ реализация товаров и при этом работает код по оперативному учету, т.е. документ не проводится, если на складе нет достаточного количества товара. Т.е. как сделать грамотно. Мы же все равно должны сначала загрузить товары из файла и потом пройдет проверка или ее делать во время загрузки?
это все зависит от вашей бизнес логики и модели учета! а ее кроме вас ни кто не знает!
могут быть различные варианты,
и отложенное проведение документов
и отложенная допоставка товаров
и закрытие месяца по отрицательным остаткам
и т.д.
читайте книжки, анализируйте все эти модели, выбирайте что подходит именно к вашему бизнесу, модели учета
и применяйте, уже готовую методику учета!
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск