Примеры вопросов ко мне и ответов от меня в режиме консультаций по 1С (программирование)

С уважением, Алексей Карманов

Вопрос

Алексей, день добрый!

Подскажите решение такого вопроса:

  1. В печатном макете в одной из ячеек делаю Заполнение "шаблон" -- Дата Отгрузки: [Дата ] ---.
  2. Значение ячейки (формат даты) выставляю, чтобы было без времени. Но всё равно время выходит.
  3. В какую сторону нужно "копать" ? в коде или в макете?

Мой ответ

День добрый!

Вам нужно в коде, в котором подготавливаете табличный документ для вывода, там где вы заполняете параметр Дата написать что-то типа:

ОбластьВашегоМакета.Параметры.Дата = Формат(Док.Дата, "ДЛФ=Д");

То есть подставлять в параметр уже отформатированное значение. 

**************************************************************

Вопрос

Здравствуйте!

  1. Есть Справочник. В нем создана форма.
  2. Имеются два реквизита "Дата" (тип Дата, состав даты Дата) и "СрокДействия" (тип Дата, состав даты Дата) .
  3. Нужно В событии "ПриИзменении" написать что если ставим Дату, то СрокДейсвтия равен Дата+360 дней
  4. С числами понятно как, а с датами не очень
  5. Можно для начала Пару примеров, чтобы я сам разобрался.

Спасибо!

Мой ответ

День добрый!

К датам тоже можно прибавлять числа. Они означают количество секунд.

Соответственно, чтобы прибавить к дате 360 дней можно написать так:

Дата + 360 * 24 * 60 * 60

Больше примеров на работу с датами здесь.

**************************************************************

Вопрос

Алексей, добрый день!

Сейчас решаю задачу по созданию документов Заказ клиента посредством загрузки их из xml XML файл выгружен из другой базы данных, ни как не связанной с 1С. Пример файл во вложении. Конфигурация УТ 11.1.5.

Что сделал: на форме списка Заказ клиента (ЗК) добавил кнопку. Ниже код, который она отрабатывает. Так вот, теперь не могу понять как же всетаки загрузить из xml в структуру. Первый элемент я получил, атрибуты тоже, а дальше, чтобы получить уже непосредственно атрибуты табличной части ... не пойму как.

Мой ответ

Здравствуйте!

Я вам пример разбора вашего XML набросал, разберитесь с ним и результатами, который он выводит и у вас всё получится:

XML = Новый ЧтениеXML;
XML.ОткрытьФайл("d:\work\orderExport.xml");
 
Пока XML.Прочитать() Цикл
 
    Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        Сообщить("<" + XML.Имя + ">");
 
        Пока XML.ПрочитатьАтрибут() Цикл
            Сообщить(XML.Имя + " = " + XML.Значение);
        КонецЦикла;
    КонецЕсли;
 
    Если XML.ТипУзла = ТипУзлаXML.Текст Тогда
        Сообщить(XML.Значение);
    КонецЕсли;
 
    Если XML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
        Сообщить("");
    КонецЕсли;
 
КонецЦикла;
 
XML.Закрыть();

**************************************************************

Вопрос

Добрый день.

У меня возник такой вопрос: Как сравнить табличные части связанных документов (один вводится на основании другого), но реквизиты "Вес" и "Количество" могут отличаться и если они отличаются тогда присвоить значения подчиненного документа, очистить табличную часть и заполнить не получается потому что в документ-основание присутствуют другие реквизиты, которых нет в подчиненном документе.

Мой ответ

День добрый!

Пусть есть ДокОснование и ДокПодчиненный.

Бежим по табличной части документа основание

Для Каждого Строка Из ДокОснование.ИмяТабличнойЧасти Цикл
 
    // нам нужно найти строку соответствующую этой в подчиненном документе 
    // и сравнить Вес и Количество например, будем искать по номенклатуре
    СтрокаПодчиненного = ДокПодчиненный.ИмяТабличнойЧасти.
        Найти(Строка.Номенклатура, "Номенклатура");
 
    Если СтрокаПодчиненного <> Неопределено Тогда
        Если 
            Строка.Вес <> СтрокаПодчиненного.Вес ИЛИ 
            Строка.Количество <> СтрокаПодчиненного.Количество
        Тогда
             Строка.Вес = СтрокаПодчиненного.Вес;
             Строка.Количество = СтрокаПодчиненного.Количество;
        КонецЕсли;
    КонецЕсли;
 
КонецЦикла;

Если требуется устанавливать соответствие строк в обоих табличных частях сразу по нескольким колонкам, то возможно лучше пользоваться методом НайтиСтроки (см. в синтакс-помощнике).

Если же соответствие строк идёт один к одному - то нужно просто брать их по номеру, то из одной табличной части, то из другой.

**************************************************************

Вопрос

Доброго дня!

Вопрос такой:

Делаю печатную форму.

  1. На выводе количество страниц равно тому параметру ("количество"), которое указал пользователь.
  2. Нужно в Коде написать такое условие: Если Последняя страница, то Не надо ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

Это будет выглядеть так?:

Если НЕ Количество Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

Спасибо!

Мой ответ

День добрый!

Если вы знаете общее количество страниц, то просто подсчитывайте при выводе каждой страницы какая она по счету и если она последняя, то выводить разделитель не нужно.

Что-то типа такого:

ОбщееКоличествоСтраниц = 10;
ВывелиСтраниц = 0;
 
цикл выводящий страницы:
 
вывод очередной страницы:
 
ВывелиСтраниц = ВывелиСтраниц + 1;
 
Если ВывелиСтраниц < ОбщееКоличествоСтраниц Тогда
    выводим разделитель
КонецЕсли;

 **************************************************************

Вопрос

Стоит задачка:

  1. Создают печатную форму
  2. Запросом вытягиваю что нужно.
  3. Один из параметр Табличного документа Число, которое вводит пользователь
  4. Нужно чтобы на печать выходило столько листов сколько указал пользователь. Причём, если указано Число 5, то на первом листе д/б 1, на втором 2 и т. п.

Не получилось вставить число, выбранное пользователем в Таб. документ.

Совсем не понятно как сделать пункт 4.

Спасибо!

Мой ответ

День добрый!

Посмотрите в синтакс помощнике методы табличного документа.

Вы выводите секции, описанные в макете документа по их именам.
А также есть метод, который выводит разрыв страницы - вот вам и новая страница.
Делайте столько разрывов - сколько страниц вам нужно.

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

Также посмотрите код любой из обработок выложенных у меня здесь. Там везде делается вывод разделителя страниц.

 **************************************************************

Вопрос

У меня такой вопрос, может подскажите в какую сторону копать.

Организация занимается продажей кофейных аппаратов и ингредиентов к ним (кофе, стаканы, сахар и т.д.) тут все понятно, обычная торговля, если бы не одно НО.

Часть аппаратов сдаются клиентам в аренду. Аренда оплачивается в виде аренды + покупка некоторого количества ингредиентов. Как лучше сделать учет по аппаратом которые находятся в данный момент в аренде?

Заранее спасибо :)

Мой ответ

День добрый!

Ну покупка ингредиентов я так понимаю труда не составляет. Это обычная продажа контрагенту.

Вопрос в том как сделать учет номенклатуры, которая в аренде.
- заводим регистр накопления, например, "ТоварыВАренде":
- измерения: Номенклатура, Контрагент
- ресурс: Количество

Теперь пусть к нам пришла машина от поставщика.
Мы её оприходуем и УТ поставит эту номенклатуру в количестве 1 штуку на свой типовой регистр накопления, не знаю как он называется точно, но пусть "ОстаткиТовараНаСкладе".

Ок.

Теперь мы сдаем эту машину в аренду (для этого свой документ создадим "Передача в аренду").

Документ должен сделать следующие движения:
в минус по регистру ОстаткиТовараНаСкладе
в плюс по регистру ТоварыВАренде

Отлично.

Теперь нам вернули из аренды машину (другой документ).

Делаем обратные движения, то есть возвращаем товар на склад.

В любой момент мы можем проанализировать остатки по регистру ТоварыВАренде, чтобы понять у кого и какие машины находятся. Плюс можем всю историю операций поднять.

Всё это лучше оформить в виде отдельной подсистемы в УТ, по минимуму затрагивая типовой функционал.