Продвинутый курс. Домашнее задание №11

Эта запись посвящена первому потоку продвинутого курса по программированию.

Для выполнения рекомендуется изучить следующие главы 2-го блока.
Глава 1. Документы.
Глава 2. Регистры.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментариев 46 на “Продвинутый курс. Домашнее задание №11”

  1. Сделал через подписку на событие

  2. Дз№ 11 сделано

  3. Задание выполнено

  4. Андрей Антипенко 21.02.2011 в 06:45

    Задание выполнил через подписки ПередЗаписью и ОбработкаПроведения, затруднений не вызвало .
     
    После просмотра решения, решил что нужно побольше было подумать над реализацией:-)

  5. ДЗ № 11 выполнено.  Алгоритм аналогичный решению. Долго пытался найти причину циклических ссылок, пока не посмотрел решение. Спасибо.

  6. ДЗ № 11 сделала

  7. ДЗ 11 выполнил. Сделал подписку на событие Обработка проведения документа.  Затем запросом определяю ту номенклатуру, что менялась в документе. Для этого сравниваю данные из регистра ОстаткиТоваров по регистратору и данные из Источник.Движения.ОстаткиТоваров. Вычисляю разность количества Номенклатуры и отсеиваю неположительные. Затем затем по получившимуся писку номенклатуры запросом к виртуальной таблице ОстаткиТоваровОстатки провожу контроль отрицательных остатков.

  8. Андрей Медведев 04.02.2011 в 09:30

    Задание выполнил.
    Использовал подписку на событие
    «Обработка проведения».

    В обработчике подписки выполняю следующие действия:

    1. Обращаюсь запросом к записанным ранее строка регистра накопления
    2. Принудительно записываю набор записей регистра
    3.

     
    «Остатки товаров» с отбором по регистратору (Текущий документ). Если документ не проведен запрос будет пустым. Данные группирую по номенклатуре и записываю по временную таблицу. «Остатки товаров». Выполняю запрос по контролю остатков. Запрос выполняется пакетом – сначала делаю соединение таблицы регистра «Остатки товаров» с новыми данными с сохраненной во временной таблице таблицей регистра со старыми данными – получаю список номенклатуры с измененным количеством. Далее для данной номенклатуры проверяю остатки. Остатки получаю виртуальной таблицей остатков, в качестве параметра «Период» передаю границу, включающую момент времени документа. 

    4. Если обнаружены отрицательные остатки

     

    – присваиваю параметру «Отказ» значение «Истина»

  9. готово

  10. CreativeGroup 02.02.2011 в 22:27

    Домашнее задание выполнено.
    Для решения это задачи создал две подписки на события «Перед записью» и «Обработка проведения».
    В подписке на события принудительно записывал движения документа, затем проверял если Источник.Ссылка.Проведен тогда искал добавленные позиции или увеличения количества по товару, формируя следующий запрос:
    <code>
    Запрос.Текст= “ВЫБРАТЬ
    |              ОстаткиТоваров.Номенклатура КАК Номенклатура,
    |              СУММА(ОстаткиТоваров.Количество) КАК Количество
    |ПОМЕСТИТЬ ВТТекущиеДанные
    |ИЗ
    |              РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
    |ГДЕ
    |              ОстаткиТоваров.Регистратор = &Регистратор
    |
    |СГРУППИРОВАТЬ ПО
    |              ОстаткиТоваров.Номенклатура
    |
    |ИНДЕКСИРОВАТЬ ПО
    |              Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |              ПрошлыеДанные.Номенклатура КАК Номенклатура,
    |              ПрошлыеДанные.Количество КАК Количество
    |ПОМЕСТИТЬ ТЧ
    |ИЗ
    |              &ТЧ КАК ПрошлыеДанные
    |
    |ИНДЕКСИРОВАТЬ ПО
    |              Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |              ВТПрошлыеДанные.Номенклатура КАК Номенклатура,
    |              СУММА(ВТПрошлыеДанные.Количество) КАК Количество
    |ПОМЕСТИТЬ ВТПрошлыеДанные
    |ИЗ
    |              ТЧ КАК ВТПрошлыеДанные
    |
    |СГРУППИРОВАТЬ ПО
    |              ВТПрошлыеДанные.Номенклатура
    |
    |ИНДЕКСИРОВАТЬ ПО
    |              Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |              ТекущиеДанные.Номенклатура КАК Номенклатура,
    |              ТекущиеДанные.Количество КАК Количество
    |ПОМЕСТИТЬ ВТИзмененныеДанные
    |ИЗ
    |              ВТТекущиеДанные КАК ТекущиеДанные
    |                             ЛЕВОЕ СОЕДИНЕНИЕ ВТПрошлыеДанные КАК ПрошлыеДанные
    |                             ПО ТекущиеДанные.Номенклатура = ПрошлыеДанные.Номенклатура
    |ГДЕ
    |              ТекущиеДанные.Количество > ЕСТЬNULL(ПрошлыеДанные.Количество, 0)
    |
    |ИНДЕКСИРОВАТЬ ПО
    |              Номенклатура”;
    </code>
     
    Иначе помещал во временную таблицу ВТИзмененныеДанные всю табличную часть.
    Затем вставил в Источник.ДополнительныеСвойства менеджер временных таблиц.
     
    А в обработке проведения уже проводил поиск отрицательльных остатков с условием
    |Номенклатура В
    |                                                             (ВЫБРАТЬ
    |                                                                            ВТ.Номенклатура
    |                                                             ИЗ
    |                                                                            ВТИзмененныеДанные КАК ВТ)
    И выводил сообщения, если таковые возникали и конечно выставлял Отказ=Истина

  11. Задание выполнил.
    Для документа реализация товаров создал две подписки на события. В первой на событие “ПередЗаписью” с помощью пакета запросов получаю таблицу с номенклатурой и номером строки по которым были изменения количества. Полученную таблицу запоминаю в ДополнительныхСвойствах. Во второй подписке на событие “ОбработкаПроведения” проверяю по данным позициям на отрицательный остаток если отказ истина и вывод сообщения пользователю с указанием позиции.
    Все пошел смотреть эталон.

  12. spec20091c 02.02.2011 в 03:08

    Задание выполнено.

    1) В обработчике подписки на событие “ПередЗаписью” определяется список номенклатуры из измененных строк путем сравнения табличной части объекта и ссылки.
    В параметр “ДополнительныеСвойства” передается структура, содержащая таблицу значений изменений номенклатуры (поля НомерСтроки, Номенклатура)
    и параметр “ЭтоНовый”, определяющий признак нового документа.

    2) В процедуре “ОбработкаПроведения” по регистру “ОстаткиТоваров” выполняется явная запись движений.

    3) В обработчике подписки на событие “ОбработкаПроведения” ищутся отрицательные остатки номенклатуры, по следующему алгоритму:
    -Если параметр “ЭтоНовый”, переданный в структуре установлен в значение “Истина”, в запросе анализируются все строки табличной части документа.
    -Если параметр “ЭтоНовый” не установлен и таблица значений, переданная через “ДополнительныеСвойства”, заполнена номенклатурой по которой найдены изменения, в
    запросе выполняется анализ остатков номенклатуры содержащейся в этой таблице.

    Если отрицательные остатки найдены, выдается сообщение пользователю с привязкой к строке табличной части документа и
    параметр “Отказ” устанавливается в значение “Истина”.

    Такой алгоритм позволяет оптимальным образом использовать передачу параметров через “ДополнительныеСвойства” документа, поскольку при изменении строк проведенного документа передаются
    только данные измененных строк, в остальных случаях – признак с типом булево.

  13. Задание выполнено. В подписке ПередЗаписью в дополнительные свойства помещаются все строки, если новый документ, либо только измененные строки, если не новый. В модуле объекта движения записываются. В подписке ОбработкаПроведения производится контроль остатков.

  14. Задание выполнил.
    1.  Создал подписку на событие ДокументыСписанияОбработкаПроведения. Источник: ДокументОбъект.РеализацияТоваровИУслуг.
    2. В обработчике подписки следующий алгоритм:
    Если Источник проведен тогда запросом выбираю  измененные позиции (по таблицам Источник.Товары и РегистрНакопления.ОстаткиТоваров) и помещаю в массив.  Если Источник не проведен в массив выгружаю всю номенклатуру из Источник.Товары.
    Формирую и записываю движения Источника по регистру ОстаткиТоваров.
    Далее запрос к таблице РегистрНакопления.ОстаткиТоваров.Остатки с фильтром по массиву товаров и условием на отрицательное количество.
    3. Из документа РеализацияТоваровИУслуг убрал проведение по регистру ОстаткиТоваров.

  15. Леонид 31.01.2011 в 10:57

    Задание выполнил.
    Список контролируемой номенклатуры определяю в подписке ПриЗаписи соединяя табличную часть Источника с набором записей регистра остатков номенклатуре и количеству этого регистратора. В условии ГДЕ ОстаткиТоваров.Номенклатура ЕСТЬ NULL.
    Массив передаю через дополнительные параметры.
    В подписке обработки проведения проверяю отрицательные остатки только по номенклатуре из этого массива.

    • Леонид 31.01.2011 в 11:22

      Оговорился. Подписка ПередЗаписью.

  16. Филимонов Юрий 31.01.2011 в 08:03

    Задание выполнено.
    1. Измененные позиции отлавливал через через сравнение наборов записей у Ссылки.ПолучитьОбъект() и текущего набора записей
    2. Сам контроль остатков по новой методике выполняется просто – все уже не раз было рассмотрено в рамках курса.
    3. Создание подписки на событие ПередЗаписью не вызвало затруднений, как по учебнику.

  17. Выполнено.  В подписке ПриЗаписи выявление Было/Стало количество если ЭтоНовый = Ложь. Передача тз с разными кол. (объекта и ссылки) в подписку ПриПроведении через ДополнительныеСвойства  или проверка всех строк если ЭтоНовый = Истина

  18. progr-2008 30.01.2011 в 14:52

    Сделала.
    Изучила и попробовала несколько вариантов.  Проблема оказалась с конструктором запросов старых версий учебной версии платформы, который не всегда показывал временные таблицы.
    В результате, заработал следующий вариант.
    В подписке на событие Перед записью РН остатки /Проверяем наличие менеджера ВТ.
    Делаем запрос к пустой вт, если документ новый и запрос к прошлому состоянию, если документ уже был.
    В подписке на событие При записи РН остатки – пакетный запрос выбираем остатки из РН остатки в ВТ текущего состояния, отличия прошлого и текущего в ВТ изменений, выполняем запрос к РегистрНакопления.ОстаткиТоваров.Остатки для измененных позиций, где количестве <0
    Проверяем на не пустой результат.
    Если результат отрицательных остатков есть – формируем Отказ для проведения
    и сообщаем номенклатуру и количество             если нет – сообщаем и Возврат, Отказ не устанавливаем – он будет определяться             
    основной обработкой проведения.
     

  19. ДЗ № 11 выполнила.
    В подписке на событие ПередЗаписью: контроль дублей номенклатуры в табличной части; далее, если документ был проведен, то определяю таблицу с измененными строками в табличной части документа: новые строки и строки с измененным количеством; если был не проведен, то анализ не делаю, а беру всю табличную часть.  Помещаю ее в дополнительные свойства.
    В процедуре ОбработкаПроведения формирую и записываю движения документа без контроля остатков.
    В подписке на событие ОбработкаПроведения осуществляю контроль остатков по переданой через Доп.свойства номенклатуре, и если получаются отрицательные остатки, то отказ от проведения и вывод сообщения пользователю с привязкой к строкам документа.

  20. Шумаев Алексей 29.01.2011 в 20:40

    Задание выполнено…
    В подписке ПередЗаписью выбирается измененная номенклатура сравнением с Ссылкой объекта. Результат помещается в Дополнительные свойства.
    В подписке ОбработкаПроведения (здесь списание уже произошло, но транзакцию не закрыта) выполняю проверку на отрицательные остатки по измененной номенклатуре…

  21. Задание выполнено.

  22. Илья Чернов 29.01.2011 в 00:43

    Выполнил.
    Использовал две подписки, ПередЗаписью и ОбработкаПроведения.
    В первой выбирал измененные  строки и помещал их в дополнительные свойства объекта. Во второй подписке проверял остатки и выводил ошибки пользователю. Весь алгоритм запускался, когда проведение было оперативным.

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

    • Все таки после просмотра вашего решения пришла мысль, что мое решение не совсем верное..
      Тут использована одна подписка при проведении и весь код записи находится там же.. Однако если надо было разделять запись в модуле объекта и проверку в подписке, то следовало бы сделать еще один уровень (подписку при Записи)..

  24. Второй вариант решения (на мой взгляд более оптимальный). Его суть уже некоторые участники описали. В процедуре подписке на событие ПередЗаписью документа ни какой запрос не выполняется, но запоминается свойство Проведен в ДополнительныеСвойства документа. В процедуре подписки события ОбработкаПроведения проверяется это свойство и если оно Ложь, то для контроля берутся уникальные строки табличной части, если истина, то запросом выбираются измененные в сторону увеличения количества  и добавленные по сравнению с имеющимися записями  в регистре. Далее запись движений и  если есть, что контролировать – контроль. В данном случае если пользователь просто записывает документ, то ни каких запросов не выполняется и если он проводит ранее не проведенный документ, то тоже лишний раз запрос не выполняется.

    • “если он проводит ранее не проведенный документ, то тоже лишний раз запрос не выполняется.”
      Почему в этом случае не проверяются остатки?

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

  25. Кудрявцев Олег 27.01.2011 в 20:00

    Задание выполнил. Использовал одну подписку на событие – обработка проведения.

    • А как в ней вы определяли изменения документа?

      • Кудрявцев Олег 28.01.2011 в 08:42

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

  26. Создала две Подписки на событие
    ПриЗаписи – Событие ПриЗаписи
    СписаниеТМЦ- Событие ОбработкаПроведения
    Пока для документа РеализацияТоваровИУслуг , при наличии других документов, списывающих Номенклатуру их надо включить в подписки
    В Подписке ПриЗаписи выгружаю табличную часть товары из текущего объект и из ссылки и запросом к внешним источникам получаю таблицу расхождений – в нее попадают все строки из новой таблицы, которые добавлены и те, у которых изменилось количество
    Записываю таблицу в ДополнительныеСвойства
     
    В обработчике СписатьТМЦОбработкаПроведения
    Очищаю движения, провожу документ и выполняю определение остатков и заодно и текущих значений из таблицы остатков (в качестве параметров задаю период и номенклатура в из таблицы расхождений) и таблицы расхождений, связанных по номенклатуре и по условию ТаблицаРасхождений.НовоеКоличество > ОстаткиТоваровОстатки.КоличествоОстаток
    Если запрос возвращает строки, устанавливаю Отказ=Истина и выдаю сообщение пользовтелю о нехватке товара

  27. ДЗ 11.
    1. Создал подписку на событие «ПередЗаписью» для документов списания ТМЦ, в которой с помощью сравнения ссылки и объекта определяется массив номенклатуры, по которой будет проходить контроль остатков (номенклатуры, по которой были изменения). Если документ списания ТМЦ ранее не был проведен, то считается, что были изменения по всем строкам, независимо, изменилось ли количество, или нет. Полученный массив сохраняется в ДополнительныеСвойства документа (источника подписки на событие).
    2. В процедуре ОбработкаПроведения модуля объекта документа списания ТМЦ (например, реализации) происходит запись движений по рег. ОстаткиТоваров без контроля отрицательных остатков.
    3. Создал подписку на событие «Обработка проведения» для документов списания ТМЦ, в которой с помощью ДополнительныеСвойства документа (источника подписки на событие) определяется массив номенклатуры для контроля остатков. Далее этот массив используется как параметр для запроса (с использованием временных таблиц), с помощью которого определяется номенклатура, по которой после записи движений появились отрицательные остатки. Если находится хотя бы одна такая номенклатура с отрицательными остатками, то отказ = истина (проведение отменяется) и выдаются сообщения об ошибках. В противном случае записанные ранее движения (в процедуре обработка проведения) остаются в силе (документ проводится)
     

  28. Алексей Иванов 27.01.2011 в 11:01

    Задание выполнил.
    Сделал две подписки для документа «Реализация» – для событий «Перед записью» и «Обработка проведения». В «перед записью» выгружаю номенклатуру и количество в таблице товаров во временную таблицу. Менеджер временных таблиц передаю в обработку проведения через свойство документ-объекта «ДополнительныеСвойства».
    В обработке проведения связываю новые данные табличной части со старыми и выявляю номенклатуру, которую либо добавили в таблицу, либо увеличили ее количество. Затем проверяю остатки по измененной номенклатуре, используя в качестве периода границу вида включая на момент времени документа. Проверку отрицательных остатков делаю после принудительной записи движений по регистру «Остатки товаров».

  29.  Готово !..

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

    Процедура ПодпискаНаСобытие1ОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
     Запрос  = Новый Запрос;
     Запрос.Текст=
     “ВЫБРАТЬ РАЗЛИЧНЫЕ
     | ОстаткиТоваров.Номенклатура КАК Номенклатура,
     | СУММА(ОстаткиТоваров.Количество) КАК Количество,
     | МИНИМУМ(ОстаткиТоваров.НомерСтроки – 1) КАК НомерСтроки
     |ПОМЕСТИТЬ Регистр
     |ИЗ
     | РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
     |ГДЕ
     | ОстаткиТоваров.Регистратор = &Ссылка
     |
     |СГРУППИРОВАТЬ ПО
     | ОстаткиТоваров.Номенклатура
     |
     |ИНДЕКСИРОВАТЬ ПО
     | Номенклатура
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     | Данные.Номенклатура,
     | Данные.Количество
     |ПОМЕСТИТЬ Документ
     |ИЗ
     | &Данные КАК Данные
     |
     |ИНДЕКСИРОВАТЬ ПО
     | Данные.Номенклатура
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     | ЕСТЬNULL(Регистр.Номенклатура, Документ.Номенклатура) КАК Номенклатура,
     | Регистр.НомерСтроки
     |ПОМЕСТИТЬ Данные
     |ИЗ
     | Регистр КАК Регистр
     |  ПОЛНОЕ СОЕДИНЕНИЕ Документ КАК Документ
     |  ПО (Регистр.Номенклатура = Документ.Номенклатура
     |    ИЛИ ЕСТЬNULL(Документ.Номенклатура, ИСТИНА) = ИСТИНА)
     |ГДЕ
     | (НЕ Регистр.Количество = ЕСТЬNULL(Документ.Количество, 0))
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     | ОстаткиТоваровОстатки.Номенклатура,
     | -ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество,
     | Данные.НомерСтроки
     |ИЗ
     | РегистрНакопления.ОстаткиТоваров.Остатки(
     |   ,
     |   Номенклатура В
     |    (ВЫБРАТЬ
     |     Данные.Номенклатура
     |    ИЗ
     |     Данные КАК Данные)) КАК ОстаткиТоваровОстатки
     |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ Данные КАК Данные
     |  ПО ОстаткиТоваровОстатки.Номенклатура = Данные.Номенклатура
     |ГДЕ
     | ОстаткиТоваровОстатки.КоличествоОстаток < 0”;
     
     Запрос.УстановитьПараметр(“Ссылка”, Источник.Ссылка);
     Запрос.УстановитьПараметр(“Данные”, Источник.ДополнительныеСвойства.ТМЦ);
     
     
     Результат = Запрос.Выполнить();
     
     Если Не Результат.Пустой() Тогда
      Отказ = Истина;
      
      Выборка = Результат.Выбрать();
      Пока Выборка.Следующий() Цикл
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = “”+Выборка.Номенклатура+”, не хватает: “+Выборка.Количество;
       Сообщение.Поле = “ТМЦ[“+Выборка.НомерСтроки+”].Номенклатура”;
       Сообщение.УстановитьДанные(Источник);
       Сообщение.Сообщить();
      КонецЦикла;
     КонецЕсли;
    КонецПроцедуры

  30. Задание выполнил с использованием двух подписок  на события “ПередЗаписью” и  “ОбработкаПроведения”.

  31. Задание выполнено.
    Сначала всю обработку делала в модуле объекта реализации, а после отладки перенесла в подписку.
    Контроль осуществляется после записи набора данных в регистр с помощью нескольких временных таблиц (одна – это данные документа, вторая – данные регистра по нашему документа, третья – объединение двух предыдущих с левым соединением по номенклатуре и количеству и условием на null, т.е. те строки, в которых значения из второй врем. таблицы есть нулл и есть нужные нам, именно они и изменялись).
    В самой подписке все просто, имя документа взяла из метаданных источника и подставила в запрос.

  32. Задание выполнил.  Создал подписку на событие ОбработкаПроведения. С помощью менеджера временных таблиц формирую несколько временных таблиц: по табличной части документа для записи в РН, используя данные табличной части и данные физической таблицы РН определяю измененные строки ТЧ. Далее записываю в РН данные из первой ВТ. Проверяю остатки, если есть отрицательные – вывожу сообщение на экран с привязкой к строке ТЧ.

  33. Задание выполнено.
    Измененные строки получал путе мобращения к ссылке и объекту (аналогично одному из ранее выдававшихся ДЗ).
    Контроль произведен путем отслеживания образования отрицательных остатков после списания

  34. Изменения:
    1) Создал подписку “КонтрольСписанияТМЦ” на событие “ОбработкаПроведение”;
    2) НаборЗаписей по регистру остаткиТоваров, формируется в модуле документа РеализацияТоваровИУслуг. Сам НаборЗаписей записывается в Модуле подписки.
    3) Алгоритм в модуле подписки: в начале получаем “СписокНоменклатуры” по которым были изменения. Затем записываем НаборЗаписей.
    Далее проверяем Остаток по “СпискуНоменклатуры” по которым были изменения. Если есть отрицательный остаток, отменяем проведение.

  35. Вариант решения: В подписке ПерезЗаписью документа формируется список номенклатуры для контроля и сохраняется в структуре ДополнительныеСвойства документа. При этом если документ не проведен то в список добавляются все уникальные строки, если проведен, то запросом выбираются строки с измененным (в сторону увеличения) количеством или добавленные. В подписке ОбработкаПроведения, принудительно записываются движения, если есть список для контроля, то запросом выбираются отрицательные остатки по этому списку, период – Граница(Дата документа, Вид.Границы.Включая). Если запрос не пустой Отказ=Истина и сообщения с названиями номенклатуры. Делал по конфигурации из предыдущих ДЗ, в ОбработкуПроведения документа изменений не вносил.

  36. Может тогда ч/з объединение или соединение – свяжем первые 2 потока?!..  ;)

    • С приоритетом основной конфигурации :)

    • Андрей 25.01.2011 в 17:31

      (задумчиво) это попытка ужать второй поток (который ещё делает 1-е задание и уже должен переходить к 11-му) или же это попытка растянуть первый поток (что бы после 11 задания они перешли опять ко 2-м)? :-)

      • Коллеги, закрываем отвлеченные темы.
        Остальные комментарии к этой записи жду по теме ДЗ.