Пример решения задачи по оперативному учету для экзамена (1С: Специалист по платформе 8.3)

01.11.22

Разработка - Подготовка к аттестации

Готовясь к повторной сдаче экзамена 1С:Специалист по платформе, получил просьбу от коллег - расписать решение нескольких билетов, чтобы было проще понять логику и ход решения. Сделав описание одного - двух билетов, выложил всё это на github и оставил до поры до времени. Недавно наткнулся и стало жалко, если тот труд пропадёт зря, поэтому решил выложить одно решение в виде статьи и прикрепить к нему ссылку на github, вдруг ещё кому данный материал будет полезен.

Дисклеймер Данные записи, по сути, практическая выжимка решения, теор. часть практически не разбирается! Поэтому важен теоретических базис от любого доступного источника: Курс 1С УЦ, Курс Гилёва, Курс Чистова, практическое пособие разработчика и т.д.

Краткая справка

  1. Флаг движений регистра Записывать: Движения.ОстаткиНоменклатуры.Записывать = Истина

    • Если установлен в ИСТИНА означает, что по завершении процедуры проведения движения по этому регистру будут записаны в БД
    • Особенность программной записи:
       Движения.Записать(); // снимает флаг "Записывать" 
       Движения.ОстаткиНоменклатуры.Записать(); // НЕ снимает флаг "Записывать"
    
  2. Старая и новая методики проведения для контроля остатков

    • Старая методика (блокировка более длительная)

      • Ставим блокировку
      • Читаем записи регистра
      • Обходим результат:
        • если остатков не хватает - зажигаем флаг ОТКАЗ и выводим ошибки
        • Если всё хорошо - заполняем движения
    • Новая методика (блокировка менее длительная)

      • Заполняем движения
      • ставим флаг (Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина) и делаем запись
      • Делам запрос к БД с поиском отрицательных остатков
        • если есть отрицательные остатки - зажигаем флаг ОТКАЗ и выводим ошибки
        • если всё хорошо - делать ничего не надо
    • Всегда надо пытаться применить новую методику (меньше времени ожидания на блокировках), но это далеко не всегда возможно

      • Как быстро выбрать методику? Если данные регистра нужны для формирования движений - старая методика, иначе - новая методика.
  3. Зачем нужна конструкция языка с записью движений первый раз при старой методике?

     Движения.ОстаткиНоменклатуры.Записывать = Истина;
     Движения.ОстаткиНоменклатуры.Записать();
    

    Без этого не удалятся старые движения документа при перепроведении, а это ошибка в решении билетов. Подробнее смотрите теорию из любого доступного источника

  4. Все объекты решения всегда должны быть включены в соответствующую подсистему и разнесены по группам (см. базовые настройки конфигурации...)

    • делается это перед началом тестирования решения, т.к. все объекты метаданных уже будут созданы

 

Анализ билета

 
 Примерный текст билета

Выделяем ключевые особенности решения 1-2 словами, чтобы потом по этому чек-листу разрабатывать решение

  • Используемые документы: "Приходная накладная", "Расходная накладная"
  • Есть услуги в одной ТЧ
  • Учет в разрезе складов / склад в шапке
  • Требуется проверка остатков при списании
  • Метод списания (Fifo, lifo) раз в год
  • Себестоимость списывается без учёта склада
  • Отчет простой, строится по одному регистру

Каждая особенность влияет на решение и настройку метаданных

Проектирование регистра начинается с анализа отчета!

 

Ход решения билета

Подготовка объектов метаданных

  • Добавляем реквизит "Вид номенклатуры" для справочника "Номенклатура"

    • Имя "ВидНоменклатуры" (тип: "ПеречислениеСсылка.ВидНоменклатуры" или булево)
    • требуется для "Есть услуги в одной ТЧ"
  • Создаём новый справочник "Склады"

    • Создаём 2 предопределённых склада: "Основной" и "Транзитный"
    • требуется для Учет в разрезе складов / склад в шапке
  • Дорабатываем учётные документы

    • Создаём реквизит шапки "Склад" (тип: "СправочникСсылка.Склады") в используемых документах
      • Не забываем ставить признак Проверка заполнения в Выдавать ошибку
      • Для опер. учёт всё, но если почитать весь билет, то увидим, что в табличной части будет доп. разрез по срокам годности - его можно добавить сразу
      • Требуется для Учет в разрезе складов / склад в шапке
  • Добавляем периодический регистр сведений "Учетная политика"

    • Период: Год
    • Измерения: нет, Ресурсы Метод списания (тип: ПеречислениеСсылка.УчетнаяПолитика)
  • Настраиваем регистр "ОстаткиНоменклатуры"

    • Измерение "Номенклатура"
      • Ставим признак "Запрет незаполненных значений"
    • Добавляем измерение "Склад" (тип: "СправочникСсылка.Склады")
      • Ставим признак "Запрет незаполненных значений"
    • Регистраторы:
      • "ПриходнаяНакладная", "РасходнаяНакладная"
    • Включаем режим разделения итогов (последняя вкладка)
    • Требуется для Учет в разрезе складов / склад в шапке
  • Добавляем новый регистр "ПартииНоменклатуры"

    • Измерения:
      • Номенклатура (тип: СправочникСсылка.Номенклатура)
      • Партия (тип: ДокументСсылка.ПриходнаяНакладная)
    • Ресурсы:
      • Количество (тип: Число, длина: 10, точность: 0)
      • Сумма (тип: Число, длина: 12, точность: 2) // по-умолчанию сумму считаем в рублях
    • Регистраторы:
      • "ПриходнаяНакладная", "РасходнаяНакладная"
    • Проверяем что включен режим разделения итогов (последняя вкладка)
    • Требуется для Себестоимость списывается без учёта склада

Настройка документа "Приходная накладная"

  • Для ускорения процесса первичные движения всегда накидываем через конструктор движений

 

 

  • Результат:
    // регистр ОстаткиНоменклатуры Приход
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
        Движение.Склад = Склад;
        Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
    КонецЦикла;

    // регистр ПартииНоменклатуры Приход
    Движения.ПартииНоменклатуры.Записывать = Истина;
    Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
        Движение = Движения.ПартииНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
        Движение.Партия = Ссылка;
        Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
        Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма;
    КонецЦикла;
  • Дорабатываем алгоритм, чтобы отфильтровать услуги
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Движения.ПартииНоменклатуры.Записывать = Истина;

    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
    |    СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
    |    СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
    |ИЗ
    |    Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
    |ГДЕ
    |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
    |    И ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)
    |
    |СГРУППИРОВАТЬ ПО
    |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура";

    Запрос.УстановитьПараметр("Ссылка", Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл

        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Склад = Склад;
        Движение.Количество = Выборка.Количество;

        Движение = Движения.ПартииНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Партия = Ссылка;
        Движение.Количество = Выборка.Количество;
        Движение.Сумма = Выборка.Сумма;

    КонецЦикла;

Настройка документа "Расходная накладная"

  • Для ускорения процесса первичные движения всегда накидываем через конструктор движений

    • тут я их уже показывать не будут - полная аналогии с тем, что раньше, только вид движения "Расход"
  • Ключевые точки алгоритма

    • Получить учетную политику

      • Если метода нет - выдать ошибку и не проводить документ
      • требуется для Метод списания (Fifo, lifo) раз в год
    • Поставить признак записи и очистить прошлые записи регистра

      • это критически важно для корректного перепроведения документов
    • Определить методику проведения для каждого регистра

      • ПартииНоменклатуры - старая методика, т.к. нужны данные регистра (стоимость партии) для формирования движений

        • ставим блокировку БлокировкаДанных по измерению "Номенклатура" с отбором по ТЧ
        • читаем партии на МоментВремени
        • проверяем, что кол-ва хватает, если нет ОТКАЗ = истина и вывод ошибок (не забываем про Представление)
        • Если хватает - заполняем движения
      • ОстаткиНоменклатуры - новая методика, т.к. все данные есть в документе и других не надо

        • заполняем движения
        • ставим флаг "БлокироватьДляИзменения"
        • записываем движения
        • читаем регистр на Границу документа с поиском отрицательных остатков
        • Если есть отрицательные остатки, ОТКАЗ = истина и вывод ошибок (не забываем про Представление)
    • Сделать движения по регистру "Партии номенклатуры" (старая методика)

      • Если нужно списывать партии - их ВСЕГДА надо сортировать по моменту времени, если явно не задан другой критерий
        • Fifo - по возрастанию
        • lifo - по убыванию
      • При списании не забываем решать проблему копеек
        • кратко: 3 шт. стоимостью 100 рублей = 33.33 за штуку // обратный расчет: 33.33 * 3 = 99.99 // вот это проблема копеек
        • Способ решения: при списании последней штучки списывать ВСЮ оставшуюся себестоимость (один из универсальных способов приведён в коде)
      • Совет Обратите внимание на переменную "КоличествоСписать": она важна
      • Полезный приём! по-умолчанию сортируйтесь по убыванию, а при необходимости просто убирайте слово "УБЫВ"
      • полезный приём! Кусок кода с блокировкой можно копировать из справки!

        • пишите слово БлокировкаДанных и ctrl+F1

    • Сделать движения по регистру "Остатки номенклатуры" (новая методика)

      • все пояснения по методике списания есть выше
      • по методике решения от 1С даже при отказе надо вывести ВСЕ ошибки, поэтому движения по 2м регистрам делаются независимо от того есть в одном ошибка или нет
      • в билете может не быть явного указания на контроль остатков, но такое есть в общих требованиях к экзамену!

    УчетнаяПолитика = РегистрыСведений.УчетнаяПолитика.СрезПоследних(МоментВремени());
    Если УчетнаяПолитика.Количество() = 0 Тогда

        Отказ = Истина;

    Иначе

        МетодСписания = УчетнаяПолитика[0].МетодСписания;
        Если НЕ ЗначениеЗаполнено(МетодСписания) Тогда
            Отказ = Истина;
        КонецЕсли;

    КонецЕсли;

    Если Отказ Тогда

        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не задана учетная политика!";
        Сообщение.Сообщить();
        Возврат;

    КонецЕсли;

    Движения.ПартииНоменклатуры.Записывать = Истина;
    Движения.ПартииНоменклатуры.Записать();

    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ПартииНоменклатуры");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();    

    // для контроля остатков используем регистр "Остатки" и новую методику
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    &Склад КАК Склад,
    |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
    |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
    |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
    |ПОМЕСТИТЬ ВТ_ДанныеДок
    |ИЗ
    |    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
    |ГДЕ
    |    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
    |    И РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
    |
    |СГРУППИРОВАТЬ ПО
    |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Номенклатура,
    |    Склад
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_ДанныеДок.Склад КАК Склад,
    |    ВТ_ДанныеДок.Номенклатура КАК Номенклатура,
    |    ВТ_ДанныеДок.Количество КАК Количество,
    |    ПартииНоменклатурыОстатки.Партия КАК Партия,
    |    ЕСТЬNULL(ПартииНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоПартии,
    |    ЕСТЬNULL(ПартииНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаПартии,
    |    ВТ_ДанныеДок.Номенклатура.Представление КАК НоменклатураПредставление
    |ИЗ
    |    ВТ_ДанныеДок КАК ВТ_ДанныеДок
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииНоменклатуры.Остатки(
    |                &МоментВремени,
    |                Номенклатура В
    |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |                        ВТ_ДанныеДок.Номенклатура КАК Номенклатура
    |                    ИЗ
    |                        ВТ_ДанныеДок КАК ВТ_ДанныеДок)) КАК ПартииНоменклатурыОстатки
    |        ПО ВТ_ДанныеДок.Номенклатура = ПартииНоменклатурыОстатки.Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПартииНоменклатурыОстатки.Партия.МоментВремени УБЫВ
    |ИТОГИ
    |    МАКСИМУМ(Количество),
    |    СУММА(КоличествоПартии)
    |ПО
    |    Номенклатура";

    Запрос.УстановитьПараметр("ВидНоменклатуры", Перечисления.ВидыНоменклатуры.Товар);
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Склад", Склад);

    Если МетодСписания = Перечисления.УчетнаяПолитика.ФИФО Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, ".МоментВремени УБЫВ", ".МоментВремени");
    КонецЕсли;

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаНоменклатура.Следующий() Цикл

        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
        Движение.Склад = Склад;
        Движение.Количество = ВыборкаНоменклатура.Количество;

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

        Если Отказ Тогда 
            Продолжить;
        КонецЕсли;

        ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();

        КоличествоСписать = ВыборкаНоменклатура.Количество;

        Пока КоличествоСписать > 0 И ВыборкаДетальныеЗаписи.Следующий() Цикл

            КолПоПартии = МИН(КоличествоСписать, ВыборкаДетальныеЗаписи.КоличествоПартии);
            Себестоимость = ?(КолПоПартии = ВыборкаДетальныеЗаписи.КоличествоПартии, 
              ВыборкаДетальныеЗаписи.СуммаПартии, 
              КолПоПартии * ВыборкаДетальныеЗаписи.СуммаПартии / ВыборкаДетальныеЗаписи.КоличествоПартии);

            Движение = Движения.ПартииНоменклатуры.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
            Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
            Движение.Количество = КолПоПартии;
            Движение.Сумма = Себестоимость;

            КоличествоСписать = КоличествоСписать - КолПоПартии;

        КонецЦикла;

    КонецЦикла;

    Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
    Движения.ОстаткиНоменклатуры.Записать();

    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
    |    ОстаткиНоменклатурыОстатки.Склад КАК Склад,
    |    -ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток,
    |    ОстаткиНоменклатурыОстатки.Номенклатура.Представление КАК НоменклатураПредставление,
    |    ОстаткиНоменклатурыОстатки.Склад.Представление КАК СкладПредставление
    |ИЗ
    |    РегистрНакопления.ОстаткиНоменклатуры.Остатки(
    |            &Граница,
    |            (Номенклатура, Склад) В
    |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |                    ВТ_ДанныеДок.Номенклатура КАК Номенклатура,
    |                    ВТ_ДанныеДок.Склад КАК Склад
    |                ИЗ
    |                    ВТ_ДанныеДок КАК ВТ_ДанныеДок)) КАК ОстаткиНоменклатурыОстатки
    |ГДЕ
    |    ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";
    Запрос.УстановитьПараметр("Граница", Новый Граница(МоментВремени(),ВидГраницы.Включая));

    Рез = Запрос.Выполнить();
    Выборка = Рез.Выбрать();
    Пока Выборка.Следующий() Цикл

        Отказ = Истина;

        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не хватает товара: " + Выборка.НоменклатураПредставление + " по складу: " + Выборка.СкладПредставление + " в количестве: " + Выборка.КоличествоОстаток;
        Сообщение.Сообщить();

    КонецЦикла;

Подготовка отчета

  • Не забываем соблюдать общие требования к отчету

  • Все нюансы настройки отчета привести невозможно, поэтому только ключевые моменты

    • Вот запрос отчета:
ВЫБРАТЬ
    ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
    ОстаткиНоменклатурыОстатки.Склад КАК Склад,
    ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
    РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
  • Как настроить заголовок

    • Сделать новую область в отчете с настройками, как на скриншоте (имя группировки - "Заголовок")

  • Создать макет для "Заголовок":

    • В левом окне "Добавить макет" -> "Добавить макет группировки";
    • В поле "Имя группировки" выбираем ранее созданную область из настроек - "Заголовок";
    • В табличном документе выбираем область, которая будет привязана к макету;
    • Заполняем область: вводим текст заголовка, а в параметрах области не забываем указать тип: "параметр/шаблон";
    • В нижней таблице "Параметры макета" настраиваем связь между параметрами макета и параметрами СКД;

  • скриншоты других настроек

 

Заключение

Целью данной мини-статьи было поделиться своими наработками и заметками, сделанными в ходе подготовки к экзамену. Все материалы расположены в отдельном гит-хранилище, в разделе HowTo - ссылка

Экзамен Специалист по платформе Билет

См. также

Подготовка к аттестации Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обучающая программа 1С Online представляет собой интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Тренажер запросов подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    77018    95    15    

189

Подготовка к аттестации Программист Стажер Бесплатно (free)

Меня зовут Татьяна, в 1С-разработке я уже семь лет, а в этом году официально стала junior-специалистом. Рассказываю, как всё происходило.

10.09.2024    7135    PROSTO-1C    21    

13

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Я Олег, разработчик 1С. Расскажу, как сдавал на сертификат Специалиста, в чём ошибся и что стоит учесть.

11.06.2024    14128    PROSTO-1C    51    

66

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

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

04.06.2024    9341    anton99    50    

57

Подготовка к аттестации Стажер Конфигурации 1cv8 Фармацевтика, аптеки Россия Управленческий учет Бесплатно (free)

Краткий рассказ о выборе 1С как основного языка программирования для дипломной работы в университете, и само приложение к диплому.

28.05.2024    4343    DmitryOneBit    20    

20

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Абонемент ($m)

В публикации предоставлено решения 7 билетов из сборника 2022 года . Решения выполнены по пунктам и подробно, каждый БП описан и решен по условиям задач. Благодаря данному решению к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

07.05.2024    8406    85    user1988637    16    

42

Подготовка к аттестации Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Абонемент ($m)

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

10 стартмани

08.04.2024    2981    39    user1988637    4    

15

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

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

14.03.2024    18185    PROSTO-1C    47    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pablo_escobar 01.11.22 10:02 Сейчас в теме
ставим блокировку (Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина) и делаем запись

Свойство "БлокироватьДляИзменения" не ставит никаких блокировок, оно игнорирует разделитель итогов (колонка Splitter) по записываемому набору измерений, начиная с момента записи до конца транзакции.
aleksey2; ubnkfl; alex44ru; zeltyr; +4 Ответить
Оставьте свое сообщение